diff --git a/bin/dash2can.c b/bin/dash2can.c index be77c5e..64175cc 100644 --- a/bin/dash2can.c +++ b/bin/dash2can.c @@ -44,6 +44,23 @@ static hexagram_schedule_slot table[] = { { 0, NULL, {} } }; +static void table_update(hexagram_schedule_slot *table, + hexagram_telemetry_dash_packet *packet) { + float speed_ms = sqrt(powf(packet->velocity.x, 2) + + powf(packet->velocity.z, 2)); + + uint16_t engine_rpm = (uint16_t)(packet->engine_rpm.current * 4), + speed_rps = (uint16_t)(speed_ms * 2.0); + + /* Engine speed */ + table[0].frame.data[3] = (engine_rpm & 0xff00) >> 8; + table[0].frame.data[2] = engine_rpm & 0x00ff; + + /* Vehicle speed */ + table[3].frame.data[1] = (speed_rps & 0xff00) >> 8; + table[3].frame.data[2] = speed_rps & 0x00ff; +} + int hexagram_main_dash2can(int argc, char **argv) { int sock; @@ -100,25 +117,13 @@ int hexagram_main_dash2can(int argc, char **argv) { hexagram_telemetry_dash_packet packet; ssize_t len; - float speed_ms = sqrt(powf(packet.velocity.x, 2) - + powf(packet.velocity.z, 2)); - - uint16_t engine_rpm = (uint16_t)(packet.engine_rpm.current * 4), - speed_rps = (uint16_t)(speed_ms * 2.0); - if ((len = recv(sock, &packet, sizeof(packet), 0)) < 0) { goto error_io; } else if (len != (ssize_t)sizeof(packet)) { continue; } - /* Engine speed */ - table[0].frame.data[3] = (engine_rpm & 0xff00) >> 8; - table[0].frame.data[2] = engine_rpm & 0x00ff; - - /* Vehicle speed */ - table[3].frame.data[1] = (speed_rps & 0xff00) >> 8; - table[3].frame.data[2] = speed_rps & 0x00ff; + table_update(table, &packet); } hexagram_schedule_destroy(schedule);