embkernel
 All Classes Functions Variables Typedefs Groups Pages
Comm.cpp
1 //------------------------------------------------------------------------------
2 //This file is part of embKernel.
3 //See license.txt for the full license governing this code.
4 //------------------------------------------------------------------------------
5 
6 #include "Comm.hpp"
7 #include "Hw.hpp"
8 
9 Comm::Comm(int priority, size_t stackSize, uint8_t outEp, uint8_t inEp) :
10  mTask(priority, "Comm", stackSize, *this), mUsbRxStream(outEp, 128), mUsbTxStream(inEp, 128) {
11 
12 }
13 
14 Comm::~Comm() {
15 
16 }
17 
18 void Comm::run() {
19  Hw::sLsm303dlhc.init();
20 
21  while (true) {
22  while (true) {
23  LibPktHandler::PKT* pkt;
24  LibPktHandler::RESULT result = mPktHandler.recvPkt(mUsbRxStream, &pkt, Rtos::convertMsToTick(1000));
25  if (result == LibPktHandler::RES_SUCCESS) {
26  switch (pkt->hdr.cmd) {
27  case CMD_GET_LEDS: {
28  uint8_t buffer[8];
29  buffer[0] = Hw::sLed3;
30  buffer[1] = Hw::sLed4;
31  buffer[2] = Hw::sLed6;
32  buffer[3] = Hw::sLed8;
33  buffer[4] = Hw::sLed10;
34  buffer[5] = Hw::sLed9;
35  buffer[6] = Hw::sLed7;
36  buffer[7] = Hw::sLed5;
37  mPktHandler.sendPkt(mUsbTxStream, CMD_GET_LEDS, sizeof(buffer), buffer);
38  break;
39  }
40  case CMD_SET_LEDS: {
41  Hw::sLed3 = pkt->data[0];
42  Hw::sLed4 = pkt->data[1];
43  Hw::sLed6 = pkt->data[2];
44  Hw::sLed8 = pkt->data[3];
45  Hw::sLed10 = pkt->data[4];
46  Hw::sLed9 = pkt->data[5];
47  Hw::sLed7 = pkt->data[6];
48  Hw::sLed5 = pkt->data[7];
49  mPktHandler.sendPkt(mUsbTxStream, CMD_SET_LEDS, 4, pkt->data);
50  break;
51  }
52  case CMD_GET_ACC_XYZ: {
53  float xyz[3];
54  Hw::sLsm303dlhc.readAccXyz(&xyz[0], &xyz[1], &xyz[2]);
55  mPktHandler.sendPkt(mUsbTxStream, CMD_GET_ACC_XYZ, sizeof(xyz), &xyz);
56  }
57  default:
58  break;
59  }
60  mPktHandler.freePkt(&pkt);
61  }
62  else {
63  mPktHandler.reset();
64  }
65  }
66  }
67 }