implemented the last tricky parts
This commit is contained in:
@ -29,12 +29,13 @@ using namespace supv;
|
||||
PlocSupvHelper::PlocSupvHelper(object_id_t objectId)
|
||||
: SystemObject(objectId),
|
||||
recRingBuf(4096, true),
|
||||
decodedRingBuf(1200 * MAX_STORED_DECODED_PACKETS, true),
|
||||
ipcRingBuf(1200 * MAX_STORED_DECODED_PACKETS, true) {
|
||||
spParams.maxSize = sizeof(commandBuffer);
|
||||
resetSpParams();
|
||||
semaphore = SemaphoreFactory::instance()->createBinarySemaphore();
|
||||
semaphore->acquire();
|
||||
lock = MutexFactory::instance()->createMutex();
|
||||
ipcLock = MutexFactory::instance()->createMutex();
|
||||
}
|
||||
|
||||
PlocSupvHelper::~PlocSupvHelper() = default;
|
||||
@ -158,14 +159,14 @@ bool PlocSupvHelper::handleUartReception() {
|
||||
return false;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::setComIF(UartComIF* uartComIF_) {
|
||||
if (uartComIF_ == nullptr) {
|
||||
sif::warning << "PlocSupvHelper::initialize: Provided invalid uart com if" << std::endl;
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
uartComIF = uartComIF_;
|
||||
return returnvalue::OK;
|
||||
}
|
||||
// ReturnValue_t PlocSupvHelper::setComIF(UartComIF* uartComIF_) {
|
||||
// if (uartComIF_ == nullptr) {
|
||||
// sif::warning << "PlocSupvHelper::initialize: Provided invalid uart com if" << std::endl;
|
||||
// return returnvalue::FAILED;
|
||||
// }
|
||||
// //uartComIF = uartComIF_;
|
||||
// return returnvalue::OK;
|
||||
// }
|
||||
|
||||
// void PlocSupvHelper::setComCookie(CookieIF* comCookie_) { comCookie = comCookie_; }
|
||||
|
||||
@ -431,7 +432,8 @@ ReturnValue_t PlocSupvHelper::writeUpdatePackets() {
|
||||
update.bytesWritten);
|
||||
return result;
|
||||
}
|
||||
result = handlePacketTransmission(packet);
|
||||
// TODO: Fix
|
||||
// result = handlePacketTransmission(packet);
|
||||
if (result != returnvalue::OK) {
|
||||
triggerEvent(WRITE_MEMORY_FAILED, buildProgParams1(progPercent, update.sequenceCount),
|
||||
update.bytesWritten);
|
||||
@ -514,7 +516,7 @@ ReturnValue_t PlocSupvHelper::selectMemory() {
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
result = handlePacketTransmission(packet);
|
||||
result = handlePacketTransmissionNoReply(packet);
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
@ -530,7 +532,7 @@ ReturnValue_t PlocSupvHelper::prepareUpdate() {
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
result = handlePacketTransmission(packet, PREPARE_UPDATE_EXECUTION_REPORT);
|
||||
result = handlePacketTransmissionNoReply(packet, PREPARE_UPDATE_EXECUTION_REPORT);
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
@ -546,140 +548,131 @@ ReturnValue_t PlocSupvHelper::eraseMemory() {
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
result = handlePacketTransmission(eraseMemory, supv::timeout::ERASE_MEMORY);
|
||||
result = handlePacketTransmissionNoReply(eraseMemory, supv::timeout::ERASE_MEMORY);
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
return returnvalue::OK;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::handlePacketTransmission(ploc::SpTcBase& packet,
|
||||
uint32_t timeoutExecutionReport) {
|
||||
ReturnValue_t PlocSupvHelper::handlePacketTransmissionNoReply(supv::TcBase& packet,
|
||||
uint32_t timeoutExecutionReport) {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
result = sendCommand(packet);
|
||||
result = encodeAndSendPacket(packet.getFullPacket(), packet.getFullPacketLen());
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
result = handleAck();
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
result = handleExe(timeoutExecutionReport);
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
Countdown countdown(timeoutExecutionReport);
|
||||
bool ackReceived = false;
|
||||
while (true) {
|
||||
if (not decodedQueue.empty()) {
|
||||
size_t packetLen = 0;
|
||||
decodedQueue.retrieve(&packetLen);
|
||||
decodedRingBuf.readData(decodedBuf.data(), packetLen);
|
||||
tmReader.setData(decodedBuf.data(), packetLen);
|
||||
result = checkReceivedTm();
|
||||
if (result != returnvalue::OK) {
|
||||
continue;
|
||||
}
|
||||
if (tmReader.getApid() == Apid::TMTC_MAN) {
|
||||
uint8_t serviceId = tmReader.getServiceId();
|
||||
int retval = 0;
|
||||
if (not ackReceived) {
|
||||
retval = handleAckReception(packet, serviceId, packetLen);
|
||||
if (retval == 1) {
|
||||
ackReceived = true;
|
||||
} else if (retval == -1) {
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
} else {
|
||||
retval = handleExeAckReception(packet, serviceId, packetLen);
|
||||
if (retval == 1) {
|
||||
break;
|
||||
} else if (retval == -1) {
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pushIpcData(decodedBuf.data(), packetLen);
|
||||
decodedRingBuf.deleteData(packetLen);
|
||||
}
|
||||
} else {
|
||||
TaskFactory::delayTask(50);
|
||||
}
|
||||
if (countdown.hasTimedOut()) {
|
||||
return result::NO_REPLY_TIMEOUT;
|
||||
}
|
||||
}
|
||||
return returnvalue::OK;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::sendCommand(ploc::SpTcBase& packet) {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
rememberApid = packet.getApid();
|
||||
result = uartComIF->sendMessage(comCookie, packet.getFullPacket(), packet.getFullPacketLen());
|
||||
if (result != returnvalue::OK) {
|
||||
sif::warning << "PlocSupvHelper::sendCommand: Failed to send command" << std::endl;
|
||||
triggerEvent(SUPV_SENDING_COMMAND_FAILED, result, static_cast<uint32_t>(state));
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::handleAck() {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
|
||||
// TODO: Fix
|
||||
// result = handleTmReception(supv::SIZE_ACK_REPORT);
|
||||
// if (result != returnvalue::OK) {
|
||||
// triggerEvent(ACK_RECEPTION_FAILURE, result, static_cast<uint32_t>(rememberApid));
|
||||
// sif::warning << "PlocSupvHelper::handleAck: Error in reception of acknowledgment report"
|
||||
// << std::endl;
|
||||
// return result;
|
||||
// }
|
||||
// supv::AcknowledgmentReport ackReport(tmBuf.data(), tmBuf.size());
|
||||
// result = checkReceivedTm(ackReport);
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
// result = ackReport.checkApid();
|
||||
// if (result != returnvalue::OK) {
|
||||
// if (result == SupvReturnValuesIF::RECEIVED_ACK_FAILURE) {
|
||||
// triggerEvent(SUPV_ACK_FAILURE_REPORT, static_cast<uint32_t>(ackReport.getRefApid()));
|
||||
// } else if (result == SupvReturnValuesIF::INVALID_APID) {
|
||||
// triggerEvent(SUPV_ACK_INVALID_APID, static_cast<uint32_t>(rememberApid));
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::handleExe(uint32_t timeout) {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
|
||||
result = handleTmReception(supv::SIZE_EXE_REPORT, tmBuf.data(), timeout);
|
||||
if (result != returnvalue::OK) {
|
||||
triggerEvent(EXE_RECEPTION_FAILURE, result, static_cast<uint32_t>(rememberApid));
|
||||
sif::warning << "PlocSupvHelper::handleExe: Error in reception of execution report"
|
||||
<< std::endl;
|
||||
return result;
|
||||
}
|
||||
|
||||
return exeReportHandling();
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::exeReportHandling() {
|
||||
// TODO: Fix
|
||||
// supv::ExecutionReport exeReport(tmBuf.data(), tmBuf.size());
|
||||
//
|
||||
// ReturnValue_t result = checkReceivedTm(exeReport);
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
// result = exeReport.checkApid();
|
||||
// if (result != returnvalue::OK) {
|
||||
// if (result == SupvReturnValuesIF::RECEIVED_EXE_FAILURE) {
|
||||
// triggerEvent(SUPV_EXE_FAILURE_REPORT, static_cast<uint32_t>(exeReport.getRefApid()));
|
||||
// } else if (result == SupvReturnValuesIF::INVALID_APID) {
|
||||
// triggerEvent(SUPV_EXE_INVALID_APID, static_cast<uint32_t>(rememberApid));
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
return OK;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::handleTmReception(size_t remainingBytes, uint8_t* readBuf,
|
||||
uint32_t timeout) {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
size_t readBytes = 0;
|
||||
size_t currentBytes = 0;
|
||||
Countdown countdown(timeout);
|
||||
if (readBuf == nullptr) {
|
||||
readBuf = tmBuf.data();
|
||||
}
|
||||
while (!countdown.hasTimedOut()) {
|
||||
result = receive(readBuf + readBytes, ¤tBytes, remainingBytes);
|
||||
int PlocSupvHelper::handleAckReception(supv::TcBase& tc, uint8_t serviceId, size_t packetLen) {
|
||||
if (serviceId == static_cast<uint8_t>(supv::tm::TmtcId::ACK) or
|
||||
serviceId == static_cast<uint8_t>(supv::tm::TmtcId::NAK)) {
|
||||
AcknowledgmentReport ackReport(tmReader);
|
||||
ReturnValue_t result = ackReport.parse();
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
triggerEvent(ACK_RECEPTION_FAILURE);
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
readBytes += currentBytes;
|
||||
remainingBytes = remainingBytes - currentBytes;
|
||||
if (remainingBytes == 0) {
|
||||
break;
|
||||
if (ackReport.getRefApid() == tc.getApid() and
|
||||
ackReport.getRefServiceId() == tc.getServiceId()) {
|
||||
if (serviceId == static_cast<uint8_t>(supv::tm::TmtcId::ACK)) {
|
||||
return 1;
|
||||
} else if (serviceId == static_cast<uint8_t>(supv::tm::TmtcId::NAK)) {
|
||||
ackReport.printStatusInformation();
|
||||
triggerEvent(SUPV_ACK_FAILURE_REPORT,
|
||||
buildApidServiceParam1(ackReport.getRefApid(), ackReport.getRefServiceId()),
|
||||
ackReport.getStatusCode());
|
||||
return -1;
|
||||
}
|
||||
// Should never happen
|
||||
return -1;
|
||||
} else {
|
||||
pushIpcData(decodedBuf.data(), packetLen);
|
||||
decodedRingBuf.deleteData(packetLen);
|
||||
}
|
||||
}
|
||||
if (remainingBytes != 0) {
|
||||
sif::warning << "PlocSupvHelper::handleTmReception: Failed to read " << std::dec
|
||||
<< remainingBytes << " remaining bytes" << std::endl;
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
return result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::checkReceivedTm(ploc::SpTmReader& reader) {
|
||||
ReturnValue_t result = reader.checkSize();
|
||||
int PlocSupvHelper::handleExeAckReception(supv::TcBase& tc, uint8_t serviceId, size_t packetLen) {
|
||||
if (serviceId == static_cast<uint8_t>(supv::tm::TmtcId::EXEC_ACK) or
|
||||
serviceId == static_cast<uint8_t>(supv::tm::TmtcId::EXEC_NAK)) {
|
||||
ExecutionReport exeReport(tmReader);
|
||||
ReturnValue_t result = exeReport.parse();
|
||||
if (result != returnvalue::OK) {
|
||||
triggerEvent(EXE_RECEPTION_FAILURE);
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
if (exeReport.getRefApid() == tc.getApid() and
|
||||
exeReport.getRefServiceId() == tc.getServiceId()) {
|
||||
if (serviceId == static_cast<uint8_t>(supv::tm::TmtcId::EXEC_ACK)) {
|
||||
return 1;
|
||||
} else if (serviceId == static_cast<uint8_t>(supv::tm::TmtcId::EXEC_NAK)) {
|
||||
exeReport.printStatusInformation();
|
||||
triggerEvent(SUPV_EXE_FAILURE_REPORT,
|
||||
buildApidServiceParam1(exeReport.getRefApid(), exeReport.getRefServiceId()),
|
||||
exeReport.getStatusCode());
|
||||
return -1;
|
||||
}
|
||||
// Should never happen
|
||||
return -1;
|
||||
} else {
|
||||
pushIpcData(decodedBuf.data(), packetLen);
|
||||
decodedRingBuf.deleteData(packetLen);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::checkReceivedTm() {
|
||||
ReturnValue_t result = tmReader.checkSize();
|
||||
if (result != returnvalue::OK) {
|
||||
triggerEvent(SUPV_REPLY_SIZE_MISSMATCH, rememberApid);
|
||||
return result;
|
||||
}
|
||||
result = reader.checkCrc();
|
||||
result = tmReader.checkCrc();
|
||||
if (result != returnvalue::OK) {
|
||||
triggerEvent(SUPV_REPLY_CRC_MISSMATCH, rememberApid);
|
||||
return result;
|
||||
@ -687,30 +680,6 @@ ReturnValue_t PlocSupvHelper::checkReceivedTm(ploc::SpTmReader& reader) {
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::receive(uint8_t* data, size_t* readBytes, size_t requestBytes) {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
uint8_t* buffer = nullptr;
|
||||
result = uartComIF->requestReceiveMessage(comCookie, requestBytes);
|
||||
if (result != returnvalue::OK) {
|
||||
sif::warning << "PlocSupvHelper::receive: Failed to request reply" << std::endl;
|
||||
triggerEvent(SUPV_HELPER_REQUESTING_REPLY_FAILED, result,
|
||||
static_cast<uint32_t>(static_cast<uint32_t>(state)));
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
result = uartComIF->readReceivedMessage(comCookie, &buffer, readBytes);
|
||||
if (result != returnvalue::OK) {
|
||||
sif::warning << "PlocSupvHelper::receive: Failed to read received message" << std::endl;
|
||||
triggerEvent(SUPV_HELPER_READING_REPLY_FAILED, result, static_cast<uint32_t>(state));
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
if (*readBytes > 0) {
|
||||
std::memcpy(data, buffer, *readBytes);
|
||||
} else {
|
||||
TaskFactory::delayTask(40);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t PlocSupvHelper::calcImageCrc() {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
if (update.fullFileSize == 0) {
|
||||
@ -760,20 +729,64 @@ ReturnValue_t PlocSupvHelper::calcImageCrc() {
|
||||
ReturnValue_t PlocSupvHelper::handleCheckMemoryCommand() {
|
||||
ReturnValue_t result = returnvalue::OK;
|
||||
// TODO: Fix
|
||||
// resetSpParams();
|
||||
// // Will hold status report for later processing
|
||||
resetSpParams();
|
||||
// Will hold status report for later processing
|
||||
// std::array<uint8_t, 32> statusReportBuf{};
|
||||
// supv::UpdateStatusReport updateStatusReport(tmBuf.data(), tmBuf.size());
|
||||
// // Verification of update write procedure
|
||||
// supv::CheckMemory packet(spParams);
|
||||
// result = packet.buildPacket(update.memoryId, update.startAddress, update.fullFileSize);
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
// result = sendCommand(packet);
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
// }
|
||||
// Verification of update write procedure
|
||||
supv::CheckMemory packet(spParams);
|
||||
result = packet.buildPacket(update.memoryId, update.startAddress, update.fullFileSize);
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
result = encodeAndSendPacket(packet.getFullPacket(), packet.getFullPacketLen());
|
||||
if (result != returnvalue::OK) {
|
||||
return result;
|
||||
}
|
||||
Countdown countdown(timeout::CRC_EXECUTION_TIMEOUT);
|
||||
bool ackReceived = false;
|
||||
bool checkReplyReceived = false;
|
||||
while (true) {
|
||||
if (not decodedQueue.empty()) {
|
||||
size_t packetLen = 0;
|
||||
decodedQueue.retrieve(&packetLen);
|
||||
decodedRingBuf.readData(decodedBuf.data(), packetLen);
|
||||
tmReader.setData(decodedBuf.data(), packetLen);
|
||||
result = checkReceivedTm();
|
||||
if (result != returnvalue::OK) {
|
||||
continue;
|
||||
}
|
||||
if (tmReader.getApid() == Apid::TMTC_MAN) {
|
||||
uint8_t serviceId = tmReader.getServiceId();
|
||||
int retval = 0;
|
||||
if (not ackReceived) {
|
||||
retval = handleAckReception(packet, serviceId, packetLen);
|
||||
if (retval == 1) {
|
||||
ackReceived = true;
|
||||
} else if (retval == -1) {
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
} else if (not checkReplyReceived) {
|
||||
// if (serviceId == )
|
||||
retval = handleExeAckReception(packet, serviceId, packetLen);
|
||||
if (retval == 1) {
|
||||
break;
|
||||
} else if (retval == -1) {
|
||||
return returnvalue::FAILED;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pushIpcData(decodedBuf.data(), packetLen);
|
||||
decodedRingBuf.deleteData(packetLen);
|
||||
}
|
||||
} else {
|
||||
TaskFactory::delayTask(50);
|
||||
}
|
||||
if (countdown.hasTimedOut()) {
|
||||
return result::NO_REPLY_TIMEOUT;
|
||||
}
|
||||
}
|
||||
return returnvalue::OK;
|
||||
// result = handleAck();
|
||||
// if (result != returnvalue::OK) {
|
||||
// return result;
|
||||
@ -896,7 +909,7 @@ ReturnValue_t PlocSupvHelper::handleEventBufferReception(ploc::SpTmReader& reade
|
||||
return result;
|
||||
}
|
||||
|
||||
void PlocSupvHelper::resetSpParams() { spParams.buf = commandBuffer; }
|
||||
void PlocSupvHelper::resetSpParams() { spParams.buf = cmdBuf.data(); }
|
||||
|
||||
ReturnValue_t PlocSupvHelper::sendMessage(CookieIF* cookie, const uint8_t* sendData,
|
||||
size_t sendLen) {
|
||||
@ -968,8 +981,8 @@ ReturnValue_t PlocSupvHelper::handleRunningLongerRequest() {
|
||||
|
||||
ReturnValue_t PlocSupvHelper::encodeAndSendPacket(const uint8_t* sendData, size_t sendLen) {
|
||||
size_t encodedLen = 0;
|
||||
hdlc_add_framing(sendData, sendLen, sendBuf.data(), &encodedLen);
|
||||
size_t bytesWritten = write(serialPort, sendBuf.data(), encodedLen);
|
||||
hdlc_add_framing(sendData, sendLen, encodedSendBuf.data(), &encodedLen);
|
||||
size_t bytesWritten = write(serialPort, encodedSendBuf.data(), encodedLen);
|
||||
if (bytesWritten != encodedLen) {
|
||||
sif::warning << "ScexUartReader::sendMessage: Sending ping command to solar experiment failed"
|
||||
<< std::endl;
|
||||
@ -980,7 +993,7 @@ ReturnValue_t PlocSupvHelper::encodeAndSendPacket(const uint8_t* sendData, size_
|
||||
|
||||
ReturnValue_t PlocSupvHelper::readReceivedMessage(CookieIF* cookie, uint8_t** buffer,
|
||||
size_t* size) {
|
||||
MutexGuard mg(lock);
|
||||
MutexGuard mg(ipcLock);
|
||||
if (ipcQueue.empty()) {
|
||||
*size = 0;
|
||||
return OK;
|
||||
@ -999,7 +1012,14 @@ ReturnValue_t PlocSupvHelper::tryHdlcParsing() {
|
||||
ReturnValue_t result = parseRecRingBufForHdlc(bytesRead);
|
||||
if (result == returnvalue::OK) {
|
||||
// Packet found, advance read pointer.
|
||||
ipcRingBuf.writeData(decodedBuf.data(), bytesRead);
|
||||
if (state == InternalState::LONGER_REQUEST) {
|
||||
decodedRingBuf.writeData(decodedBuf.data(), bytesRead);
|
||||
decodedQueue.insert(bytesRead);
|
||||
} else {
|
||||
MutexGuard mg(ipcLock);
|
||||
ipcRingBuf.writeData(decodedBuf.data(), bytesRead);
|
||||
ipcQueue.insert(bytesRead);
|
||||
}
|
||||
recRingBuf.deleteData(bytesRead);
|
||||
} else if (result != NO_PACKET_FOUND) {
|
||||
sif::warning << "ScexUartReader::performOperation: Possible packet loss" << std::endl;
|
||||
@ -1053,10 +1073,28 @@ ReturnValue_t PlocSupvHelper::parseRecRingBufForHdlc(size_t& readSize) {
|
||||
return NO_PACKET_FOUND;
|
||||
}
|
||||
|
||||
void PlocSupvHelper::pushIpcData(const uint8_t* data, size_t len) {
|
||||
MutexGuard mg(ipcLock);
|
||||
ipcRingBuf.writeData(data, len);
|
||||
ipcQueue.insert(len);
|
||||
}
|
||||
|
||||
uint32_t PlocSupvHelper::buildApidServiceParam1(uint8_t apid, uint8_t serviceId) {
|
||||
return (apid << 8) | serviceId;
|
||||
}
|
||||
|
||||
void PlocSupvHelper::performUartShutdown() {
|
||||
tcflush(serialPort, TCIOFLUSH);
|
||||
// Clear ring buffers
|
||||
recRingBuf.clear();
|
||||
decodedRingBuf.clear();
|
||||
while (not decodedQueue.empty()) {
|
||||
decodedQueue.pop();
|
||||
}
|
||||
MutexGuard mg(ipcLock);
|
||||
ipcRingBuf.clear();
|
||||
while (not ipcQueue.empty()) {
|
||||
ipcQueue.pop();
|
||||
}
|
||||
state = InternalState::GO_TO_SLEEP;
|
||||
}
|
||||
|
Reference in New Issue
Block a user