aqhome-data: update value info when new data arrives.
This commit is contained in:
@@ -79,6 +79,8 @@ static int _handleNewClient(AQH_OBJECT *o, AQH_OBJECT *clientEndpoint);
|
||||
static int _handleClientDown(AQH_OBJECT *o, AQH_OBJECT *clientEndpoint);
|
||||
static void _handleMsgsFromClient(AQH_OBJECT *o, AQHOME_SERVER *xo, AQH_OBJECT *ep);
|
||||
static void _handleMsgFromClient(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg);
|
||||
static void _createValue(AQHOME_SERVER *xo, AQH_OBJECT *epDriver, const char *deviceName, const AQH_VALUE *valueTemplate);
|
||||
static void _updateValue(AQHOME_SERVER *xo, AQH_VALUE *v, const char *deviceName, const AQH_VALUE *valueTemplate);
|
||||
static AQH_DEVICE *_getOrCreateDeviceForDriver(AQHOME_SERVER *xo, AQH_OBJECT *epDriver, const char *deviceName);
|
||||
static int _createPidFile(const char *pidFilename);
|
||||
static int _readArgs(int argc, char **argv, GWEN_DB_NODE *dbArgs);
|
||||
@@ -652,16 +654,38 @@ AQH_VALUE *AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(AQH_OBJECT *o,
|
||||
|
||||
v=AQH_Storage_GetValueByNameForSystem(xo->storage, GWEN_Buffer_GetStart(buf));
|
||||
if (v==NULL) {
|
||||
if (AQH_Endpoint_GetPermissions(epDriver) & AQH_ENDPOINT_PERMS_ADDVALUE) {
|
||||
AQH_DEVICE *device;
|
||||
if (AQH_Endpoint_GetPermissions(epDriver) & AQH_ENDPOINT_PERMS_ADDVALUE)
|
||||
_createValue(xo, epDriver, GWEN_Buffer_GetStart(buf), valueTemplate);
|
||||
else {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "No permissions to create value \"%s\"", GWEN_Buffer_GetStart(buf));
|
||||
GWEN_Buffer_free(buf);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
_updateValue(xo, v, GWEN_Buffer_GetStart(buf), valueTemplate);
|
||||
GWEN_Buffer_free(buf);
|
||||
return v;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Creating value \"%s\"", GWEN_Buffer_GetStart(buf));
|
||||
|
||||
|
||||
void _createValue(AQHOME_SERVER *xo, AQH_OBJECT *epDriver, const char *deviceName, const AQH_VALUE *valueTemplate)
|
||||
{
|
||||
AQH_DEVICE *device;
|
||||
const char *serviceName;
|
||||
AQH_VALUE *v;
|
||||
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Creating value \"%s\"", deviceName);
|
||||
serviceName=AQH_Endpoint_GetServiceName(epDriver);
|
||||
device=(deviceName && *deviceName)?_getOrCreateDeviceForDriver(xo, epDriver, deviceName):NULL;
|
||||
|
||||
v=AQH_Value_new();
|
||||
AQH_Value_SetDriver(v, serviceName);
|
||||
AQH_Value_SetName(v, AQH_Value_GetName(valueTemplate));
|
||||
AQH_Value_SetNameForSystem(v, GWEN_Buffer_GetStart(buf));
|
||||
AQH_Value_SetNameForSystem(v, deviceName);
|
||||
AQH_Value_SetValueUnits(v, AQH_Value_GetValueUnits(valueTemplate));
|
||||
AQH_Value_SetValueType(v, AQH_Value_GetValueType(valueTemplate));
|
||||
AQH_Value_SetModality(v, AQH_Value_GetModality(valueTemplate));
|
||||
@@ -672,16 +696,47 @@ AQH_VALUE *AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(AQH_OBJECT *o,
|
||||
}
|
||||
AQH_Storage_AddValue(xo->storage, v);
|
||||
}
|
||||
else {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "No permissions to create value \"%s\"", GWEN_Buffer_GetStart(buf));
|
||||
GWEN_Buffer_free(buf);
|
||||
return NULL;
|
||||
|
||||
|
||||
|
||||
void _updateValue(AQHOME_SERVER *xo, AQH_VALUE *value, const char *deviceName, const AQH_VALUE *valueTemplate)
|
||||
{
|
||||
int chg=0;
|
||||
const char *s1;
|
||||
const char *s2;
|
||||
int i1;
|
||||
int i2;
|
||||
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Updating value \"%s\"", deviceName);
|
||||
s1=AQH_Value_GetValueUnits(valueTemplate);
|
||||
s2=AQH_Value_GetValueUnits(value);
|
||||
if (s1 && *s1) {
|
||||
if (!(s2 && *s2) || (strcasecmp(s1, s2)!=0)) {
|
||||
AQH_Value_SetValueUnits(value, s1);
|
||||
chg=1;
|
||||
}
|
||||
}
|
||||
GWEN_Buffer_free(buf);
|
||||
return v;
|
||||
|
||||
i1=AQH_Value_GetValueType(valueTemplate);
|
||||
i2=AQH_Value_GetValueType(value);
|
||||
if (i1!=AQH_ValueDataType_Unknown) {
|
||||
if (i1!=i2) {
|
||||
AQH_Value_SetValueType(value, i1);
|
||||
chg=1;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
i1=AQH_Value_GetModality(valueTemplate);
|
||||
i2=AQH_Value_GetModality(value);
|
||||
if (i1!=AQH_ValueModality_Unknown) {
|
||||
if (i1!=i2) {
|
||||
AQH_Value_SetModality(value, i1);
|
||||
chg=1;
|
||||
}
|
||||
}
|
||||
|
||||
if (chg)
|
||||
AQH_Storage_AddRuntimeFlags(xo->storage, AQH_STORAGE_RTFLAGS_MODIFIED);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user