diff --git a/QueueLib.h b/QueueLib.h new file mode 100644 index 0000000..7b695e6 --- /dev/null +++ b/QueueLib.h @@ -0,0 +1,35 @@ +// Queue Access Library +// 081723 DS + +#ifndef QueueLib + +#define QueueLib + +// queue for incoming at200 data.. outgoing to cloud 18 byte record +#define at_QSIZ 500 + +typedef struct AT200Q +{ + uint32_t serial; + uint8_t chan; + uint8_t batt; + uint8_t type; + uint8_t stat; + uint16_t ver; + uint16_t rssi; + uint16_t data; + uint32_t etime; +}; + +AT200Q at_QTempData; + +uint8_t QueueLibVB = 0; // if = 1, turn on Serial prints + +// Function Prototypes +void atQ_push(void); +void atQ_pull_FIFO(void); +void atQ_pull_LIFO(void); +uint16_t atQ_size(void); +void atQ_flush(void); + +#endif diff --git a/QueueLib.ino b/QueueLib.ino new file mode 100644 index 0000000..7937d10 --- /dev/null +++ b/QueueLib.ino @@ -0,0 +1,116 @@ +// Queue Access Library +// 081723 DS + +#include "QueueLib.h" + +AT200Q at_Q[at_QSIZ]; +uint16_t at_Qhead = 0; +uint16_t at_Qtail = 0; + +//******************************************************* +// +//******************************************************* + +void atQ_push(void) // load tempdata struct first.. pointer sits on next one to add +{ + /* + at_Q[at_Qhead].serial = at_QTempData.serial; + at_Q[at_Qhead].chan = at_QTempData.chan; + at_Q[at_Qhead].type = at_QTempData.type; + at_Q[at_Qhead].stat = at_QTempData.stat; + at_Q[at_Qhead].ver = at_QTempData.ver; + at_Q[at_Qhead].rssi = at_QTempData.rssi; + at_Q[at_Qhead].data = at_QTempData.data; + at_Q[at_Qhead].etime = getEpochRtc(); + */ + + at_Q[at_Qhead] = at_QTempData; + + if (++at_Qhead >= at_QSIZ) + at_Qhead = 0; // if at end then wrap + + if (at_Qhead == at_Qtail) + at_Qtail++; // if hit other pointer then we full + if (at_Qtail == at_QSIZ) + at_Qtail = 0; // if at end then wrap + + if (QueueLibVB) + Serial.printf("Qsize %d\n", atQ_size()); +} + +//******************************************************* +// +//******************************************************* + +void atQ_pull_FIFO(void) // dumps into tempdata struct pointer sits on next on to pull +{ + /* + at_QTempData.serial = at_Q[at_Qtail].serial; + at_QTempData.type = at_Q[at_Qtail].type; + at_QTempData.stat = at_Q[at_Qtail].stat; + at_QTempData.chan = at_Q[at_Qtail].chan; + at_QTempData.ver = at_Q[at_Qtail].ver; + at_QTempData.rssi = at_Q[at_Qtail].rssi; + at_QTempData.data = at_Q[at_Qtail].data; + at_QTempData.etime = at_Q[at_Qtail].etime; + */ + + at_QTempData = at_Q[at_Qtail]; + + if (++at_Qtail == at_QSIZ) + at_Qtail = 0; // if at end then wrap +} + +//******************************************************* +// +//******************************************************* + +void atQ_pull_LIFO(void) // dumps into tempdata struct pointer sits on next on to pull +{ + if (at_Qhead == at_Qtail) + return; + + // must have wraped on last push + if (at_Qhead == 0) + at_Qhead = (at_QSIZ - 1); + else + at_Qhead--; + + at_QTempData = at_Q[at_Qhead]; // copy it + + /* + at_QTempData.serial = at_Q[at_Qhead].serial; + at_QTempData.type = at_Q[at_Qhead].type; + at_QTempData.stat = at_Q[at_Qhead].stat; + at_QTempData.chan = at_Q[at_Qhead].chan; + at_QTempData.ver = at_Q[at_Qhead].ver; + at_QTempData.rssi = at_Q[at_Qhead].rssi; + at_QTempData.data = at_Q[at_Qhead].data; + at_QTempData.etime = at_Q[at_Qhead].etime; + */ + + if (QueueLibVB) + Serial.printf("PULL LIFO : H: %d T: %d\n", at_Qhead, at_Qtail); +} + +//******************************************************* +// +//******************************************************* + +uint16_t atQ_size(void) +{ + if (at_Qhead >= at_Qtail) + return (at_Qhead - at_Qtail); + else + return ((at_QSIZ - at_Qtail) + at_Qhead); +} + +//******************************************************* +// +//******************************************************* + +void atQ_flush(void) +{ + memset(at_Q, 0, sizeof(at_Q)); + at_Qhead = at_Qtail = 0; +} diff --git a/Queue_ADI.h b/Queue_ADI.h new file mode 100644 index 0000000..a4b74ae --- /dev/null +++ b/Queue_ADI.h @@ -0,0 +1,23 @@ +#ifndef Queue_ADI + +#define Queue_ADI + +//queue for incoming at200 data.. outgoing to cloud 18 byte record +#define at_QSIZ 500 +struct AT200Q +{ + long serial; + byte chan; + byte batt; + byte type; + byte stat; + int ver; + int rssi; + int data; + uint32_t etime; +} at_Q[at_QSIZ], at_Qtempdata; + +int at_Qhead = 0; +int at_Qtail = 0; + +#endif diff --git a/Queue_ADI.ino b/Queue_ADI.ino new file mode 100644 index 0000000..c7f648b --- /dev/null +++ b/Queue_ADI.ino @@ -0,0 +1,93 @@ +#include "QueueLib.h" +// Project specific Queue access functions + +void pushCheckin(void) +{ + at_QTempData.serial = parm[64]; + at_QTempData.chan = 0; + at_QTempData.ver = parm[14]; + at_QTempData.type = 35; + at_QTempData.rssi = getWifiRSSI(); + at_QTempData.data = (int)(voltageNow * 100); + at_QTempData.etime = getEpochRtc(); + + Serial.println("Pushing Voltage to Queue"); + atQ_push(); +} + +void pushDoorStatus(void) +{ + at_QTempData.ver = parm[14]; + at_QTempData.serial = parm[64]; + at_QTempData.chan = 1; + at_QTempData.type = 51; + at_QTempData.rssi = getWifiRSSI(); + at_QTempData.data = doorState; + at_QTempData.etime = getEpochRtc(); + + Serial.println("Push Door Status to Queue"); + atQ_push(); + + at_QTempData.ver = parm[14]; + at_QTempData.serial = parm[64]; + at_QTempData.chan = 2; + at_QTempData.type = 47; + at_QTempData.rssi = getWifiRSSI(); + at_QTempData.data = motorGetPosition(0); + at_QTempData.etime = getEpochRtc(); + + Serial.println("Push Master Door Position to Queue"); + atQ_push(); + + at_QTempData.ver = parm[14]; + at_QTempData.serial = parm[64]; + at_QTempData.chan = 3; + at_QTempData.type = 47; + at_QTempData.rssi = getWifiRSSI(); + at_QTempData.data = motorGetPosition(1); + at_QTempData.etime = getEpochRtc(); + + Serial.println("Push Slave Door Position to Queue"); + atQ_push(); + + // pushCheckin(); +} + +void pushNTP(uint32_t ep) // for testing to see how often NTP gets through +{ + at_QTempData.ver = parm[14]; + at_QTempData.serial = parm[64]; + at_QTempData.chan = 99; + at_QTempData.type = 53; + at_QTempData.rssi = getWifiRSSI(); + at_QTempData.data = ep; + at_QTempData.etime = getEpochRtc(); + + Serial.println("Push NTP to Queue"); + atQ_push(); +} + +void pushMaxCurrents(void) +{ + at_QTempData.ver = parm[14]; + at_QTempData.serial = parm[64]; + at_QTempData.chan = 4; + at_QTempData.type = 47; + at_QTempData.rssi = getWifiRSSI(); + at_QTempData.data = getMaxCurrent(0); + at_QTempData.etime = getEpochRtc(); + + Serial.println("Push Max Current 0"); + atQ_push(); + + at_QTempData.ver = parm[14]; + at_QTempData.serial = parm[64]; + at_QTempData.chan = 5; + at_QTempData.type = 47; + at_QTempData.rssi = getWifiRSSI(); + at_QTempData.data = getMaxCurrent(1); + at_QTempData.etime = getEpochRtc(); + + Serial.println("Push Max Current 1"); + atQ_push(); +} diff --git a/RF.h b/RF.h new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/RF.h @@ -0,0 +1 @@ +