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