int app_p2p_start(app_p2p_role_t role) { if (role == ROLE_AUTO_GO) { p2p_conf.auto_go = ROLE_AUTO_GO; } else { p2p_conf.auto_go = ROLE_UNDECIDED; } app_ctrl_notify_event(AF_EVT_INTERNAL_P2P_REQUESTED, NULL); return WM_SUCCESS; }
int app_p2p_session_start(char *pin, struct p2p_scan_result *remote) { if (pin) { /* This is a pin session */ ipin = atoi(pin); pin_flag = 1; } else { /* This is a PBC session */ pin_flag = 0; } if (remote) { memcpy(&p2p_remote, remote, sizeof(struct p2p_scan_result)); scan_ptr = &p2p_remote; } else scan_ptr = NULL; app_ctrl_notify_event(AF_EVT_INTERNAL_P2P_SESSION_REQUESTED, NULL); return WM_SUCCESS; }
static int p2p_callback(enum p2p_event event, void *data, uint16_t len) { switch (event) { case P2P_STARTED: app_l("P2P Started"); break; case P2P_AUTO_GO_STARTED: app_l("P2P Auto GO Started"); p2p_role_data.role = ROLE_AUTO_GO; p2p_role_data.data = data; app_ctrl_notify_event(AF_EVT_P2P_STARTED, &p2p_role_data); break; case P2P_DEVICE_STARTED: p2p_role_data.role = ROLE_UNDECIDED; p2p_role_data.data = data; app_ctrl_notify_event(AF_EVT_P2P_STARTED, &p2p_role_data); app_l("P2P Device Started"); break; case P2P_CLIENT_STARTED: app_l("P2P Client Started"); p2p_role_data.role = ROLE_CLIENT; p2p_role_data.data = data; app_ctrl_notify_event(AF_EVT_P2P_ROLE_NEGOTIATED, &p2p_role_data); break; case P2P_GO_STARTED: app_l("P2P GO Started"); p2p_role_data.role = ROLE_GO; p2p_role_data.data = data; app_ctrl_notify_event(AF_EVT_P2P_ROLE_NEGOTIATED, &p2p_role_data); break; case P2P_SESSION_STARTED: app_l("P2P Session Started"); app_ctrl_notify_event(AF_EVT_P2P_SESSION_STARTED, data); break; case P2P_SESSION_PIN_CHKSUM_FAILED: app_e("P2P PIN Checksum Failed"); app_ctrl_notify_event(AF_EVT_INTERNAL_P2P_SESSION_FAILED, data); break; case P2P_SESSION_ABORTED: app_w("P2P Session Aborted"); app_ctrl_notify_event(AF_EVT_INTERNAL_P2P_SESSION_FAILED, data); break; case P2P_SESSION_TIMEOUT: app_e("P2P Session Failed"); app_ctrl_notify_event(AF_EVT_INTERNAL_P2P_SESSION_FAILED, data); break; case P2P_SESSION_SUCCESSFUL: app_l("P2P Session Successful"); app_ctrl_notify_event(AF_EVT_INTERNAL_P2P_SESSION_SUCCESSFUL, data); break; case P2P_AP_SESSION_SUCCESSFUL: app_l("P2P AP Session Successful"); app_ctrl_notify_event(AF_EVT_INTERNAL_P2P_AP_SESSION_SUCCESSFUL, data); break; case P2P_SESSION_FAILED: app_e("P2P Session Failed"); app_ctrl_notify_event(AF_EVT_INTERNAL_P2P_SESSION_FAILED, data); break; case P2P_FAILED: app_e("P2P Failed"); app_ctrl_notify_event(AF_EVT_P2P_FAILED, data); break; case P2P_FINISHED: app_l("P2P Finished"); app_ctrl_notify_event(AF_EVT_P2P_FINISHED, data); break; } return WM_SUCCESS; }
void event_wlan_init_done(void *data) { int ret; char temp[20]; //init cfg_struct from otp config_cfg_struct(); //print did & mac uint32_t digital_did = get_device_did_digital(); //for factory check did and mac wmprintf("digital_did is %d \r\n", digital_did); snprintf_safe(temp,sizeof(temp),"%.2x%.2x%.2x%.2x%.2x%.2x", cfg_struct.mac_address[0], cfg_struct.mac_address[1], cfg_struct.mac_address[2], cfg_struct.mac_address[3], cfg_struct.mac_address[4], cfg_struct.mac_address[5] ); wmprintf("mac address is %s\r\n",temp);//for factory checking wmprintf("last four byte of key is %.2x%.2x%.2x%.2x\r\n",cfg_struct.key[OT_PROTO_DEVICE_KEY_SIZE -4], cfg_struct.key[OT_PROTO_DEVICE_KEY_SIZE -3], cfg_struct.key[OT_PROTO_DEVICE_KEY_SIZE -2], cfg_struct.key[OT_PROTO_DEVICE_KEY_SIZE -1] ); //print chip boot status info if (is_factory_mode_enable()) { wmprintf(FACTORY_STARTUP_PASS); } else { wmprintf(FACTORY_NORMAL_BOOT); } //gen token deal_with_token(false); //set wifi work channel wlan_set_country(COUNTRY_CN); #ifndef RELEASE LOG_DEBUG("dump token value\r\n"); xiaomi_dump_hex(token,16); #endif ret = netif_add_udp_broadcast_filter(fixed_cfg_data.lport); if (ret != WM_SUCCESS) { LOG_ERROR("Failed to add ot local port to boardcast filter \r\n"); } //ot start as idle start_otd(); #ifdef MIIO_COMMANDS OTN_ONLINE(mum_online_notifier); OTN_OFFLINE(mum_offline_notifier); #endif OTN_ONLINE(ot_online_notifier); OTN_ONLINE(ot_offline_notifier); //generate dhcp name strcpy(dhcp_name_strval,cfg_struct.model); char *c = dhcp_name_strval; while(*c) { if('.' == *c) { *c = '-'; } c++; } strcat(dhcp_name_strval,"_miio"); snprintf_safe(temp,20,"%lu",digital_did); strcat(dhcp_name_strval,temp); /* * Start mDNS and advertize our hostname using mDNS */ init_mdns_service_struct(dhcp_name_strval); ret = is_factory_mode_enable(); //factory mode,connect to miio_default if(ret) { wmprintf("in factory mode, will auto connect to miio_default\r\n"); struct wlan_network factory_net; memset(&factory_net,0,sizeof(struct wlan_network)); strcpy(factory_net.name,FACTORY_NET_SSID); strcpy(factory_net.ssid,FACTORY_NET_SSID); factory_net.security.type = WLAN_SECURITY_WPA2; factory_net.security.psk_len = strlen(FACTORY_NET_PASSPHASE); memcpy(factory_net.security.psk,FACTORY_NET_PASSPHASE,strlen(FACTORY_NET_PASSPHASE)); factory_net.ip.ipv4.addr_type = 1; //use dhcp //will connect to miio_default app_sta_start_by_network(&factory_net); goto safe_exit; } g_provisioned.state = (int) data; //already provisioned if(APP_NETWORK_PROVISIONED == g_provisioned.state) { LOG_DEBUG("already provisioned \r\n"); set_device_network_state(SMT_CONNECTING); app_sta_start(); //just start sta mode , & it will auto connect to network goto safe_exit; } //not provisioned & should start uap //Note: this interface only should be used for testing if(ENABLE_UAP == get_trigger_uap_info()) { wmprintf("should start UAP \r\n"); app_uap_start_on_channel_with_dhcp(construct_ssid_for_smt_cfg(), NULL,DEFAULT_AP_CHANNEL); goto safe_exit; } #if defined(ENABLE_AIRKISS) && (ENABLE_AIRKISS == 1) //not yet provisioned,start kuailian set_device_network_state(WAIT_SMT_TRIGGER); //trigger prov app_ctrl_notify_event(AF_EVT_INTERNAL_PROV_REQUESTED, (void *)NULL); //trigger scan void * msg; msg = (void *)SCAN_ROUTER; os_queue_send(&main_thread_sched_queue, &msg, OS_NO_WAIT); #else LOG_DEBUG("start uap mode for smart config \r\n"); app_uap_start_on_channel_with_dhcp(construct_ssid_for_smt_cfg(), NULL,DEFAULT_AP_CHANNEL); //start monitor timer if(smt_cfg_monitor_init() ==WM_SUCCESS) { smt_cfg_monitor_start(); } #endif safe_exit: return; }