int application_start( void ) { MicoInit( ); MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)micoNotify_ApListCallback ); wifi_sacn_log("start scan mode, please wait..."); micoWlanStartScan( ); return kNoErr; }
void micokit_ext_mfg_test(mico_Context_t *inContext) { OSStatus err = kUnknownErr; char str[64] = {'\0'}; char mac[6]; int rgb_led_hue = 0; uint8_t dht11_ret = 0; uint8_t dht11_temp_data = 0; uint8_t dht11_hum_data = 0; int light_ret = 0; uint16_t light_sensor_data = 0; int infrared_ret = 0; uint16_t infrared_reflective_data = 0; int32_t bme280_temp = 0; uint32_t bme280_hum = 0; uint32_t bme280_press = 0; UNUSED_PARAMETER(inContext); mico_rtos_init_semaphore(&mfg_test_state_change_sem, 1); err = MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)mico_notify_WifiScanCompleteHandler ); require_noerr( err, exit ); while(1){ switch(mfg_test_module_number){ case 0: // mfg mode start { sprintf(str, "%s\r\nStart:\r\n%s\r\n%s", "TEST MODE", " next: Key2", " prev: Key1"); mf_printf(str); while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, MICO_WAIT_FOREVER)); break; } case 1: // OLED { while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0)) { sprintf(str, "%s OLED\r\n", OLED_MFG_TEST_PREFIX); mf_printf(str); mico_thread_msleep(300); mf_printf(mfg_test_oled_test_string); mico_thread_msleep(300); } OLED_Clear(); break; } case 2: // RGB_LED { sprintf(str, "%s RGB LED\r\nBlink: \r\n R=>G=>B", OLED_MFG_TEST_PREFIX); mf_printf(str); while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0)) { hsb2rgb_led_open(rgb_led_hue, 100, 50); rgb_led_hue += 120; if(rgb_led_hue >= 360){ rgb_led_hue = 0; } mico_thread_msleep(300); } hsb2rgb_led_open(0, 0, 0); break; } case 3: // infrared sensor { while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0)) { infrared_ret = infrared_reflective_read(&infrared_reflective_data); if(0 == infrared_ret){ sprintf(str, "%s Infrared\r\nInfrared: %d", OLED_MFG_TEST_PREFIX, infrared_reflective_data); mf_printf(str); } mico_thread_msleep(300); } break; } case 4: // DC Motor { sprintf(str, "%s DC Motor\r\nRun:\r\n on : 500ms\r\n off: 500ms", OLED_MFG_TEST_PREFIX); mf_printf(str); while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0)) { dc_motor_set(1); mico_thread_msleep(500); dc_motor_set(0); mico_thread_msleep(500); } dc_motor_set(0); break; } case 5: // BME280 { while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0)) { err = bme280_sensor_init(); if(kNoErr != err){ sprintf(str, "%s BME280\r\nMoule not found!", OLED_MFG_TEST_PREFIX); mf_printf(str); // goto next mdoule mico_thread_msleep(500); mfg_test_module_number = (mfg_test_module_number+1)%(MFG_TEST_MAX_MODULE_NUM+1); break; } else{ err = bme280_data_readout(&bme280_temp, &bme280_press, &bme280_hum); if(kNoErr == err){ sprintf(str, "%s BME280\r\nT: %3.1fC\r\nH: %3.1f%%\r\nP: %5.2fkPa", OLED_MFG_TEST_PREFIX, (float)bme280_temp/100, (float)bme280_hum/1024, (float)bme280_press/1000); mf_printf(str); } else{ sprintf(str, "%s BME280\r\nRead error!", OLED_MFG_TEST_PREFIX); mf_printf(str); } } mico_thread_msleep(500); } break; } case 6: // DHT11 { while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0)) { dht11_ret = DHT11_Read_Data(&dht11_temp_data, &dht11_hum_data); if(0 == dht11_ret){ sprintf(str, "%s DHT11\r\nT: %3.1fC\r\nH: %3.1f%%", OLED_MFG_TEST_PREFIX, (float)dht11_temp_data, (float)dht11_hum_data); mf_printf(str); } mico_thread_sleep(1); // DHT11 must >= 1s } break; } case 7: // Light sensor { while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0)) { light_ret = light_sensor_read(&light_sensor_data); if(0 == light_ret){ sprintf(str, "%s Light\r\nLight: %d", OLED_MFG_TEST_PREFIX, light_sensor_data); mf_printf(str); } mico_thread_msleep(300); } break; } case 8: // wifi { wlan_get_mac_address(mac); sprintf(str, "%s Wi-Fi\r\nMAC:\r\n %02X%02X%02X%02X%02X%02X", OLED_MFG_TEST_PREFIX, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); mf_printf(str); //mico_thread_msleep(500); scanap_done = false; micoWlanStartScan(); while((!scanap_done) || (kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, MICO_WAIT_FOREVER))); break; } default: goto exit; // error break; } } exit: mico_thread_sleep(MICO_NEVER_TIMEOUT); }
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 按键检测 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/ void key_check(mico_i2c_device_t *slave_device) { //SlaveMessge slave_messge; KvKeyMessge key_messge; Set_REST;//开启按键检测 KvVarProtect(TRUE); if(!state_key_keep) { //大风键处理 if(!Get_KEY_HIG) { KEY.KEY_HIG++; if(KEY.KEY_HIG == 300) { mico_log("in high wind key\r\n"); state_key_keep=1; /////////////////////////////////////////////////////////////////////// micoWlanStartScan(); wifi_display=1; /////////////////////////////////////////////////////////////////////// } } else { /////////////////////////////////////////////////////////////////////// //短按键程序 if(KEY.KEY_HIG>15&&KEY.KEY_HIG<100) { state_key_keep=1; /********上报按键键值**********************************/ seng_key_messge(kv_key_hig,KEY_SHORT); /**************---------------------------******************/ /*****************************************************以下内容可以注释**********************************/ if(kv_sys_sate.STATE_SYS ==1) { STATE_BUZ=buzz_one_sing; if(kv_sys_sate.STATE_WIND == 6||kv_sys_sate.STATE_WIND == 3)//爆抄 kv_sys_sate.STATE_WIND = 0; else kv_sys_sate.STATE_WIND = 6; } else if(kv_sys_sate.STATE_SYS ==2)//延时关机退出延时 { STATE_BUZ=buzz_one_sing; kv_sys_sate.STATE_SYS = 1; } /**************----------------------------------------------------------------------------------------------------------------******************/ } /////////////////////////////////////////////////////////////////////// KEY.KEY_HIG=0;// } //小风键处理 if(!Get_KEY_LOW) { KEY.KEY_LOW++; if(KEY.KEY_LOW == 15) { KEY.KEY_LOW= 0; state_key_keep=1; /********上报按键键值**********************************/ seng_key_messge(kv_key_low,KEY_SHORT); /**************---------------------------******************/ /*****************************************************以下内容可以注释**********************************/ #if 0 if(kv_sys_sate.STATE_SYS == 1) { STATE_BUZ=buzz_one_sing; if(kv_sys_sate.STATE_WIND ==1) kv_sys_sate.STATE_WIND = 0; else if(kv_sys_sate.STATE_WIND == 2) kv_sys_sate.STATE_WIND = 1; else if(kv_sys_sate.STATE_WIND == 3) kv_sys_sate.STATE_WIND = 2; else kv_sys_sate.STATE_WIND = 3; } #else if(kv_sys_sate.STATE_SYS == 1) { STATE_BUZ=buzz_one_sing; if(kv_sys_sate.STATE_WIND ==2 || kv_sys_sate.STATE_WIND ==1) kv_sys_sate.STATE_WIND = 0; else kv_sys_sate.STATE_WIND = 2; } #endif else if(kv_sys_sate.STATE_SYS == 2)//延时关机退出延时 { STATE_BUZ=buzz_one_sing; kv_sys_sate.STATE_SYS = 1; } /**************----------------------------------------------------------------------------------------------------------------******************/ } } else KEY.KEY_LOW=0; //照明键处理 if(!Get_KEY_LIGHT) { KEY.KEY_LIGHT++; if(KEY.KEY_LIGHT == 15) { KEY.KEY_LIGHT= 0; state_key_keep=1; /********上报按键键值**********************************/ seng_key_messge(kv_key_light,KEY_SHORT); /**************---------------------------******************/ /*****************************************************以下内容可以注释**********************************/ // BUZZ.STATE_BUZ = 1; STATE_BUZ=buzz_one_sing; if(kv_sys_sate.STATE_LIGHT) kv_sys_sate.STATE_LIGHT=0; else kv_sys_sate.STATE_LIGHT=1; /**************----------------------------------------------------------------------------------------------------------------******************/ } } else KEY.KEY_LIGHT=0; //网络按键处理 if(!Get_KEY_NET)/////////////////////////////////////////////////////////网络按键处理 { KEY.KEY_NET++; if(KEY.KEY_NET==300) { state_key_keep=1; /********上报按键键值**********************************/ seng_key_messge(kv_key_net,KEY_LONG); /**************---------------------------******************/ /*****************************************************此处联网按键长按处理**********************************/ STATE_BUZ=buzz_one_sing; // kv_sys_sate.STATE_NET=0x02; /**************----------------------------------------------------------------------------------------------------------------******************/ } } else { if((KEY.KEY_NET>15)&&(KEY.KEY_NET<100)) { state_key_keep=1; /********上报按键键值**********************************/ seng_key_messge(kv_key_net,KEY_SHORT); /****************---------------------------******************/ /*****************************************************此处联网按键短按处理**********************************/ STATE_BUZ=buzz_one_sing; /**************----------------------------------------------------------------------------------------------------------------******************/ // kv_sys_sate.STATE_NET=0x01; } KEY.KEY_NET=0; } //开关键处理 if(!Get_KEY_POWER) { KEY.KEY_POWER++; if(KEY.KEY_POWER == 15) { // mico_log("come here the power key buuton"); /********上报按键键值**********************************/ seng_key_messge(kv_key_power,KEY_SHORT); /**************---------------------------******************/ KEY.KEY_POWER= 0; state_key_keep=1; /*****************************************************以下内容可以注释**********************************/ if(kv_sys_sate.STATE_SYS == 1) { if(kv_sys_sate.STATE_WIND == 0) { // BUZZ.STATE_BUZ = 3; STATE_BUZ=buzz_system_off; /* slave_messge.id=ID_BUZZ slave_messge.value=buzz_system_off; if(FALSE==Set_Slave_Vaule(slave_device,&slave_messge)) { mico_log("set the buzze vaue failed"); }*/ kv_sys_sate.STATE_SYS = 0; kv_sys_sate.STATE_LIGHT = 0; } else { //BUZZ.STATE_BUZ = 1; STATE_BUZ=buzz_one_sing; /* slave_messge.id=ID_BUZZ slave_messge.value=buzz_one_sing; if(FALSE==Set_Slave_Vaule(slave_device,&slave_messge)) { mico_log("set the buzze vaue failed"); }*/ kv_sys_sate.STATE_SYS = 2; } } else if(kv_sys_sate.STATE_SYS == 2) { //BUZZ.STATE_BUZ = 3; STATE_BUZ=buzz_system_off; /* slave_messge.id=ID_BUZZ slave_messge.value=buzz_system_off; if(FALSE==Set_Slave_Vaule(slave_device,&slave_messge)) { mico_log("set the buzze vaue failed"); }*/ kv_sys_sate.STATE_SYS = 0; kv_sys_sate.STATE_LIGHT = 0; } else { //BUZZ.STATE_BUZ = 2; STATE_BUZ=buzz_system_on; /* slave_messge.id=ID_BUZZ slave_messge.value=buzz_system_on; if(FALSE==Set_Slave_Vaule(slave_device,&slave_messge)) { mico_log("set the buzze vaue failed"); } */ kv_sys_sate.STATE_SYS = 1; } /**************----------------------------------------------------------------------------------------------------------------******************/ } } else KEY.KEY_POWER=0; } KvVarProtect(FALSE); if(Get_KEY_HIG&&Get_KEY_LOW&&Get_KEY_LIGHT&&Get_KEY_NET&&Get_KEY_POWER) { //KEY.KEY_KEEP++; state_key_keep=0; KEY.KEY_KEEP=0; } else { KEY.KEY_KEEP++; //state_key_keep=0; // KEY.KEY_KEEP=0; } /*if((KEY.KEY_LOW||KEY.KEY_HIG||KEY.KEY_LIGHT||KEY.KEY_NET||KEY.KEY_POWER)==0) { state_key_keep=0; KEY.KEY_KEEP=0; //KEY.KEY_KEEP++; } else { KEY.KEY_KEEP++; //state_key_keep=0; //KEY.KEY_KEEP=0; }*/ if(KEY.KEY_KEEP>500)//复位按键 Clr_REST; }