aqhome-data: send data in multiple messages. remove limits.

This commit is contained in:
Martin Preuss
2025-10-01 23:18:08 +02:00
parent 8d22d386b4
commit 494e7b3fbc
9 changed files with 64 additions and 32 deletions

View File

@@ -35,8 +35,7 @@
* ------------------------------------------------------------------------------------------------
*/
AQH_MESSAGE *AQH_IpcdMessageMultiData_new(uint16_t code,
uint32_t msgId, uint32_t refMsgId,
AQH_MESSAGE *AQH_IpcdMessageMultiData_new(uint16_t code, uint32_t msgId, uint32_t refMsgId, uint32_t flags,
const AQH_VALUE *value, const uint64_t *i64Ptr, int numOfDataPoints)
{
AQH_MESSAGE *msg;
@@ -45,6 +44,7 @@ AQH_MESSAGE *AQH_IpcdMessageMultiData_new(uint16_t code,
buf=GWEN_Buffer_new(0, 256, 0, 1);
GWEN_Tag16_WriteUint32TagToBuffer(AQH_MSGDATA_MULTIDATA_TAGS_FLAGS, flags, buf);
rv=AQH_Tag16_WriteValueAsTagToBuffer(AQH_MSGDATA_MULTIDATA_TAGS_VALUE, value, buf);
if (rv<0) {
DBG_INFO(AQH_LOGDOMAIN, "here (%d)", rv);
@@ -63,8 +63,7 @@ AQH_MESSAGE *AQH_IpcdMessageMultiData_new(uint16_t code,
AQH_MESSAGE *AQH_IpcdMessageMultiData_newForOne(uint16_t code,
uint32_t msgId, uint32_t refMsgId,
AQH_MESSAGE *AQH_IpcdMessageMultiData_newForOne(uint16_t code, uint32_t msgId, uint32_t refMsgId, uint32_t flags,
const AQH_VALUE *value, uint64_t timeStamp, double dataPoint)
{
AQH_MESSAGE *msg;
@@ -75,6 +74,7 @@ AQH_MESSAGE *AQH_IpcdMessageMultiData_newForOne(uint16_t code,
buf=GWEN_Buffer_new(0, 256, 0, 1);
GWEN_Tag16_WriteUint32TagToBuffer(AQH_MSGDATA_MULTIDATA_TAGS_FLAGS, flags, buf);
rv=AQH_Tag16_WriteValueAsTagToBuffer(AQH_MSGDATA_MULTIDATA_TAGS_VALUE, value, buf);
if (rv<0) {
DBG_INFO(AQH_LOGDOMAIN, "here (%d)", rv);
@@ -95,6 +95,18 @@ AQH_MESSAGE *AQH_IpcdMessageMultiData_newForOne(uint16_t code,
uint32_t AQH_IpcdMessageMultiData_GetFlags(const GWEN_TAG16_LIST *tagList)
{
return tagList?AQH_Tag16_GetTagDataAsUint32(tagList,
AQH_MSGDATA_MULTIDATA_TAGS_FLAGS,
AQH_MSGDATA_MULTIDATA_FLAGS_LASTMSG):AQH_MSGDATA_MULTIDATA_FLAGS_LASTMSG;
}
AQH_VALUE *AQH_IpcdMessageMultiData_ReadValue(const GWEN_TAG16_LIST *tagList)
{
return tagList?AQH_Tag16_ReadValueFromTagList(tagList, AQH_MSGDATA_MULTIDATA_TAGS_VALUE):NULL;
@@ -129,7 +141,9 @@ void AQH_IpcdMessageMultiData_DumpToBuffer(const AQH_MESSAGE *msg, const GWEN_TA
const char *valueUnits;
int valueType;
unsigned int numberOfPoints=0;
uint32_t flags;
flags=AQH_IpcdMessageMultiData_GetFlags(tagList);
value=tagList?AQH_IpcdMessageMultiData_ReadValue(tagList):NULL;
valueName=value?AQH_Value_GetNameForSystem(value):NULL;
valueUnits=value?AQH_Value_GetValueUnits(value):NULL;
@@ -139,12 +153,14 @@ void AQH_IpcdMessageMultiData_DumpToBuffer(const AQH_MESSAGE *msg, const GWEN_TA
numberOfPoints=(tag?GWEN_Tag16_GetTagLength(tag):0)/(2*sizeof(uint64_t));
GWEN_Buffer_AppendArgs(dbuf,
"MULTIDATA(%s) %s (code=%d, proto=%d, proto version=%d, name=%s, units=%s, type=%d, datapoints=%u)\n",
"MULTIDATA(%s) %s (code=%d, proto=%d, proto version=%d, flags=0x%08x, "
"name=%s, units=%s, type=%d, datapoints=%u)\n",
AQH_IpcdMessage_MsgTypeToChar(AQH_IpcMessage_GetCode(msg)),
sText?sText:"",
AQH_IpcMessage_GetCode(msg),
AQH_IpcMessage_GetProtoId(msg),
AQH_IpcMessage_GetProtoVersion(msg),
AQH_IpcMessage_GetProtoVersion(msg),
flags,
valueName?valueName:"<empty>",
valueUnits?valueUnits:"<empty>",
valueType,

View File

@@ -20,18 +20,20 @@
#define AQH_MSGDATA_MULTIDATA_FLAGS_LASTMSG 0x0001
#define AQH_MSGDATA_MULTIDATA_TAGS_FLAGS 0x01
#define AQH_MSGDATA_MULTIDATA_TAGS_VALUE 0xc1
#define AQH_MSGDATA_MULTIDATA_TAGS_DATA 0xc2
AQHOME_API AQH_MESSAGE *AQH_IpcdMessageMultiData_new(uint16_t code,
uint32_t msgId, uint32_t refMsgId,
AQHOME_API AQH_MESSAGE *AQH_IpcdMessageMultiData_new(uint16_t code, uint32_t msgId, uint32_t refMsgId, uint32_t flags,
const AQH_VALUE *value, const uint64_t *i64Ptr, int numOfDataPoints);
AQHOME_API AQH_MESSAGE *AQH_IpcdMessageMultiData_newForOne(uint16_t code,
uint32_t msgId, uint32_t refMsgId,
AQHOME_API AQH_MESSAGE *AQH_IpcdMessageMultiData_newForOne(uint16_t code, uint32_t msgId, uint32_t refMsgId, uint32_t flags,
const AQH_VALUE *value, uint64_t timeStamp, double dataPoint);
AQHOME_API uint32_t AQH_IpcdMessageMultiData_GetFlags(const GWEN_TAG16_LIST *tagList);
AQHOME_API AQH_VALUE *AQH_IpcdMessageMultiData_ReadValue(const GWEN_TAG16_LIST *tagList);
AQHOME_API void AQH_IpcdMessageMultiData_ReadDatapoints(const GWEN_TAG16_LIST *tagList,
const uint64_t **pDataPtr, uint64_t *pNumberOfPoints);