|
pasynOption->getOption(asynOptionPvt, pasynUserOctet_, "hostInfo", hostbuff, 100 );
It looks like you are not checking the status return of that call. What does it return? Please print out the return value.
You are printing the error message:
std::cout << pasynUserOctet_->errorMessage << std::endl;
regardless of the return value of that function. That could be a stale error message.
Mark
Oh, my apologies! I omitted part of the line...
The complete line is:
pasynOption->getOption(asynOptionPvt, pasynUserOctet_, "hostInfo", hostbuff, 100 );
(gdb) p pasynOption
$6 = (asynOption *) 0x7ffff624fcd0 <drvAsynIPPortAsynCommon>
I assume that I am utilizing the following function:
Hi Douglas,
In this line of code:
-
getOption(asynOptionPvt, pasynUserOctet_, "hostInfo", hostbuff, 100 );
where is the getOption() function defined? Is that a function you wrote? Because in asynRecord the code is this:
pasynRecPvt->pasynOption->getOption(pasynRecPvt->asynOptionPvt, pasynUser,
Mark
Sure, perhaps I haven't made myself clear, but the code I included in the question is indeed mine.
Now, I'm providing the specific block for clarity.
RMMRegisterAccess::RMMRegisterAccess(const std::string& address_info) {
connect(address_info);
...
asynInterface *pasynInterface;
pasynInterface = pasynManager->findInterface(pasynUserOctet_,
asynCommonType, 1);
void *asynOptionPvt;
asynOption *pasynOption;
pasynOption = (asynOption *) pasynInterface->pinterface;
asynOptionPvt = pasynInterface->drvPvt;
char hostbuff[100];
getOption(asynOptionPvt, pasynUserOctet_, "hostInfo", hostbuff,
100 );
std::cout << pasynUserOctet_->errorMessage << std::endl;
}
asynStatus RMMRegisterAccess::connect(const std::string& address_info) {
// where address_info is the portName defined in the drvAsynIPPortConfigure
return pasynOctetSyncIO->connect(address_info.c_str(), 0, &pasynUserOctet_, NULL);
}
Douglas
Can you share your code?
Sent from my iPhone
Yes, I have confirmed that the value in theHOSTINFO asyn record field is correct:
$ pvget asyn:Test.HOSTINFO
asyn:Test.HOSTINFO <undefined> "192.168.50.2:65535 UDP"
I also assumed that this should work, but for some reason, I am receiving the error:
192.168.50.2:65535 UDP: Link already open!
So, I am wondering if the instance of pasynOption that I created is receiving the same pasynInterface value that was defined with drvAsynIPPortConfigure and is also being used in the asyn record code.
Douglas
If you open the asynRecord OPI screen asynIPPortSetup does it correctly display the current IP host information in the widget labeled "Host info:"? If so, then using the same code as in the asynRecord should work?
Mark
Hi all,
Does anyone know how to read the hostInfo value that is passed into the drvAsynIPPortConfigure function ?
Basically, I have this in my startup script:
epicsEnvSet("IPADDR", "192.168.50.2")
epicsEnvSet("IPPORT", "65535")
drvAsynIPPortConfigure("L0", "$(IPADDR):$(IPPORT) UDP", 0, 0, 1)
And in my c++ code:
status = pasynOctetSyncIO->connect(address_info.c_str(), 0, &pasynUserOctet_, NULL); // where address_info is the portName
So, I tried following the steps inside asynRecord.c:
asynInterface *pasynInterface;
pasynInterface = pasynManager->findInterface(pasynUserOctet_, asynCommonType, 1);
void *asynOptionPvt;
asynOption *pasynOption;
pasynOption = (asynOption *) pasynInterface->pinterface;
asynOptionPvt = pasynInterface->drvPvt;
char hostbuff[100];
getOption(asynOptionPvt, pasynUserOctet_, "hostInfo", hostbuff, 100 );
std::cout << pasynUserOctet_->errorMessage << std::endl;
But I received the message error:
192.168.50.2:65535 UDP: Link already open!
Thanks in advance.
--
Douglas Araujo
|