Skip to content

Commit d86e29f

Browse files
Merge pull request #59 from HeronMkII/commands
Transceiver message fixes, new commands
2 parents 988e39d + 0c83caa commit d86e29f

File tree

5 files changed

+123
-62
lines changed

5 files changed

+123
-62
lines changed

lib-common

manual_tests/main_test/main_test.c

Lines changed: 66 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -132,16 +132,14 @@ uart_cmd_t all_cmds[] = {
132132
{
133133
.description = "Actuate motors up",
134134
.cmd = &actuate_pay_motors_cmd,
135-
// TODO - constants
136-
.arg1 = 1,
135+
.arg1 = CAN_PAY_CTRL_ACT_UP,
137136
.arg2 = 0,
138137
.bypass_trans = false
139138
},
140139
{
141140
.description = "Actuate motors down",
142141
.cmd = &actuate_pay_motors_cmd,
143-
// TODO - constants
144-
.arg1 = 2,
142+
.arg1 = CAN_PAY_CTRL_ACT_DOWN,
145143
.arg2 = 0,
146144
.bypass_trans = false
147145
}
@@ -172,8 +170,8 @@ void print_therm_temp(uint16_t raw_data) {
172170
adc_raw_data_to_raw_vol(raw_data))));
173171
}
174172

175-
void print_imu_data(uint16_t raw_data) {
176-
print(" 0x%.4X\n", raw_data);
173+
void print_gyro_data(uint16_t raw_data) {
174+
print(" 0x%.4X = %.3f rad/s\n", raw_data, imu_raw_data_to_gyro(raw_data));
177175
}
178176

179177
void print_header(mem_header_t header) {
@@ -199,48 +197,43 @@ void print_local_data_fn(void) {
199197
print_voltage(eps_hk_fields[CAN_EPS_HK_BB_VOL]);
200198
print("BB Cur:");
201199
print_current(eps_hk_fields[CAN_EPS_HK_BB_CUR]);
202-
print("BT Vol:");
203-
print_voltage(eps_hk_fields[CAN_EPS_HK_BT_VOL]);
204-
print("BT Cur:");
205-
print_current(eps_hk_fields[CAN_EPS_HK_BT_CUR]);
200+
print("-Y Cur:");
201+
print_current(eps_hk_fields[CAN_EPS_HK_NY_CUR]);
206202
print("+X Cur:");
207203
print_current(eps_hk_fields[CAN_EPS_HK_PX_CUR]);
208-
print("-X Cur:");
209-
print_current(eps_hk_fields[CAN_EPS_HK_NX_CUR]);
210204
print("+Y Cur:");
211205
print_current(eps_hk_fields[CAN_EPS_HK_PY_CUR]);
212-
print("-Y Cur:");
213-
print_current(eps_hk_fields[CAN_EPS_HK_NY_CUR]);
214-
print("Bat Vol:");
215-
print_voltage(eps_hk_fields[CAN_EPS_HK_BAT_VOL]);
216-
print("Bat Cur:");
217-
print_current(eps_hk_fields[CAN_EPS_HK_BAT_CUR]);
206+
print("-X Cur:");
207+
print_current(eps_hk_fields[CAN_EPS_HK_NX_CUR]);
218208
print("Bat Temp 1:");
219209
print_therm_temp(eps_hk_fields[CAN_EPS_HK_BAT_TEMP1]);
220210
print("Bat Temp 2:");
221211
print_therm_temp(eps_hk_fields[CAN_EPS_HK_BAT_TEMP2]);
222-
// print("Acc X:");
223-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_ACC_X]);
224-
// print("Acc Y:");
225-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_ACC_Y]);
226-
// print("Acc Z:");
227-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_ACC_Z]);
228-
// print("Gyr X:");
229-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_GYR_X]);
230-
// print("Gyr Y:");
231-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_GYR_Y]);
232-
// print("Gyr Z:");
233-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_GYR_Z]);
234-
// print("Mag X:");
235-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_MAG_X]);
236-
// print("Mag Y:");
237-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_MAG_Y]);
238-
// print("Mag Z:");
239-
// print_imu_data(eps_hk_fields[CAN_EPS_HK_IMU_MAG_Z]);
240-
print("Bat Temp Setpt 1:");
212+
print("Bat Vol:");
213+
print_voltage(eps_hk_fields[CAN_EPS_HK_BAT_VOL]);
214+
print("Bat Cur:");
215+
print_current(eps_hk_fields[CAN_EPS_HK_BAT_CUR]);
216+
print("BT Cur:");
217+
print_current(eps_hk_fields[CAN_EPS_HK_BT_CUR]);
218+
print("BT Vol:");
219+
print_voltage(eps_hk_fields[CAN_EPS_HK_BT_VOL]);
220+
print("Heater Setpt 1:");
241221
print_therm_temp(eps_hk_fields[CAN_EPS_HK_HEAT_SP1]);
242-
print("Bat Temp Setpt 2:");
222+
print("Heater Setpt 2:");
243223
print_therm_temp(eps_hk_fields[CAN_EPS_HK_HEAT_SP2]);
224+
print("Gyro (uncal) X:");
225+
print_gyro_data(eps_hk_fields[CAN_EPS_HK_GYR_UNCAL_X]);
226+
print("Gyro (uncal) Y:");
227+
print_gyro_data(eps_hk_fields[CAN_EPS_HK_GYR_UNCAL_Y]);
228+
print("Gyro (uncal) Z:");
229+
print_gyro_data(eps_hk_fields[CAN_EPS_HK_GYR_UNCAL_Z]);
230+
print("Gyro (cal) X:");
231+
print_gyro_data(eps_hk_fields[CAN_EPS_HK_GYR_CAL_X]);
232+
print("Gyro (cal) Y:");
233+
print_gyro_data(eps_hk_fields[CAN_EPS_HK_GYR_CAL_Y]);
234+
print("Gyro (cal) Z:");
235+
print_gyro_data(eps_hk_fields[CAN_EPS_HK_GYR_CAL_Z]);
236+
244237

