- Refactored hdb callbacks
This commit is contained in:
71
julcho.c
71
julcho.c
@ -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);
|
||||||
|
Reference in New Issue
Block a user