Skip to content
Snippets Groups Projects

Working 24 controls + attribution

Merged Franklin Kaifeng Zheng requested to merge fkzheng-24-sensor-attribution into main
+ 24
6
@@ -130,7 +130,7 @@ enum uart_train_tx_state uart_train_tx_transition(enum uart_train_tx_state curst
} else {
// TODO: FIGURE OUT WHY WE SOMETIMES GET DOUBLE TX INTERRUPTS
ASSERT(interrupt == UART_TX_TRIGGERED_1);
// prints("additional tx interrupt\r\n");
prints("additional tx interrupt\r\n");
// ASSERT(0);
return UART_TRAIN_TXHI_CTS_1;
}
@@ -162,6 +162,9 @@ void uart_train_server_rx() {
enum uart_rx_states rx_state = UART_RXLO;
int sensor_reader_tid = 0;
int bytes_read = 0;
int clock_server_tid = get_tid_by_name(CLOCK_SERVER);
for (;;) {
enable_rx_interrupt(1);
Receive(&sender, rcvbuf, sizeof(struct UART_Server_Request));
@@ -183,7 +186,12 @@ void uart_train_server_rx() {
// read as many as we can
while (rx_state == UART_RX_READY && can_read_char(1)) {
if (bytes_read == 0) {
Delay(clock_server_tid, 4);
}
char c = UartGetc(1);
bytes_read += 1;
bytes_read %= 10;
ASSERT(!ring_buffer_is_full(&char_buffer));
ring_buffer_append(&char_buffer, c);
}
@@ -205,6 +213,7 @@ int is_directional_control(char byte) {
void uart_term_server_rx() {
RegisterAs(UART_SERVER_TERM_RECEIVE);
int clock_server_tid = get_tid_by_name(CLOCK_SERVER);
int sender;
char rcvbuf[sizeof(struct UART_Server_Request)];
char reply[] = "R";
@@ -213,6 +222,7 @@ void uart_term_server_rx() {
enum uart_rx_states rx_state = UART_RXLO;
struct Ring_Buffer terminal_admin_buffer = create_buffer(INT);
uint32_t last_train_cmd_time = 0;
char setup_terminal[] = "\033[55;80r"; // scrolling region for terminal and debug
prints(setup_terminal);
@@ -238,9 +248,13 @@ void uart_term_server_rx() {
char c = UartGetc(0);
if (is_directional_control(c) && ring_buffer_is_empty(&char_buffer)) {
ASSERT(!ring_buffer_is_empty(&terminal_admin_buffer));
int terminal_admin = ring_buffer_pop(&terminal_admin_buffer);
char command[2] = { c, '\0' };
Reply(terminal_admin, command, 2);
uint32_t curtime = Time(clock_server_tid);
if (last_train_cmd_time < curtime - 20) {
last_train_cmd_time = curtime;
int terminal_admin = ring_buffer_pop(&terminal_admin_buffer);
char command[2] = { c, '\0' };
Reply(terminal_admin, command, 2);
}
} else if (c == '\r') {
ASSERT(!ring_buffer_is_empty(&terminal_admin_buffer));
int terminal_admin = ring_buffer_pop(&terminal_admin_buffer);
@@ -461,8 +475,9 @@ void uart_train_server_tx_no_cts() {
debug_printi("Current receiving_sensor_bytes: ", receiving_sensor_bytes, "\r\n");
debug_printi("Error, more than 5s delay to train set, current state: ", tx_state, "\r\n");
debug_prints("Going back to ready state...\r\n");
ASSERT(0);
// ASSERT(0);
tx_state = UART_TRAIN_TX_READY;
receiving_sensor_bytes = 0;
}
if (req->request_type == UART_SEND_TRAIN) {
@@ -478,6 +493,10 @@ void uart_train_server_tx_no_cts() {
debug_printi("size of buffer when stop bytes added: ", char_buffer_1.size, "\r\n");
debug_printi("added stop byte to queue at time: ", curtime, "\r\n");
} else {
if (req->msg[i] == 133 && receiving_sensor_bytes) {
i++;
continue;
}
ring_buffer_append(&char_buffer_1, req->msg[i]);
}
@@ -507,7 +526,6 @@ void uart_train_server_tx_no_cts() {
}
} else if (req->request_type == UART_DONE_RECEIVING_SENSOR_BYTES) {
receiving_sensor_bytes = 0;
Delay(clock_server_tid, 1);
} else {
ASSERT(0);
}
Loading