61 lines
1.7 KiB
C
61 lines
1.7 KiB
C
|
|
#include "global.h"
|
|
#include "adc.h"
|
|
#include "transmit.h"
|
|
#include "8seg_protocol.h"
|
|
|
|
struct cmd_if_struct {
|
|
struct command_if_def cmd_if;
|
|
int payload_len[PKT_TYPE_MAX];
|
|
};
|
|
|
|
const struct cmd_if_struct cmd_if = {{.packet_type_max=PKT_TYPE_MAX}, {
|
|
[PKT_TYPE_RESERVED] = 0,
|
|
[PKT_TYPE_SET_OUTPUTS_BINARY] = 1,
|
|
[PKT_TYPE_SET_GLOBAL_BRIGHTNESS] = 1,
|
|
[PKT_TYPE_SET_OUTPUTS] = 8,
|
|
[PKT_TYPE_GET_STATUS] = 0 }
|
|
};
|
|
|
|
volatile union {
|
|
struct status_tx status_tx;
|
|
uint8_t p[0];
|
|
} tx_buf;
|
|
|
|
void protocol_init() {
|
|
adc_configure_monitor_mode(&cmd_if.cmd_if, 20 /*us*/);
|
|
tx_init((uint8_t *)&tx_buf);
|
|
}
|
|
|
|
|
|
void handle_command(int command, uint8_t *args) {
|
|
static int global_brightness = 0xff;
|
|
switch (command) {
|
|
case PKT_TYPE_SET_OUTPUTS_BINARY:
|
|
set_outputs_binary(args[0], global_brightness);
|
|
break;
|
|
|
|
case PKT_TYPE_SET_GLOBAL_BRIGHTNESS:
|
|
global_brightness = args[0];
|
|
break;
|
|
|
|
case PKT_TYPE_SET_OUTPUTS:
|
|
set_outputs(args);
|
|
break;
|
|
|
|
case PKT_TYPE_GET_STATUS:
|
|
tx_buf.status_tx.temp_tenths_C = adc_data.temp_celsius_tenths;
|
|
tx_buf.status_tx.uptime_s = sys_time_seconds;
|
|
tx_buf.status_tx.decoding_error_cnt = decoding_error_cnt;
|
|
tx_buf.status_tx.protocol_error_cnt = protocol_error_cnt;
|
|
tx_buf.status_tx.vcc_mv = adc_data.vcc_mv;
|
|
tx_buf.status_tx.vin_mv = adc_data.mean_a_mv;
|
|
tx_buf.status_tx.vskew_mv = adc_data.mean_diff_mv;
|
|
tx_buf.status_tx.jitter_meas_avg_ns = jitter_meas_avg_ns;
|
|
|
|
/* Initialize transmission here, *after* all data has been copied to the buffer */
|
|
tx_transmit(sizeof(tx_buf.status_tx));
|
|
break;
|
|
}
|
|
}
|
|
|