6 #include "LibPktHandler.hpp"
9 LibPktHandler::LibPktHandler() {
15 LibPktHandler::RESULT LibPktHandler::recvPkt(LibStreamIn& stream, PKT** pkt,
Rtos::TICK timeout) {
19 if (mCurrentPosition == 0) {
21 if (stream.read(&value, 1, timeout) > 0) {
29 else if (mCurrentPosition == 1) {
31 if (stream.read(&value, 1, timeout) > 0) {
32 mCmd += ((uint16_t) value) << 8;
39 else if (mCurrentPosition == 2) {
41 if (stream.read(&value, 1, timeout) > 0) {
49 else if (mCurrentPosition == 3) {
51 if (stream.read(&value, 1, timeout) > 0) {
52 mDataLen += ((uint16_t) value) << 8;
53 mCurrentPkt = (PKT*) malloc(mDataLen + 4);
55 mCurrentPkt->hdr.cmd = mCmd;
56 mCurrentPkt->hdr.dataLen = mDataLen;
65 else if (mCurrentPosition > 3) {
74 return RES_PKT_DROPPED;
79 read = stream.read(&mCurrentPkt->data[mCurrentPosition - 4], mDataLen, timeout);
82 read = stream.skip(mDataLen, timeout);
87 mCurrentPosition += read;
93 void LibPktHandler::freePkt(PKT** pkt) {
99 LibPktHandler::RESULT LibPktHandler::sendPkt(LibStreamOut& stream, uint16_t cmd, uint16_t dataLen,
const void* data,
Rtos::TICK timeout) {
103 int written = stream.write(&hdr, 4, timeout);
107 written = stream.write(data, dataLen, timeout);
108 if (written != dataLen) {
114 void LibPktHandler::reset() {
115 mCurrentPosition = 0;
116 freePkt(&mCurrentPkt);