#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; args[0] = malloc(sizeof(uint8_t)*2); if (stream.read(args[0], 2, NULL, &stream) != 0); else { uint8_t ACK_flag = ((uint8_t*)args[0])[1]; if (ACK_flag == 0xFF) { hs_status = HS_STATE_2; } else { free(args[0]); 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_len = ((uint8_t*)args[0])[0]; args[1] = malloc(sizeof(uint8_t)*(MDR_len)); if (stream.read(args[1], MDR_len, NULL, &stream) != 0) { free(args[1]); hs_status = HS_STATE_FAIL; } else { hs_status = HS_STATE_SUCCESS; } return hs_status; }