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

(unet): ID 32bit

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