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 lastMoistureVal = 0;
volatile uint16_t *pLastMoistureVal = &lastMoistureVal; volatile uint16_t *pLastMoistureVal = &lastMoistureVal;
extern bool respondFlag;
ISR(TWI_vect) { ISR(TWI_vect) {
twiListen(); twiListen();
@@ -49,11 +48,7 @@ int main(void) {
*pLastMoistureVal = moistureRead(); *pLastMoistureVal = moistureRead();
// nested if: (result outside range (see config.h)) {waterPlant()} // nested if: (result outside range (see config.h)) {waterPlant()}
twiRespond();
if(respondFlag) {
twiRespond();
respondFlag = false;
}
enterSleep(); enterSleep();
} }
+32 -31
View File
@@ -35,37 +35,38 @@ static void twiSendData(uint8_t data) {
} }
void twiRespond(void) { void twiRespond(void) {
//FIXME: refactor this implementation if(respondFlag) {
switch(twiBuffer[0]) { switch(twiBuffer[0]) {
case 0x01: // Send moisture case 0x01: // Send moisture
twiSendData(*pLastMoistureVal); twiSendData(*pLastMoistureVal);
break; break;
case 0x02: // Get MOISTURE_MIN case 0x02: // Get MOISTURE_MIN
twiSendData(eepromRead(MOISTURE_MIN)); twiSendData(eepromRead(MOISTURE_MIN));
break; break;
case 0x03: // Get MOISTURE_MAX case 0x03: // Get MOISTURE_MAX
twiSendData(eepromRead(MOISTURE_MAX)); twiSendData(eepromRead(MOISTURE_MAX));
break; break;
case 0x04: // Set parameters case 0x04: // Set parameters
eepromWrite(MOISTURE_MIN, twiBuffer[1]); eepromWrite(MOISTURE_MIN, twiBuffer[1]);
eepromWrite(MOISTURE_MAX, twiBuffer[2]); eepromWrite(MOISTURE_MAX, twiBuffer[2]);
eepromWrite(SENSOR_READINGS, twiBuffer[3]); eepromWrite(SENSOR_READINGS, twiBuffer[3]);
twiSendAck(); twiSendAck();
break; break;
case 0x05: // Get SENSOR_READINGS case 0x05: // Get SENSOR_READINGS
twiSendData(eepromRead(SENSOR_READINGS)); twiSendData(eepromRead(SENSOR_READINGS));
break; break;
case 0x06: // Set SENSOR_READINGS case 0x06: // Set SENSOR_READINGS
eepromWrite(SENSOR_READINGS, twiBuffer[1]); eepromWrite(SENSOR_READINGS, twiBuffer[1]);
twiSendAck(); twiSendAck();
break; break;
case 0x07: // Force water plants (one pumping) case 0x07: // Force water plants (one pumping)
waterPlant(); waterPlant();
twiSendAck(); twiSendAck();
break; break;
default: default:
twiSendNack(); twiSendNack();
break; break;
}
} }
} }