aboutsummaryrefslogtreecommitdiffstats
path: root/fw/main.c
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-11-07 14:55:14 -0500
committerSam Anthony <sam@samanthony.xyz>2025-11-07 14:55:14 -0500
commit085c7bba8dce915f098e5cdc53c2003b6f89769a (patch)
treefa45030f644acbc64b17c2a47e9e294f32e2ecae /fw/main.c
parent9719160dec4d26c1c4d4a3bc1fbe355906f540eb (diff)
downloadcan-gauge-interface-085c7bba8dce915f098e5cdc53c2003b6f89769a.zip
int serialization functions
Diffstat (limited to 'fw/main.c')
-rw-r--r--fw/main.c36
1 files changed, 10 insertions, 26 deletions
diff --git a/fw/main.c b/fw/main.c
index 2452d78..b7b1efd 100644
--- a/fw/main.c
+++ b/fw/main.c
@@ -202,23 +202,15 @@ handleTblCtrlFrame(const CanFrame *frame) {
.eid = TAB_CTRL_CAN_ID | ((tab << 5u) & 0xE0) | (row & 0x1F)};
response.rtr = false;
response.dlc = 6u;
- response.data[0u] = (key >> 24u) & 0xFF;
- response.data[1u] = (key >> 16u) & 0xFF;
- response.data[2u] = (key >> 8u) & 0xFF;
- response.data[3u] = (key >> 0u) & 0xFF;
- response.data[4u] = (val >> 8u) & 0xFF;
- response.data[5u] = (val >> 0u) & 0xFF;
+ serU32Be(response.data, key);
+ serU16Be(response.data+4u, val);
return canTx(&response);
} else { // DATA
if (frame->dlc != 6u) {
return ERR;
}
- key = ((U32)frame->data[0u] << 24u)
- | ((U32)frame->data[1u] << 16u)
- | ((U32)frame->data[2u] << 8u)
- | ((U32)frame->data[3u] << 0u);
- val = ((U16)frame->data[4u] << 8u)
- | ((U16)frame->data[5u] << 0u);
+ key = deserU32Be(frame->data);
+ val = deserU16Be(frame->data+4u);
return tabWrite(&tbls[tab], row, key, val);
}
}
@@ -245,15 +237,11 @@ respondSigCtrl(Signal sig) {
// SigId
if (sigFmt->id.isExt) { // extended
- response.data[0u] = 0x80 | ((sigFmt->id.eid >> 24u) & 0x1F); // EXIDE=1
- response.data[1u] = (sigFmt->id.eid >> 16u) & 0xFF;
- response.data[2u] = (sigFmt->id.eid >> 8u) & 0xFF;
- response.data[3u] = (sigFmt->id.eid >> 0u) & 0xFF;
+ serU32Be(response.data, sigFmt->id.eid & 0x1FFFFFFF);
+ response.data[0u] |= 0x80; // EXIDE=1
+
} else { // standard
- response.data[0u] = 0u; // EXIDE=0
- response.data[1u] = 0u;
- response.data[2u] = (sigFmt->id.sid >> 8u) & 0x07;
- response.data[3u] = (sigFmt->id.sid >> 0u) & 0xFF;
+ serU32Be(response.data, sigFmt->id.sid & 0x7FF);
}
// Encoding
@@ -288,15 +276,11 @@ setSigFmt(const CanFrame *frame) {
if (frame->data[0u] & 0x80) { // EXIDE
// Extended
sigFmt.id.isExt = true;
- sigFmt.id.eid = (((U32)frame->data[0u] & 0x1F) << 24u)
- | ((U32)frame->data[1u] << 16u)
- | ((U32)frame->data[2u] << 8u)
- | ((U32)frame->data[3u] << 0u);
+ sigFmt.id.eid = deserU32Be(frame->data) & 0x1FFFFFFF;
} else {
// Standard
sigFmt.id.isExt = false;
- sigFmt.id.sid = (((U16)frame->data[2u] & 0x07) << 8u)
- | ((U16)frame->data[3u] << 0u);
+ sigFmt.id.sid = deserU16Be(frame->data+2u) & 0x7FF;
}
// Unpack Encoding