- Refactored hdb callbacks

SKIPPED:
	psi/julcho.c
This commit is contained in:
koennecke
2008-03-10 11:06:07 +00:00
parent 6b10e0a4e9
commit f512f47b02
14 changed files with 1440 additions and 829 deletions

View File

@ -93,27 +93,47 @@ static int MotorValueCallback(int iEvent, void *eventData, void *userData,
return 1;
}
/*---------------------------------------------------------------------*/
static int MotorParSetCallback(void *userData, void *callData,
pHdb currentNode, hdbValue v){
static hdbCallbackReturn MotorParSetCallback(pHdb currentNode, void *userData,
pHdbMessage message){
pMotor pMot = (pMotor)userData;
SConnection *pCon = (SConnection *)callData;
SConnection *pCon = NULL;
int status;
pHdbDataMessage mm = NULL;
if((mm = GetHdbSetMessage(message)) == NULL){
return hdbContinue;
}
pCon = mm->callData;
assert(pMot != NULL && pCon != NULL);
status = MotorSetPar(pMot,pCon,currentNode->name, (float)v.v.doubleValue);
return status;
status = MotorSetPar(pMot,pCon,currentNode->name,
(float)mm->v->v.doubleValue);
if(status == 1){
return hdbContinue;
} else {
return hdbAbort;
}
}
/*----------------------------------------------------------------------*/
static int MotorParGetCallback(void *userData, void *callData,
pHdb currentNode, hdbValue v){
static hdbCallbackReturn MotorParGetCallback(pHdb currentNode, void *userData,
pHdbMessage message){
pMotor pMot = (pMotor)userData;
float fVal;
int status;
pHdbDataMessage mm = NULL;
if((mm = GetHdbGetMessage(message)) == NULL){
return hdbContinue;
}
assert(pMot != NULL);
status = MotorGetPar(pMot,currentNode->name,&fVal);
currentNode->value.v.doubleValue = fVal;
return status;
if(status == 1){
return hdbContinue;
} else {
return hdbAbort;
}
}
/*---------------------------------------------------------------------*/
static pHdb MakeMotParNode(char *name, pMotor pMot){
@ -123,16 +143,16 @@ static pHdb MakeMotParNode(char *name, pMotor pMot){
node = MakeHipadabaNode(name, HIPFLOAT, 1);
if(node != NULL) {
pCall = MakeHipadabaCallback(MotorParSetCallback,pMot,NULL,-1,NULL);
pCall = MakeHipadabaCallback(MotorParSetCallback,pMot,NULL);
if(pCall == NULL){
return NULL;
}
AppendHipadabaCallback(node,HCBSET,pCall);
pCall = MakeHipadabaCallback(MotorParGetCallback,pMot,NULL,-1,NULL);
AppendHipadabaCallback(node,pCall);
pCall = MakeHipadabaCallback(MotorParGetCallback,pMot,NULL);
if(pCall == NULL){
return NULL;
}
AppendHipadabaCallback(node,HCBREAD,pCall);
AppendHipadabaCallback(node,pCall);
snprintf(command,1023,"%s %s ", pMot->name, name);
SetHdbProperty(node,"sicscommand", command);
}
@ -289,15 +309,20 @@ static long totalSum(int *data, int length){
return result;
}
/*----------------------------------------------------------------------*/
static int HMDataGetCallback(void *userData, void *callData,
pHdb currentNode, hdbValue v){
static hdbCallbackReturn HMDataGetCallback(pHdb currentNode, void *userData,
pHdbMessage message){
pHistMem pHM = (pHistMem)userData;
SConnection *pCon = (SConnection *)callData;
SConnection *pCon = NULL;
long sum1, sum2;
pHdbDataMessage mm = NULL;
if((mm = GetHdbGetMessage(message)) == NULL){
return hdbContinue;
}
pCon = mm->callData;
assert(pHM != NULL);
if(pCon == NULL){
return 0;
return hdbAbort;
}
sum1 = totalSum(currentNode->value.v.intArray, currentNode->value.arrayLength);
currentNode->value.arrayLength = GetHistLength(pHM);
@ -306,7 +331,7 @@ static int HMDataGetCallback(void *userData, void *callData,
if(sum1 != sum2){
UpdateHipadabaPar(currentNode,currentNode->value,NULL);
}
return 1;
return hdbContinue;
}
/*----------------------------------------------------------------------*/
static pHdb MakeHMDataNode(pHistMem pHM, char *name){
@ -319,21 +344,27 @@ static pHdb MakeHMDataNode(pHistMem pHM, char *name){
return NULL;
}
node->value.doNotFree = 1;
pCall = MakeHipadabaCallback(HMDataGetCallback,pHM,NULL,-1,NULL);
pCall = MakeHipadabaCallback(HMDataGetCallback,pHM,NULL);
if(pCall == NULL){
return NULL;
}
AppendHipadabaCallback(node,HCBREAD,pCall);
AppendHipadabaCallback(node,HCBSET,MakeReadOnlyCallback());
AppendHipadabaCallback(node,pCall);
AppendHipadabaCallback(node,MakeReadOnlyCallback());
return node;
}
/*================ SICS Variable ======================================*/
static int SicsVarSetCallback(void *userData, void *callData,
pHdb currentNode, hdbValue v){
static hdbCallbackReturn SicsVarSetCallback(pHdb currentNode, void *userData,
pHdbMessage message){
pSicsVariable pVar = (pSicsVariable)userData;
SConnection *pCon = (SConnection *)callData;
SConnection *pCon = NULL;
int userRights = usMugger;
pHdbDataMessage mm = NULL;
if((mm = GetHdbSetMessage(message)) == NULL){
return hdbContinue;
}
pCon = mm->callData;
assert(pVar != NULL);
@ -342,16 +373,16 @@ static int SicsVarSetCallback(void *userData, void *callData,
}
switch(currentNode->value.dataType){
case HIPINT:
VarSetInt(pVar, v.v.intValue, userRights);
VarSetInt(pVar, mm->v->v.intValue, userRights);
break;
case HIPFLOAT:
VarSetFloat(pVar, (float)v.v.doubleValue, userRights);
VarSetFloat(pVar, (float)mm->v->v.doubleValue, userRights);
break;
case HIPTEXT:
VarSetText(pVar, v.v.text, userRights);
VarSetText(pVar, mm->v->v.text, userRights);
break;
}
return 1;
return hdbContinue;
}
/*----------------------------------------------------------------------*/
static int ValueCallback(int iEvent, void *eventData, void *userData,
@ -405,13 +436,13 @@ static pHdb MakeSicsVarNode(pSicsVariable pVar, char *name){
} else {
AddPrivProperty(node,pVar->iAccessCode);
}
pCall = MakeHipadabaCallback(SicsVarSetCallback,pVar,NULL,-1,NULL);
pCall = MakeHipadabaCallback(SicsVarSetCallback,pVar,NULL);
if(pCall == NULL){
return NULL;
}
strncpy(comCom.deviceID,name,255);
comCom.transID = -77;
AppendHipadabaCallback(node,HCBSET,pCall);
AppendHipadabaCallback(node,pCall);
RegisterCallback(pVar->pCall,comCom, VALUECHANGE, ValueCallback,
node,NULL);
snprintf(command,1023,"%s ", pVar->name);