diff --git a/julcho.c b/julcho.c index 990d12e..cd92d70 100644 --- a/julcho.c +++ b/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);