- Refactored hdb callbacks
This commit is contained in:
69
julcho.c
69
julcho.c
@ -156,23 +156,33 @@ static int JulChoTransact(pJulCho self, char *command,
|
||||
return status;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
static int JulChoSetCallback(void *userData, void *callData,
|
||||
pHdb currentNode, hdbValue v){
|
||||
static hdbCallbackReturn JulChoSetCallback(pHdb node, void *userData,
|
||||
pHdbMessage message){
|
||||
pJulCBData cbData = NULL;
|
||||
char command[256], reply[256];
|
||||
pHdbDataMessage mm = NULL;
|
||||
int status;
|
||||
|
||||
cbData = (pJulCBData)userData;
|
||||
if(cbData == NULL){
|
||||
return 0;
|
||||
return hdbContinue;
|
||||
}
|
||||
|
||||
if(v.dataType == HIPINT){
|
||||
/*
|
||||
* Is this for us?
|
||||
*/
|
||||
mm = GetHdbSetMessage(message);
|
||||
if(mm == NULL){
|
||||
return hdbContinue;
|
||||
}
|
||||
|
||||
|
||||
if(mm->v->dataType == HIPINT){
|
||||
snprintf(command,255,"%s %s%d%s",cbData->comCode, cbData->prefix,
|
||||
(int)v.v.intValue,cbData->postfix);
|
||||
} else if(v.dataType == HIPFLOAT){
|
||||
(int)mm->v->v.intValue,cbData->postfix);
|
||||
} else if(mm->v->dataType == HIPFLOAT){
|
||||
snprintf(command,255,"%s %s%f%s",cbData->comCode, cbData->prefix,
|
||||
(float)v.v.doubleValue,cbData->postfix);
|
||||
(float)mm->v->v.doubleValue,cbData->postfix);
|
||||
} else {
|
||||
assert(0); /* this is a programming error */
|
||||
}
|
||||
@ -181,9 +191,9 @@ static int JulChoSetCallback(void *userData, void *callData,
|
||||
status = JulChoTransact(cbData->pDriv, command, reply, 255);
|
||||
if(status < 0) {
|
||||
cbData->pDriv->errorCode = status;
|
||||
return 0;
|
||||
return hdbAbort;
|
||||
}
|
||||
return 1;
|
||||
return hdbContinue;
|
||||
}
|
||||
/*------------------------------------------------------------------------------*/
|
||||
static pHdbCallback MakeJulChoSetCallback(pJulCho driv, char *command,
|
||||
@ -202,8 +212,6 @@ static pHdbCallback MakeJulChoSetCallback(pJulCho driv, char *command,
|
||||
strncpy(cbData->postfix,postfix,9);
|
||||
hdbCB->next = NULL;
|
||||
hdbCB->previous = NULL;
|
||||
hdbCB->id = 557;
|
||||
hdbCB->internalID = NULL;
|
||||
hdbCB->killFunc = free;
|
||||
hdbCB->userCallback = JulChoSetCallback;
|
||||
hdbCB->userData = cbData;
|
||||
@ -590,25 +598,30 @@ static int testParGroup(char *name){
|
||||
}
|
||||
}
|
||||
/*-------------------------------------------------------------------------*/
|
||||
static int JulChoGetCallback(void *userData, void *callData,
|
||||
pHdb currentNode, hdbValue v){
|
||||
static hdbCallbackReturn JulChoGetCallback(pHdb currentNode,
|
||||
void *userData, pHdbMessage message){
|
||||
pJulCho self = NULL;
|
||||
SConnection *pCon = NULL;
|
||||
int status;
|
||||
char error[128], buffer[256];
|
||||
pHdbDataMessage mm = NULL;
|
||||
|
||||
self = (pJulCho)userData;
|
||||
pCon = (SConnection *)callData;
|
||||
|
||||
assert(self != NULL);
|
||||
|
||||
mm = GetHdbGetMessage(message);
|
||||
if(mm == NULL){
|
||||
return hdbContinue;
|
||||
}
|
||||
pCon = (SConnection *)mm->callData;
|
||||
|
||||
status = UpdateJulChoParameters(self,testParGroup(currentNode->name));
|
||||
if(status != 1 && pCon != NULL){
|
||||
JulChoErrorcodeToString(self->errorCode, error,127);
|
||||
snprintf(buffer,255,"ERROR: %s occurred reading par",error);
|
||||
SCWrite(pCon,buffer,eError);
|
||||
}
|
||||
return status;
|
||||
return hdbContinue;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int AppendJulChoROPar(pHdb parent, char *name, int type){
|
||||
@ -632,17 +645,17 @@ static int ConfigureSingleJulCho(pHdb parent, pJulCho driv,
|
||||
if(pCb == NULL){
|
||||
return 0;
|
||||
}
|
||||
AppendHipadabaCallback(child,HCBSET,pCb);
|
||||
AppendHipadabaCallback(child,pCb);
|
||||
pCb = MakeFloatRangeCallback(5.0, 355.);
|
||||
if(pCb == NULL){
|
||||
return 0;
|
||||
}
|
||||
AppendHipadabaCallback(child,HCBSET,pCb);
|
||||
AppendHipadabaCallback(child,pCb);
|
||||
pCb = MakeJulChoSetCallback(driv,"SPH", prefix,postfix);
|
||||
if(pCb == NULL){
|
||||
return 0;
|
||||
}
|
||||
AppendHipadabaCallback(child,HCBSET,pCb);
|
||||
AppendHipadabaCallback(child,pCb);
|
||||
AddHipadabaChild(parent,child,NULL);
|
||||
|
||||
child = MakeHipadabaNode("gatewidth",HIPFLOAT,0);
|
||||
@ -653,12 +666,12 @@ static int ConfigureSingleJulCho(pHdb parent, pJulCho driv,
|
||||
if(pCb == NULL){
|
||||
return 0;
|
||||
}
|
||||
AppendHipadabaCallback(child,HCBSET,pCb);
|
||||
AppendHipadabaCallback(child,pCb);
|
||||
pCb = MakeJulChoSetCallback(driv,"SGW", prefix,postfix);
|
||||
if(pCb == NULL){
|
||||
return 0;
|
||||
}
|
||||
AppendHipadabaCallback(child,HCBSET,pCb);
|
||||
AppendHipadabaCallback(child,pCb);
|
||||
AddHipadabaChild(parent,child,NULL);
|
||||
|
||||
if(!AppendJulChoROPar(parent,"nomspeed",HIPINT)){
|
||||
@ -750,8 +763,8 @@ static int ConfigureSingleJulCho(pHdb parent, pJulCho driv,
|
||||
*/
|
||||
child = parent->child;
|
||||
while(child != NULL){
|
||||
AppendHipadabaCallback(child,HCBREAD,
|
||||
MakeHipadabaCallback(JulChoGetCallback,driv,NULL,-1,NULL));
|
||||
AppendHipadabaCallback(child,
|
||||
MakeHipadabaCallback(JulChoGetCallback,driv,NULL));
|
||||
child = child->next;
|
||||
}
|
||||
return 1;
|
||||
@ -784,19 +797,21 @@ static int InitJulChoPar(pJulCho driv){
|
||||
*/
|
||||
parChild = GetHipadabaNode(child,"nomspeed");
|
||||
assert(parChild != NULL);
|
||||
DeleteCallbackChain(parChild->writeCallbacks);
|
||||
parChild->writeCallbacks = NULL;
|
||||
/*
|
||||
* TODO: possible delete some callbacks
|
||||
*/
|
||||
|
||||
|
||||
pCb = MakeCheckPermissionCallback(usUser);
|
||||
if(pCb == NULL){
|
||||
return 0;
|
||||
}
|
||||
AppendHipadabaCallback(parChild,HCBSET,pCb);
|
||||
AppendHipadabaCallback(parChild,pCb);
|
||||
pCb = MakeJulChoSetCallback(driv,"SMS","","");
|
||||
if(pCb == NULL){
|
||||
return 0;
|
||||
}
|
||||
AppendHipadabaCallback(parChild,HCBSET,pCb);
|
||||
AppendHipadabaCallback(parChild,pCb);
|
||||
AddHipadabaChild(driv->parNode,child,NULL);
|
||||
|
||||
child = MakeHipadabaNode(CH3N,HIPNONE,0);
|
||||
|
Reference in New Issue
Block a user