FreeCalypso > hg > freecalypso-tools
view target-utils/loadagent/cmd_memload.c @ 752:c79aaed75bd8
compile-fc-batt: allow possible third field in source lines
Battery tables maintained in the fc-battery-conf repository will now
have a third field added, defining thresholds for the battery bars icon,
and there will be a new utility to compile them into the new
/etc/batterytab2 file read by the FC Tourmaline version of our
FCHG driver. For backward compatibility with the original Magnetite
version of FCHG, compile-fc-batt remains the tool for compiling the
original /etc/batterytab file format, and it needs to ignore the
newly added third field in battery table sources.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 05 Nov 2020 20:37:55 +0000 |
parents | 0da2cf5a999c |
children |
line wrap: on
line source
/* * This module implements the ML (memory load) command, which will be * used by fc-chainload. * * The sole argument to the ML command is the body of an S3 record * with the initial "S3" characters stripped, i.e., starting with the * "count" byte, followed by the address, data and checksum bytes * exactly as in the original S3 record. */ #include "types.h" void cmd_memload(argbulk) char *argbulk; { char *argv[2], *s; u8 srecbin[256], cksum; int len, i, c; u32 addr; if (parse_args(argbulk, 1, 1, argv, 0) < 0) return; s = argv[0]; if (decode_hex_digits(s, 2, &len) < 0) { inv: printf("ERROR: ML argument is invalid\n"); return; } s += 2; if (len < 6) goto inv; srecbin[0] = len; for (i = 1; i <= len; i++) { if (decode_hex_digits(s, 2, &c) < 0) goto inv; s += 2; srecbin[i] = c; } cksum = 0; for (i = 0; i <= len; i++) cksum += srecbin[i]; if (cksum != 0xFF) { printf("ERROR: bad ML S-record checksum\n"); return; } len -= 5; addr = ((u32)srecbin[1] << 24) | ((u32)srecbin[2] << 16) | ((u32)srecbin[3] << 8) | (u32)srecbin[4]; memcpy(addr, srecbin + 5, len); }