I've made changes such that the example compiles, but I get a segmentation fault during the initial pairing. The changes consist of changing setValue calls to characteristics::setValue and adding connectionInfo* to the identify callbacks. I'm working on Raspbian. Can anyone out there enlighten me?
Pair Verify M1
Pair Verify M3
Verify success
Segmentation fault (core dumped)
I've determined that the fault happens sometime after connectionInfo::handleAccessoryRequest from this GDB back-trace, but I can't get any farther.
(gdb) bt
#0 0x00000000 in ?? ()
#1 0x000431d0 in connectionInfo::handleAccessoryRequest (this=0x69af8 <connection>) at PHKNetworkIP.cpp:881
#2 0x00040c50 in connectionLoop (threadInfo=0x69af8 <connection>) at PHKNetworkIP.cpp:308
#3 0x76ccbe90 in start_thread (arg=0x74dff450) at pthread_create.c:311
#4 0x76ab9598 in ?? () at ../ports/sysdeps/unix/sysv/linux/arm/nptl/../clone.S:92 from /lib/arm-linux-gnueabihf/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)
Here's my version of the Accessory.cpp
/*
* This accessory.cpp is configurated for light accessory + fan accessory
*/
#include "Accessory.h"
#include "PHKAccessory.h"
//Global Level of light strength
int lightStength = 0;
int fanSpeedVal = 0;
void lightIdentify(bool oldValue, bool newValue, connectionInfo *sender) {
printf("Start Identify Light\n");
}
void fanIdentify(bool oldValue, bool newValue, connectionInfo *sender) {
printf("Start Identify Fan\n");
}
AccessorySet *accSet;
void initAccessorySet() {
currentDeviceType = deviceType_bridge;
printf("Initial Accessory\n");
Accessory *lightAcc = new Accessory();
//Add Light
accSet = &AccessorySet::getInstance();
addInfoServiceToAccessory(lightAcc, "Light 1", "ET", "Light", "12345678", &lightIdentify);
accSet->addAccessory(lightAcc);
Service *lightService = new Service(serviceType_lightBulb);
lightAcc->addService(lightService);
stringCharacteristics *lightServiceName = new stringCharacteristics(charType_serviceName, premission_read, 0);
lightServiceName->characteristics::setValue("Light");
lightAcc->addCharacteristics(lightService, lightServiceName);
boolCharacteristics *powerState = new boolCharacteristics(charType_on, premission_read|premission_write);
powerState->characteristics::setValue("true");
lightAcc->addCharacteristics(lightService, powerState);
intCharacteristics *brightnessState = new intCharacteristics(charType_brightness, premission_read|premission_write, 0, 100, 1, unit_percentage);
brightnessState->characteristics::setValue("50");
lightAcc->addCharacteristics(lightService, brightnessState);
//Add fan
Accessory *fan = new Accessory();
addInfoServiceToAccessory(fan, "Fan 1", "ET", "Fan", "12345678", &fanIdentify);
accSet->addAccessory(fan);
Service *fanService = new Service(serviceType_fan);
fan->addService(fanService);
stringCharacteristics *fanServiceName = new stringCharacteristics(charType_serviceName, premission_read, 0);
fanServiceName->characteristics::setValue("Fan");
fan->addCharacteristics(fanService, lightServiceName);
boolCharacteristics *fanPower = new boolCharacteristics(charType_on, premission_read|premission_write);
fanPower->characteristics::setValue("true");
fan->addCharacteristics(fanService, fanPower);
};
I've made changes such that the example compiles, but I get a segmentation fault during the initial pairing. The changes consist of changing
setValuecalls tocharacteristics::setValueand addingconnectionInfo*to the identify callbacks. I'm working on Raspbian. Can anyone out there enlighten me?I've determined that the fault happens sometime after
connectionInfo::handleAccessoryRequestfrom this GDB back-trace, but I can't get any farther.Here's my version of the Accessory.cpp