Fix encoding of Query responses for high numbers of errors
+ improve unit tests directly for the enumerated errors in logic/error_codes.hpull/82/head
parent
a982381728
commit
f0b8cc9895
|
|
@ -215,13 +215,13 @@ uint8_t Protocol::EncodeResponseQueryOperation(const RequestMsg &msg, ResponseMs
|
||||||
*dst++ = value % 10 + '0';
|
*dst++ = value % 10 + '0';
|
||||||
} else if (value < 10000) {
|
} else if (value < 10000) {
|
||||||
*dst++ = value / 1000 + '0';
|
*dst++ = value / 1000 + '0';
|
||||||
*dst++ = (value / 100) % 100 + '0';
|
*dst++ = (value / 100) % 10 + '0';
|
||||||
*dst++ = (value / 10) % 10 + '0';
|
*dst++ = (value / 10) % 10 + '0';
|
||||||
*dst++ = value % 10 + '0';
|
*dst++ = value % 10 + '0';
|
||||||
} else {
|
} else {
|
||||||
*dst++ = value / 10000 + '0';
|
*dst++ = value / 10000 + '0';
|
||||||
*dst++ = (value / 1000) % 1000 + '0';
|
*dst++ = (value / 1000) % 10 + '0';
|
||||||
*dst++ = (value / 100) % 100 + '0';
|
*dst++ = (value / 100) % 10 + '0';
|
||||||
*dst++ = (value / 10) % 10 + '0';
|
*dst++ = (value / 10) % 10 + '0';
|
||||||
*dst++ = value % 10 + '0';
|
*dst++ = value % 10 + '0';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
#include "catch2/catch.hpp"
|
#include "catch2/catch.hpp"
|
||||||
|
#include "../logic/error_codes.h"
|
||||||
|
#include "../logic/progress_codes.h"
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
|
|
||||||
using Catch::Matchers::Equals;
|
using Catch::Matchers::Equals;
|
||||||
|
|
@ -162,12 +164,59 @@ TEST_CASE("protocol::EncodeResponseQueryOperation", "[protocol]") {
|
||||||
|
|
||||||
auto responseStatus = GENERATE(mp::ResponseMsgParamCodes::Processing, mp::ResponseMsgParamCodes::Error, mp::ResponseMsgParamCodes::Finished);
|
auto responseStatus = GENERATE(mp::ResponseMsgParamCodes::Processing, mp::ResponseMsgParamCodes::Error, mp::ResponseMsgParamCodes::Finished);
|
||||||
|
|
||||||
auto value = GENERATE(0, 1, 2, 3, 10, 11, 99, 100, 101, 102, 200, 255);
|
auto value = GENERATE(
|
||||||
|
ProgressCode::OK,
|
||||||
|
ProgressCode::EngagingIdler,
|
||||||
|
ProgressCode::DisengagingIdler,
|
||||||
|
ProgressCode::UnloadingToFinda,
|
||||||
|
ProgressCode::UnloadingToPulley,
|
||||||
|
ProgressCode::FeedingToFinda,
|
||||||
|
ProgressCode::FeedingToBondtech,
|
||||||
|
ProgressCode::AvoidingGrind,
|
||||||
|
ProgressCode::FinishingMoves,
|
||||||
|
ProgressCode::ERRDisengagingIdler,
|
||||||
|
ProgressCode::ERREngagingIdler,
|
||||||
|
ProgressCode::ERRWaitingForUser,
|
||||||
|
ProgressCode::ERRInternal,
|
||||||
|
ProgressCode::ERRHelpingFilament,
|
||||||
|
ProgressCode::ERRTMCFailed,
|
||||||
|
ProgressCode::UnloadingFilament,
|
||||||
|
ProgressCode::LoadingFilament,
|
||||||
|
ProgressCode::SelectingFilamentSlot,
|
||||||
|
ProgressCode::PreparingBlade,
|
||||||
|
ProgressCode::PushingFilament,
|
||||||
|
ProgressCode::PerformingCut,
|
||||||
|
ProgressCode::ReturningSelector,
|
||||||
|
ProgressCode::ParkingSelector,
|
||||||
|
ProgressCode::EjectingFilament);
|
||||||
|
|
||||||
std::array<uint8_t, 8> txbuff;
|
auto error = GENERATE(
|
||||||
uint8_t msglen = mp::Protocol::EncodeResponseQueryOperation(requestMsg, responseStatus, value, txbuff.data());
|
ErrorCode::RUNNING,
|
||||||
|
ErrorCode::OK,
|
||||||
|
ErrorCode::FINDA_DIDNT_SWITCH_ON,
|
||||||
|
ErrorCode::FINDA_DIDNT_SWITCH_OFF,
|
||||||
|
ErrorCode::FSENSOR_DIDNT_SWITCH_ON,
|
||||||
|
ErrorCode::FSENSOR_DIDNT_SWITCH_OFF,
|
||||||
|
ErrorCode::FILAMENT_ALREADY_LOADED,
|
||||||
|
ErrorCode::MMU_NOT_RESPONDING,
|
||||||
|
ErrorCode::INTERNAL,
|
||||||
|
ErrorCode::TMC_PULLEY_BIT,
|
||||||
|
ErrorCode::TMC_SELECTOR_BIT,
|
||||||
|
ErrorCode::TMC_IDLER_BIT,
|
||||||
|
ErrorCode::TMC_IOIN_MISMATCH,
|
||||||
|
ErrorCode::TMC_RESET,
|
||||||
|
ErrorCode::TMC_UNDERVOLTAGE_ON_CHARGE_PUMP,
|
||||||
|
ErrorCode::TMC_SHORT_TO_GROUND,
|
||||||
|
ErrorCode::TMC_OVER_TEMPERATURE_WARN,
|
||||||
|
ErrorCode::TMC_OVER_TEMPERATURE_ERROR);
|
||||||
|
|
||||||
CHECK(msglen <= 8);
|
std::array<uint8_t, 10> txbuff;
|
||||||
|
|
||||||
|
uint16_t encodedParamValue = responseStatus == mp::ResponseMsgParamCodes::Error ? (uint16_t)error : (uint16_t)value;
|
||||||
|
|
||||||
|
uint8_t msglen = mp::Protocol::EncodeResponseQueryOperation(requestMsg, responseStatus, encodedParamValue, txbuff.data());
|
||||||
|
|
||||||
|
CHECK(msglen <= txbuff.size());
|
||||||
CHECK(txbuff[0] == (uint8_t)requestMsg.code);
|
CHECK(txbuff[0] == (uint8_t)requestMsg.code);
|
||||||
CHECK(txbuff[1] == requestMsg.value + '0');
|
CHECK(txbuff[1] == requestMsg.value + '0');
|
||||||
CHECK(txbuff[2] == ' ');
|
CHECK(txbuff[2] == ' ');
|
||||||
|
|
@ -177,15 +226,26 @@ TEST_CASE("protocol::EncodeResponseQueryOperation", "[protocol]") {
|
||||||
CHECK(txbuff[4] == '\n');
|
CHECK(txbuff[4] == '\n');
|
||||||
CHECK(msglen == 5);
|
CHECK(msglen == 5);
|
||||||
} else {
|
} else {
|
||||||
if (value < 10) {
|
if (encodedParamValue < 10) {
|
||||||
CHECK(txbuff[4] == value + '0');
|
CHECK(txbuff[4] == encodedParamValue + '0');
|
||||||
} else if (value < 100) {
|
} else if (encodedParamValue < 100) {
|
||||||
CHECK(txbuff[4] == value / 10 + '0');
|
CHECK(txbuff[4] == encodedParamValue / 10 + '0');
|
||||||
CHECK(txbuff[5] == value % 10 + '0');
|
CHECK(txbuff[5] == encodedParamValue % 10 + '0');
|
||||||
|
} else if (encodedParamValue < 1000) {
|
||||||
|
CHECK(txbuff[4] == encodedParamValue / 100 + '0');
|
||||||
|
CHECK(txbuff[5] == (encodedParamValue / 10) % 10 + '0');
|
||||||
|
CHECK(txbuff[6] == encodedParamValue % 10 + '0');
|
||||||
|
} else if (encodedParamValue < 10000) {
|
||||||
|
CHECK(txbuff[4] == encodedParamValue / 1000 + '0');
|
||||||
|
CHECK(txbuff[5] == (encodedParamValue / 100) % 10 + '0');
|
||||||
|
CHECK(txbuff[6] == (encodedParamValue / 10) % 10 + '0');
|
||||||
|
CHECK(txbuff[7] == encodedParamValue % 10 + '0');
|
||||||
} else {
|
} else {
|
||||||
CHECK(txbuff[4] == value / 100 + '0');
|
CHECK(txbuff[4] == encodedParamValue / 10000 + '0');
|
||||||
CHECK(txbuff[5] == (value / 10) % 10 + '0');
|
CHECK(txbuff[5] == (encodedParamValue / 1000) % 10 + '0');
|
||||||
CHECK(txbuff[6] == value % 10 + '0');
|
CHECK(txbuff[6] == (encodedParamValue / 100) % 10 + '0');
|
||||||
|
CHECK(txbuff[7] == (encodedParamValue / 10) % 10 + '0');
|
||||||
|
CHECK(txbuff[8] == encodedParamValue % 10 + '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(txbuff[msglen - 1] == '\n');
|
CHECK(txbuff[msglen - 1] == '\n');
|
||||||
|
|
@ -262,7 +322,7 @@ TEST_CASE("protocol::DecodeResponseQueryOperation", "[protocol]") {
|
||||||
"E0", "E1", "E2", "E3", "E4",
|
"E0", "E1", "E2", "E3", "E4",
|
||||||
"K0",
|
"K0",
|
||||||
"L0", "L1", "L2", "L3", "L4",
|
"L0", "L1", "L2", "L3", "L4",
|
||||||
"T0", "T1", "T2", "T3",
|
"T0", "T1", "T2", "T3", "T4",
|
||||||
"U0",
|
"U0",
|
||||||
"W0");
|
"W0");
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue