diff --git a/sketch/production.cpp b/sketch/production.cpp index 082734b..53ca165 100644 --- a/sketch/production.cpp +++ b/sketch/production.cpp @@ -89,12 +89,13 @@ static void prepareTxFrame( uint8_t port ) struct { uint16_t status; uint64_t addrs[NUM_OF_SENSORS]; - } msg; + } __attribute__((packed)) msg; msg.status = ERR_START_UP; for (uint8_t i = 0; i < NUM_OF_SENSORS; i++) { msg.addrs[i] = sensors[i].addr; } appDataSize = sizeof(msg); + Serial.printf("appDataSize: %ld\n\r", appDataSize); memcpy(&appData, (void*)&msg, appDataSize); display.drawString(1, 0, "Start up"); Serial.println("Start up message send"); @@ -106,19 +107,22 @@ static void prepareTxFrame( uint8_t port ) struct { uint64_t addr; int32_t value; - } sensors[NUM_OF_SENSORS]; - } msg; + } __attribute__((packed)) sensors[NUM_OF_SENSORS]; + } __attribute__((packed)) msg; msg.status = (DS18B20.getDS18Count() == NUM_OF_SENSORS) ? errorCode : errorCode | ERR_SENSOR_LOST; DS18B20.requestTemperatures(); for (uint8_t i = 0; i < NUM_OF_SENSORS; i++) { msg.sensors[i].addr = sensors[i].addr; - msg.sensors[i].value = DS18B20.getTemp((const uint8_t*)&(sensors[i].addr)); + Serial.printf("%d: %s: %016llx\n\r", i, sensors[i].label, sensors[i].addr); + msg.sensors[i].value = DS18B20.getTemp(((const uint8_t*)(&(sensors[i].addr)))); + Serial.printf("v: %08x\n\r", msg.sensors[i].value); float tempC = ((float)msg.sensors[i].value) / 128; + Serial.printf("f: %.2f\n\r", tempC); char dispbuf[128]; sprintf(dispbuf, "%s: %.2f °C", sensors[i].label, tempC); - display.drawString(1, i * 17, dispbuf); - Serial.printf("%d, %08x, %s, %.2f\n\r", sensors[i].index, sensors[i].addr, sensors[i].label, tempC); + display.drawString(1, i * 16, dispbuf); + Serial.printf("%d, %016llx, %s, %.2f\n\r", sensors[i].index, sensors[i].addr, sensors[i].label, tempC); } appDataSize = sizeof(msg); memcpy(&appData, (void*)&msg, appDataSize); @@ -129,7 +133,7 @@ static void prepareTxFrame( uint8_t port ) errorCode = ERR_OK; } else { - appDataSize = 1; + appDataSize = 2; appData[0] = errorCode; } } @@ -188,14 +192,16 @@ void productionSetup() { uint8_t cnt = DS18B20.getDS18Count(); if (cnt != 4) { display.drawString(1, 0, "invalid number of sensors"); + Serial.println("invalid number of sensors"); errorCode = ERR_INVALID_NUM_OF_SENSORS; } else { for (uint8_t i = 0; i < NUM_OF_SENSORS; i++) { sprintf(sensors[i].label, "Sens%d", i); - DS18B20.getAddress((uint8_t*)&(sensors[i].addr), i); + DS18B20.getAddress(((uint8_t*)(&(sensors[i].addr))), i); char buf[128]; - sprintf(buf, "%s: %08x", sensors[i].label, sensors[i].addr); - display.drawString(1, i*16, buf); + sprintf(buf, "%d: %s: %016llx", i, sensors[i].label, sensors[i].addr); + Serial.println(buf); + //display.drawString(1, i*16, buf); sensors[i].index = 0; } } diff --git a/snippets/decoding2.txt b/snippets/decoding2.txt new file mode 100644 index 0000000..2ab22af --- /dev/null +++ b/snippets/decoding2.txt @@ -0,0 +1,35 @@ +0: Sens0: 000000006a4f8c28 +1: Sens1: 000000000ac31928 +2: Sens2: 000000006a863528 +3: Sens3: 00000000f611c728 + + + +struct { + uint16_t status; + uint64_t addrs[NUM_OF_SENSORS]; +} __attribute__((packed)) msg; + +04 00 0000 3802 033C 288C 4F6A 0D00 0094 2819 C30A 0D00 00B4 2835 866A 0D00 00D4 28C7 11F6622001B8 + +0400 288C 4F6A 0D00 0094 2819 C30A 0D00 00B4 2835 866A 0D00 00D4 28C7 11F6 6220 01B8 + + + +struct { + uint16_t status; + struct { + uint64_t addr; + int32_t value; + } __attribute__((packed)) sensors[NUM_OF_SENSORS]; +} __attribute__((packed)) msg; + +0000 +288C 4F6A 0D00 0094 +9808 0000 +2819 C30A 0D00 00B4 +E008 0000 +2835 866A 0D00 00D4 +D008 0000 +28C7 11F6 6220 01B8 +9808 0000 \ No newline at end of file