From 8953f6f60d90411319c8d26499954d560d3f2e33 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 21 Feb 2022 15:28:33 +0100 Subject: [PATCH] added adc and temp handling --- mission/devices/PayloadPcduHandler.cpp | 26 ++++++++------- mission/devices/PayloadPcduHandler.h | 13 +------- .../payloadPcduDefinitions.h | 33 +++++-------------- 3 files changed, 23 insertions(+), 49 deletions(-) diff --git a/mission/devices/PayloadPcduHandler.cpp b/mission/devices/PayloadPcduHandler.cpp index 35551eba..980439d1 100644 --- a/mission/devices/PayloadPcduHandler.cpp +++ b/mission/devices/PayloadPcduHandler.cpp @@ -1,3 +1,4 @@ +#include #include "PayloadPcduHandler.h" #include "devices/gpioIds.h" @@ -216,6 +217,18 @@ ReturnValue_t PayloadPcduHandler::interpretDeviceReply(DeviceCommandId_t id, case(SETUP_CMD): { break; } + case(READ_WITH_TEMP): { + PoolReadGuard pg(&adcSet); + if(pg.getReadResult() != HasReturnvaluesIF::RETURN_OK) { + return pg.getReadResult(); + } + for(uint8_t idx = 0; idx < 12; idx ++) { + adcSet.channels[idx] = packet[idx * 2 + 1] << 8 | packet[idx * 2 + 2]; + } + uint8_t tempStartIdx = ADC_REPLY_SIZE + TEMP_REPLY_SIZE - 2; + adcSet.tempC.value = max1227::getTemperature(packet[tempStartIdx] << 8 | packet[tempStartIdx + 2]); + } + } return HasReturnvaluesIF::RETURN_OK; } @@ -227,18 +240,7 @@ uint32_t PayloadPcduHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo ReturnValue_t PayloadPcduHandler::initializeLocalDataPool(localpool::DataPool& localDataPoolMap, LocalDataPoolManager& poolManager) { - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_0, &ain0); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_1, &ain1); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_2, &ain2); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_3, &ain3); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_4, &ain4); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_5, &ain5); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_6, &ain6); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_7, &ain7); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_8, &ain8); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_9, &ain9); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_10, &ain10); - localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::AIN_11, &ain11); + localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::CHANNEL_VEC, &channelValues); localDataPoolMap.emplace(plpcdu::PlPcduPoolIds::TEMP, &tempC); return HasReturnvaluesIF::RETURN_OK; } diff --git a/mission/devices/PayloadPcduHandler.h b/mission/devices/PayloadPcduHandler.h index 4f99cc1a..64b71be4 100644 --- a/mission/devices/PayloadPcduHandler.h +++ b/mission/devices/PayloadPcduHandler.h @@ -62,18 +62,7 @@ class PayloadPcduHandler : DeviceHandlerBase { Countdown adcCountdown = Countdown(50); GpioIF* gpioIF; - PoolEntry ain0 = PoolEntry({0}); - PoolEntry ain1 = PoolEntry({0}); - PoolEntry ain2 = PoolEntry({0}); - PoolEntry ain3 = PoolEntry({0}); - PoolEntry ain4 = PoolEntry({0}); - PoolEntry ain5 = PoolEntry({0}); - PoolEntry ain6 = PoolEntry({0}); - PoolEntry ain7 = PoolEntry({0}); - PoolEntry ain8 = PoolEntry({0}); - PoolEntry ain9 = PoolEntry({0}); - PoolEntry ain10 = PoolEntry({0}); - PoolEntry ain11 = PoolEntry({0}); + PoolEntry channelValues = PoolEntry({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); PoolEntry tempC = PoolEntry({0.0}); void doTransition(Mode_t modeFrom, Submode_t subModeFrom) override; diff --git a/mission/devices/devicedefinitions/payloadPcduDefinitions.h b/mission/devices/devicedefinitions/payloadPcduDefinitions.h index 22e7b504..9029fad7 100644 --- a/mission/devices/devicedefinitions/payloadPcduDefinitions.h +++ b/mission/devices/devicedefinitions/payloadPcduDefinitions.h @@ -11,19 +11,8 @@ namespace plpcdu { using namespace max1227; enum PlPcduPoolIds: uint32_t { - AIN_0 = 0, - AIN_1 = 1, - AIN_2 = 2, - AIN_3 = 3, - AIN_4 = 4, - AIN_5 = 5, - AIN_6 = 6, - AIN_7 = 7, - AIN_8 = 8, - AIN_9 = 9, - AIN_10 = 10, - AIN_11 = 11, - TEMP = 12 + CHANNEL_VEC = 0, + TEMP = 1 }; static constexpr size_t MAX_ADC_REPLY_SIZE = 64; @@ -33,6 +22,11 @@ static constexpr DeviceCommandId_t SETUP_CMD = 1; static constexpr DeviceCommandId_t READ_TEMP = 2; static constexpr DeviceCommandId_t READ_WITH_TEMP = 3; +// 12 ADC values * 2 + trailing zero +static constexpr size_t ADC_REPLY_SIZE = 25; +// Conversion byte + 24 * zero +static constexpr size_t TEMP_REPLY_SIZE = 25; + static constexpr uint8_t SETUP_BYTE = max1227::buildSetupByte(ClkSel::EXT_CONV_EXT_TIMED, RefSel::INT_REF_NO_WAKEUP, DiffSel::NONE_0); @@ -49,18 +43,7 @@ class PlPcduAdcSet : public StaticLocalDataSet { PlPcduAdcSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, ADC_SET_ID)) {} - lp_var_t ain0 = lp_var_t(sid.objectId, AIN_0, this); - lp_var_t ain1 = lp_var_t(sid.objectId, AIN_1, this); - lp_var_t ain2= lp_var_t(sid.objectId, AIN_2, this); - lp_var_t ain3 = lp_var_t(sid.objectId, AIN_3, this); - lp_var_t ain4 = lp_var_t(sid.objectId, AIN_4, this); - lp_var_t ain5 = lp_var_t(sid.objectId, AIN_5, this); - lp_var_t ain6 = lp_var_t(sid.objectId, AIN_6, this); - lp_var_t ain7 = lp_var_t(sid.objectId, AIN_7, this); - lp_var_t ain8 = lp_var_t(sid.objectId, AIN_8, this); - lp_var_t ain9 = lp_var_t(sid.objectId, AIN_9, this); - lp_var_t ain10 = lp_var_t(sid.objectId, AIN_10, this); - lp_var_t ain11 = lp_var_t(sid.objectId, AIN_11, this); + lp_vec_t channels = lp_vec_t(sid.objectId, CHANNEL_VEC, this); lp_var_t tempC = lp_var_t(sid.objectId, TEMP, this); };