Refactor TWI response system

- Avoid setting respondFlag in main, instead let it be managed directly
inside twiListen() and read inside twiRespond()
This commit is contained in:
2025-10-29 14:02:25 +01:00
parent 1721be5e66
commit b28b20f46a
2 changed files with 33 additions and 37 deletions
+1 -6
View File
@@ -11,7 +11,6 @@
volatile uint16_t lastMoistureVal = 0;
volatile uint16_t *pLastMoistureVal = &lastMoistureVal;
extern bool respondFlag;
ISR(TWI_vect) {
twiListen();
@@ -49,11 +48,7 @@ int main(void) {
*pLastMoistureVal = moistureRead();
// nested if: (result outside range (see config.h)) {waterPlant()}
if(respondFlag) {
twiRespond();
respondFlag = false;
}
twiRespond();
enterSleep();
}
+32 -31
View File
@@ -35,37 +35,38 @@ static void twiSendData(uint8_t data) {
}
void twiRespond(void) {
//FIXME: refactor this implementation
switch(twiBuffer[0]) {
case 0x01: // Send moisture
twiSendData(*pLastMoistureVal);
break;
case 0x02: // Get MOISTURE_MIN
twiSendData(eepromRead(MOISTURE_MIN));
break;
case 0x03: // Get MOISTURE_MAX
twiSendData(eepromRead(MOISTURE_MAX));
break;
case 0x04: // Set parameters
eepromWrite(MOISTURE_MIN, twiBuffer[1]);
eepromWrite(MOISTURE_MAX, twiBuffer[2]);
eepromWrite(SENSOR_READINGS, twiBuffer[3]);
twiSendAck();
break;
case 0x05: // Get SENSOR_READINGS
twiSendData(eepromRead(SENSOR_READINGS));
break;
case 0x06: // Set SENSOR_READINGS
eepromWrite(SENSOR_READINGS, twiBuffer[1]);
twiSendAck();
break;
case 0x07: // Force water plants (one pumping)
waterPlant();
twiSendAck();
break;
default:
twiSendNack();
break;
if(respondFlag) {
switch(twiBuffer[0]) {
case 0x01: // Send moisture
twiSendData(*pLastMoistureVal);
break;
case 0x02: // Get MOISTURE_MIN
twiSendData(eepromRead(MOISTURE_MIN));
break;
case 0x03: // Get MOISTURE_MAX
twiSendData(eepromRead(MOISTURE_MAX));
break;
case 0x04: // Set parameters
eepromWrite(MOISTURE_MIN, twiBuffer[1]);
eepromWrite(MOISTURE_MAX, twiBuffer[2]);
eepromWrite(SENSOR_READINGS, twiBuffer[3]);
twiSendAck();
break;
case 0x05: // Get SENSOR_READINGS
twiSendData(eepromRead(SENSOR_READINGS));
break;
case 0x06: // Set SENSOR_READINGS
eepromWrite(SENSOR_READINGS, twiBuffer[1]);
twiSendAck();
break;
case 0x07: // Force water plants (one pumping)
waterPlant();
twiSendAck();
break;
default:
twiSendNack();
break;
}
}
}