Skip to content

Commit

Permalink
Truncate and calc CRC32 in rfm12_send_bufx function. Don't use CRC fu…
Browse files Browse the repository at this point in the history
…nction separately. Fix calculation of truncated messages.
  • Loading branch information
breaker27 committed Oct 6, 2014
1 parent a92a9e7 commit 8e8903c
Show file tree
Hide file tree
Showing 7 changed files with 15 additions and 37 deletions.
3 changes: 0 additions & 3 deletions firmware/shc_basestation/shc_basestation.c
Expand Up @@ -204,9 +204,6 @@ void send_packet(uint8_t aes_key_nr, uint8_t packet_len)
inc_packetcounter();
pkg_header_set_packetcounter(packetcounter);

// set CRC32
pkg_header_set_crc32(crc32(bufx + 4, packet_len - 4));

// load AES key (0 is first AES key)
if (aes_key_nr >= aes_key_count)
{
Expand Down
7 changes: 0 additions & 7 deletions firmware/shc_dimmer/shc_dimmer.c
Expand Up @@ -234,8 +234,6 @@ void send_dimmer_status(void)
pkg_header_set_senderid(device_id);
pkg_header_set_packetcounter(packetcounter);
msg_dimmer_brightness_set_brightness(bri);

pkg_header_calc_crc32();

UART_PUTF("CRC32 is %lx (added as first 4 bytes)\r\n", getBuf32(0));
UART_PUTF("Brightness: %u%%\r\n", bri);
Expand All @@ -257,7 +255,6 @@ void send_version_status(void)
msg_generic_version_set_minor(VERSION_MINOR);
msg_generic_version_set_patch(VERSION_PATCH);
msg_generic_version_set_hash(VERSION_HASH);
pkg_header_calc_crc32();

rfm12_send_bufx();
}
Expand Down Expand Up @@ -319,8 +316,6 @@ void process_brightness(MessageTypeEnum messagetype)
pkg_headerext_common_set_ackpacketcounter(ackpacketcounter);
pkg_headerext_common_set_error(false); // FIXME: Move code for the Ack to a function and also return an Ack when errors occur before!

pkg_header_calc_crc32();

rfm12_send_bufx();
}

Expand Down Expand Up @@ -389,8 +384,6 @@ void process_animation(MessageTypeEnum messagetype)
pkg_headerext_common_set_ackpacketcounter(ackpacketcounter);
pkg_headerext_common_set_error(false); // FIXME: Move code for the Ack to a function and also return an Ack when errors occur before!

pkg_header_calc_crc32();

rfm12_send_bufx();
}

Expand Down
1 change: 0 additions & 1 deletion firmware/shc_envsensor/shc_envsensor.c
Expand Up @@ -1014,7 +1014,6 @@ int main(void)
{
pkg_header_set_senderid(device_id);
pkg_header_set_packetcounter(packetcounter);
pkg_header_calc_crc32();
rfm12_send_bufx();
rfm12_tick(); // send packet, and then WAIT SOME TIME BEFORE GOING TO SLEEP (otherwise packet would not be sent)

Expand Down
5 changes: 0 additions & 5 deletions firmware/shc_powerswitch/shc_powerswitch.c
Expand Up @@ -103,8 +103,6 @@ void send_gpio_digitalporttimeout_status(void)
msg_gpio_digitalporttimeout_set_timeoutsec(i, switch_timeout[i]);
}

pkg_header_calc_crc32();

rfm12_send_bufx();
}

Expand All @@ -122,7 +120,6 @@ void send_version_status(void)
msg_generic_version_set_minor(VERSION_MINOR);
msg_generic_version_set_patch(VERSION_PATCH);
msg_generic_version_set_hash(VERSION_HASH);
pkg_header_calc_crc32();

rfm12_send_bufx();
}
Expand Down Expand Up @@ -306,8 +303,6 @@ void process_message(MessageTypeEnum messagetype, uint32_t messagegroupid, uint3
pkg_headerext_common_set_ackpacketcounter(ackpacketcounter);
pkg_headerext_common_set_error(false); // FIXME: Move code for the Ack to a function and also return an Ack when errors occur before!

pkg_header_calc_crc32();

rfm12_send_bufx();
send_status_timeout = 5;
}
Expand Down
4 changes: 0 additions & 4 deletions firmware/shc_rgb_dimmer/shc_rgb_dimmer.c
Expand Up @@ -270,7 +270,6 @@ void send_version_status(void)
msg_generic_version_set_minor(VERSION_MINOR);
msg_generic_version_set_patch(VERSION_PATCH);
msg_generic_version_set_hash(VERSION_HASH);
pkg_header_calc_crc32();

