Hej igen
Nu har jag försökt satt mig in i koden för wrappern en del och det har gått framåt
Jag har dock fastnat på tdGetDeviceParameter();
De tillägg jag har gjort är dessa:
php_telldus.h
Code: Select all
PHP_FUNCTION(tdGetDeviceParameter);
telldus.c
Code: Select all
PHP_FE(tdGetDeviceParameter, NULL)
PHP_FUNCTION(tdGetDeviceParameter)
{
long id;
char *param;
char *name;
char *value;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &id, &name, &value) == FAILURE) {
RETURN_NULL();
}
param = tdGetDeviceParameter( id, name, value);
RETURN_STRING( param, 1 );
}
När jag sedan ska kalla på funktionen får jag problem. Jag vet inte vilka argument funktionen vill ha. Kör jag:
Code: Select all
cat telldus-core.h | grep tdGetDeviceParameter
får jag:
Code: Select all
TELLSTICK_API char * WINAPI tdGetDeviceParameter(int intDeviceId, const char *strName, const char *defaultValue);
Vad jag förstår utav det där är att första argumentet ska vara en int, andra och tredje en char.
Kör jag däremot (testade med A och B bara):
Så får jag:
Code: Select all
tdGetDeviceParameter() expects parameter 2 to be long, string given
Så då gick jag djupare i telldus-core för att se vad tdGetDeviceParameter egentligen gör och då hittade jag detta i telldus-core.cpp:
Code: Select all
char * WINAPI tdGetDeviceParameter(int intDeviceId, const char *strName, const char *defaultValue){
std::string strReturn = "";
try{
Manager *manager = Manager::getInstance();
strReturn = manager->getDeviceParameter(intDeviceId, strName);
if (strReturn.empty()) {
strReturn = defaultValue;
}
}
catch(exception e){
handleException(e);
}
return wrapStdString(strReturn);
}
Och därifrån så sökte jag lite på allt som anropade "getDeviceParameter" i hela svn-trädet och hittade tex detta:
Code: Select all
((DeviceNexa*)dev)->setHouse(settings.getDeviceParameter(intDeviceId, "house")); ((DeviceNexa*)dev)->setUnit(settings.getDeviceParameter(intDeviceId, "unit"));
Från detta så tror jag att jag förstått vad tdGetDeviceParameter() vill ha för argument.
ID är för vilken mottagare man vill hämta information från
NAME är värdet jag ville hämta, tex UNIT eller HOUSE
DEFAULTVALUE är ett standardvärde som returneras om NAME inte hittas.
Har jag förstått rätt?
Tyvärr så får jag fortfarande samma (argument 2 ska vara long men är string) fel från PHP om jag nu istället anropar med:
tdGetDeviceParameter(2,"unit","error");
Så vart har jag gjort fel, jag kan inte hitta vart tdGetDeviceParameter() anger att den vill ha en LONG?!?!
Jag har inte kommit in på tdSet.....() än, men jag såg att tdAddDevice() inte tar emot något argument, kan det vara så att man först måste anropa tex tdSetName(), tdSetProtocol(), tdSetModel(), tdSetDeviceParameter() vilket sätter dessa parametrar i något sorts "minne" och sedan när man anropar tdAddDevice() så skrivs detta "minne" till tellstick.conf?
Eller är jag helt ute och cyklar?
Kan tillägga att jag inte är speciellt hemma på detta språk, vilket det nu än är
MVH Niclas