aqhome-data: send data in multiple messages. remove limits.
This commit is contained in:
@@ -404,13 +404,14 @@ uint64_t *AQH_Storage_GetDataPoints(AQH_STORAGE *sto, uint64_t valueId, uint64_t
|
||||
uint64_t *arrayPtr;
|
||||
uint64_t i;
|
||||
|
||||
DBG_ERROR(NULL, "Requested %d entries", (int) maxDataPointsRequested);
|
||||
df=_getDataFileByValueId(sto, valueId);
|
||||
if (df==NULL) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "No file for value id %lu", (unsigned long int) valueId);
|
||||
return NULL;
|
||||
}
|
||||
numEntries=AQH_DataFile_GetNumberOfEntries(df);
|
||||
if (maxDataPointsRequested>numEntries)
|
||||
if (maxDataPointsRequested>numEntries || maxDataPointsRequested==0)
|
||||
maxDataPointsRequested=numEntries;
|
||||
arrayLen=(maxDataPointsRequested*2)+1;
|
||||
arrayPtr=(uint64_t*) malloc(arrayLen*sizeof(uint64_t));
|
||||
@@ -435,7 +436,8 @@ uint64_t *AQH_Storage_GetDataPoints(AQH_STORAGE *sto, uint64_t valueId, uint64_t
|
||||
|
||||
if ((fromTime==0 || ts>=fromTime) && (toTime==0 || ts<=toTime)) {
|
||||
if ((arrayPos+1)>arrayLen) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Limit for number of returned entries reached");
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Limit for number of returned entries reached (%d, numEntries=%d)",
|
||||
(int) arrayLen, (int) numEntries);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -368,7 +368,7 @@ int AQH_DataClient_UpdateData(AQH_DATACLIENT *dc, const AQH_VALUE *v, uint64_t t
|
||||
uint32_t msgId;
|
||||
|
||||
msgId=++(dc->lastMsgId);
|
||||
msgOut=AQH_IpcdMessageMultiData_newForOne(AQH_MSGTYPE_IPC_DATA_UPDATEDATA, msgId, 0, v, timeStamp, dataPoint);
|
||||
msgOut=AQH_IpcdMessageMultiData_newForOne(AQH_MSGTYPE_IPC_DATA_UPDATEDATA, msgId, 0, 0, v, timeStamp, dataPoint);
|
||||
AQH_Endpoint_AddMsgOut(dc->ipcEndpoint, msgOut);
|
||||
|
||||
return _handleResult(dc, msgId);
|
||||
@@ -461,7 +461,9 @@ uint64_t _handleDataResponses(AQH_DATACLIENT *dc, uint64_t *dataPtr, uint64_t ma
|
||||
if (code==AQH_MSGTYPE_IPC_DATA_GETDATA_RSP) {
|
||||
const uint64_t *recvDataPtr;
|
||||
uint64_t recvNumberOfPoints;
|
||||
uint32_t flags;
|
||||
|
||||
flags=AQH_IpcdMessageMultiData_GetFlags(tagList);
|
||||
AQH_IpcdMessageMultiData_ReadDatapoints(tagList, &recvDataPtr, &recvNumberOfPoints);
|
||||
if (recvNumberOfPoints) {
|
||||
uint64_t i;
|
||||
@@ -478,9 +480,11 @@ uint64_t _handleDataResponses(AQH_DATACLIENT *dc, uint64_t *dataPtr, uint64_t ma
|
||||
}
|
||||
}
|
||||
}
|
||||
GWEN_Tag16_List_free(tagList);
|
||||
AQH_Message_free(msgIn);
|
||||
break;
|
||||
if (flags & AQH_MSGDATA_MULTIDATA_FLAGS_LASTMSG) {
|
||||
GWEN_Tag16_List_free(tagList);
|
||||
AQH_Message_free(msgIn);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (code==AQH_MSGTYPE_IPC_DATA_RESULT) {
|
||||
DBG_INFO(NULL, "Server Error: %d", AQH_IpcMessageResult_GetResult(tagList));
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user