Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
b1bf6785
Commit
b1bf6785
authored
May 11, 2022
by
Pavel Vainerman
Committed by
Pavel Vainerman
May 15, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(unet): ID 32bit
parent
48748d2c
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
17 deletions
+21
-17
UDPPacket.cc
extensions/UNetUDP/UDPPacket.cc
+14
-8
UDPPacket.h
extensions/UNetUDP/UDPPacket.h
+6
-8
UniSetTypes.h
include/UniSetTypes.h
+1
-1
No files found.
extensions/UNetUDP/UDPPacket.cc
View file @
b1bf6785
...
...
@@ -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
(
int
64
_t
id
,
int64_t
val
)
noexcept
size_t
UDPMessage
::
addAData
(
int
32
_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
(
int
64
_t
id
,
bool
val
)
noexcept
size_t
UDPMessage
::
addDData
(
int
32
_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
);
BE
32
_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
);
LE
32
_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
);
BE
32
_TO_H
(
a_dat
[
n
].
id
);
BE_TO_H
(
a_dat
[
n
].
val
);
}
else
{
LE_TO_H
(
a_dat
[
n
].
id
);
LE
32
_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
]);
BE
32
_TO_H
(
d_id
[
n
]);
}
else
{
LE_TO_H
(
d_id
[
n
]);
LE
32
_TO_H
(
d_id
[
n
]);
}
}
}
...
...
extensions/UNetUDP/UDPPacket.h
View file @
b1bf6785
...
...
@@ -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
=
0x134
3EFD
;
// идентификатор протокола
const
uint32_t
UNETUDP_MAGICNUM
=
0x134
8A5F
;
// идентификатор протокола
struct
UDPHeader
{
...
...
@@ -67,9 +65,9 @@ namespace uniset
struct
UDPAData
{
UDPAData
()
noexcept
:
id
(
uniset
::
DefaultObjectId
),
val
(
0
)
{}
UDPAData
(
int
64
_t
id
,
int64_t
val
)
noexcept
:
id
(
id
),
val
(
val
)
{}
UDPAData
(
int
32
_t
id
,
int64_t
val
)
noexcept
:
id
(
id
),
val
(
val
)
{}
int
64
_t
id
;
int
32
_t
id
;
int64_t
val
;
}
__attribute__
((
packed
));
...
...
@@ -91,7 +89,7 @@ namespace uniset
bool
isOk
()
noexcept
;
// \warning в случае переполнения возвращается MaxDCount
size_t
addDData
(
int
64
_t
id
,
bool
val
)
noexcept
;
size_t
addDData
(
int
32
_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
(
int
64
_t
id
,
int64_t
val
)
noexcept
;
size_t
addAData
(
int
32
_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
];
/*!< аналоговые величины */
int
64
_t
d_id
[
MaxDCount
];
/*!< список дискретных ID */
int
32
_t
d_id
[
MaxDCount
];
/*!< список дискретных ID */
uint8_t
d_dat
[
MaxDDataCount
];
/*!< битовые значения */
}
__attribute__
((
packed
));
...
...
include/UniSetTypes.h
View file @
b1bf6785
...
...
@@ -149,7 +149,7 @@ namespace uniset
/*! Информация об имени объекта */
struct
ObjectInfo
{
ObjectId
id
=
{
DefaultObjectId
};
/*!< идентификатор */
ObjectId
id
=
{
DefaultObjectId
};
/*!< идентификатор */
std
::
string
repName
=
{
""
};
/*!< текстовое имя для регистрации в репозитории */
std
::
string
textName
=
{
""
};
/*!< текстовое имя */
xmlNode
*
xmlnode
=
{
nullptr
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment