Commit b1bf6785 authored by Pavel Vainerman's avatar Pavel Vainerman Committed by Pavel Vainerman

(unet): ID 32bit

parent 48748d2c
......@@ -25,10 +25,13 @@
#if __BYTE_ORDER == __LITTLE_ENDIAN
static bool HostIsBigEndian = false;
#define LE_TO_H(x) {}
#define LE32_TO_H(x) {}
#elif INTPTR_MAX == INT64_MAX
#define LE_TO_H(x) x = le64toh(x)
#define LE32_TO_H(x) x = le32toh(x)
#elif INTPTR_MAX == INT32_MAX
#define LE_TO_H(x) x = le32toh(x)
#define LE32_TO_H(x) x = le32toh(x)
#else
#error UNET(LE_TO_H): Unknown byte order or size of pointer
#endif
......@@ -36,10 +39,13 @@ static bool HostIsBigEndian = false;
#if __BYTE_ORDER == __BIG_ENDIAN
static bool HostIsBigEndian = true;
#define BE_TO_H(x) {}
#define BE32_TO_H(x) {}
#elif INTPTR_MAX == INT64_MAX
#define BE_TO_H(x) x = be64toh(x)
#define BE32_TO_H(x) x = be32toh(x)
#elif INTPTR_MAX == INT32_MAX
#define BE_TO_H(x) x = be32toh(x)
#define BE32_TO_H(x) x = be32toh(x)
#else
#error UNET(BE_TO_H): Unknown byte order or size of pointer
#endif
......@@ -173,7 +179,7 @@ namespace uniset
return header.acount - 1;
}
// -----------------------------------------------------------------------------
size_t UDPMessage::addAData( int64_t id, int64_t val) noexcept
size_t UDPMessage::addAData( int32_t id, int64_t val) noexcept
{
UDPAData d(id, val);
return addAData(d);
......@@ -190,7 +196,7 @@ namespace uniset
return false;
}
// -----------------------------------------------------------------------------
size_t UDPMessage::addDData( int64_t id, bool val ) noexcept
size_t UDPMessage::addDData( int32_t id, bool val ) noexcept
{
if( header.dcount >= MaxDCount )
return MaxDCount;
......@@ -275,7 +281,7 @@ namespace uniset
if( be_order && !HostIsBigEndian )
{
BE_TO_H(header.magic);
BE32_TO_H(header.magic);
BE_TO_H(header.num);
BE_TO_H(header.procID);
BE_TO_H(header.nodeID);
......@@ -284,7 +290,7 @@ namespace uniset
}
else if( !be_order && HostIsBigEndian )
{
LE_TO_H(header.magic);
LE32_TO_H(header.magic);
LE_TO_H(header.num);
LE_TO_H(header.procID);
LE_TO_H(header.nodeID);
......@@ -309,12 +315,12 @@ namespace uniset
{
if( be_order )
{
BE_TO_H(a_dat[n].id);
BE32_TO_H(a_dat[n].id);
BE_TO_H(a_dat[n].val);
}
else
{
LE_TO_H(a_dat[n].id);
LE32_TO_H(a_dat[n].id);
LE_TO_H(a_dat[n].val);
}
}
......@@ -323,11 +329,11 @@ namespace uniset
{
if( be_order )
{
BE_TO_H(d_id[n]);
BE32_TO_H(d_id[n]);
}
else
{
LE_TO_H(d_id[n]);
LE32_TO_H(d_id[n]);
}
}
}
......
......@@ -32,8 +32,6 @@ namespace uniset
Для булевых величин - отдельно массив ID и отдельно битовый массив со значениями,
(по количеству битов такого же размера).
\warning Пакет UDPMessage передаётся всегда полностью, независимо от того, насколько он наполнен датчиками.
\warning ТЕКУЩАЯ ВЕРСИЯ ПРОТОКОЛА НЕ БУДЕТ РАБОТАТЬ МЕЖДУ 32-битными и 64-битными системами (из-за отличия в типе long).
т.к. это не сильно актуально, пока не переделываю.
"ByteOrder"
============
......@@ -45,7 +43,7 @@ namespace uniset
Т.е. если все узлы будут иметь одинаковый порядок байт, фактического перекодирования не будет.
*/
const uint32_t UNETUDP_MAGICNUM = 0x1343EFD; // идентификатор протокола
const uint32_t UNETUDP_MAGICNUM = 0x1348A5F; // идентификатор протокола
struct UDPHeader
{
......@@ -67,9 +65,9 @@ namespace uniset
struct UDPAData
{
UDPAData() noexcept: id(uniset::DefaultObjectId), val(0) {}
UDPAData(int64_t id, int64_t val) noexcept: id(id), val(val) {}
UDPAData(int32_t id, int64_t val) noexcept: id(id), val(val) {}
int64_t id;
int32_t id;
int64_t val;
} __attribute__((packed));
......@@ -91,7 +89,7 @@ namespace uniset
bool isOk() noexcept;
// \warning в случае переполнения возвращается MaxDCount
size_t addDData( int64_t id, bool val ) noexcept;
size_t addDData( int32_t id, bool val ) noexcept;
//!\return true - successful
bool setDData( size_t index, bool val ) noexcept;
......@@ -105,7 +103,7 @@ namespace uniset
// функции addAData возвращают индекс, по которому потом можно напрямую писать при помощи setAData(index)
// \warning в случае переполнения возвращается MaxACount
size_t addAData( const UDPAData& dat ) noexcept;
size_t addAData( int64_t id, int64_t val ) noexcept;
size_t addAData( int32_t id, int64_t val ) noexcept;
//!\return true - successful
bool setAData( size_t index, int64_t val ) noexcept;
......@@ -140,7 +138,7 @@ namespace uniset
UDPHeader header;
UDPAData a_dat[MaxACount]; /*!< аналоговые величины */
int64_t d_id[MaxDCount]; /*!< список дискретных ID */
int32_t d_id[MaxDCount]; /*!< список дискретных ID */
uint8_t d_dat[MaxDDataCount]; /*!< битовые значения */
} __attribute__((packed));
......
......@@ -149,7 +149,7 @@ namespace uniset
/*! Информация об имени объекта */
struct ObjectInfo
{
ObjectId id = { DefaultObjectId }; /*!< идентификатор */
ObjectId id = { DefaultObjectId }; /*!< идентификатор */
std::string repName = { "" }; /*!< текстовое имя для регистрации в репозитории */
std::string textName = { "" }; /*!< текстовое имя */
xmlNode* xmlnode = { nullptr };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment