embkernel
 All Classes Functions Variables Typedefs Groups Pages
LibPktHandler.hpp
1 //------------------------------------------------------------------------------
2 //This file is part of embKernel.
3 //See license.txt for the full license governing this code.
4 //------------------------------------------------------------------------------
5 
6 #ifndef LIB_PKT_HANDLER_HPP_
7 #define LIB_PKT_HANDLER_HPP_
8 
9 #include "LibStreamIn.hpp"
10 #include "LibStreamOut.hpp"
11 
12 class LibPktHandler {
13 public:
14  typedef struct {
15  uint16_t cmd;
16  uint16_t dataLen;
17  } PKT_HDR;
18 
19  typedef struct {
20  PKT_HDR hdr;
21  uint8_t data[1024];
22  } PKT;
23 
24  typedef enum {
25  RES_SUCCESS = 0,
26  RES_PKT_DROPPED = 1,
27  RES_TIMEOUT = 2,
28  } RESULT;
29 
30 private:
31  PKT* mCurrentPkt;
32  uint16_t mCmd;
33  uint16_t mDataLen;
34  int mCurrentPosition;
35  bool mIsError;
36 
37 public:
38  LibPktHandler();
39 
40  RESULT recvPkt(LibStreamIn& stream, PKT** pkt, Rtos::TICK timeout = Rtos::TICK_INFINITE);
41  void freePkt(PKT** pkt);
42  RESULT sendPkt(LibStreamOut& stream, uint16_t cmd, uint16_t dataLen, const void* data, Rtos::TICK timeout = Rtos::TICK_INFINITE);
43  void reset();
44  inline bool isError() {
45  return mIsError;
46  }
47 };
48 
49 #endif /* LIB_PKT_HANDLER_HPP_ */