diff options
Diffstat (limited to 'src/dataflow.c')
| -rw-r--r-- | src/dataflow.c | 40 |
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; } |
