#include #include "handshake.h" /** * Case HS_IDLE * */ hs_status_t HS_func_0(p_stream_t stream, void **args) { int hs_status = HS_STATE_0; uint8_t MDR_req_buf[2] = {0x0, 0x1}; if (stream.write(MDR_req_buf, 2, NULL, &stream) != 0) { hs_status = HS_STATE_FAIL; } else { hs_status = HS_STATE_1; } return hs_status; } hs_status_t HS_func_1(p_stream_t stream, void **args) { int hs_status = HS_STATE_1; uint8_t MDR_ACK_buf[2] = {0x0, 0x0}; if (stream.read(MDR_ACK_buf, 2, NULL, &stream) != 0); else { uint8_t ACK_flag = MDR_ACK_buf[1]; if (ACK_flag == 0xFF) { /* Assign MDR_len for forward propogation in FSM */ args[0] = malloc(sizeof(uint16_t)); args[0] = &MDR_ACK_buf[0]; hs_status = HS_STATE_2; } else { hs_status = HS_STATE_FAIL; } } return hs_status; } hs_status_t HS_func_2(p_stream_t stream, void **args) { int hs_status = HS_STATE_2; uint8_t MDR_CTS_buf[2] = {0x0, 0x02}; if (stream.write(MDR_CTS_buf, 2, NULL, &stream) != 0) { hs_status = HS_STATE_FAIL; } else { hs_status = HS_STATE_3; } return hs_status; } hs_status_t HS_func_3(p_stream_t stream, void **args) { int hs_status = HS_STATE_3; uint8_t *MDR_buf, *MDR_len = (uint8_t*)args[0]; MDR_buf = (uint8_t*)malloc(*MDR_len); if (stream.read(MDR_buf, *MDR_len, NULL, &stream) != 0) { hs_status = HS_STATE_FAIL; } else { args[1] = malloc(sizeof(uint8_t)*(*MDR_len)); memcpy(args[1], MDR_buf, *MDR_len); hs_status = HS_STATE_SUCCESS; } return hs_status; }