summaryrefslogtreecommitdiff
path: root/ipc.cpp
diff options
context:
space:
mode:
authorJuan Manuel Tomás <jtomas1815@gmail.com>2020-07-11 23:26:03 -0300
committerJuan Manuel Tomás <jtomas1815@gmail.com>2020-07-11 23:26:03 -0300
commit842355c831404cc1aa3d9ac0918eed0c2d2a86fc (patch)
tree15d45bad489fb394b7053a135e905b02fab414ae /ipc.cpp
parent13fdfe875efdfb33d392c5e634ceff494962e7dc (diff)
downloadjet-842355c831404cc1aa3d9ac0918eed0c2d2a86fc.tar.gz
jet-842355c831404cc1aa3d9ac0918eed0c2d2a86fc.zip
Fix decoding
Diffstat (limited to 'ipc.cpp')
-rw-r--r--ipc.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/ipc.cpp b/ipc.cpp
index 9c96d5a..7d46307 100644
--- a/ipc.cpp
+++ b/ipc.cpp
@@ -9,29 +9,32 @@ enum Operation {
OP_SHOW
};
-void encode2(int16_t data, uint8_t *message, size_t offset) {
+void encode2(int16_t data, int8_t *message, size_t offset) {
message[offset] = data & 0x00ff;
message[offset + 1] = (data & 0xff00) >> 8;
}
-int16_t decode2(uint8_t *message, size_t offset) {
- return message[offset] | ((int16_t)message[offset + 1] << 8);
+int16_t decode2(int8_t *message, size_t offset) {
+ return (int16_t)message[offset + 1] << 8 & 0xff00
+ | (int16_t)message[offset] & 0x00ff;
}
-void encode4(int32_t data, uint8_t *message, size_t offset) {
+void encode4(int32_t data, int8_t *message, size_t offset) {
encode2( data & 0x0000ffff, message, offset);
encode2((data & 0xffff0000) >> 16, message, offset + 2);
}
-int32_t decode4(uint8_t *message, size_t offset) {
- return decode2(message, offset) | ((int32_t)decode2(message, offset + 2) << 16);
+int32_t decode4(int8_t *message, size_t offset) {
+ return (int32_t)decode2(message, offset + 2) << 16 & 0xffff0000
+ | (int32_t)decode2(message, offset) & 0x0000ffff;
}
-void encode8(int64_t data, uint8_t *message, size_t offset) {
+void encode8(int64_t data, int8_t *message, size_t offset) {
encode4( data & 0x00000000ffffffff, message, offset);
encode4((data & 0xffffffff00000000) >> 32, message, offset + 4);
}
-int64_t decode8(uint8_t *message, size_t offset) {
- return decode4(message, offset) | ((int64_t)decode4(message, offset + 4) << 32);
+int64_t decode8(int8_t *message, size_t offset) {
+ return (int64_t)decode4(message, offset + 4) << 32 & 0xffffffff00000000
+ | (int64_t)decode4(message, offset) & 0x00000000ffffffff;
}