diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-11-07 13:17:03 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-11-07 13:17:03 -0500 |
| commit | 4532b817354adc2c101053478ef1d5785b66f45f (patch) | |
| tree | cdbec637c9f7c48707cd181e162f70570b87854f /fw/serial.c | |
| parent | 5185feb984da4c7a4537d1bd090f530732c0e071 (diff) | |
| download | can-gauge-interface-4532b817354adc2c101053478ef1d5785b66f45f.zip | |
SigFmt serialization functions
Diffstat (limited to 'fw/serial.c')
| -rw-r--r-- | fw/serial.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/fw/serial.c b/fw/serial.c index 4c92bf1..491f24b 100644 --- a/fw/serial.c +++ b/fw/serial.c @@ -58,10 +58,43 @@ serReadCanId(U16 addr, CanId *id) { Status serWriteSigFmt(EepromAddr addr, const SigFmt *sig) { - // TODO + Status status; + U8 buf[3u]; + + // ID + status = serWriteCanId(addr, &sig->id); + if (status != OK) { + return status; + } + + // Encoding + buf[0u] = sig->start; + buf[1u] = sig->size; + buf[2u] = (U8)((sig->order & 0x01) << 7u) + | ((sig->isSigned) ? 0x40 : 0x00); + return eepromWrite(addr+SER_CANID_SIZE, buf, sizeof(buf)); } Status serReadSigFmt(EepromAddr addr, SigFmt *sig) { - // TODO + Status status; + U8 buf[3u]; + + // ID + status = serReadCanId(addr, &sig->id); + if (status != OK) { + return status; + } + + // Encoding + status = eepromRead(addr+SER_CANID_SIZE, buf, sizeof(buf)); + if (status != OK) { + return status; + } + sig->start = buf[0u]; + sig->size = buf[1u]; + sig->order = (buf[2u] & 0x80) ? BIG_ENDIAN : LITTLE_ENDIAN; + sig->isSigned = buf[2u] & 0x40; + + return OK; } |