6 #include "LibRtosTraceUsb.hpp"
8 LibRtosTraceUsb::LibRtosTraceUsb(
int priority,
size_t stackSize, uint8_t outEp, uint8_t inEp) :
9 mTask(priority,
"RTOS_TRACE", stackSize, *this), mUsbRxStream(outEp, 128), mUsbTxStream(inEp, 128) {
12 LibRtosTraceUsb::~LibRtosTraceUsb() {
15 void LibRtosTraceUsb::run() {
16 #if RTOS_CFG_TRACE_BUFFER_SIZE
20 bool isConnected =
false;
23 LibPktHandler::PKT* pkt;
24 LibPktHandler::RESULT result = mPktHandler.recvPkt(mUsbRxStream, &pkt, 4);
25 if (result == LibPktHandler::RES_SUCCESS) {
29 Rtos::clearTraceBuffer();
31 switch (pkt->hdr.cmd) {
32 case CMD_GET_TASK_NAME: {
37 case GET_CLOCK_FREQUENCY: {
38 uint32_t frequency = RTOS_CFG_CPU_FREQUENCY;
39 result =mPktHandler.sendPkt(mUsbTxStream, GET_CLOCK_FREQUENCY, 4, &frequency,
Rtos::convertMsToTick(5000));
42 case CMD_GET_TASK_STACK: {
45 param[0] = (uint32_t) task;
48 result = mPktHandler.sendPkt(mUsbTxStream, CMD_GET_TASK_STACK,
sizeof(param), param,
Rtos::convertMsToTick(5000));
54 mPktHandler.freePkt(&pkt);
55 if(result != LibPktHandler::RES_SUCCESS ) {
59 else if(mTimer.isEllapsed() && isConnected) {
65 int count = Rtos::getTraceBuffer(&tag);
67 result = mPktHandler.sendPkt(mUsbTxStream, CMD_SEND_TRACE_TAGS, count *
sizeof(Rtos::TRACE_TAG), tag,
Rtos::convertMsToTick(5000));
68 if(result != LibPktHandler::RES_SUCCESS ) {
71 Rtos::releaseBuffer(count);