summaryrefslogtreecommitdiff
path: root/src/dataflow.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dataflow.c')
-rw-r--r--src/dataflow.c40
1 files changed, 37 insertions, 3 deletions
diff --git a/src/dataflow.c b/src/dataflow.c
index 22a50ab..0f05703 100644
--- a/src/dataflow.c
+++ b/src/dataflow.c
@@ -133,7 +133,7 @@ int DF_func_rx_cmd(p_stream_t stream, void **args)
uint8_t data_len = DOC_buf[3], cmd_dest = DOC_buf[0];
uint8_t **cmd_routing_buf = (uint8_t**)args[6];
- uint8_t *cmd_routing_ptr = (uint8_t*)args[7];
+ uint8_t *cmd_routing_ptr = (uint8_t*)args[7];
uint8_t* cmd_src_idx_rbuf = (uint8_t*)args[8];
uint8_t* cmd_dst_idx_rbuf = (uint8_t*)args[9];
@@ -148,17 +148,51 @@ int DF_func_rx_cmd(p_stream_t stream, void **args)
cmd_src_idx_rbuf[*cmd_routing_ptr] = 0;
cmd_dst_idx_rbuf[*cmd_routing_ptr] = cmd_dest;
cmd_routing_ptr++;
- df_state = DF_SUCCESS;
+ df_state = DF_STATE_SUCCESS;
}
return df_state;
}
int DF_func_tx_data(p_stream_t stream, void **args)
{
- /* TODO Do this after MDR is cached after handshake, let's not encode it again here */
+ int df_state = DF_RX_DATA;
+ uint8_t **MDR_rbuf = (uint8_t**)args[10];
+ uint8_t *MDR_len_buf = (uint8_t*)args[12];
+ uint8_t *data_len_buf = (uint8_t*)args[5];
+ uint8_t rbuf_idx = *(uint8_t*)args[11];
+ uint8_t **data_rbuf = (uint8_t**)args[2];
+ uint8_t CTS_buf[2];
+ uint8_t data_MDR_len_buf[4] = {0, MDR_len_buf[rbuf_idx], 0, data_len_buf[rbuf_idx]};
+
+ if (stream.read(CTS_buf, 2, NULL, &stream) != 0)
+ df_state = DF_STATE_FAIL;
+ else if (CTS_buf[1] != 0x1)
+ df_state = DF_STATE_FAIL;
+ if (df_state != DF_STATE_FAIL) {
+ if (stream.write(data_MDR_len_buf, 4, NULL, &stream) != 0)
+ df_state = DF_STATE_FAIL;
+ else {
+ if (stream.read(CTS_buf, 2, NULL, &stream) != 0)
+ df_state = DF_STATE_FAIL;
+ else if (CTS_buf[1] != 0x1)
+ df_state = DF_STATE_FAIL;
+ }
+ }
+ if (df_state != DF_STATE_FAIL) {
+ if (stream.write(MDR_rbuf[rbuf_idx], MDR_len_buf[rbuf_idx], NULL, &stream) == 0 &&
+ stream.write(data_rbuf[rbuf_idx], data_len_buf[rbuf_idx], NULL, &stream) == 0)
+ df_state = DF_STATE_SUCCESS;
+ else
+ df_state = DF_STATE_FAIL;
+ }
+ return df_state;
}
int DF_func_tx_cmd(p_stream_t stream, void **args)
{
+ /* TODO This function will not work unless there is a cmd_len buffer */
+ uint8_t rbuf_idx = *(uint8_t*)args[11];
+ uint8_t **cmd_routing_buf = (uint8_t**)args[6];
+ return DF_STATE_FAIL;
}