mirror of
https://github.com/meshtastic/firmware.git
synced 2025-09-06 19:49:19 +00:00
Add one-shot mode config flag to SEN5X
This commit is contained in:
parent
7d1deaf4ce
commit
c321312e10
@ -238,6 +238,11 @@ bool SEN5XSensor::idle()
|
|||||||
vocValid = false;
|
vocValid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!oneShotMode) {
|
||||||
|
LOG_INFO("SEN5X: Not stopping measurement, continuous mode!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!sendCommand(SEN5X_STOP_MEASUREMENT)) {
|
if (!sendCommand(SEN5X_STOP_MEASUREMENT)) {
|
||||||
LOG_ERROR("SEN5X: Error stoping measurement");
|
LOG_ERROR("SEN5X: Error stoping measurement");
|
||||||
return false;
|
return false;
|
||||||
@ -336,6 +341,7 @@ bool SEN5XSensor::loadState()
|
|||||||
} else {
|
} else {
|
||||||
lastCleaning = sen5xstate.last_cleaning_time;
|
lastCleaning = sen5xstate.last_cleaning_time;
|
||||||
lastCleaningValid = sen5xstate.last_cleaning_valid;
|
lastCleaningValid = sen5xstate.last_cleaning_valid;
|
||||||
|
oneShotMode = sen5xstate.one_shot_mode;
|
||||||
// Unpack state
|
// Unpack state
|
||||||
vocState[7] = (uint8_t)(sen5xstate.voc_state >> 56);
|
vocState[7] = (uint8_t)(sen5xstate.voc_state >> 56);
|
||||||
vocState[6] = (uint8_t)(sen5xstate.voc_state >> 48);
|
vocState[6] = (uint8_t)(sen5xstate.voc_state >> 48);
|
||||||
@ -370,6 +376,7 @@ bool SEN5XSensor::saveState()
|
|||||||
|
|
||||||
sen5xstate.last_cleaning_time = lastCleaning;
|
sen5xstate.last_cleaning_time = lastCleaning;
|
||||||
sen5xstate.last_cleaning_valid = lastCleaningValid;
|
sen5xstate.last_cleaning_valid = lastCleaningValid;
|
||||||
|
sen5xstate.one_shot_mode = oneShotMode;
|
||||||
|
|
||||||
// Unpack state (12 bytes in two parts)
|
// Unpack state (12 bytes in two parts)
|
||||||
sen5xstate.voc_state = ((uint64_t) vocState[7] << 56) |
|
sen5xstate.voc_state = ((uint64_t) vocState[7] << 56) |
|
||||||
@ -869,32 +876,41 @@ bool SEN5XSensor::getMetrics(meshtastic_Telemetry *measurement)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SEN5XSensor::setMode(bool setOneShot) {
|
||||||
|
oneShotMode = setOneShot;
|
||||||
|
}
|
||||||
|
|
||||||
AdminMessageHandleResult SEN5XSensor::handleAdminMessage(const meshtastic_MeshPacket &mp, meshtastic_AdminMessage *request,
|
AdminMessageHandleResult SEN5XSensor::handleAdminMessage(const meshtastic_MeshPacket &mp, meshtastic_AdminMessage *request,
|
||||||
meshtastic_AdminMessage *response)
|
meshtastic_AdminMessage *response)
|
||||||
{
|
{
|
||||||
AdminMessageHandleResult result;
|
AdminMessageHandleResult result;
|
||||||
result = AdminMessageHandleResult::NOT_HANDLED;
|
result = AdminMessageHandleResult::NOT_HANDLED;
|
||||||
|
|
||||||
// TODO - Add admin command to set temperature offset
|
|
||||||
// switch (request->which_payload_variant) {
|
|
||||||
// case meshtastic_AdminMessage_sensor_config_tag:
|
|
||||||
// if (!request->sensor_config.has_sen5x_config) {
|
|
||||||
// result = AdminMessageHandleResult::NOT_HANDLED;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Check for temperature offset
|
switch (request->which_payload_variant) {
|
||||||
// // if (request->sensor_config.sen5x_config.has_set_temperature) {
|
case meshtastic_AdminMessage_sensor_config_tag:
|
||||||
// // this->setTemperature(request->sensor_config.sen5x_config.set_temperature);
|
if (!request->sensor_config.has_sen5x_config) {
|
||||||
// // }
|
result = AdminMessageHandleResult::NOT_HANDLED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// // result = AdminMessageHandleResult::HANDLED;
|
// TODO - Add admin command to set temperature offset
|
||||||
// result = AdminMessageHandleResult::NOT_HANDLED;
|
// Check for temperature offset
|
||||||
// break;
|
// if (request->sensor_config.sen5x_config.has_set_temperature) {
|
||||||
|
// this->setTemperature(request->sensor_config.sen5x_config.set_temperature);
|
||||||
|
// }
|
||||||
|
|
||||||
// default:
|
// Check for one-shot/continuous mode request
|
||||||
// result = AdminMessageHandleResult::NOT_HANDLED;
|
if (request->sensor_config.sen5x_config.has_set_one_shot_mode) {
|
||||||
// }
|
this->setMode(request->sensor_config.sen5x_config.set_one_shot_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = AdminMessageHandleResult::HANDLED;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
result = AdminMessageHandleResult::NOT_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -74,9 +74,9 @@ class SEN5XSensor : public TelemetrySensor
|
|||||||
|
|
||||||
enum SEN5XState { SEN5X_OFF, SEN5X_IDLE, SEN5X_MEASUREMENT, SEN5X_MEASUREMENT_2, SEN5X_CLEANING, SEN5X_NOT_DETECTED };
|
enum SEN5XState { SEN5X_OFF, SEN5X_IDLE, SEN5X_MEASUREMENT, SEN5X_MEASUREMENT_2, SEN5X_CLEANING, SEN5X_NOT_DETECTED };
|
||||||
SEN5XState state = SEN5X_OFF;
|
SEN5XState state = SEN5X_OFF;
|
||||||
// TODO - Remove
|
// Flag to work on one-shot (read and sleep), or continuous mode
|
||||||
bool continousMode = false;
|
bool oneShotMode = true;
|
||||||
bool forcedContinousMode = false;
|
void setMode(bool setOneShot);
|
||||||
|
|
||||||
bool sendCommand(uint16_t wichCommand);
|
bool sendCommand(uint16_t wichCommand);
|
||||||
bool sendCommand(uint16_t wichCommand, uint8_t* buffer, uint8_t byteNumber=0);
|
bool sendCommand(uint16_t wichCommand, uint8_t* buffer, uint8_t byteNumber=0);
|
||||||
|
Loading…
Reference in New Issue
Block a user