1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /**
- * @file shellmatta_transport.h
- * @brief transport layer functions of shellmatta
- * @author Simon Fischer <fischer.simon.1991@gmail.com>
- */
- #include "shellmatta_transport.h"
- shellmatta_retCode_t shellmatta_handle_transport_fsm(shellmatta_transport_layer_t *transportLayer, char *data)
- {
- switch (transportLayer->state)
- {
- case STATE_IDLE:
- if (SHELLMATTA_START_OF_HEADER == *data)
- {
- transportLayer->state = STATE_SOH;
- }
- else
- {
- transportLayer->state = STATE_PAYLOAD;
- }
- break;
- case STATE_SOH:
- transportLayer->state = STATE_PROTOCOL_VERSION;
- break;
- case STATE_PROTOCOL_VERSION:
- transportLayer->state = STATE_PACKET_TYPE;
- break;
- case STATE_PACKET_TYPE:
- transportLayer->state = STATE_PAYLOAD_LENGTH;
- break;
- case STATE_PAYLOAD_LENGTH:
- transportLayer->state = STATE_SOURCE;
- break;
- case STATE_SOURCE:
- transportLayer->state = STATE_DESTINATION;
- break;
- case STATE_DESTINATION:
- transportLayer->state = STATE_H2S_SEQUENCE_CNT;
- break;
- case STATE_H2S_SEQUENCE_CNT:
- transportLayer->state = STATE_S2H_SEQUENCE_CNT;
- break;
- case STATE_S2H_SEQUENCE_CNT:
- transportLayer->state = STATE_PAYLOAD;
- break;
- case STATE_PAYLOAD:
- transportLayer->state = STATE_CRC;
- break;
- case STATE_CRC:
- transportLayer->state = STATE_IDLE;
- transportLayer->h2s_sequenceCnt += 1;
- // TODO: incrementing both h2s and s2h doesn't make much sense, does it?
- transportLayer->s2h_sequenceCnt += 1;
- break;
-
- default:
- break;
- }
- return SHELLMATTA_OK;
- }
|