/* * Copyright (c) 2020 AIIT XUOS Lab * XiUOS is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: * http://license.coscl.org.cn/MulanPSL2 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. */ #include #include #include extern int SensorFrameworkInit(void); extern int AdapterFrameworkInit(void); extern int Adapter4GInit(void); extern int AdapterNbiotInit(void); extern int AdapterBlueToothInit(void); extern int AdapterWifiInit(void); extern int AdapterEthernetInit(void); extern int AdapterZigbeeInit(void); extern int AdapterLoraInit(void); extern int D124VoiceInit(void); extern int Hs300xTemperatureInit(void); extern int Hs300xHumidityInit(void); extern int Ps5308Pm1_0Init(void); extern int Ps5308Pm2_5Init(void); extern int Ps5308Pm10Init(void); extern int Zg09Co2Init(void); extern int As830Ch4Init(void); extern int Tb600bIaq10IaqInit(void); extern int Tb600bTvoc10TvocInit(void); extern int Tb600bWqHcho1osInit(void); extern int lv_port_init(void); typedef int (*InitFunc)(void); struct InitDesc { const char* fn_name; const InitFunc fn; }; static int AppInitDesc(struct InitDesc sub_desc[]) { int i = 0; int ret = 0; for( i = 0; sub_desc[i].fn != NULL; i++ ) { ret = sub_desc[i].fn(); printf("initialize %s %s\n",sub_desc[i].fn_name, ret == 0 ? "success" : "failed"); if(0 != ret) { break; } } return ret; } static struct InitDesc framework[] = { #ifdef SUPPORT_SENSOR_FRAMEWORK { "sensor_framework", SensorFrameworkInit }, #endif #ifdef SUPPORT_CONNECTION_FRAMEWORK { "connection_framework", AdapterFrameworkInit }, #endif { "NULL", NULL }, }; static struct InitDesc sensor_desc[] = { #ifdef SENSOR_DEVICE_D124 { "d124_voice", D124VoiceInit }, #endif #ifdef SENSOR_DEVICE_HS300X #ifdef SENSOR_QUANTITY_HS300X_TEMPERATURE { "hs300x_temperature", Hs300xTemperatureInit }, #endif #ifdef SENSOR_QUANTITY_HS300X_HUMIDITY { "hs300x_humidity", Hs300xHumidityInit }, #endif #endif #ifdef SENSOR_PS5308 #ifdef SENSOR_QUANTITY_PS5308_PM1_0 { "ps5308_pm1_0", Ps5308Pm1_0Init }, #endif #ifdef SENSOR_QUANTITY_PS5308_PM2_5 { "ps5308_pm2_5", Ps5308Pm2_5Init }, #endif #ifdef SENSOR_QUANTITY_PS5308_PM10 { "ps5308_pm10", Ps5308Pm10Init }, #endif #endif #ifdef SENSOR_ZG09 { "zg09_co2", Zg09Co2Init }, #endif #ifdef SENSOR_AS830 { "ch4_as830", As830Ch4Init }, #endif #ifdef SENSOR_TB600B_IAQ10 { "iaq_tb600b_iaq10", Tb600bIaq10IaqInit }, #endif #ifdef SENSOR_TB600B_TVOC10 { "tvoc_tb600b_tvoc10", Tb600bTvoc10TvocInit }, #endif #ifdef SENSOR_TB600B_WQ_HCHO1OS { "tvoc_tb600b_wq_hcho1os", Tb600bWqHcho1osInit }, #endif { "NULL", NULL }, }; static struct InitDesc connection_desc[] = { #ifdef CONNECTION_ADAPTER_4G { "4G adapter", Adapter4GInit}, #endif #ifdef CONNECTION_ADAPTER_NB { "NB adpter", AdapterNbiotInit}, #endif #ifdef CONNECTION_ADAPTER_ZIGBEE { "zigbee adapter", AdapterZigbeeInit}, #endif #ifdef CONNECTION_ADAPTER_BLUETOOTH { "bluetooth adapter", AdapterBlueToothInit}, #endif #ifdef CONNECTION_ADAPTER_WIFI { "wifi adapter", AdapterWifiInit}, #endif #ifdef CONNECTION_ADAPTER_ETHERNET { "ethernet adapter", AdapterEthernetInit}, #endif #ifdef CONNECTION_ADAPTER_LORA { "lora adapter", AdapterLoraInit}, #endif { "NULL", NULL }, }; /** * This function will init sensor framework and all sub sensors * @param sub_desc framework * */ static int SensorDeviceFrameworkInit(struct InitDesc sub_desc[]) { int i = 0; int ret = 0; for ( i = 0; sub_desc[i].fn != NULL; i++ ) { if (0 == strncmp(sub_desc[i].fn_name, "sensor_framework", strlen("sensor_framework"))) { ret = sub_desc[i].fn(); break; } } if (0 == ret) { printf("initialize sensor_framework success.\n"); AppInitDesc(sensor_desc); } return ret; } /** * This function will init connection framework and all sub components * @param sub_desc framework * */ static int ConnectionDeviceFrameworkInit(struct InitDesc sub_desc[]) { int i = 0; int ret = 0; for ( i = 0; sub_desc[i].fn != NULL; i++ ) { if (0 == strncmp(sub_desc[i].fn_name, "connection_framework", strlen("connection_framework"))) { ret = sub_desc[i].fn(); break; } } if (0 == ret) { printf("initialize connection_framework success.\n"); AppInitDesc(connection_desc); } return ret; } /** * This function will init system framework * */ int FrameworkInit(void) { #ifdef SUPPORT_SENSOR_FRAMEWORK SensorDeviceFrameworkInit(framework); #endif #ifdef SUPPORT_CONNECTION_FRAMEWORK ConnectionDeviceFrameworkInit(framework); #endif #ifdef LIB_LV lv_port_init(); #endif return 0; }