mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-02-01 22:51:58 +00:00
Add HAN pullup config and mosquito board
This commit is contained in:
@@ -563,7 +563,7 @@ void loop() {
|
||||
|
||||
if(config.isMeterChanged()) {
|
||||
config.getMeterConfig(meterConfig);
|
||||
setupHanPort(gpioConfig.hanPin, meterConfig.baud, meterConfig.parity, meterConfig.invert);
|
||||
setupHanPort(gpioConfig, meterConfig.baud, meterConfig.parity, meterConfig.invert);
|
||||
config.ackMeterChanged();
|
||||
delete gcmParser;
|
||||
gcmParser = NULL;
|
||||
@@ -606,7 +606,7 @@ void loop() {
|
||||
meterAutoIndex++; // Default is to try the first one in setup()
|
||||
debugI("Meter serial autodetect, swapping to: %d, %d, %s", bauds[meterAutoIndex], parities[meterAutoIndex], inverts[meterAutoIndex] ? "true" : "false");
|
||||
if(meterAutoIndex >= 4) meterAutoIndex = 0;
|
||||
setupHanPort(gpioConfig.hanPin, bauds[meterAutoIndex], parities[meterAutoIndex], inverts[meterAutoIndex]);
|
||||
setupHanPort(gpioConfig, bauds[meterAutoIndex], parities[meterAutoIndex], inverts[meterAutoIndex]);
|
||||
meterAutodetectLastChange = now;
|
||||
}
|
||||
} else if(meterAutodetect) {
|
||||
@@ -616,7 +616,7 @@ void loop() {
|
||||
meterConfig.parity = parities[meterAutoIndex];
|
||||
meterConfig.invert = inverts[meterAutoIndex];
|
||||
config.setMeterConfig(meterConfig);
|
||||
setupHanPort(gpioConfig.hanPin, meterConfig.baud, meterConfig.parity, meterConfig.invert);
|
||||
setupHanPort(gpioConfig, meterConfig.baud, meterConfig.parity, meterConfig.invert);
|
||||
}
|
||||
} catch(const std::exception& e) {
|
||||
debugE("Exception in meter autodetect (%s)", e.what());
|
||||
@@ -631,7 +631,9 @@ void loop() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void setupHanPort(uint8_t pin, uint32_t baud, uint8_t parityOrdinal, bool invert) {
|
||||
void setupHanPort(GpioConfig& gpioConfig, uint32_t baud, uint8_t parityOrdinal, bool invert) {
|
||||
uint8_t pin = gpioConfig.hanPin;
|
||||
|
||||
if(Debug.isActive(RemoteDebug::INFO)) Debug.printf((char*) F("(setupHanPort) Setting up HAN on pin %d with baud %d and parity %d\n"), pin, baud, parityOrdinal);
|
||||
|
||||
if(baud == 0) {
|
||||
@@ -643,6 +645,14 @@ void setupHanPort(uint8_t pin, uint32_t baud, uint8_t parityOrdinal, bool invert
|
||||
parityOrdinal = 3; // 8N1
|
||||
}
|
||||
|
||||
SystemConfig sys;
|
||||
config.getSystemConfig(sys);
|
||||
switch(sys.boardType) {
|
||||
case 8: // HAN mosquito: has inverting level shifter
|
||||
invert = !invert;
|
||||
break;
|
||||
}
|
||||
|
||||
HardwareSerial *hwSerial = NULL;
|
||||
if(pin == 3 || pin == 113) {
|
||||
hwSerial = &Serial;
|
||||
@@ -742,6 +752,11 @@ void setupHanPort(uint8_t pin, uint32_t baud, uint8_t parityOrdinal, bool invert
|
||||
Serial.begin(115200);
|
||||
}
|
||||
|
||||
// The library automatically sets the pullup in Serial.begin()
|
||||
if(!gpioConfig.hanPinPullup) {
|
||||
pinMode(gpioConfig.hanPin, INPUT);
|
||||
}
|
||||
|
||||
// Empty buffer before starting
|
||||
while (hanSerial->available() > 0) {
|
||||
hanSerial->read();
|
||||
@@ -1602,6 +1617,9 @@ void configFileParse() {
|
||||
} else if(strncmp_P(buf, PSTR("gpioHanPin "), 11) == 0) {
|
||||
if(!lGpio) { config.getGpioConfig(gpio); lGpio = true; };
|
||||
gpio.hanPin = String(buf+11).toInt();
|
||||
} else if(strncmp_P(buf, PSTR("gpioHanPinPullup "), 17) == 0) {
|
||||
if(!lGpio) { config.getGpioConfig(gpio); lGpio = true; };
|
||||
gpio.hanPinPullup = String(buf+17).toInt() == 1;
|
||||
} else if(strncmp_P(buf, PSTR("gpioApPin "), 10) == 0) {
|
||||
if(!lGpio) { config.getGpioConfig(gpio); lGpio = true; };
|
||||
gpio.apPin = String(buf+10).toInt();
|
||||
|
||||
Reference in New Issue
Block a user