Update moza.c

moza_update values updated for LED test.

MOZA_PAYLOAD_SIZE added per update from Spacefreak18
This commit is contained in:
Morgan Garcia 2025-06-17 14:48:10 -07:00 committed by Paul Jones
parent 1d9b6cfe1a
commit 0201b29c49
1 changed files with 20 additions and 23 deletions

View File

@ -13,67 +13,64 @@
#define MOZA_SERIAL_TEMPLATE {0x7e, 0x06, 0x41, 0x13, 0xfd, 0xde, 0x0, 0x0, 0x0, 0x0, 0x0} #define MOZA_SERIAL_TEMPLATE {0x7e, 0x06, 0x41, 0x13, 0xfd, 0xde, 0x0, 0x0, 0x0, 0x0, 0x0}
#define MOZA_NUM_AVAILABLE_LEDS 10 #define MOZA_NUM_AVAILABLE_LEDS 10
#define MOZA_BLINKING_BIT 7 #define MOZA_BLINKING_BIT 7
#define MOZA_PAYLOAD_SIZE 11
#define MOZA_MAGIC_VALUE 0x0d #define MOZA_MAGIC_VALUE 0x0d
#define BIT(nr) (1UL << (nr)) #define BIT(nr) (1UL << (nr))
unsigned char moza_checksum(unsigned char *data) unsigned char moza_checksum(unsigned char *data)
{ {
unsigned char ret = MOZA_MAGIC_VALUE; unsigned char ret = MOZA_MAGIC_VALUE;
for (short i = 0; i < sizeof(data)/sizeof(data[0]); i++) for (short i = 0; i < MOZA_PAYLOAD_SIZE; i++)
{ {
ret += data[i]; ret += data[i];
} }
return ret; return ret % 0x100;
} }
int moza_update(SerialDevice* serialdevice, unsigned short maxrpm, unsigned short rpm) int moza_update(SerialDevice* serialdevice, unsigned short maxrpm, unsigned short rpm)
{ {
unsigned char bytes[] = MOZA_SERIAL_TEMPLATE; unsigned char bytes[] = MOZA_SERIAL_TEMPLATE;
int size = sizeof(bytes)/sizeof(bytes[0]); int size = MOZA_PAYLOAD_SIZE;
float perct = (float)rpm/(float)maxrpm; float perct = (float)rpm/(float)maxrpm;
if (perct >= 0.8) if (perct >= .1)
bytes[9] |= BIT(0); bytes[9] |= BIT(0);
if (perct >= 0.83) if (perct >= .2)
bytes[9] |= BIT(1); bytes[9] |= BIT(1);
if (perct >= 0.86) if (perct >= .3)
bytes[9] |= BIT(2); bytes[9] |= BIT(2);
if (perct >= 0.89) if (perct >= .4)
bytes[9] |= BIT(3); bytes[9] |= BIT(3);
if (perct >= 0.91) if (perct >= .5)
bytes[8] |= BIT(4); bytes[9] |= BIT(4);
if (perct >= 0.92) if (perct >= .6)
bytes[8] |= BIT(5); bytes[9] |= BIT(4);
if (perct >= 0.93) if (perct >= .7)
bytes[9] |= BIT(5);
if (perct >= .8)
bytes[8] |= BIT(6); bytes[8] |= BIT(6);
if (perct >= 0.94) if (perct >= .9)
bytes[8] |= BIT(7); bytes[8] |= BIT(7);
if (perct >= 0.96)
bytes[8] |= BIT(0);
if (perct >= 0.96)
bytes[8] |= BIT(1);
// blinking // blinking
if (perct >= 0.97) if (perct >= .95)
bytes[9] |= BIT(MOZA_BLINKING_BIT); bytes[8] |= BIT(MOZA_BLINKING_BIT);
bytes[10] = moza_checksum(bytes); bytes[10] = moza_checksum(bytes);
int result = 1; int result = 1;
if (serialdevice->port) if (serialdevice->port)
{ {
slogd("copying %i bytes to moza device", size); slogd("copying %i bytes to moza device", MOZA_PAYLOAD_SIZE);
slogt("writing bytes %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x from rpm %i maxrpm %i", bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7], bytes[8], bytes[9], bytes[10], rpm, maxrpm); slogt("writing bytes %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x from rpm %i maxrpm %i", bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7], bytes[8], bytes[9], bytes[10], rpm, maxrpm);
result = monocoque_serial_write(serialdevice->id, bytes, size, MOZA_TIMEOUT); result = monocoque_serial_write(serialdevice->id, bytes, size, MOZA_TIMEOUT);
} }