我正在使用 ESP8266 开发 homekit 设备,但无法以编程方式生成服务。我需要生成其中 16 个。这是我尝试分配给
*service
的代码:
homekit_service_t *services[18] = {
&(homekit_service_t){
.type = HOMEKIT_SERVICE_ACCESSORY_INFORMATION,
.characteristics = (homekit_characteristic_t *[]){
HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Arduino HomeKit"),
HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "0123456"),
HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266/ESP32"),
HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
NULL,
},
},
&(homekit_service_t){
.type = HOMEKIT_SERVICE_SWITCH,
.characteristics = (homekit_characteristic_t *[]){
HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
&cha_switch_on,
NULL,
},
},
NULL,
};
但是,当我尝试生成附加服务时,使用以下代码:
services[3] = &(homekit_service_t){
.type = HOMEKIT_SERVICE_SWITCH,
.characteristics = (homekit_characteristic_t *[]){
HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
&cha_switch_on,
NULL,
},
};
编译器抛出此错误:
C:\Users\black\OneDrive\Desktop\homekit\my_accessory.c:34:1: error: conflicting types for 'services'
34 | services[3] = &(homekit_service_t){
| ^~~~~~~~
C:\Users\black\OneDrive\Desktop\homekit\my_accessory.c:10:20: note: previous definition of 'services' was here
10 | homekit_service_t *services[18] = {
| ^~~~~~~~
C:\Users\black\OneDrive\Desktop\homekit\my_accessory.c:34:15: error: invalid initializer
34 | services[3] = &(homekit_service_t){
如何以编程方式生成附加服务?
不能将诸如数组元素赋值之类的可执行语句放在函数外部。如果您想在顶层执行此操作,则必须将其作为数组声明的一部分来执行。
homekit_service_t *services[18] = {
&(homekit_service_t){
.type = HOMEKIT_SERVICE_ACCESSORY_INFORMATION,
.characteristics = (homekit_characteristic_t *[]){
HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
HOMEKIT_CHARACTERISTIC(MANUFACTURER, "Arduino HomeKit"),
HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "0123456"),
HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266/ESP32"),
HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
NULL,
},
},
&(homekit_service_t){
.type = HOMEKIT_SERVICE_SWITCH,
.characteristics = (homekit_characteristic_t *[]){
HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
&cha_switch_on,
NULL,
},
},
NULL,
&(homekit_service_t){
.type = HOMEKIT_SERVICE_SWITCH,
.characteristics = (homekit_characteristic_t *[]){
HOMEKIT_CHARACTERISTIC(NAME, "Switch"),
&cha_switch_on,
NULL,
},
},
};