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