dev(UML-981): Реализована возможность установки отдельных битов в одном запросе
This commit is contained in:
parent
847102ee66
commit
d752ef5b44
@ -43,7 +43,7 @@ bool UserData::putBit(std::string& bit_name, uint32_t bit_pos)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UserData::toRpcJson(nlohmann::json& j)
|
||||
bool UserData::toRpcJson(nlohmann::json& j) const
|
||||
{
|
||||
if (bits_.empty())
|
||||
{
|
||||
@ -196,14 +196,24 @@ bool UserData::fromRpcJson(const nlohmann::json& j)
|
||||
|
||||
const json& j_bit = j[name];
|
||||
|
||||
data_.uint64 = 0;
|
||||
|
||||
for (auto bit : bits_)
|
||||
{
|
||||
/// Проверяем есть ли в принятой датаграмме бит
|
||||
if (!j_bit.contains(bit.Name))
|
||||
return false;
|
||||
continue;
|
||||
|
||||
uint8_t value = j_bit[bit.Name].get<uint8_t>();
|
||||
data_.uint64 |= static_cast<uint64_t>(value) << bit.Pos;
|
||||
|
||||
if (value == 0)
|
||||
{
|
||||
/// Очистка бита
|
||||
data_.uint64&= ~(static_cast<uint64_t>(1) << bit.Pos);
|
||||
}
|
||||
else if (value == 1)
|
||||
{
|
||||
/// Установка бита
|
||||
data_.uint64 |= (static_cast<uint64_t>(1) << bit.Pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,7 @@ public:
|
||||
size{data_size.at(type)},
|
||||
data_offset_{offset}
|
||||
{
|
||||
data_.uint64 = 0;
|
||||
};
|
||||
|
||||
union AnyData {
|
||||
@ -90,7 +91,7 @@ private:
|
||||
* @return true
|
||||
* @return false
|
||||
*/
|
||||
bool toRpcJson(nlohmann::json& j);
|
||||
bool toRpcJson(nlohmann::json& j) const;
|
||||
|
||||
/**
|
||||
* @brief Преобразовывает данные их rpc json в бинарные данные
|
||||
@ -111,16 +112,16 @@ public:
|
||||
const uint32_t size; /// Размер данных
|
||||
|
||||
private:
|
||||
AnyData data_; /// Данные
|
||||
std::vector<UserDataBit> bits_;
|
||||
const uint16_t data_offset_; /// Офсет от начала датаграммы откуда начинаются данные
|
||||
AnyData data_; /// Данные
|
||||
std::vector<UserDataBit> bits_; ///
|
||||
const uint16_t data_offset_; /// Офсет от начала датаграммы откуда начинаются данные
|
||||
};
|
||||
|
||||
struct SubmoduleUserData
|
||||
{
|
||||
std::map<std::string, UserData> inp_data_map; /// Ключ - имя данных внутри даташраммы
|
||||
std::map<std::string, UserData> out_data_map; /// Ключ - имя данных внутри даташраммы
|
||||
std::map<uint32_t, UserData> params_map;
|
||||
std::map<std::string, UserData> inp_data_map; /// Ключ - имя данных внутри датаграммы
|
||||
std::map<std::string, UserData> out_data_map; /// Ключ - имя данных внутри датаграммы
|
||||
std::map<uint32_t, UserData> params_map; /// Ключ - индекс параметра подмодуля
|
||||
};
|
||||
|
||||
enum
|
||||
@ -130,7 +131,7 @@ enum
|
||||
USER_DATA_ID_TOTAL
|
||||
};
|
||||
|
||||
using UserDataMap = std::map<uint64_t, SubmoduleUserData>;
|
||||
using UserDataMap = std::map<uint64_t, SubmoduleUserData>; /// Ключ - битовое поле, где стартшие 32-бита - module_id, а младшие - submodule_id
|
||||
|
||||
SubmoduleUserData& UserData_addNewSubmod(uint32_t mod_id, uint32_t submod_id, UserDataMap& user_data_map);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user