rfm12_send_bufx();
}
Expand Down Expand Up @@ -312,7 +311,6 @@ void send_status(void)

pkg_header_set_senderid(device_id);
pkg_header_set_packetcounter(packetcounter);
pkg_header_calc_crc32();
rfm12_send_bufx();
}

Expand Down Expand Up @@ -641,8 +639,6 @@ void process_message(MessageTypeEnum messagetype, uint32_t messagegroupid, uint3
pkg_headerext_common_set_ackpacketcounter(ackpacketcounter);
pkg_headerext_common_set_error(false); // FIXME: Move code for the Ack to a function and also return an Ack when errors occur before!

pkg_header_calc_crc32();

rfm12_send_bufx();
send_status_timeout = 15;
}
Expand Down
12 changes: 4 additions & 8 deletions firmware/shc_soil_moisture_meter/shc_soil_moisture_meter.c
Expand Up @@ -135,8 +135,7 @@ void send_version_status(void)
msg_generic_version_set_minor(VERSION_MINOR);
msg_generic_version_set_patch(VERSION_PATCH);
msg_generic_version_set_hash(VERSION_HASH);

pkg_header_calc_crc32();

rfm12_send_bufx();
}

Expand All @@ -155,8 +154,7 @@ void send_battery_status(void)
pkg_header_set_senderid(device_id);
pkg_header_set_packetcounter(packetcounter);
msg_generic_batterystatus_set_percentage(percentage);

pkg_header_calc_crc32();

rfm12_send_bufx();
}

Expand All @@ -171,8 +169,7 @@ void send_humidity_status(uint16_t hum)
pkg_header_set_senderid(device_id);
pkg_header_set_packetcounter(packetcounter);
msg_weather_humidity_set_humidity(hum);

pkg_header_calc_crc32();

rfm12_send_bufx();
}

Expand All @@ -189,8 +186,7 @@ void send_humidity_status_RAW_DBG(uint16_t hum, int16_t raw)
pkg_header_set_packetcounter(packetcounter);
msg_weather_humiditytemperature_set_humidity(hum);
msg_weather_humiditytemperature_set_temperature(raw);

pkg_header_calc_crc32();

rfm12_send_bufx();
}

Expand Down
20 changes: 11 additions & 9 deletions firmware/src_common/util_hw.c
Expand Up @@ -324,22 +324,24 @@ void inc_packetcounter(void)
}
}

// Truncate trailing 0-bytes, round up to packet length of multiple of 16 bytes,
// set CRC, encode and send packet with RFM12.
void rfm12_send_bufx(void)
{
uint8_t packet_len = __PACKETSIZEBYTES;

// Trim 0 bytes at the end.
while ((packet_len > 0) && (bufx[packet_len - 1] == 0))
while ((__PACKETSIZEBYTES > 0) && (bufx[__PACKETSIZEBYTES - 1] == 0))
{
packet_len--;
__PACKETSIZEBYTES--;
}

packet_len = ((packet_len - 1) / 16 + 1) * 16;
__PACKETSIZEBYTES = ((__PACKETSIZEBYTES - 1) / 16 + 1) * 16;

uint32_t crc = crc32(bufx + 4, __PACKETSIZEBYTES - 4);
array_write_UIntValue(0, 32, crc, bufx);

UART_PUTS("Before encryption: ");
print_bytearray(bufx, packet_len);
print_bytearray(bufx, __PACKETSIZEBYTES);

packet_len = aes256_encrypt_cbc(bufx, packet_len);
uint8_t packet_len = aes256_encrypt_cbc(bufx, __PACKETSIZEBYTES);

UART_PUTS("After encryption: ");
print_bytearray(bufx, packet_len);
Expand All @@ -354,7 +356,7 @@ void power_down(bool bod_disable)
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
cli();
sleep_enable();

if (bod_disable)
{
sleep_bod_disable();
Expand Down

0 comments on commit 8e8903c

Please sign in to comment.