Skip to content

Commit

Permalink
Add experimental routing
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeyt7 committed Mar 27, 2023
1 parent ccb298c commit f4d05d5
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 13 deletions.
17 changes: 9 additions & 8 deletions c-examples/com-monolithic/com_monolithic.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ int main(void) {
init_uart();
init_radio();
// TAB initialization
rx_cmd_buff_t rx_cmd_buff = {.size=CMD_MAX_LEN};
clear_rx_cmd_buff(&rx_cmd_buff);
tx_cmd_buff_t tx_cmd_buff = {.size=CMD_MAX_LEN};
clear_tx_cmd_buff(&tx_cmd_buff);
rx_cmd_buff_t uart_rx_cmd_buff = {.size=CMD_MAX_LEN};
clear_rx_cmd_buff(&uart_rx_cmd_buff);
tx_cmd_buff_t uart_tx_cmd_buff = {.size=CMD_MAX_LEN};
clear_tx_cmd_buff(&uart_tx_cmd_buff);

rx_cmd_buff_t radio_rx_cmd_buff = {.size=CMD_MAX_LEN};
clear_rx_cmd_buff(&radio_rx_cmd_buff);
Expand All @@ -36,11 +36,12 @@ int main(void) {

// TAB loop
while(1) {
rx_uart0(&rx_cmd_buff); // Collect command bytes
forward(&rx_cmd_buff, &radio_tx_cmd_buff, 0);
rx_uart0(&uart_rx_cmd_buff); // Collect command bytes
tx_uart0(&uart_tx_cmd_buff);
radio_transceive(&radio_rx_cmd_buff, &radio_tx_cmd_buff);
forward(&radio_rx_cmd_buff, &tx_cmd_buff, 1);
tx_uart0(&tx_cmd_buff);

route(&uart_rx_cmd_buff, &uart_tx_cmd_buff, &radio_tx_cmd_buff);
route(&radio_rx_cmd_buff, &uart_tx_cmd_buff, &radio_tx_cmd_buff);
}
// Should never reach this point
return 0;
Expand Down
43 changes: 39 additions & 4 deletions c-examples/com-monolithic/support/com.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,15 +155,18 @@ void rx_uart0(rx_cmd_buff_t* rx_cmd_buff_o) {
} //
}

void reply(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* tx_cmd_buff_o) {
void reply(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* tx_cmd_buff_o, int use_uart) {
if( // if
rx_cmd_buff_o->state==RX_CMD_BUFF_STATE_COMPLETE && // rx_cmd is valid AND
tx_cmd_buff_o->empty // tx_cmd is empty
) { //
write_reply(rx_cmd_buff_o, tx_cmd_buff_o); // Execute cmd and reply
uint8_t b = pop_tx_cmd_buff(tx_cmd_buff_o); // Pop 1st TX buffer byte
uart_send(UART0,b); // Generate TXDRDY event
uart_start_tx(UART0); // Start TX session

if (use_uart) {
uint8_t b = pop_tx_cmd_buff(tx_cmd_buff_o); // Pop 1st TX buffer byte
uart_send(UART0,b); // Generate TXDRDY event
uart_start_tx(UART0); // Start TX session
}
} //
}

Expand Down Expand Up @@ -329,4 +332,36 @@ void radio_transceive(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* tx_cmd_buff_o
}
break;
}
}

#define GROUND

void route(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* uart_tx_cmd_buff_o, tx_cmd_buff_t* radio_tx_cmd_buff_o) {
// Command route is src:dst, both are nibbles
int src = (rx_cmd_buff_o->data[ROUTE_INDEX] >> 4) & 0x0f;
int dst = (rx_cmd_buff_o->data[ROUTE_INDEX] >> 0) & 0x0f;

#ifdef GROUND
if (dst != GND) {
forward(rx_cmd_buff_o, radio_tx_cmd_buff_o, 0);
} else {
forward(rx_cmd_buff_o, uart_tx_cmd_buff_o, 1);
}
#else
switch (dst) {
case CDH:
forward(rx_cmd_buff_o, uart_tx_cmd_buff_o, 1);
break;
case GND:
forward(rx_cmd_buff_o, radio_tx_cmd_buff_o, 0);
break;
case COM:
if (src == CDH) {
reply(rx_cmd_buff_o, uart_tx_cmd_buff_o, 1);
} else {
reply(rx_cmd_buff_o, radio_tx_cmd_buff_o, 0);
}
break;
}
#endif
}
3 changes: 2 additions & 1 deletion c-examples/com-monolithic/support/com.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,11 @@ void init_radio(void);
// Feature functions

void rx_uart0(rx_cmd_buff_t* rx_cmd_buff_o);
void reply(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* tx_cmd_buff_o);
void reply(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* tx_cmd_buff_o, int use_uart);
void tx_uart0(tx_cmd_buff_t* tx_cmd_buff_o);
void write_forward(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* tx_cmd_buff_o);
void forward(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* tx_cmd_buff_o, int use_uart);
void radio_transceive(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* tx_cmd_buff_o);
void route(rx_cmd_buff_t* rx_cmd_buff_o, tx_cmd_buff_t* uart_tx_cmd_buff_o, tx_cmd_buff_t* radio_tx_cmd_buff_o);

#endif

0 comments on commit f4d05d5

Please sign in to comment.