- Refactored hdb callbacks

This commit is contained in:
koennecke
2008-03-10 11:06:39 +00:00
parent 131f1144d8
commit 358c121b30

View File

@ -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);