From 4532b817354adc2c101053478ef1d5785b66f45f Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Fri, 7 Nov 2025 13:17:03 -0500 Subject: SigFmt serialization functions --- fw/serial.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'fw') 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; } -- cgit v1.2.3