Skip to content
Snippets Groups Projects
Commit cf7969fc authored by Cyril Danilevski's avatar Cyril Danilevski :scooter:
Browse files

Add setChannelAndWait

parent a089192e
No related branches found
No related tags found
No related merge requests found
...@@ -190,3 +190,26 @@ void initializeSNMP() { ...@@ -190,3 +190,26 @@ void initializeSNMP() {
snmp.onMessage(onMessage); snmp.onMessage(onMessage);
Serial.println("SNMP Server Started"); Serial.println("SNMP Server Started");
} }
/* setChannelAndWait
* Set a channel's parameters and wait until it's settled.
*/
void setChannelAndWait(IPAddress *ipAddr, uint16_t channel, uint8_t output) {
// Send set command
SNMP::Message *snmp_msg = mpod.output(channel, output);
snmp.send(snmp_msg, *ipAddr, SNMP::Port::SNMP);
delete snmp_msg;
// wait for channel reply
delay(MPOD_UPDATE_LATENCY);
snmp.loop();
// Poll channel until it's settled
do {
SNMP::Message *snmp_msg = mpod.read(channel);
snmp.send(snmp_msg, *ipAddr, SNMP::Port::SNMP);
delete snmp_msg;
delay(MPOD_UPDATE_LATENCY);
snmp.loop();
} while (mpod.isOn() != (bool)output || mpod.isRampingDown() || mpod.isRampingUp());
}
...@@ -95,4 +95,5 @@ extern MPOD mpod; ...@@ -95,4 +95,5 @@ extern MPOD mpod;
// Event handler to process SNMP messages // Event handler to process SNMP messages
void onSNMPMessage(const SNMP::Message *message, const IPAddress remote, const uint16_t port); void onSNMPMessage(const SNMP::Message *message, const IPAddress remote, const uint16_t port);
void initializeSNMP(); void initializeSNMP();
void setChannelAndWait(IPAddress*, uint16_t, uint8_t);
...@@ -117,9 +117,9 @@ void restart() { ...@@ -117,9 +117,9 @@ void restart() {
} }
enum { enum {
OFF, OFF = 0,
ON, ON = 1,
NONE, NONE = -1,
}; };
void sendSNMP() { void sendSNMP() {
...@@ -140,17 +140,10 @@ void sendSNMP() { ...@@ -140,17 +140,10 @@ void sendSNMP() {
} }
auto ipAddr = IPAddress(192, 168, 140, 79); auto ipAddr = IPAddress(192, 168, 140, 79);
if (output != NONE && channel != 0) {
SNMP::Message *snmp_msg = mpod.output(channel, output);
snmp.send(snmp_msg, ipAddr, SNMP::Port::SNMP);
delete snmp_msg;
success = true;
}
if (success) { if (output != NONE && channel != 0) {
SNMP::Message *snmp_msg = mpod.read(channel); setChannelAndWait(&ipAddr, channel, output);
snmp.send(snmp_msg, ipAddr, SNMP::Port::SNMP); success = true; // validates input parameters, not MPOD status, reported separately
delete snmp_msg;
} }
String http_msg = "{\n"; String http_msg = "{\n";
...@@ -186,7 +179,11 @@ void pollMPODChannel() { ...@@ -186,7 +179,11 @@ void pollMPODChannel() {
SNMP::Message *snmp_msg = mpod.read(channel); SNMP::Message *snmp_msg = mpod.read(channel);
snmp.send(snmp_msg, ipAddr, SNMP::Port::SNMP); snmp.send(snmp_msg, ipAddr, SNMP::Port::SNMP);
delete snmp_msg; delete snmp_msg;
ret = mpod.toJSON(); // TODO: This has stale info at this stage!
delay(MPOD_UPDATE_LATENCY);
snmp.loop(); // Force loop to update now
ret = mpod.toJSON();
} }
String http_msg = "{\n"; String http_msg = "{\n";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment