kopia lustrzana https://github.com/mobilinkd/tnc3-firmware
72 wiersze
1.8 KiB
C++
72 wiersze
1.8 KiB
C++
// Copyright 2016 Rob Riggs <rob@mobilinkd.com>
|
|
// All rights reserved.
|
|
|
|
#include <Log.h>
|
|
#include "Kiss.hpp"
|
|
#include "KissHardware.hpp"
|
|
|
|
// extern osMessageQId hdlcOutputQueueHandle;
|
|
|
|
namespace mobilinkd { namespace tnc { namespace kiss {
|
|
|
|
void handle_frame(uint8_t frame_type, hdlc::IoFrame* frame) {
|
|
|
|
if (frame->size() == 0) {
|
|
hdlc::release(frame);
|
|
return;
|
|
}
|
|
|
|
uint8_t value = *(frame->begin());
|
|
switch (frame_type) {
|
|
case kiss::FRAME_DATA:
|
|
DEBUG("FRAME_DATA");
|
|
// osMessagePut(hdlcOutputQueueHandle, (uint32_t) frame, 0);
|
|
break;
|
|
case kiss::FRAME_TX_DELAY:
|
|
DEBUG("FRAME_TX_DELAY");
|
|
kiss::settings().txdelay = value;
|
|
hdlc::release(frame);
|
|
break;
|
|
case kiss::FRAME_P_PERSIST:
|
|
DEBUG("FRAME_P_PERSIST");
|
|
kiss::settings().ppersist = value;
|
|
hdlc::release(frame);
|
|
break;
|
|
case kiss::FRAME_SLOT_TIME:
|
|
DEBUG("FRAME_SLOT_TIME");
|
|
kiss::settings().slot = value;
|
|
hdlc::release(frame);
|
|
break;
|
|
case kiss::FRAME_TX_TAIL:
|
|
DEBUG("FRAME_TX_TAIL");
|
|
// Ignore.
|
|
hdlc::release(frame);
|
|
break;
|
|
case kiss::FRAME_DUPLEX:
|
|
DEBUG("FRAME_DUPLEX");
|
|
kiss::settings().duplex = value;
|
|
hdlc::release(frame);
|
|
break;
|
|
case kiss::FRAME_HARDWARE:
|
|
DEBUG("FRAME_HARDWARE");
|
|
kiss::settings().handle_request(frame);
|
|
hdlc::release(frame);
|
|
break;
|
|
case kiss::FRAME_LOG:
|
|
DEBUG("FRAME_LOG");
|
|
hdlc::release(frame);
|
|
// IGNORE
|
|
break;
|
|
case kiss::FRAME_RETURN:
|
|
DEBUG("FRAME_RETURN");
|
|
hdlc::release(frame);
|
|
// Leave KISS mode
|
|
break;
|
|
default:
|
|
DEBUG("Unknown KISS frame type");
|
|
hdlc::release(frame);
|
|
}
|
|
}
|
|
|
|
}}} // mobilinkd::tnc::kiss
|