aqhome-nodes: re-implemented setdata request received via broker.

This commit is contained in:
Martin Preuss
2024-09-30 22:43:35 +02:00
parent 03f9178dd2
commit 8199f7c3b0
14 changed files with 260 additions and 326 deletions

View File

@@ -43,6 +43,9 @@ static void _definePath(const char *pathName, const char *pathValue);
static GWEN_STRINGLIST *_getListOfMatchingFiles(const char *pathName, const char *subFolder, const char *mask);
static GWEN_BUFFER *_getRuntimeFilePath(const char *pathName, const char *sFilename);
static GWEN_BUFFER *_findFileinPath(const char *pathName, const char *sFilename);
static int _readUint8DataFromString(const char *s, uint16_t *pDataVal, uint16_t *pDataDenom);
static int _readUint16DataFromString(const char *s, uint16_t *pDataVal, uint16_t *pDataDenom);
static int _readUint32DataFromString(const char *s, uint16_t *pDataVal, uint16_t *pDataDenom);
@@ -213,9 +216,15 @@ int AQH_ValueDataType_fromString(const char *s)
if (strcasecmp(s, "int")==0)
return AQH_ValueDataType_Int;
else if (strcasecmp(s, "dword")==0)
return AQH_ValueDataType_Dword;
return AQH_ValueDataType_Uint32;
else if (strcasecmp(s, "rational")==0)
return AQH_ValueDataType_Rational;
else if (strcasecmp(s, "AQH_ValueDataType_Uint8")==0)
return AQH_ValueDataType_Uint8;
else if (strcasecmp(s, "AQH_ValueDataType_Uint16")==0)
return AQH_ValueDataType_Uint16;
else if (strcasecmp(s, "AQH_ValueDataType_Uint32")==0)
return AQH_ValueDataType_Uint32;
}
return AQH_ValueDataType_Unknown;
}
@@ -226,8 +235,10 @@ const char *AQH_ValueDataType_toString(int i)
{
switch(i) {
case AQH_ValueDataType_Int: return "int";
case AQH_ValueDataType_Dword: return "dword";
case AQH_ValueDataType_Rational: return "rational";
case AQH_ValueDataType_Uint8: return "uint8";
case AQH_ValueDataType_Uint16: return "uint16";
case AQH_ValueDataType_Uint32: return "uint32";
case AQH_ValueDataType_Unknown:
default: return "unknown";
}
@@ -437,3 +448,65 @@ GWEN_BUFFER *_findFileinPath(const char *pathName, const char *sFilename)
int AQH_ReadDataFromString(int dataType, const char *s, uint16_t *pDataVal, uint16_t *pDataDenom)
{
if (s && *s) {
switch(dataType) {
case AQH_ValueDataType_Int:
case AQH_ValueDataType_Uint8: return _readUint8DataFromString(s, pDataVal, pDataDenom);
case AQH_ValueDataType_Uint16: return _readUint16DataFromString(s, pDataVal, pDataDenom);
case AQH_ValueDataType_Uint32: return _readUint32DataFromString(s, pDataVal, pDataDenom);
case AQH_ValueDataType_Rational: break;
default: break;
}
}
return GWEN_ERROR_INVALID;
}
int _readUint8DataFromString(const char *s, uint16_t *pDataVal, uint16_t *pDataDenom)
{
unsigned int v=0;
if (1==sscanf(s, "%i", &v)) {
*pDataVal=v & 0xff;
*pDataDenom=1;
return 0;
}
return GWEN_ERROR_INVALID;
}
int _readUint16DataFromString(const char *s, uint16_t *pDataVal, uint16_t *pDataDenom)
{
unsigned int v=0;
if (1==sscanf(s, "%i", &v)) {
*pDataVal=v & 0xffff;
*pDataDenom=1;
return 0;
}
return GWEN_ERROR_INVALID;
}
int _readUint32DataFromString(const char *s, uint16_t *pDataVal, uint16_t *pDataDenom)
{
unsigned long int v=0;
if (1==sscanf(s, "%li", &v)) {
*pDataVal=(v>>16) & 0xffff;
*pDataDenom=v & 0xffff;
return 0;
}
return GWEN_ERROR_INVALID;
}