245238
print("\nPAY HK:\n");
246239

@@ -263,11 +256,12 @@ void print_local_data_fn(void) {
263256
print("Temp %u:", i);
264257
print_therm_temp(pay_hk_fields[CAN_PAY_HK_THERM0 + i]);
265258
}
266-
print("Temp Setpt 1:");
259+
print("Heater Setpt 1:");
267260
print_therm_temp(pay_hk_fields[CAN_PAY_HK_HEAT_SP1]);
268-
print("Temp Setpt 2:");
261+
print("Heater Setpt 2:");
269262
print_therm_temp(pay_hk_fields[CAN_PAY_HK_HEAT_SP2]);
270263

264+
271265
print("\nPAY OPT:\n");
272266

273267
// print("Header: ");
@@ -521,9 +515,12 @@ void sim_send_next_eps_tx_msg(void) {
521515
// Can return early to not send a message back
522516
switch (msg_type) {
523517
case CAN_EPS_HK:
524-
if (0 <= field_num && field_num < CAN_EPS_HK_FIELD_COUNT) {
525-
// All fields are 12-bit ADC data
518+
if (CAN_EPS_HK_BB_VOL <= field_num && field_num <= CAN_EPS_HK_HEAT_SP2) {
519+
// 12-bit data - ADC (fields 0-11) or DAC (fields 12-13)
526520
populate_msg_data(rx_msg, rand_bits(12));
521+
} else if (CAN_EPS_HK_GYR_UNCAL_X <= field_num && field_num <= CAN_EPS_HK_GYR_CAL_Z) {
522+
// 16-bit data - IMU gyro
523+
populate_msg_data(rx_msg, rand_bits(16));
527524
} else {
528525
return;
529526
}
@@ -645,19 +642,33 @@ uint8_t uart_cb(const uint8_t* data, uint8_t len) {
645642
if (all_cmds[i].bypass_trans) {
646643
enqueue_cmd(all_cmds[i].cmd, all_cmds[i].arg1, all_cmds[i].arg2);
647644
} else {
645+
uint8_t msg_type = trans_cmd_to_msg_type(all_cmds[i].cmd);
646+
uint32_t arg1 = all_cmds[i].arg1;
647+
uint32_t arg2 = all_cmds[i].arg2;
648+
649+
// Encode one byte to two ASCII hex bytes
648650
trans_rx_enc_msg[0] = 0x00;
649-
trans_rx_enc_msg[1] = 9;
650-
trans_rx_enc_msg[2] = trans_cmd_to_msg_type(all_cmds[i].cmd);
651-
trans_rx_enc_msg[3] = (all_cmds[i].arg1 >> 24) & 0xFF;
652-
trans_rx_enc_msg[4] = (all_cmds[i].arg1 >> 16) & 0xFF;
653-
trans_rx_enc_msg[5] = (all_cmds[i].arg1 >> 8) & 0xFF;
654-
trans_rx_enc_msg[6] = all_cmds[i].arg1 & 0xFF;
655-
trans_rx_enc_msg[7] = (all_cmds[i].arg2 >> 24) & 0xFF;
656-
trans_rx_enc_msg[8] = (all_cmds[i].arg2 >> 16) & 0xFF;
657-
trans_rx_enc_msg[9] = (all_cmds[i].arg2 >> 8) & 0xFF;
658-
trans_rx_enc_msg[10] = all_cmds[i].arg2 & 0xFF;
659-
660-
trans_rx_enc_msg_len = 11;
651+
trans_rx_enc_msg[1] = 9 * 2;
652+
trans_rx_enc_msg[2] = hex_to_char((msg_type >> 4) & 0x0F);
653+
trans_rx_enc_msg[3] = hex_to_char((msg_type >> 0) & 0x0F);
654+
trans_rx_enc_msg[4] = hex_to_char((arg1 >> 28) & 0x0F);
655+
trans_rx_enc_msg[5] = hex_to_char((arg1 >> 24) & 0x0F);
656+
trans_rx_enc_msg[6] = hex_to_char((arg1 >> 20) & 0x0F);
657+
trans_rx_enc_msg[7] = hex_to_char((arg1 >> 16) & 0x0F);
658+
trans_rx_enc_msg[8] = hex_to_char((arg1 >> 12) & 0x0F);
659+
trans_rx_enc_msg[9] = hex_to_char((arg1 >> 8) & 0x0F);
660+
trans_rx_enc_msg[10] = hex_to_char((arg1 >> 4) & 0x0F);
661+
trans_rx_enc_msg[11] = hex_to_char((arg1 >> 0) & 0x0F);
662+
trans_rx_enc_msg[12] = hex_to_char((arg2 >> 28) & 0x0F);
663+
trans_rx_enc_msg[13] = hex_to_char((arg2 >> 24) & 0x0F);
664+
trans_rx_enc_msg[14] = hex_to_char((arg2 >> 20) & 0x0F);
665+
trans_rx_enc_msg[15] = hex_to_char((arg2 >> 16) & 0x0F);
666+
trans_rx_enc_msg[16] = hex_to_char((arg2 >> 12) & 0x0F);
667+
trans_rx_enc_msg[17] = hex_to_char((arg2 >> 8) & 0x0F);
668+
trans_rx_enc_msg[18] = hex_to_char((arg2 >> 4) & 0x0F);
669+
trans_rx_enc_msg[19] = hex_to_char((arg2 >> 0) & 0x0F);
670+
671+
trans_rx_enc_msg_len = 20;
661672
trans_rx_enc_msg_avail = true;
662673
}
663674
}
@@ -683,7 +694,7 @@ int main(void){
683694
sim_eps = true;
684695
sim_pay = true;
685696
sim_trans = true;
686-
sim_trans_uart = false;
697+
sim_trans_uart = true;
687698
print_can_msgs = true;
688699
print_cmds = true;
689700
print_trans_msgs = true;

src/commands.c

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ void actuate_motors_fn(void);
1919
void reset_fn(void);
2020
void send_eps_can_fn(void);
2121
void send_pay_can_fn(void);
22-
22+
void read_eeprom_fn(void);
23+
void get_curr_block_num_fn(void);
2324

2425
// If true, the program will simulate local actions (i.e. simulates any
2526
// operations with peripherals besides the microcontroller and CAN)
@@ -50,7 +51,7 @@ queue_t cmd_args_queue;
5051

5152
// The currently executing command (or nop_fn for no command executing)
5253
// NOTE: need to compare the function pointer, not the command pointer (could have a duplicate of the command struct but the function pointer will always be the same for the same command)
53-
// TODO - check volatile
54+
// Use double volatile just in case
5455
volatile cmd_t* volatile current_cmd = &nop_cmd;
5556
// Current command arguments
5657
volatile uint32_t current_cmd_arg1 = 0;
@@ -117,8 +118,12 @@ cmd_t send_eps_can_cmd = {
117118
cmd_t send_pay_can_cmd = {
118119
.fn = send_pay_can_fn
119120
};
120-
121-
121+
cmd_t read_eeprom_cmd = {
122+
.fn = read_eeprom_fn
123+
};
124+
cmd_t get_curr_block_num_cmd = {
125+
.fn = get_curr_block_num_fn
126+
};
122127

123128

124129

@@ -492,6 +497,7 @@ void actuate_motors_fn(void) {
492497
}
493498

494499
void reset_fn(void) {
500+
// TODO
495501
print("Reset TODO\n");
496502
}
497503

@@ -509,6 +515,40 @@ void send_pay_can_fn(void) {
509515
// Will continue from CAN callbacks
510516
}
511517

518+
void read_eeprom_fn(void) {
519+
// TODO
520+
}
521+
522+
void get_curr_block_num_fn(void) {
523+
can_countdown = 30;
524+
525+
uint32_t block_num = 0;
526+
switch (current_cmd_arg1) {
527+
case CMD_BLOCK_EPS_HK:
528+
block_num = eps_hk_mem_section.curr_block;
529+
break;
530+
case CMD_BLOCK_PAY_HK:
531+
block_num = pay_hk_mem_section.curr_block;
532+
break;
533+
case CMD_BLOCK_PAY_OPT:
534+
block_num = pay_opt_mem_section.curr_block;
535+
break;
536+
default:
537+
break;
538+
}
539+
540+
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
541+
start_trans_tx_dec_msg();
542+
append_to_trans_tx_dec_msg((block_num >> 24) & 0xFF);
543+
append_to_trans_tx_dec_msg((block_num >> 16) & 0xFF);
544+
append_to_trans_tx_dec_msg((block_num >> 8) & 0xFF);
545+
append_to_trans_tx_dec_msg(block_num & 0xFF);
546+
finish_trans_tx_dec_msg();
547+
}
548+
549+
finish_current_cmd(true);
550+
}
551+
512552
// Finishes executing the current command and sets the succeeded flag
513553
void finish_current_cmd(bool succeeded) {
514554
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
@@ -720,6 +760,10 @@ cmd_t* trans_msg_type_to_cmd(uint8_t msg_type) {
720760
return &send_eps_can_cmd;
721761
case TRANS_CMD_PAY_CAN:
722762
return &send_pay_can_cmd;
763+
case TRANS_CMD_READ_EEPROM:
764+
return &read_eeprom_cmd;
765+
case TRANS_CMD_GET_CURR_BLOCK_NUM:
766+
return &get_curr_block_num_cmd;
723767
default:
724768
return NULL;
725769
}
@@ -761,6 +805,10 @@ uint8_t trans_cmd_to_msg_type(cmd_t* cmd) {
761805
return TRANS_CMD_EPS_CAN;
762806
} else if (cmd == &send_pay_can_cmd) {
763807
return TRANS_CMD_PAY_CAN;
808+
} else if (cmd == &read_eeprom_cmd) {
809+
return TRANS_CMD_READ_EEPROM;
810+
} else if (cmd == &get_curr_block_num_cmd) {
811+
return TRANS_CMD_GET_CURR_BLOCK_NUM;
764812
} else {
765813
return 0xFF;
766814
}

src/commands.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ extern cmd_t actuate_pay_motors_cmd;
8383
extern cmd_t reset_cmd;
8484
extern cmd_t send_eps_can_cmd;
8585
extern cmd_t send_pay_can_cmd;
86-
86+
extern cmd_t read_eeprom_cmd;
87+
extern cmd_t get_curr_block_num_cmd;
8788

8889
void finish_current_cmd(bool succeeded);
8990

src/trans_commands.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
#define TRANS_CMD_RESET 0x0F
3737
#define TRANS_CMD_EPS_CAN 0x10
3838
#define TRANS_CMD_PAY_CAN 0x11
39-
39+
#define TRANS_CMD_READ_EEPROM 0x12
40+
#define TRANS_CMD_GET_CURR_BLOCK_NUM 0x13
4041

4142
void handle_trans_rx_dec_msg(void);
4243

0 commit comments

Comments
 (0)