diff --git a/aqhome/mqtt/endpoint_mqttc.c b/aqhome/mqtt/endpoint_mqttc.c index c30853a..221a0bf 100644 --- a/aqhome/mqtt/endpoint_mqttc.c +++ b/aqhome/mqtt/endpoint_mqttc.c @@ -297,21 +297,21 @@ void _processSendStatsMessage(GWEN_MSG_ENDPOINT *ep, GWEN_MSG *nodeMsg) if (packetsOutInt) { double packetsOut; double collisions; - double aborted; + double busy; double collisionsPercentage=0.0; - double abortedPercentage=0.0; + double busyPercentage=0.0; packetsOut=(double) packetsOutInt; collisions=(double)AQH_SendStatsMsg_GetCollisions(nodeMsg); - aborted=(double)AQH_SendStatsMsg_GetAborted(nodeMsg); + busy=(double)AQH_SendStatsMsg_GetBusyErrors(nodeMsg); collisionsPercentage=collisions*100.0/packetsOut; - abortedPercentage=aborted*100.0/packetsOut; + busyPercentage=busy*100.0/packetsOut; _publishInt(ep, AQH_SendStatsMsg_GetUid(nodeMsg), 0, "net/packetsOut", packetsOutInt); _publishInt(ep, AQH_SendStatsMsg_GetUid(nodeMsg), 0, "net/collisions", (int) AQH_SendStatsMsg_GetCollisions(nodeMsg)); _publishDouble(ep, AQH_SendStatsMsg_GetUid(nodeMsg), 0, "net/collisionsPercent", collisionsPercentage); - _publishDouble(ep, AQH_SendStatsMsg_GetUid(nodeMsg), 0, "net/abortedPercent", abortedPercentage); + _publishDouble(ep, AQH_SendStatsMsg_GetUid(nodeMsg), 0, "net/busyPercent", busyPercentage); } } diff --git a/aqhome/msg/msg_sendstats.c b/aqhome/msg/msg_sendstats.c index 3f86f97..7cc184d 100644 --- a/aqhome/msg/msg_sendstats.c +++ b/aqhome/msg/msg_sendstats.c @@ -18,13 +18,12 @@ #include -#define AQH_MSG_OFFS_SENDSTATS_UID 0 -#define AQH_MSG_OFFS_SENDSTATS_PACKETSOUT 4 -#define AQH_MSG_OFFS_SENDSTATS_COLLISIONS 6 -#define AQH_MSG_OFFS_SENDSTATS_ABORTED 8 -#define AQH_MSG_OFFS_SENDSTATS_NOBUFFER 10 +#define AQH_MSG_OFFS_SENDSTATS_UID 0 /* 4 bytes */ +#define AQH_MSG_OFFS_SENDSTATS_PACKETSOUT 4 /* 2 bytes */ +#define AQH_MSG_OFFS_SENDSTATS_COLLISIONS 6 /* 2 bytes */ +#define AQH_MSG_OFFS_SENDSTATS_BUSY 8 /* 2 bytes */ -#define AQH_MSG_SENDSTATS_MINSIZE (AQH_MSG_OFFS_ALL_DATA_BEGIN+AQH_MSG_OFFS_SENDSTATS_ABORTED+2) +#define AQH_MSG_SENDSTATS_MINSIZE (AQH_MSG_OFFS_ALL_DATA_BEGIN+AQH_MSG_OFFS_SENDSTATS_BUSY+2) @@ -49,16 +48,9 @@ uint16_t AQH_SendStatsMsg_GetCollisions(const GWEN_MSG *msg) -uint16_t AQH_SendStatsMsg_GetAborted(const GWEN_MSG *msg) +uint16_t AQH_SendStatsMsg_GetBusyErrors(const GWEN_MSG *msg) { - return AQH_NodeMsg_GetUint16At(msg, AQH_MSG_OFFS_ALL_DATA_BEGIN+AQH_MSG_OFFS_SENDSTATS_ABORTED, 0); -} - - - -uint16_t AQH_SendStatsMsg_GetNoBufferErrors(const GWEN_MSG *msg) -{ - return AQH_NodeMsg_GetUint16At(msg, AQH_MSG_OFFS_ALL_DATA_BEGIN+AQH_MSG_OFFS_SENDSTATS_NOBUFFER, 0); + return AQH_NodeMsg_GetUint16At(msg, AQH_MSG_OFFS_ALL_DATA_BEGIN+AQH_MSG_OFFS_SENDSTATS_BUSY, 0); } @@ -68,15 +60,14 @@ void AQH_SendStatsMsg_DumpToBuffer(const GWEN_MSG *msg, GWEN_BUFFER *dbuf, const if ((AQH_NodeMsg_GetMsgType(msg)==AQH_MSG_TYPE_COMSENDSTATS) && (GWEN_Msg_GetBytesInBuffer(msg)>=AQH_MSG_SENDSTATS_MINSIZE)) { GWEN_Buffer_AppendArgs(dbuf, - "0x%02x->0x%02x: SENDSTATS %s (uid=0x%08x, out=%d, collisions=%d, aborted=%d, no buffer=%d)\n", + "0x%02x->0x%02x: SENDSTATS %s (uid=0x%08x, out=%d, collisions=%d, busy line=%d)\n", AQH_NodeMsg_GetSourceAddress(msg), AQH_NodeMsg_GetDestAddress(msg), sText, (unsigned int) AQH_SendStatsMsg_GetUid(msg), AQH_SendStatsMsg_GetPacketsOut(msg), AQH_SendStatsMsg_GetCollisions(msg), - AQH_SendStatsMsg_GetAborted(msg), - AQH_SendStatsMsg_GetNoBufferErrors(msg)); + AQH_SendStatsMsg_GetBusyErrors(msg)); } } diff --git a/aqhome/msg/msg_sendstats.h b/aqhome/msg/msg_sendstats.h index 2b4a33b..96de04a 100644 --- a/aqhome/msg/msg_sendstats.h +++ b/aqhome/msg/msg_sendstats.h @@ -21,8 +21,7 @@ AQHOME_API uint32_t AQH_SendStatsMsg_GetUid(const GWEN_MSG *msg); AQHOME_API uint16_t AQH_SendStatsMsg_GetPacketsOut(const GWEN_MSG *msg); AQHOME_API uint16_t AQH_SendStatsMsg_GetCollisions(const GWEN_MSG *msg); -AQHOME_API uint16_t AQH_SendStatsMsg_GetAborted(const GWEN_MSG *msg); -AQHOME_API uint16_t AQH_SendStatsMsg_GetNoBufferErrors(const GWEN_MSG *msg); +AQHOME_API uint16_t AQH_SendStatsMsg_GetBusyErrors(const GWEN_MSG *msg); AQHOME_API void AQH_SendStatsMsg_DumpToBuffer(const GWEN_MSG *msg, GWEN_BUFFER *dbuf, const char *sText); diff --git a/aqhome/msgmanager.c b/aqhome/msgmanager.c index e6ba3d2..3c1d0fb 100644 --- a/aqhome/msgmanager.c +++ b/aqhome/msgmanager.c @@ -327,7 +327,7 @@ void _handleMsgComSendStat(GWEN_MSG_ENDPOINT_MGR *emgr, GWEN_MSG_ENDPOINT *ep, c } AQH_NodeInfo_SetStatsPacketsOut(ni, AQH_SendStatsMsg_GetPacketsOut(msg)); AQH_NodeInfo_SetStatsCollisions(ni, AQH_SendStatsMsg_GetCollisions(msg)); - AQH_NodeInfo_SetStatsAborted(ni, AQH_SendStatsMsg_GetAborted(msg)); + AQH_NodeInfo_SetStatsBusy(ni, AQH_SendStatsMsg_GetBusyErrors(msg)); AQH_NodeDb_SetModified(xmgr->nodeDb); } } diff --git a/aqhome/nodes/nodeinfo.t2d b/aqhome/nodes/nodeinfo.t2d index 01b6f8e..1f1172b 100644 --- a/aqhome/nodes/nodeinfo.t2d +++ b/aqhome/nodes/nodeinfo.t2d @@ -90,7 +90,7 @@ - + 0 0 public diff --git a/avr/att84_temp1.asm b/avr/att84_temp1.asm index 7e013ee..13a409b 100644 --- a/avr/att84_temp1.asm +++ b/avr/att84_temp1.asm @@ -239,7 +239,7 @@ .include "comproto_sysstats.asm" .include "comproto_memstats.asm" .include "comproto_pong.asm" -; .include "comproto_values.asm" + .include "comproto_values.asm" #endif #endif #ifdef MODULES_TWI_MASTER @@ -266,8 +266,12 @@ #ifdef MODULES_LCD sramTimerWriteStats: .byte 2 #endif -sramTimerEnqueueValues: .byte 2 -sramTimerSI7021Measure: .byte 2 +sramTimerEnqueueValues: .byte 2 +#ifdef MODULES_SI7021 + sramTimerSI7021Measure: .byte 2 + sramTimerSI7021SendTemp: .byte 2 + sramTimerSI7021SendHumidity: .byte 2 +#endif #ifdef MODULES_LCD sramPeriodicalLcdMark: .byte 2 #endif @@ -290,19 +294,22 @@ blinkPattern: .db 2, 50, 0xff, 0xff ; 1 short blink, 2s pause, restart timerList: -; SRAM variable/counter routine flags secs (0=don't start or restart) +; SRAM variable/counter routine flags secs (0=don't start or restart) #ifdef MODULES_COM_WITH_ADDR_PROTO - .dw cproAddresModeTimer, CPRO_Address_OnTimer, 0, 0 ; (no restart) + .dw cproAddresModeTimer, CPRO_Address_OnTimer, 0, 0 ; (no restart) #endif #ifdef MODULES_STATS - .dw statsSendTimer, Stats_Timer, TIMER_FLAGS_IF_ADDR, 30 ; every 30s + .dw statsSendTimer, Stats_Timer, TIMER_FLAGS_IF_ADDR, 30 ; every 30s #endif #ifdef MODULES_LCD - .dw sramPeriodicalLcdMark, periodicalLcdMark, 0, 1 ; every sec - .dw sramTimerWriteStats, writeStats, 0, 10 + .dw sramPeriodicalLcdMark, periodicalLcdMark, 0, 1 ; every sec + .dw sramTimerWriteStats, writeStats, 0, 10 +#endif +#ifdef MODULES_SI7021 + .dw sramTimerSI7021Measure, SI7021_PeriodicMeasurement, 0, 30 ; every 30s + .dw sramTimerSI7021SendTemp, sendTemp, TIMER_FLAGS_IF_ADDR, 60 ; every 60s + .dw sramTimerSI7021SendHumidity, sendHumidity, TIMER_FLAGS_IF_ADDR, 60 ; every 60s #endif - .dw sramTimerSI7021Measure, SI7021_PeriodicMeasurement, 0, 30 ; every 30s -; .dw sramTimerEnqueueValues, Main_SendValueMsg, TIMER_FLAGS_IF_ADDR, 60 ; every 1m .dw 0 ; end of list @@ -332,6 +339,31 @@ writeStats: +#ifdef MODULES_SI7021 + +sendHumidity: + rcall SI7021_SendHumidity + brcs sendHumidity_okay + ; set timer to 1s to retry later + ldi xl, LOW(sramTimerSI7021SendHumidity) + ldi xh, HIGH(sramTimerSI7021SendHumidity) + rjmp Timer_SetValueTo1s +sendHumidity_okay: + ret + + +sendTemp: + rcall SI7021_SendTemp + brcs sendTemp_okay + ; set timer to 1s to retry later + ldi xl, LOW(sramTimerSI7021SendTemp) + ldi xh, HIGH(sramTimerSI7021SendTemp) + rjmp Timer_SetValueTo1s +sendTemp_okay: + ret + +#endif + ; --------------------------------------------------------------------------- diff --git a/avr/comproto_values.asm b/avr/comproto_values.asm index 4f8a36c..2866a15 100644 --- a/avr/comproto_values.asm +++ b/avr/comproto_values.asm @@ -17,7 +17,7 @@ ; --------------------------------------------------------------------------- -; Enqueue a VALUE packet. +; Write a VALUE packet. ; ; IN: ; - R16: destination address @@ -25,12 +25,12 @@ ; - R19:R18: value ; - R21:R20: denom (e.g. 100, meaning value must be divided by 100) ; - R22: value type +; - X : buffer to write to ; OUT: ; - CFLAG: set if okay, clear otherwise ; MODIFIED REGS: R6, R7, R8, R9, R10, R11, R12, R16, R17, X, Y (R3, R4, R15, R16, R17, R18, R19, R20, R21) -CPRO_EnqueueValue: - mov r6, r16 +CPRO_WriteValue: mov r7, r17 mov r8, r18 mov r9, r19 @@ -38,33 +38,20 @@ CPRO_EnqueueValue: mov r11, r21 mov r12, r22 - rcall COM_AllocBufferAndGetXY ; (r16, r17, r21) - brcc CPRO_EnqueueValue_error - + ldi r17, COM2_PAYLOAD_FLAGS_UID | (6<