From 8b8f7c9de4c7685869f2ecd58c91f7ad6d69274f Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Tue, 25 Aug 2015 09:31:02 -0700 Subject: [PATCH 01/11] Use fixed symbol rename list To keep things from changing out from under us as we slowly replace bits of the SDK libs, changing Makefiles to not auto-generate the list of symbols to rename, but always use the same list every time. --- common.mk | 22 +- lib/allsymbols.rename | 839 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 842 insertions(+), 19 deletions(-) create mode 100644 lib/allsymbols.rename diff --git a/common.mk b/common.mk index 323d13d..e05e78e 100644 --- a/common.mk +++ b/common.mk @@ -280,25 +280,9 @@ $(BUILD_DIR)sdklib/%_stage1.a: $(ROOT)lib/%.a $(BUILD_DIR)sdklib/%.remove | $(BU $(Q) cat $< > $@ $(Q) $(AR) d $@ @$(word 2,$^) -# Generate a regex to match symbols we don't want to rename, listed in -# symbols_norename.txt -$(BUILD_DIR)sdklib/norename.match: $(ROOT)lib/symbols_norename.txt | $(BUILD_DIR)sdklib - cat $< | grep -v "^#" | sed ':begin;$!N;s/\n/\\|/;tbegin' > $@ - -# Stage 2: Build a list of defined symbols per library, renamed with sdk_ prefix -$(BUILD_DIR)sdklib/%.rename: $(BUILD_DIR)sdklib/%_stage1.a $(BUILD_DIR)sdklib/norename.match - @echo "SDK processing stage 2: Building symbol list for $< -> $@" - $(Q) $(OBJDUMP) -t $< | grep ' g ' \ - | sed -r 's/^.+ ([^ ]+)$$/\1 sdk_\1/' \ - | grep -v `cat $(BUILD_DIR)sdklib/norename.match` > $@ - -# Build a master list of all SDK-defined symbols to rename across all libraries -$(BUILD_DIR)sdklib/allsymbols.rename: $(patsubst %.a,%.rename,$(SDK_PROCESSED_LIBS)) - cat $^ > $@ - -# Stage 3: Redefine all SDK symbols as sdk_, weaken all symbols. -$(BUILD_DIR)sdklib/%.a: $(BUILD_DIR)sdklib/%_stage1.a $(BUILD_DIR)sdklib/allsymbols.rename - @echo "SDK processing stage 3: Renaming symbols in SDK library $< -> $@" +# Stage 2: Redefine all SDK symbols as sdk_, weaken all symbols. +$(BUILD_DIR)sdklib/%.a: $(BUILD_DIR)sdklib/%_stage1.a $(ROOT)lib/allsymbols.rename + @echo "SDK processing stage 2: Renaming symbols in SDK library $< -> $@" $(Q) $(OBJCOPY) --redefine-syms $(word 2,$^) --weaken $< $@ # include "dummy component" for the 'program' object files, defined in the Makefile diff --git a/lib/allsymbols.rename b/lib/allsymbols.rename new file mode 100644 index 0000000..2f455f0 --- /dev/null +++ b/lib/allsymbols.rename @@ -0,0 +1,839 @@ +aes_decrypt_deinit sdk_aes_decrypt_deinit +aes_decrypt_init sdk_aes_decrypt_init +aes_decrypt sdk_aes_decrypt +aes_encrypt_deinit sdk_aes_encrypt_deinit +aes_encrypt_init sdk_aes_encrypt_init +aes_encrypt sdk_aes_encrypt +aes_unwrap sdk_aes_unwrap +aes_wrap sdk_aes_wrap +ant_switch_init sdk_ant_switch_init +auth_type sdk_auth_type +bb_init sdk_bb_init +bbpll_cal_flag sdk_bbpll_cal_flag +bbpll_cal sdk_bbpll_cal +cal_rf_ana_gain sdk_cal_rf_ana_gain +cannel_scan_connect_state sdk_cannel_scan_connect_state +ccmp sdk_ccmp +change_bbpll160 sdk_change_bbpll160 +change_bbpll160_sleep sdk_change_bbpll160_sleep +check_data_flag sdk_check_data_flag +check_data_func sdk_check_data_func +check_result sdk_check_result +chip_60_set_channel sdk_chip_60_set_channel +chip6_phy_init_ctrl sdk_chip6_phy_init_ctrl +chip6_sleep_params sdk_chip6_sleep_params +chip_v6_get_sense sdk_chip_v6_get_sense +chip_v6_initialize_bb sdk_chip_v6_initialize_bb +chip_v6_rf_init sdk_chip_v6_rf_init +chip_v6_rxmax_ext_ana sdk_chip_v6_rxmax_ext_ana +chip_v6_rxmax_ext_dig sdk_chip_v6_rxmax_ext_dig +chip_v6_rxmax_ext sdk_chip_v6_rxmax_ext +chip_v6_set_chanfreq sdk_chip_v6_set_chanfreq +chip_v6_set_chan_misc sdk_chip_v6_set_chan_misc +chip_v6_set_chan_offset sdk_chip_v6_set_chan_offset +chip_v6_set_chan_rx_cmp sdk_chip_v6_set_chan_rx_cmp +chip_v6_set_chan sdk_chip_v6_set_chan +chip_v6_set_chan_wakeup sdk_chip_v6_set_chan_wakeup +chip_v6_set_sense sdk_chip_v6_set_sense +chip_v6_unset_chanfreq sdk_chip_v6_unset_chanfreq +chip_version sdk_chip_version +chm_acquire_lock sdk_chm_acquire_lock +chm_cancel_op sdk_chm_cancel_op +chm_check_same_channel sdk_chm_check_same_channel +chm_end_op sdk_chm_end_op +chm_freq2index sdk_chm_freq2index +chm_get_current_channel sdk_chm_get_current_channel +chm_init sdk_chm_init +chm_release_lock sdk_chm_release_lock +chm_return_home_channel sdk_chm_return_home_channel +chm_set_current_channel sdk_chm_set_current_channel +chm_start_op sdk_chm_start_op +clockgate_watchdog sdk_clockgate_watchdog +cnx_add_rc sdk_cnx_add_rc +cnx_attach sdk_cnx_attach +cnx_bss_alloc sdk_cnx_bss_alloc +cnx_connect_timeout sdk_cnx_connect_timeout +cnx_node_alloc sdk_cnx_node_alloc +cnx_node_join sdk_cnx_node_join +cnx_node_leave sdk_cnx_node_leave +cnx_node_remove sdk_cnx_node_remove +cnx_node_search sdk_cnx_node_search +cnx_rc_search sdk_cnx_rc_search +cnx_rc_update_age sdk_cnx_rc_update_age +cnx_rc_update_rssi sdk_cnx_rc_update_rssi +cnx_rc_update_state_metric sdk_cnx_rc_update_state_metric +cnx_remove_rc sdk_cnx_remove_rc +cnx_sta_associated sdk_cnx_sta_associated +cnx_sta_connect_cmd sdk_cnx_sta_connect_cmd +cnx_sta_connect_led_timer_cb sdk_cnx_sta_connect_led_timer_cb +cnx_sta_leave sdk_cnx_sta_leave +cnx_start_handoff_cb sdk_cnx_start_handoff_cb +cnx_sta_scan_cmd sdk_cnx_sta_scan_cmd +cnx_update_bss_more sdk_cnx_update_bss_more +cnx_update_bss sdk_cnx_update_bss +correct_rf_ana_gain sdk_correct_rf_ana_gain +cpu_overclock sdk_cpu_overclock +data_collect sdk_data_collect +dbg_stop_hw_wdt sdk_dbg_stop_hw_wdt +dbg_stop_sw_wdt sdk_dbg_stop_sw_wdt +dcoindex2txbbgain sdk_dcoindex2txbbgain +debug_timerfn sdk_debug_timerfn +debug_timer sdk_debug_timer +deep_sleep_en sdk_deep_sleep_en +dhcp_bind_check sdk_dhcp_bind_check +dhcpc_flag sdk_dhcpc_flag +do_noisefloor_lsleep_v50 sdk_do_noisefloor_lsleep_v50 +do_noisefloor sdk_do_noisefloor +do_pwctrl_flag sdk_do_pwctrl_flag +dpd_db2linear sdk_dpd_db2linear +dpd_index sdk_dpd_index +dpd_init sdk_dpd_init +dpd_mem_write sdk_dpd_mem_write +dpd_scale_set sdk_dpd_scale_set +eagle_auth_done sdk_eagle_auth_done +eapol_txcb sdk_eapol_txcb +eloop_cancel_timeout sdk_eloop_cancel_timeout +eloop_register_timeout sdk_eloop_register_timeout +esf_buf_alloc sdk_esf_buf_alloc +esf_buf_recycle sdk_esf_buf_recycle +esf_buf_setup sdk_esf_buf_setup +esf_rx_buf_alloc sdk_esf_rx_buf_alloc +ets_delay_us sdk_ets_delay_us +ets_timer_arm_ms_us sdk_ets_timer_arm_ms_us +ets_timer_arm sdk_ets_timer_arm +ets_timer_arm_us sdk_ets_timer_arm_us +ets_timer_disarm sdk_ets_timer_disarm +ets_timer_done sdk_ets_timer_done +ets_timer_handler_isr sdk_ets_timer_handler_isr +ets_timer_init sdk_ets_timer_init +ets_timer_setfn sdk_ets_timer_setfn +ets_update_cpu_frequency sdk_ets_update_cpu_frequency +flashchip sdk_flashchip +g_cnx_probe_rc_list_cb sdk_g_cnx_probe_rc_list_cb +gen_rx_gain_table sdk_gen_rx_gain_table +GetAccess sdk_GetAccess +get_check_flag sdk_get_check_flag +get_chip_version sdk_get_chip_version +get_fcc_1m2m_pwr_offset sdk_get_fcc_1m2m_pwr_offset +get_noisefloor_sat sdk_get_noisefloor_sat +get_pwctrl_correct sdk_get_pwctrl_correct +get_rf_gain_qdb sdk_get_rf_gain_qdb +get_sar_dout sdk_get_sar_dout +get_target_power_offset sdk_get_target_power_offset +g_ic sdk_g_ic +g_phyFuns_instance sdk_g_phyFuns_instance +g_phyFuns sdk_g_phyFuns +gpio_output_set sdk_gpio_output_set +gScanStruct sdk_gScanStruct +hardware_reject sdk_hardware_reject +hex2byte sdk_hex2byte +hexstr2bin sdk_hexstr2bin +hmac_md5 sdk_hmac_md5 +hmac_md5_vector sdk_hmac_md5_vector +hmac_sha1 sdk_hmac_sha1 +hmac_sha1_vector sdk_hmac_sha1_vector +hostapd_config_defaults_bss sdk_hostapd_config_defaults_bss +hostapd_config_defaults sdk_hostapd_config_defaults +hostapd_get_psk sdk_hostapd_get_psk +hostapd_mac_comp_empty sdk_hostapd_mac_comp_empty +hostapd_mac_comp sdk_hostapd_mac_comp +hostapd_maclist_found sdk_hostapd_maclist_found +hostapd_rate_found sdk_hostapd_rate_found +hostapd_setup_wpa_psk sdk_hostapd_setup_wpa_psk +hostapd_wep_key_cmp sdk_hostapd_wep_key_cmp +hostap_handle_timer sdk_hostap_handle_timer +hostap_input sdk_hostap_input +ic_bss_info_update sdk_ic_bss_info_update +ic_disable_interface sdk_ic_disable_interface +ic_enable_interface sdk_ic_enable_interface +ic_get_addr sdk_ic_get_addr +ic_get_gtk_alg sdk_ic_get_gtk_alg +ic_get_ptk_alg sdk_ic_get_ptk_alg +ic_interface_enabled sdk_ic_interface_enabled +ic_interface_is_p2p sdk_ic_interface_is_p2p +ic_is_pure_sta sdk_ic_is_pure_sta +ic_remove_key sdk_ic_remove_key +ic_set_gtk_alg sdk_ic_set_gtk_alg +ic_set_key sdk_ic_set_key +ic_set_opmode sdk_ic_set_opmode +ic_set_ptk_alg sdk_ic_set_ptk_alg +ic_set_sta sdk_ic_set_sta +ic_set_vif sdk_ic_set_vif +ieee80211_addbasicrates sdk_ieee80211_addbasicrates +ieee80211_add_htcap sdk_ieee80211_add_htcap +ieee80211_add_htcap_vendor sdk_ieee80211_add_htcap_vendor +ieee80211_add_htinfo sdk_ieee80211_add_htinfo +ieee80211_add_htinfo_vendor sdk_ieee80211_add_htinfo_vendor +ieee80211_add_rates sdk_ieee80211_add_rates +ieee80211_addr_bcast sdk_ieee80211_addr_bcast +ieee80211_add_xrates sdk_ieee80211_add_xrates +ieee80211_alloc_challenge sdk_ieee80211_alloc_challenge +ieee80211_alloc_proberesp sdk_ieee80211_alloc_proberesp +ieee80211_beacon_alloc sdk_ieee80211_beacon_alloc +ieee80211_chan2ieee sdk_ieee80211_chan2ieee +ieee80211_compute_duration sdk_ieee80211_compute_duration +ieee80211_crypto_attach sdk_ieee80211_crypto_attach +ieee80211_crypto_available sdk_ieee80211_crypto_available +ieee80211_crypto_decap sdk_ieee80211_crypto_decap +ieee80211_crypto_encap sdk_ieee80211_crypto_encap +ieee80211_crypto_setkey sdk_ieee80211_crypto_setkey +ieee80211_decap sdk_ieee80211_decap +ieee80211_deliver_data sdk_ieee80211_deliver_data +ieee80211_dot11Rate_rix sdk_ieee80211_dot11Rate_rix +ieee80211_find_channel_byieee sdk_ieee80211_find_channel_byieee +ieee80211_find_channel sdk_ieee80211_find_channel +ieee80211_get_11g_ratetable sdk_ieee80211_get_11g_ratetable +ieee80211_getcapinfo sdk_ieee80211_getcapinfo +ieee80211_getmgtframe sdk_ieee80211_getmgtframe +ieee80211_get_ratetable sdk_ieee80211_get_ratetable +ieee80211_hostap_attach sdk_ieee80211_hostap_attach +ieee80211_ht_attach sdk_ieee80211_ht_attach +ieee80211_ht_node_cleanup sdk_ieee80211_ht_node_cleanup +ieee80211_ht_node_init sdk_ieee80211_ht_node_init +ieee80211_ht_updateparams sdk_ieee80211_ht_updateparams +ieee80211_ieee2mhz sdk_ieee80211_ieee2mhz +ieee80211_ifattach sdk_ieee80211_ifattach +ieee80211_iserp_rateset sdk_ieee80211_iserp_rateset +ieee80211_mgmt_output sdk_ieee80211_mgmt_output +ieee80211_mhz2ieee sdk_ieee80211_mhz2ieee +ieee80211_mlme_connect_bss sdk_ieee80211_mlme_connect_bss +ieee80211_node_pwrsave sdk_ieee80211_node_pwrsave +ieee80211_opcap sdk_ieee80211_opcap +ieee80211_output_pbuf sdk_ieee80211_output_pbuf +ieee80211_parse_action sdk_ieee80211_parse_action +ieee80211_parse_beacon sdk_ieee80211_parse_beacon +ieee80211_parse_htcap sdk_ieee80211_parse_htcap +ieee80211_parse_rsn sdk_ieee80211_parse_rsn +ieee80211_parse_wmeparams sdk_ieee80211_parse_wmeparams +ieee80211_parse_wpa sdk_ieee80211_parse_wpa +ieee80211_phy_init sdk_ieee80211_phy_init +ieee80211_phy_type_get sdk_ieee80211_phy_type_get +ieee80211_proto_attach sdk_ieee80211_proto_attach +ieee80211_psq_cleanup sdk_ieee80211_psq_cleanup +ieee80211_psq_init sdk_ieee80211_psq_init +ieee80211_pwrsave sdk_ieee80211_pwrsave +ieee80211_recv_action_register sdk_ieee80211_recv_action_register +ieee80211_recv_action sdk_ieee80211_recv_action +ieee80211_recv_action_unregister sdk_ieee80211_recv_action_unregister +ieee80211_scan_attach sdk_ieee80211_scan_attach +ieee80211_send_action_register sdk_ieee80211_send_action_register +ieee80211_send_action sdk_ieee80211_send_action +ieee80211_send_action_unregister sdk_ieee80211_send_action_unregister +ieee80211_send_mgmt sdk_ieee80211_send_mgmt +ieee80211_send_nulldata sdk_ieee80211_send_nulldata +ieee80211_send_probereq sdk_ieee80211_send_probereq +ieee80211_send_proberesp sdk_ieee80211_send_proberesp +ieee80211_send_setup sdk_ieee80211_send_setup +ieee80211_setbasicrates sdk_ieee80211_setbasicrates +ieee80211_set_shortslottime sdk_ieee80211_set_shortslottime +ieee80211_set_tim sdk_ieee80211_set_tim +ieee80211_setup_basic_htrates sdk_ieee80211_setup_basic_htrates +ieee80211_setup_htrates sdk_ieee80211_setup_htrates +ieee80211_setup_rateset sdk_ieee80211_setup_rateset +ieee80211_setup_rates sdk_ieee80211_setup_rates +ieee80211_setup_ratetable sdk_ieee80211_setup_ratetable +ieee80211_sta_new_state sdk_ieee80211_sta_new_state +ieee80211_tx_mgt_cb sdk_ieee80211_tx_mgt_cb +ieee80211_wme_initparams sdk_ieee80211_wme_initparams +ieee80211_wme_updateparams sdk_ieee80211_wme_updateparams +ieee802_1x_receive sdk_ieee802_1x_receive +if_ctrl sdk_if_ctrl +inc_byte_array sdk_inc_byte_array +info sdk_info +init_cal_dcoffset sdk_init_cal_dcoffset +interface_mask sdk_interface_mask +lmacConfMib sdk_lmacConfMib +lmacDiscardAgedMSDU sdk_lmacDiscardAgedMSDU +lmacInitAc sdk_lmacInitAc +lmacInit sdk_lmacInit +lmacIsActive sdk_lmacIsActive +lmacIsIdle sdk_lmacIsIdle +lmacMSDUAged sdk_lmacMSDUAged +lmacProcessAckTimeout sdk_lmacProcessAckTimeout +lmacProcessCollision sdk_lmacProcessCollision +lmacProcessCollisions sdk_lmacProcessCollisions +lmacProcessCtsTimeout sdk_lmacProcessCtsTimeout +lmacProcessRtsStart sdk_lmacProcessRtsStart +lmacProcessTxError sdk_lmacProcessTxError +lmacProcessTxRtsError sdk_lmacProcessTxRtsError +lmacProcessTXStartData sdk_lmacProcessTXStartData +lmacProcessTxSuccess sdk_lmacProcessTxSuccess +lmacRecycleMPDU sdk_lmacRecycleMPDU +lmacRxDone sdk_lmacRxDone +lmacSetAcParam sdk_lmacSetAcParam +lmacTxFrame sdk_lmacTxFrame +loop_pwctrl_correct_atten_high_power sdk_loop_pwctrl_correct_atten_high_power +loop_pwctrl_pwdet_error_accum_high_power sdk_loop_pwctrl_pwdet_error_accum_high_power +low_power_set sdk_low_power_set +MacIsrSigPostDefHdl sdk_MacIsrSigPostDefHdl +MD5Final sdk_MD5Final +MD5Init sdk_MD5Init +MD5Update sdk_MD5Update +md5_vector sdk_md5_vector +meas_tone_pwr_db sdk_meas_tone_pwr_db +NMIIrqIsOn sdk_NMIIrqIsOn +noise_array sdk_noise_array +noise_check_loop sdk_noise_check_loop +noise_init sdk_noise_init +NoiseTimerInterval sdk_NoiseTimerInterval +operation_test sdk_operation_test +os_delay_us sdk_os_delay_us +os_get_cpu_frequency sdk_os_get_cpu_frequency +os_get_time sdk_os_get_time +os_install_putc1 sdk_os_install_putc1 +os_putc sdk_os_putc +os_timer_arm sdk_os_timer_arm +os_timer_disarm sdk_os_timer_disarm +os_timer_setfn sdk_os_timer_setfn +os_update_cpu_frequency sdk_os_update_cpu_frequency +pbkdf2_sha1 sdk_pbkdf2_sha1 +pbus_set_rxbbgain sdk_pbus_set_rxbbgain +pend_flag_noise_check sdk_pend_flag_noise_check +pend_flag_periodic_cal sdk_pend_flag_periodic_cal +PendFreeBcnEb sdk_PendFreeBcnEb +periodic_cal_dc_num sdk_periodic_cal_dc_num +periodic_cal_flag sdk_periodic_cal_flag +periodic_cal_sat sdk_periodic_cal_sat +periodic_cal sdk_periodic_cal +periodic_cal_top sdk_periodic_cal_top +phy_bb_rx_cfg sdk_phy_bb_rx_cfg +phy_change_channel sdk_phy_change_channel +phy_delete_channel sdk_phy_delete_channel +phy_dig_spur_prot sdk_phy_dig_spur_prot +phy_dig_spur_set sdk_phy_dig_spur_set +phy_disable_agc sdk_phy_disable_agc +phy_enable_agc sdk_phy_enable_agc +phy_freq_offset sdk_phy_freq_offset +phy_get_mactime sdk_phy_get_mactime +phy_get_romfuncs sdk_phy_get_romfuncs +phy_gpio_cfg sdk_phy_gpio_cfg +phy_initialize_bb sdk_phy_initialize_bb +phy_init sdk_phy_init +phy_pbus_soc_cfg sdk_phy_pbus_soc_cfg +phy_set_sense sdk_phy_set_sense +pm_allow_tx sdk_pm_allow_tx +pm_assoc_parse sdk_pm_assoc_parse +pm_attach sdk_pm_attach +pm_check_mac_idle sdk_pm_check_mac_idle +pm_enable_gpio_wakeup sdk_pm_enable_gpio_wakeup +pm_force_scan_unlock sdk_pm_force_scan_unlock +pm_get_idle_wait_time sdk_pm_get_idle_wait_time +pm_get_sleep_type sdk_pm_get_sleep_type +pm_goto_sleep sdk_pm_goto_sleep +pm_idle_sleep sdk_pm_idle_sleep +pm_is_open sdk_pm_is_open +pm_is_waked sdk_pm_is_waked +pm_onBcnRx sdk_pm_onBcnRx +pm_open_rf sdk_pm_open_rf +pm_open sdk_pm_open +pm_post sdk_pm_post +pm_prepare_to_sleep sdk_pm_prepare_to_sleep +pm_reset_idle_sleep sdk_pm_reset_idle_sleep +pm_rf_is_closed sdk_pm_rf_is_closed +pm_rtc2usec sdk_pm_rtc2usec +pm_rtc_clock_cali_proc sdk_pm_rtc_clock_cali_proc +pm_rtc_clock_cali sdk_pm_rtc_clock_cali +pm_scan_lock sdk_pm_scan_lock +pm_scan_unlocked sdk_pm_scan_unlocked +pm_sdio_nidle sdk_pm_sdio_nidle +pm_send_nullfunc sdk_pm_send_nullfunc +pm_set_addr sdk_pm_set_addr +pm_set_pll_xtal_wait_time sdk_pm_set_pll_xtal_wait_time +pm_set_sleep_btco sdk_pm_set_sleep_btco +pm_set_sleep_cycles sdk_pm_set_sleep_cycles +pm_set_sleep_mode sdk_pm_set_sleep_mode +pm_set_sleep_time sdk_pm_set_sleep_time +pm_set_sleep_type_from_upper sdk_pm_set_sleep_type_from_upper +pm_set_wakeup_btco sdk_pm_set_wakeup_btco +pm_set_wakeup_mac sdk_pm_set_wakeup_mac +pm_shutdown sdk_pm_shutdown +pm_sleep_for sdk_pm_sleep_for +pm_sleep_opt_bb_off sdk_pm_sleep_opt_bb_off +pm_sleep_opt_bb_on sdk_pm_sleep_opt_bb_on +pm_sleep_opt sdk_pm_sleep_opt +pm_sleep_set_mac sdk_pm_sleep_set_mac +pm_suspend sdk_pm_suspend +pm_try_scan_unlock sdk_pm_try_scan_unlock +pm_unmask_bt sdk_pm_unmask_bt +pm_usec2rtc sdk_pm_usec2rtc +pm_wait4wakeup sdk_pm_wait4wakeup +pm_wakeup_init sdk_pm_wakeup_init +pm_wakeup_opt sdk_pm_wakeup_opt +pp_attach sdk_pp_attach +ppCalFrameTimes sdk_ppCalFrameTimes +ppCalTxop sdk_ppCalTxop +ppCheckTxIdle sdk_ppCheckTxIdle +ppDequeueTxQ sdk_ppDequeueTxQ +pp_disable_idle_timer sdk_pp_disable_idle_timer +pp_disable_noise_timer sdk_pp_disable_noise_timer +ppDiscardMPDU sdk_ppDiscardMPDU +pp_enable_idle_timer sdk_pp_enable_idle_timer +pp_enable_noise_timer sdk_pp_enable_noise_timer +ppEnqueueRxq sdk_ppEnqueueRxq +ppEnqueueTxDone sdk_ppEnqueueTxDone +ppFetchTxQFirstAvail sdk_ppFetchTxQFirstAvail +ppGetTxQFirstAvail_Locked sdk_ppGetTxQFirstAvail_Locked +ppInstallKey sdk_ppInstallKey +pp_michael_mic_failure sdk_pp_michael_mic_failure +pp_noise_test sdk_pp_noise_test +ppPeocessRxPktHdr sdk_ppPeocessRxPktHdr +pp_post sdk_pp_post +ppProcessTxQ sdk_ppProcessTxQ +ppProcessWaitQ sdk_ppProcessWaitQ +ppRecordBarRRC sdk_ppRecordBarRRC +ppRecycleRxPkt sdk_ppRecycleRxPkt +ppRegisterTxCallback sdk_ppRegisterTxCallback +ppRollBackTxQ sdk_ppRollBackTxQ +pp_soft_wdt_feed sdk_pp_soft_wdt_feed +pp_soft_wdt_init sdk_pp_soft_wdt_init +ppTask sdk_ppTask +pp_try_enable_idle_timer sdk_pp_try_enable_idle_timer +ppTxPkt sdk_ppTxPkt +ppTxqUpdateBitmap sdk_ppTxqUpdateBitmap +PPWdtReset sdk_PPWdtReset +promiscuous_cb sdk_promiscuous_cb +_putc1 sdk__putc1 +pwctrl_debug sdk_pwctrl_debug +ram_cal_tos_v60 sdk_ram_cal_tos_v60 +ram_chip_v6_rx_init sdk_ram_chip_v6_rx_init +ram_get_bb_atten sdk_ram_get_bb_atten +ram_get_corr_power sdk_ram_get_corr_power +ram_get_fm_sar_dout sdk_ram_get_fm_sar_dout +ram_get_noisefloor sdk_ram_get_noisefloor +ram_pbus_debugmode sdk_ram_pbus_debugmode +ram_pbus_set_rxgain sdk_ram_pbus_set_rxgain +ram_pbus_xpd_tx_on sdk_ram_pbus_xpd_tx_on +ram_restart_cal sdk_ram_restart_cal +ram_rfcal_pwrctrl sdk_ram_rfcal_pwrctrl +ram_rfcal_rxiq sdk_ram_rfcal_rxiq +ram_rfcal_txcap sdk_ram_rfcal_txcap +ram_rfcal_txiq sdk_ram_rfcal_txiq +ram_rfpll_set_freq sdk_ram_rfpll_set_freq +ram_rxiq_cover_mg_mp sdk_ram_rxiq_cover_mg_mp +ram_rxiq_get_mis sdk_ram_rxiq_get_mis +ram_set_channel_freq sdk_ram_set_channel_freq +ram_set_noise_floor sdk_ram_set_noise_floor +ram_set_txbb_atten sdk_ram_set_txbb_atten +ram_start_noisefloor sdk_ram_start_noisefloor +ram_tx_mac_disable sdk_ram_tx_mac_disable +ram_tx_mac_enable sdk_ram_tx_mac_enable +rc4_skip sdk_rc4_skip +rcAttach sdk_rcAttach +rc_cal sdk_rc_cal +rc_disable_trc_by_interface sdk_rc_disable_trc_by_interface +rc_disable_trc sdk_rc_disable_trc +rc_enable_trc sdk_rc_enable_trc +RC_GetAckRate sdk_RC_GetAckRate +RC_GetAckTime sdk_RC_GetAckTime +RC_GetBlockAckTime sdk_RC_GetBlockAckTime +RC_GetCtsTime sdk_RC_GetCtsTime +rc_get_mask sdk_rc_get_mask +rcGetRate sdk_rcGetRate +RC_GetRtsRate sdk_RC_GetRtsRate +rcGetSched sdk_rcGetSched +rc_get_sta_trc sdk_rc_get_sta_trc +rc_get_trc_by_index sdk_rc_get_trc_by_index +rc_get_trc sdk_rc_get_trc +rcGetTrc sdk_rcGetTrc +rc_only_sta_trc sdk_rc_only_sta_trc +rcons sdk_rcons +rcReachRetryLimit sdk_rcReachRetryLimit +RC_SetBasicRate sdk_RC_SetBasicRate +rcUpdateDataRxDone sdk_rcUpdateDataRxDone +rcUpdatePhyMode sdk_rcUpdatePhyMode +rcUpdateRxDone sdk_rcUpdateRxDone +rcUpdateTxDone sdk_rcUpdateTxDone +read_hw_noisefloor sdk_read_hw_noisefloor +read_sar_dout sdk_read_sar_dout +readvdd33 sdk_readvdd33 +register_chipv6_phy_init_param sdk_register_chipv6_phy_init_param +register_chipv6_phy sdk_register_chipv6_phy +register_phy_ops sdk_register_phy_ops +reset_noise_timer sdk_reset_noise_timer +RFChannelSel sdk_RFChannelSel +rf_init sdk_rf_init +rijndaelEncrypt sdk_rijndaelEncrypt +rijndaelKeySetupDec sdk_rijndaelKeySetupDec +rijndaelKeySetupEnc sdk_rijndaelKeySetupEnc +rom_abs_temp sdk_rom_abs_temp +rom_ana_inf_gating_en sdk_rom_ana_inf_gating_en +rom_cal_tos_v50 sdk_rom_cal_tos_v50 +rom_chip_50_set_channel sdk_rom_chip_50_set_channel +rom_chip_v5_disable_cca sdk_rom_chip_v5_disable_cca +rom_chip_v5_enable_cca sdk_rom_chip_v5_enable_cca +rom_chip_v5_rx_init sdk_rom_chip_v5_rx_init +rom_chip_v5_sense_backoff sdk_rom_chip_v5_sense_backoff +rom_chip_v5_tx_init sdk_rom_chip_v5_tx_init +rom_dc_iq_est sdk_rom_dc_iq_est +rom_en_pwdet sdk_rom_en_pwdet +rom_get_bb_atten sdk_rom_get_bb_atten +rom_get_corr_power sdk_rom_get_corr_power +rom_get_fm_sar_dout sdk_rom_get_fm_sar_dout +rom_get_noisefloor sdk_rom_get_noisefloor +rom_get_power_db sdk_rom_get_power_db +rom_i2c_readReg_Mask sdk_rom_i2c_readReg_Mask +rom_i2c_readReg sdk_rom_i2c_readReg +rom_i2c_writeReg_Mask sdk_rom_i2c_writeReg_Mask +rom_i2c_writeReg sdk_rom_i2c_writeReg +rom_iq_est_disable sdk_rom_iq_est_disable +rom_iq_est_enable sdk_rom_iq_est_enable +rom_linear_to_db sdk_rom_linear_to_db +rom_mhz2ieee sdk_rom_mhz2ieee +rom_pbus_dco___SA2 sdk_rom_pbus_dco___SA2 +rom_pbus_debugmode sdk_rom_pbus_debugmode +rom_pbus_enter_debugmode sdk_rom_pbus_enter_debugmode +rom_pbus_exit_debugmode sdk_rom_pbus_exit_debugmode +rom_pbus_force_test sdk_rom_pbus_force_test +rom_pbus_rd sdk_rom_pbus_rd +rom_pbus_set_rxgain sdk_rom_pbus_set_rxgain +rom_pbus_set_txgain sdk_rom_pbus_set_txgain +rom_pbus_workmode sdk_rom_pbus_workmode +rom_pbus_xpd_rx_off sdk_rom_pbus_xpd_rx_off +rom_pbus_xpd_rx_on sdk_rom_pbus_xpd_rx_on +rom_pbus_xpd_tx_off sdk_rom_pbus_xpd_tx_off +rom_pbus_xpd_tx_on__low_gain sdk_rom_pbus_xpd_tx_on__low_gain +rom_pbus_xpd_tx_on sdk_rom_pbus_xpd_tx_on +rom_phy_reset_req sdk_rom_phy_reset_req +rom_restart_cal sdk_rom_restart_cal +rom_rfcal_pwrctrl sdk_rom_rfcal_pwrctrl +rom_rfcal_rxiq sdk_rom_rfcal_rxiq +rom_rfcal_rxiq_set_reg sdk_rom_rfcal_rxiq_set_reg +rom_rfcal_txcap sdk_rom_rfcal_txcap +rom_rfcal_txiq_cover sdk_rom_rfcal_txiq_cover +rom_rfcal_txiq sdk_rom_rfcal_txiq +rom_rfcal_txiq_set_reg sdk_rom_rfcal_txiq_set_reg +rom_rfpll_reset sdk_rom_rfpll_reset +rom_rfpll_set_freq sdk_rom_rfpll_set_freq +rom_rxiq_cover_mg_mp sdk_rom_rxiq_cover_mg_mp +rom_rxiq_get_mis sdk_rom_rxiq_get_mis +rom_sar_init sdk_rom_sar_init +rom_set_ana_inf_tx_scale sdk_rom_set_ana_inf_tx_scale +rom_set_channel_freq sdk_rom_set_channel_freq +rom_set_loopback_gain sdk_rom_set_loopback_gain +rom_set_noise_floor sdk_rom_set_noise_floor +rom_set_rxclk_en sdk_rom_set_rxclk_en +rom_set_txbb_atten sdk_rom_set_txbb_atten +rom_set_txclk_en sdk_rom_set_txclk_en +rom_set_txiq_cal sdk_rom_set_txiq_cal +rom_start_noisefloor sdk_rom_start_noisefloor +rom_start_tx_tone sdk_rom_start_tx_tone +rom_stop_tx_tone sdk_rom_stop_tx_tone +rom_tx_mac_disable sdk_rom_tx_mac_disable +rom_tx_mac_enable sdk_rom_tx_mac_enable +rom_txtone_linear_pwr sdk_rom_txtone_linear_pwr +rom_write_rfpll_sdm sdk_rom_write_rfpll_sdm +rsn_cipher_put_suites sdk_rsn_cipher_put_suites +rsn_pmkid sdk_rsn_pmkid +rst_if sdk_rst_if +rtc_get_reset_reason sdk_rtc_get_reset_reason +rtc_mem_backup sdk_rtc_mem_backup +rtc_mem_recovery sdk_rtc_mem_recovery +rxdc_init_flag sdk_rxdc_init_flag +rx_gain_swp sdk_rx_gain_swp +rxiq_compute_num sdk_rxiq_compute_num +rxiq_cover_fail_num sdk_rxiq_cover_fail_num +RxNodeNum sdk_RxNodeNum +scan_add_bssid sdk_scan_add_bssid +scan_add_probe_ssid sdk_scan_add_probe_ssid +scan_cancel sdk_scan_cancel +scan_check_hidden sdk_scan_check_hidden +scan_clear_channles sdk_scan_clear_channles +scan_connect_state sdk_scan_connect_state +scan_get_type sdk_scan_get_type +scan_hidden_ssid sdk_scan_hidden_ssid +scannum sdk_scannum +scan_parse_beacon sdk_scan_parse_beacon +scan_pm_channel_op_cb sdk_scan_pm_channel_op_cb +scan_profile_check sdk_scan_profile_check +scan_remove_bssid sdk_scan_remove_bssid +scan_remove_probe_ssid sdk_scan_remove_probe_ssid +scan_set_desChan sdk_scan_set_desChan +scan_start sdk_scan_start +SDIO_slp_reject sdk_SDIO_slp_reject +sdt_on_noise_start sdk_sdt_on_noise_start +set_cal_rxdc sdk_set_cal_rxdc +set_crystal_uart sdk_set_crystal_uart +set_rfanagain_dc_reg sdk_set_rfanagain_dc_reg +set_rf_freq_offset sdk_set_rf_freq_offset +set_rx_gain_cal_iq sdk_set_rx_gain_cal_iq +set_rx_gain_testchip_50 sdk_set_rx_gain_testchip_50 +set_txcap_reg sdk_set_txcap_reg +set_txdc_pbus sdk_set_txdc_pbus +SHA1Final sdk_SHA1Final +SHA1Init sdk_SHA1Init +sha1_prf sdk_sha1_prf +SHA1Transform sdk_SHA1Transform +SHA1Update sdk_SHA1Update +sha1_vector sdk_sha1_vector +sleep_opt_8266 sdk_sleep_opt_8266 +sleep_opt_bb_on_8266 sdk_sleep_opt_bb_on_8266 +sleep_reset_analog_rtcreg_8266 sdk_sleep_reset_analog_rtcreg_8266 +sleep_start_wait_time sdk_sleep_start_wait_time +slop_test sdk_slop_test +slop_wdt_feed sdk_slop_wdt_feed +software_slp_reject sdk_software_slp_reject +SPIEraseSector sdk_SPIEraseSector +spi_flash_erase_sector sdk_spi_flash_erase_sector +spi_flash_get_id sdk_spi_flash_get_id +spi_flash_read sdk_spi_flash_read +spi_flash_read_status sdk_spi_flash_read_status +spi_flash_write sdk_spi_flash_write +spi_flash_write_status sdk_spi_flash_write_status +SPIReadModeCnfig sdk_SPIReadModeCnfig +SPIRead sdk_SPIRead +SPIWrite sdk_SPIWrite +sta_con_timer sdk_sta_con_timer +sta_input sdk_sta_input +start_dig_rx sdk_start_dig_rx +sta_status_set sdk_sta_status_set +stop_dig_rx sdk_stop_dig_rx +sw_scan_mode sdk_sw_scan_mode +system_adc_read sdk_system_adc_read +system_deep_sleep sdk_system_deep_sleep +system_get_boot_mode sdk_system_get_boot_mode +system_get_boot_version sdk_system_get_boot_version +system_get_checksum sdk_system_get_checksum +system_get_chip_id sdk_system_get_chip_id +system_get_cpu_freq sdk_system_get_cpu_freq +system_get_free_heap_size sdk_system_get_free_heap_size +system_get_rst_info sdk_system_get_rst_info +system_get_rtc_time sdk_system_get_rtc_time +system_get_sdk_version sdk_system_get_sdk_version +system_get_test_result sdk_system_get_test_result +system_get_time sdk_system_get_time +system_get_userbin_addr sdk_system_get_userbin_addr +system_overclock sdk_system_overclock +system_pp_recycle_rx_pkt sdk_system_pp_recycle_rx_pkt +system_print_meminfo sdk_system_print_meminfo +system_relative_time sdk_system_relative_time +system_restart_enhance sdk_system_restart_enhance +system_restart_in_nmi sdk_system_restart_in_nmi +system_restart sdk_system_restart +system_restoreclock sdk_system_restoreclock +system_restore sdk_system_restore +system_rtc_clock_cali_proc sdk_system_rtc_clock_cali_proc +system_rtc_mem_read sdk_system_rtc_mem_read +system_rtc_mem_write sdk_system_rtc_mem_write +system_station_got_ip_set sdk_system_station_got_ip_set +system_uart_swap sdk_system_uart_swap +system_update_cpu_freq sdk_system_update_cpu_freq +system_upgrade_flag_check sdk_system_upgrade_flag_check +system_upgrade_flag_set sdk_system_upgrade_flag_set +system_upgrade_reboot sdk_system_upgrade_reboot +system_upgrade_userbin_check sdk_system_upgrade_userbin_check +system_upgrade_userbin_set sdk_system_upgrade_userbin_set +target_power_add_backoff sdk_target_power_add_backoff +target_power_backoff sdk_target_power_backoff +Td0 sdk_Td0 +Td4s_rom sdk_Td4s_rom +Te0 sdk_Te0 +test_rffreq_txcap sdk_test_rffreq_txcap +test_tout sdk_test_tout +tkip sdk_tkip +TmpSTAAPCloseAP sdk_TmpSTAAPCloseAP +trc_NeedRTS sdk_trc_NeedRTS +trc_onDisconnect sdk_trc_onDisconnect +trc_onScanDone sdk_trc_onScanDone +trc_onScanStart sdk_trc_onScanStart +tsen_meas sdk_tsen_meas +tx_atten_set_interp sdk_tx_atten_set_interp +txbbgain2dcoindex sdk_txbbgain2dcoindex +txbk_dpdby_flag sdk_txbk_dpdby_flag +tx_cap_init sdk_tx_cap_init +tx_cont_cfg sdk_tx_cont_cfg +tx_cont_dis sdk_tx_cont_dis +tx_cont_en sdk_tx_cont_en +Tx_Copy2Queue sdk_Tx_Copy2Queue +txiq_cover sdk_txiq_cover +txiq_get_mis_pwr sdk_txiq_get_mis_pwr +TxNodeNum sdk_TxNodeNum +tx_pwctrl_atten_init_en sdk_tx_pwctrl_atten_init_en +tx_pwctrl_atten_init sdk_tx_pwctrl_atten_init +tx_pwctrl_background sdk_tx_pwctrl_background +tx_pwctrl_bg_init sdk_tx_pwctrl_bg_init +tx_pwctrl_cal sdk_tx_pwctrl_cal +tx_pwctrl_init_cal sdk_tx_pwctrl_init_cal +tx_pwctrl_init sdk_tx_pwctrl_init +tx_pwctrl_pk_num sdk_tx_pwctrl_pk_num +tx_pwctrl_set_chan_flag sdk_tx_pwctrl_set_chan_flag +tx_pwr_backoff sdk_tx_pwr_backoff +txpwr_offset sdk_txpwr_offset +tx_rf_ana_gain sdk_tx_rf_ana_gain +uart_buff_switch sdk_uart_buff_switch +uart_div_modify sdk_uart_div_modify +Uart_Init sdk_Uart_Init +uart_rx_one_char sdk_uart_rx_one_char +uart_tx_flush sdk_uart_tx_flush +uart_wait_idle sdk_uart_wait_idle +user_fatal_exception_handler sdk_user_fatal_exception_handler +user_init_flag sdk_user_init_flag +user_init_task sdk_user_init_task +user_start sdk_user_start +vApplicationIdleHook sdk_vApplicationIdleHook +vApplicationStackOverflowHook sdk_vApplicationStackOverflowHook +vApplicationTickHook sdk_vApplicationTickHook +vPortYield sdk_vPortYield +wait_rfpll_cal_end sdk_wait_rfpll_cal_end +wDev_AppendRxAmpduLensBlocks sdk_wDev_AppendRxAmpduLensBlocks +wDev_AppendRxBlocks sdk_wDev_AppendRxBlocks +wDev_ClearBssid sdk_wDev_ClearBssid +wDev_ClearTxqCollisions sdk_wDev_ClearTxqCollisions +wDev_ClearWaitingQueue sdk_wDev_ClearWaitingQueue +wDev_Crypto_Conf sdk_wDev_Crypto_Conf +wDev_Crypto_Disable sdk_wDev_Crypto_Disable +wDevCtrl sdk_wDevCtrl +wDev_Disable_Beacon_Tsf sdk_wDev_Disable_Beacon_Tsf +wDevDisableRx sdk_wDevDisableRx +wDev_DisableTransmit sdk_wDev_DisableTransmit +wDev_Enable_Beacon_Tsf sdk_wDev_Enable_Beacon_Tsf +wDevEnableRx sdk_wDevEnableRx +wDev_EnableTransmit sdk_wDev_EnableTransmit +wdev_exit_sniffer sdk_wdev_exit_sniffer +wDevForceAck6M sdk_wDevForceAck6M +wDev_GetBAInfo sdk_wDev_GetBAInfo +wDev_Get_Next_TBTT sdk_wDev_Get_Next_TBTT +wDev_GetTxqCollisions sdk_wDev_GetTxqCollisions +wdev_go_sniffer sdk_wdev_go_sniffer +wDev_Initialize sdk_wDev_Initialize +wDev_Insert_KeyEntry sdk_wDev_Insert_KeyEntry +wDev_MacTim1Arm sdk_wDev_MacTim1Arm +wDev_MacTim1SetFunc sdk_wDev_MacTim1SetFunc +wDev_MacTimArm sdk_wDev_MacTimArm +wDev_MacTimSetFunc sdk_wDev_MacTimSetFunc +wDev_Option_Init sdk_wDev_Option_Init +wDev_ProcessCollision sdk_wDev_ProcessCollision +wDev_ProcessFiq sdk_wDev_ProcessFiq +wDev_remove_KeyEntry sdk_wDev_remove_KeyEntry +wDev_Reset_TBTT sdk_wDev_Reset_TBTT +wDev_Set_Beacon_Int sdk_wDev_Set_Beacon_Int +wDev_SetBssid sdk_wDev_SetBssid +wDev_SetFrameAckType sdk_wDev_SetFrameAckType +wDev_SetMacAddress sdk_wDev_SetMacAddress +wDev_SetRxPolicy sdk_wDev_SetRxPolicy +wDev_SetWaitingQueue sdk_wDev_SetWaitingQueue +WdevTimOffSet sdk_WdevTimOffSet +wd_reset_cnt sdk_wd_reset_cnt +wdt_init sdk_wdt_init +wep sdk_wep +wifi_get_channel sdk_wifi_get_channel +wifi_get_ip_info sdk_wifi_get_ip_info +wifi_get_macaddr sdk_wifi_get_macaddr +wifi_get_opmode_default sdk_wifi_get_opmode_default +wifi_get_opmode sdk_wifi_get_opmode +wifi_get_phy_mode sdk_wifi_get_phy_mode +wifi_get_sleep_type sdk_wifi_get_sleep_type +wifi_mode_set sdk_wifi_mode_set +wifi_param_save_protect sdk_wifi_param_save_protect +wifi_promiscuous_enable sdk_wifi_promiscuous_enable +wifi_promiscuous_set_mac sdk_wifi_promiscuous_set_mac +wifi_set_channel sdk_wifi_set_channel +wifi_set_ip_info sdk_wifi_set_ip_info +wifi_set_macaddr sdk_wifi_set_macaddr +wifi_set_opmode_current sdk_wifi_set_opmode_current +wifi_set_opmode_local sdk_wifi_set_opmode_local +wifi_set_opmode sdk_wifi_set_opmode +wifi_set_phy_mode sdk_wifi_set_phy_mode +wifi_set_promiscuous_rx_cb sdk_wifi_set_promiscuous_rx_cb +wifi_set_sleep_type sdk_wifi_set_sleep_type +wifi_softap_cacl_mac sdk_wifi_softap_cacl_mac +wifi_softap_deauth sdk_wifi_softap_deauth +wifi_softap_free_station_info sdk_wifi_softap_free_station_info +wifi_softap_get_config_default sdk_wifi_softap_get_config_default +wifi_softap_get_config sdk_wifi_softap_get_config +wifi_softap_get_station_info sdk_wifi_softap_get_station_info +wifi_softap_set_config_current sdk_wifi_softap_set_config_current +wifi_softap_set_config sdk_wifi_softap_set_config +wifi_softap_set_default_ssid sdk_wifi_softap_set_default_ssid +wifi_softap_set_station_info sdk_wifi_softap_set_station_info +wifi_softap_start sdk_wifi_softap_start +wifi_softap_stop sdk_wifi_softap_stop +wifi_station_ap_change sdk_wifi_station_ap_change +wifi_station_ap_check sdk_wifi_station_ap_check +wifi_station_ap_number_set sdk_wifi_station_ap_number_set +wifi_station_connect sdk_wifi_station_connect +wifi_station_dhcpc_start sdk_wifi_station_dhcpc_start +wifi_station_dhcpc_status sdk_wifi_station_dhcpc_status +wifi_station_dhcpc_stop sdk_wifi_station_dhcpc_stop +wifi_station_disconnect sdk_wifi_station_disconnect +wifi_station_get_ap_info sdk_wifi_station_get_ap_info +wifi_station_get_auto_connect sdk_wifi_station_get_auto_connect +wifi_station_get_config_default sdk_wifi_station_get_config_default +wifi_station_get_config sdk_wifi_station_get_config +wifi_station_get_connect_status sdk_wifi_station_get_connect_status +wifi_station_get_current_ap_id sdk_wifi_station_get_current_ap_id +wifi_station_scan sdk_wifi_station_scan +wifi_station_set_auto_connect sdk_wifi_station_set_auto_connect +wifi_station_set_config_current sdk_wifi_station_set_config_current +wifi_station_set_config sdk_wifi_station_set_config +wifi_station_start sdk_wifi_station_start +wifi_station_stop sdk_wifi_station_stop +wifi_status_led_install sdk_wifi_status_led_install +wpa_add_kde sdk_wpa_add_kde +wpa_attach sdk_wpa_attach +wpa_auth_for_each_sta sdk_wpa_auth_for_each_sta +wpa_auth_gen_wpa_ie sdk_wpa_auth_gen_wpa_ie +wpa_auth_sm_event sdk_wpa_auth_sm_event +wpa_auth_sta_associated sdk_wpa_auth_sta_associated +wpa_auth_sta_deinit sdk_wpa_auth_sta_deinit +wpa_auth_sta_init sdk_wpa_auth_sta_init +wpa_auth_sta_no_wpa sdk_wpa_auth_sta_no_wpa +wpa_auth_uses_mfp sdk_wpa_auth_uses_mfp +wpabuf_alloc_copy sdk_wpabuf_alloc_copy +wpabuf_alloc_ext_data sdk_wpabuf_alloc_ext_data +wpabuf_alloc sdk_wpabuf_alloc +wpabuf_concat sdk_wpabuf_concat +wpabuf_dup sdk_wpabuf_dup +wpabuf_free sdk_wpabuf_free +wpabuf_put sdk_wpabuf_put +wpabuf_resize sdk_wpabuf_resize +wpabuf_zeropad sdk_wpabuf_zeropad +wpa_cipher_key_len sdk_wpa_cipher_key_len +wpa_cipher_put_suites sdk_wpa_cipher_put_suites +wpa_cipher_to_alg sdk_wpa_cipher_to_alg +wpa_cipher_to_suite sdk_wpa_cipher_to_suite +wpa_compare_rsn_ie sdk_wpa_compare_rsn_ie +wpa_config_assoc_ie sdk_wpa_config_assoc_ie +wpa_config_bss sdk_wpa_config_bss +wpa_config_parse_string sdk_wpa_config_parse_string +wpa_config_profile sdk_wpa_config_profile +wpa_eapol_key_mic sdk_wpa_eapol_key_mic +wpa_gen_wpa_ie sdk_wpa_gen_wpa_ie +wpa_get_ntp_timestamp sdk_wpa_get_ntp_timestamp +wpa_init sdk_wpa_init +wpa_neg_complete sdk_wpa_neg_complete +wpa_parse_kde_ies sdk_wpa_parse_kde_ies +wpa_parse_wpa_ie_rsn sdk_wpa_parse_wpa_ie_rsn +wpa_parse_wpa_ie sdk_wpa_parse_wpa_ie +wpa_parse_wpa_ie_wpa sdk_wpa_parse_wpa_ie_wpa +wpa_pmk_to_ptk sdk_wpa_pmk_to_ptk +wpa_receive sdk_wpa_receive +wpa_register sdk_wpa_register +wpa_remove_ptk sdk_wpa_remove_ptk +__wpa_send_eapol sdk___wpa_send_eapol +wpa_set_bss sdk_wpa_set_bss +wpa_set_pmk sdk_wpa_set_pmk +wpa_set_profile sdk_wpa_set_profile +wpa_sm_alloc_eapol sdk_wpa_sm_alloc_eapol +wpa_sm_deauthenticate sdk_wpa_sm_deauthenticate +wpa_sm_disassociate sdk_wpa_sm_disassociate +wpa_sm_get_beacon_ie sdk_wpa_sm_get_beacon_ie +wpa_sm_mlme_setprotection sdk_wpa_sm_mlme_setprotection +wpa_sm_rx_eapol sdk_wpa_sm_rx_eapol +wpa_sm_set_state sdk_wpa_sm_set_state +wpa_supplicant_parse_ies sdk_wpa_supplicant_parse_ies +wpa_validate_wpa_ie sdk_wpa_validate_wpa_ie +wpa_write_rsn_ie sdk_wpa_write_rsn_ie +xieee80211Queue sdk_xieee80211Queue +_xt_clear_ints sdk__xt_clear_ints +_xt_context_restore sdk__xt_context_restore +_xt_context_save sdk__xt_context_save +_xt_int_enter sdk__xt_int_enter +_xt_int_exit sdk__xt_int_exit +_xt_isr_mask sdk__xt_isr_mask +_xt_isr_unmask sdk__xt_isr_unmask +_xt_read_ints sdk__xt_read_ints +_xt_tick_timer_init sdk__xt_tick_timer_init +_xt_timer_int1 sdk__xt_timer_int1 +_xt_timer_int sdk__xt_timer_int +xUserTaskHandle sdk_xUserTaskHandle +xWatchDogTaskHandle sdk_xWatchDogTaskHandle From a044c061d51a954434661d1c0292f46799c1da68 Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Tue, 25 Aug 2015 09:34:37 -0700 Subject: [PATCH 02/11] Replace libmain:app_main.o with core/app_main.c --- core/app_main.c | 501 +++++++++++++++++++++++++++++++++++ core/include/esp/wdev_regs.h | 30 +++ core/include/esp/wdt_regs.h | 11 + core/include/os_version.h | 6 + core/include/sdk_internal.h | 235 ++++++++++++++++ core/include/xtensa_ops.h | 21 ++ lib/libmain.remove | 1 + 7 files changed, 805 insertions(+) create mode 100644 core/app_main.c create mode 100644 core/include/esp/wdev_regs.h create mode 100644 core/include/os_version.h create mode 100644 core/include/sdk_internal.h create mode 100644 core/include/xtensa_ops.h diff --git a/core/app_main.c b/core/app_main.c new file mode 100644 index 0000000..86d1cb3 --- /dev/null +++ b/core/app_main.c @@ -0,0 +1,501 @@ +/* Implementation of libmain/app_main.o from the Espressif SDK. + * + * This contains most of the startup code for the SDK/OS, some event handlers, + * etc. + * + * Part of esp-open-rtos + * Copyright (C) 2015 Superhouse Automation Pty Ltd + * BSD Licensed as described in the file LICENSE + */ + +#include +#include +#include +#include + +#include "common_macros.h" +#include "xtensa_ops.h" +#include "esp/rom.h" +#include "esp/iomux_regs.h" +#include "esp/uart_regs.h" +#include "esp/spi_regs.h" +#include "esp/dport_regs.h" +#include "esp/wdev_regs.h" +#include "os_version.h" + +#include "espressif/esp_system.h" +#include "sdk_internal.h" + +/* This is not declared in any header file (but arguably should be) */ + +void user_init(void); + +#define UART_DIVISOR 1068 // 74906 bps (yeah, I don't understand it either) +#define BOOT_INFO_SIZE 28 +//TODO: phy_info should probably be a struct (no idea about its organization, though) +#define PHY_INFO_SIZE 128 + +// These are the offsets of these values within the RTCMEM regions. It appears +// that the ROM saves them to RTCMEM before calling us, and we pull them out of +// there to display them in startup messages (not sure why it works that way). +#define RTCMEM_BACKUP_PHY_VER 31 +#define RTCMEM_SYSTEM_PP_VER 62 + +#define halt() while (1) {} + +extern uint32_t *_bss_start; +extern uint32_t *_bss_end; + +// .Ldata003 -- .irom.text+0x0 +static const uint8_t IROM default_phy_info[PHY_INFO_SIZE] = { + 0x05, 0x00, 0x04, 0x02, 0x05, 0x05, 0x05, 0x02, + 0x05, 0x00, 0x04, 0x05, 0x05, 0x04, 0x05, 0x05, + 0x04, 0xfe, 0xfd, 0xff, 0xf0, 0xf0, 0xf0, 0xe0, + 0xe0, 0xe0, 0xe1, 0x0a, 0xff, 0xff, 0xf8, 0x00, + 0xf8, 0xf8, 0x52, 0x4e, 0x4a, 0x44, 0x40, 0x38, + 0x00, 0x00, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe1, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x93, 0x43, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +// user_init_flag -- .bss+0x0 +uint8_t sdk_user_init_flag; + +// info -- .bss+0x4 +struct sdk_info_st sdk_info; + +// xUserTaskHandle -- .bss+0x28 +xTaskHandle sdk_xUserTaskHandle; + +// xWatchDogTaskHandle -- .bss+0x2c +xTaskHandle sdk_xWatchDogTaskHandle; + +/* Static function prototypes */ + +static void IRAM get_otp_mac_address(uint8_t *buf); +static void IRAM set_spi0_divisor(uint32_t divisor); +static void IRAM default_putc(uint8_t c); +static void IRAM default_putc1(uint8_t c); +static void zero_bss(void); +static void init_networking(uint8_t *phy_info, uint8_t *mac_addr); +static void init_g_ic(void); +static void dump_excinfo(void); +static void user_start_phase2(void); +static void dump_flash_data(uint32_t start_addr, uint32_t length); +static void dump_flash_config_sectors(uint32_t start_addr); + +// .Lfunc001 -- .text+0x14 +static void IRAM get_otp_mac_address(uint8_t *buf) { + uint32_t otp_flags; + uint32_t otp_id0, otp_id1; + uint32_t otp_vendor_id; + + otp_flags = DPORT.OTP_CHIPID; + otp_id1 = DPORT.OTP_MAC1; + otp_id0 = DPORT.OTP_MAC0; + if (!(otp_flags & 0x8000)) { + //FIXME: do we really need this check? + printf("Firmware ONLY supports ESP8266!!!\n"); + halt(); + } + if (otp_id0 == 0 && otp_id1 == 0) { + printf("empty otp\n"); + halt(); + } + if (otp_flags & 0x1000) { + // If bit 12 is set, it indicates that the vendor portion of the MAC + // address is stored in DPORT.OTP_MAC2. + otp_vendor_id = DPORT.OTP_MAC2; + buf[0] = otp_vendor_id >> 16; + buf[1] = otp_vendor_id >> 8; + buf[2] = otp_vendor_id; + } else { + // If bit 12 is clear, there's no MAC vendor in DPORT.OTP_MAC2, so + // default to the Espressif MAC vendor prefix instead. + buf[1] = 0xfe; + buf[0] = 0x18; + buf[2] = 0x34; + } + buf[3] = otp_id1 >> 8; + buf[4] = otp_id1; + buf[5] = otp_id0 >> 24; +} + +// .Lfunc002 -- .text+0xa0 +static void IRAM set_spi0_divisor(uint32_t divisor) { + int cycle_len, half_cycle_len, clkdiv; + + if (divisor < 2) { + clkdiv = 0; + SPI(0).CTRL0 |= SPI_CTRL0_CLOCK_EQU_SYS_CLOCK; + IOMUX.CONF |= IOMUX_CONF_SPI0_CLOCK_EQU_SYS_CLOCK; + } else { + cycle_len = divisor - 1; + half_cycle_len = (divisor / 2) - 1; + clkdiv = VAL2FIELD(SPI_CTRL0_CLOCK_NUM, cycle_len) + | VAL2FIELD(SPI_CTRL0_CLOCK_HIGH, half_cycle_len) + | VAL2FIELD(SPI_CTRL0_CLOCK_LOW, cycle_len); + SPI(0).CTRL0 &= ~SPI_CTRL0_CLOCK_EQU_SYS_CLOCK; + IOMUX.CONF &= ~IOMUX_CONF_SPI0_CLOCK_EQU_SYS_CLOCK; + } + SPI(0).CTRL0 = SET_FIELD(SPI(0).CTRL0, SPI_CTRL0_CLOCK, clkdiv); +} + +// .text+0x148 +void sdk_user_fatal_exception_handler(void) { + if (!sdk_NMIIrqIsOn) { + vPortEnterCritical(); + do { + DPORT.DPORT0 &= 0xffffffe0; + } while (DPORT.DPORT0 & 0x00000001); + } + Cache_Read_Disable(); + Cache_Read_Enable(0, 0, 1); + dump_excinfo(); + while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(0).STATUS)) {} + while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(1).STATUS)) {} + sdk_system_restart_in_nmi(); + halt(); +} + +// .Lfunc003 -- .text+0x1d0 +static void IRAM default_putc(uint8_t c) { + while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(0).STATUS) > 125) {} + UART(0).FIFO = c; +} + +// .Lfunc004 -- .text+0x1f4 +static void IRAM default_putc1(uint8_t c) { + if (c == '\n') { + default_putc('\r'); + } else if (c == '\r') { + return; + } + default_putc(c); +} + +// .text+0x258 +void IRAM sdk_user_start(void) { + uint32_t buf32[sizeof(struct sdk_g_ic_saved_st) / 4]; + uint8_t *buf8 = (uint8_t *)buf32; + uint32_t flash_speed_divisor; + uint32_t flash_sectors; + uint32_t flash_size; + int boot_slot; + uint32_t cksum_magic; + uint32_t cksum_len; + uint32_t cksum_value; + uint32_t ic_flash_addr; + + SPI(0).USER0 |= SPI_USER0_CS_SETUP; + sdk_SPIRead(0, buf32, 4); + + switch (buf8[3] & 0x0f) { + case 0xf: // 80 MHz + flash_speed_divisor = 1; + break; + case 0x0: // 40 MHz + flash_speed_divisor = 2; + break; + case 0x1: // 26 MHz + flash_speed_divisor = 3; + break; + case 0x2: // 20 MHz + flash_speed_divisor = 4; + break; + default: // Invalid -- Assume 40 MHz + flash_speed_divisor = 2; + } + switch (buf8[3] >> 4) { + case 0x0: // 4 Mbit (512 KByte) + flash_sectors = 128; + break; + case 0x1: // 2 Mbit (256 Kbyte) + flash_sectors = 64; + break; + case 0x2: // 8 Mbit (1 Mbyte) + flash_sectors = 256; + break; + case 0x3: // 16 Mbit (2 Mbyte) + flash_sectors = 512; + break; + case 0x4: // 32 Mbit (4 Mbyte) + flash_sectors = 1024; + break; + default: // Invalid -- Assume 4 Mbit (512 KByte) + flash_sectors = 128; + } + //FIXME: we should probably calculate flash_sectors by starting with flash_size and dividing by sdk_flashchip.sector_size instead of vice-versa. + flash_size = flash_sectors * 4096; + sdk_flashchip.chip_size = flash_size; + set_spi0_divisor(flash_speed_divisor); + sdk_SPIRead(flash_size - 256, buf32, BOOT_INFO_SIZE); + boot_slot = buf8[0]; + cksum_magic = buf32[1]; + cksum_len = buf32[3 + boot_slot]; + cksum_value = buf32[5 + boot_slot]; + ic_flash_addr = (flash_sectors - 2 + boot_slot) * sdk_flashchip.sector_size; + sdk_SPIRead(ic_flash_addr, buf32, sizeof(struct sdk_g_ic_saved_st)); + Cache_Read_Enable(0, 0, 1); + zero_bss(); + sdk_os_install_putc1(default_putc1); + if (cksum_magic == 0xffffffff) { + // No checksum required + } else if ((cksum_magic == 0x55aa55aa) && + (sdk_system_get_checksum(buf8, cksum_len) == cksum_value)) { + // Checksum OK + } else { + // Bad checksum or bad cksum_magic value + dump_flash_config_sectors(flash_sectors - 4); + //FIXME: should we halt here? (original SDK code doesn't) + } + memcpy(&sdk_g_ic.s, buf32, sizeof(struct sdk_g_ic_saved_st)); + + user_start_phase2(); +} + +// .text+0x3a8 +void vApplicationStackOverflowHook(xTaskHandle task, char *task_name) { + printf("\"%s\"(stack_size = %lu) overflow the heap_size.\n", task_name, uxTaskGetStackHighWaterMark(task)); +} + +// .text+0x3d8 +void vApplicationIdleHook(void) { + printf("idle %lu\n", WDEV.SYS_TIME); +} + +// .text+0x404 +void vApplicationTickHook(void) { + printf("tick %lu\n", WDEV.SYS_TIME); +} + +// .Lfunc005 -- .irom0.text+0x8 +static void zero_bss(void) { + uint32_t *addr; + + for (addr = _bss_start; addr < _bss_end; addr++) { + *addr = 0; + } +} + +// .Lfunc006 -- .irom0.text+0x70 +static void init_networking(uint8_t *phy_info, uint8_t *mac_addr) { + if (sdk_register_chipv6_phy(phy_info)) { + printf("FATAL: sdk_register_chipv6_phy failed"); + halt(); + } + sdk_uart_div_modify(0, UART_DIVISOR); + sdk_uart_div_modify(1, UART_DIVISOR); + sdk_phy_disable_agc(); + sdk_ieee80211_phy_init(sdk_g_ic.s.phy_mode); + sdk_lmacInit(); + sdk_wDev_Initialize(); + sdk_pp_attach(); + sdk_ieee80211_ifattach(sdk_g_ic, mac_addr); + _xt_isr_mask(1); + DPORT.DPORT0 = SET_FIELD(DPORT.DPORT0, DPORT_DPORT0_FIELD0, 1); + sdk_pm_attach(); + sdk_phy_enable_agc(); + sdk_cnx_attach(sdk_g_ic); + sdk_wDevEnableRx(); +} + +// .Lfunc007 -- .irom0.text+0x148 +static void init_g_ic(void) { + if (sdk_g_ic.s.wifi_mode == 0xff) { + sdk_g_ic.s.wifi_mode = 2; + } + sdk_wifi_softap_set_default_ssid(); + if (sdk_g_ic.s._unknown30d < 1 || sdk_g_ic.s._unknown30d > 14) { + sdk_g_ic.s._unknown30d = 1; + } + if (sdk_g_ic.s._unknown544 < 100 || sdk_g_ic.s._unknown544 > 60000) { + sdk_g_ic.s._unknown544 = 100; + } + if (sdk_g_ic.s._unknown30e == 1 || sdk_g_ic.s._unknown30e > 4) { + sdk_g_ic.s._unknown30e = 0; + } + bzero(sdk_g_ic.s._unknown2ac, sizeof(sdk_g_ic.s._unknown2ac)); + if (sdk_g_ic.s._unknown30f > 1) { + sdk_g_ic.s._unknown30f = 0; + } + if (sdk_g_ic.s._unknown310 > 4) { + sdk_g_ic.s._unknown310 = 4; + } + if (sdk_g_ic.s._unknown1e4._unknown1e4 == 0xffffffff) { + bzero(&sdk_g_ic.s._unknown1e4, sizeof(sdk_g_ic.s._unknown1e4)); + bzero(&sdk_g_ic.s._unknown20f, sizeof(sdk_g_ic.s._unknown20f)); + } + sdk_g_ic.s.wifi_led_enable = 0; + if (sdk_g_ic.s._unknown281 > 1) { + sdk_g_ic.s._unknown281 = 0; + } + if (sdk_g_ic.s.ap_number > 5) { + sdk_g_ic.s.ap_number = 1; + } + if (sdk_g_ic.s.phy_mode < 1 || sdk_g_ic.s.phy_mode > 3) { + sdk_g_ic.s.phy_mode = PHY_MODE_11N; + } +} + +// .Lfunc008 -- .irom0.text+0x2a0 +static void dump_excinfo(void) { + uint32_t exccause, epc1, epc2, epc3, excvaddr, depc, excsave1; + uint32_t excinfo[8]; + + RSR(exccause, exccause); + printf("Fatal exception (%d): \n", (int)exccause); + RSR(epc1, epc1); + RSR(epc2, epc2); + RSR(epc3, epc3); + RSR(excvaddr, excvaddr); + RSR(depc, depc); + RSR(excsave1, excsave1); + printf("%s=0x%08lx\n", "epc1", epc1); + printf("%s=0x%08lx\n", "epc2", epc2); + printf("%s=0x%08lx\n", "epc3", epc3); + printf("%s=0x%08lx\n", "excvaddr", excvaddr); + printf("%s=0x%08lx\n", "depc", depc); + printf("%s=0x%08lx\n", "excsave1", excsave1); + sdk_system_rtc_mem_read(0, excinfo, 32); // Why? + excinfo[0] = 2; + excinfo[1] = exccause; + excinfo[2] = epc1; + excinfo[3] = epc2; + excinfo[4] = epc3; + excinfo[5] = excvaddr; + excinfo[6] = depc; + excinfo[7] = excsave1; + sdk_system_rtc_mem_write(0, excinfo, 32); +} + +// .irom0.text+0x368 +int sdk_uart_rx_one_char(char *buf) { + if (FIELD2VAL(UART_STATUS_RXFIFO_COUNT, UART(0).STATUS)) { + *buf = UART(0).FIFO; + return 0; + } + return 1; +} + +// .irom0.text+0x398 +void sdk_wdt_init(void) { + WDT.CTRL &= ~WDT_CTRL_ENABLE; + DPORT.INT_ENABLE |= DPORT_INT_ENABLE_WDT; + WDT.REG1 = 0x0000000b; + WDT.REG2 = 0x0000000c; + WDT.CTRL |= WDT_CTRL_FLAG3 | WDT_CTRL_FLAG4 | WDT_CTRL_FLAG5; + WDT.CTRL = SET_FIELD(WDT.CTRL, WDT_CTRL_FIELD0, 0); + WDT.CTRL |= WDT_CTRL_ENABLE; + sdk_pp_soft_wdt_init(); +} + +// .irom0.text+0x474 +void sdk_user_init_task(void *params) { + int phy_ver, pp_ver; + + sdk_ets_timer_init(); + printf("\nESP-Open-SDK ver: %s compiled @ %s %s\n", OS_VERSION_STR, __DATE__, __TIME__); + phy_ver = RTCMEM_BACKUP[RTCMEM_BACKUP_PHY_VER] >> 16; + printf("phy ver: %d, ", phy_ver); + pp_ver = RTCMEM_SYSTEM[RTCMEM_SYSTEM_PP_VER]; + printf("pp ver: %d.%d\n\n", (pp_ver >> 8) & 0xff, pp_ver & 0xff); + user_init(); + sdk_user_init_flag = 1; + sdk_wifi_mode_set(sdk_g_ic.s.wifi_mode); + if (sdk_g_ic.s.wifi_mode == 1) { + sdk_wifi_station_start(); + netif_set_default(sdk_g_ic.v.station_netif_info->netif); + } + if (sdk_g_ic.s.wifi_mode == 2) { + sdk_wifi_softap_start(); + netif_set_default(sdk_g_ic.v.softap_netif_info->netif); + } + if (sdk_g_ic.s.wifi_mode == 3) { + sdk_wifi_station_start(); + sdk_wifi_softap_start(); + netif_set_default(sdk_g_ic.v.softap_netif_info->netif); + } + if (sdk_wifi_station_get_auto_connect()) { + sdk_wifi_station_connect(); + } + vTaskDelete(NULL); +} + +// .Lfunc009 -- .irom0.text+0x5b4 +static void user_start_phase2(void) { + uint8_t *buf; + uint8_t *phy_info; + + sdk_system_rtc_mem_read(0, &sdk_rst_if, sizeof(sdk_rst_if)); + if (sdk_rst_if.version > 3) { + // Bad version number. Probably garbage. + bzero(&sdk_rst_if, sizeof(sdk_rst_if)); + } + buf = malloc(sizeof(sdk_rst_if)); + bzero(buf, sizeof(sdk_rst_if)); + sdk_system_rtc_mem_write(0, buf, sizeof(sdk_rst_if)); + free(buf); + sdk_sleep_reset_analog_rtcreg_8266(); + get_otp_mac_address(sdk_info.sta_mac_addr); + sdk_wifi_softap_cacl_mac(sdk_info.softap_mac_addr, sdk_info.sta_mac_addr); + sdk_info._unknown0 = 0x0104a8c0; + sdk_info._unknown1 = 0x00ffffff; + sdk_info._unknown2 = 0x0104a8c0; + init_g_ic(); + phy_info = malloc(PHY_INFO_SIZE); + sdk_spi_flash_read(sdk_flashchip.chip_size - sdk_flashchip.sector_size * 4, (uint32_t *)phy_info, PHY_INFO_SIZE); + + // Wait for UARTs to finish sending anything in their queues. + while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(0).STATUS) > 0) {} + while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(1).STATUS) > 0) {} + + if (phy_info[0] != 5) { + // Bad version byte. Discard what we read and use default values + // instead. + memcpy(phy_info, default_phy_info, PHY_INFO_SIZE); + } + init_networking(phy_info, sdk_info.sta_mac_addr); + free(phy_info); + tcpip_init(NULL, NULL); + sdk_wdt_init(); + xTaskCreate(sdk_user_init_task, (signed char *)"uiT", 1024, 0, 14, sdk_xUserTaskHandle); +} + +// .Lfunc010 -- .irom0.text+0x710 +static void dump_flash_data(uint32_t start_addr, uint32_t length) { + uint8_t *buf; + int bufsize, i; + + bufsize = (length + 3) & 0xfffc; + buf = malloc(bufsize); + sdk_spi_flash_read(start_addr, (uint32_t *)buf, bufsize); + for (i = 0; i < length; ) { + printf("%02x ", buf[i]); + if ((i & 0x1f) == 0) { + printf("\n"); + } + } + printf("\n"); + free(buf); +} + +// .Lfunc011 -- .irom0.text+0x790 +static void dump_flash_config_sectors(uint32_t start_addr) { + printf("system param error\n"); + // The original code used start_addr+1, start_addr+2, etc. This is + // obviously wrong as start_addr is clearly a byte address, not a sector + // address. + dump_flash_data(start_addr + sdk_flashchip.sector_size, sizeof(struct sdk_g_ic_saved_st)); + dump_flash_data(start_addr + sdk_flashchip.sector_size * 2, sizeof(struct sdk_g_ic_saved_st)); + dump_flash_data(start_addr + sdk_flashchip.sector_size * 3, BOOT_INFO_SIZE); +} + diff --git a/core/include/esp/wdev_regs.h b/core/include/esp/wdev_regs.h new file mode 100644 index 0000000..74788ca --- /dev/null +++ b/core/include/esp/wdev_regs.h @@ -0,0 +1,30 @@ +/* esp/wdev_regs.h + * + * ESP8266 register definitions for the "wdev" region (0x3FF2xxx) + * + * Not compatible with ESP SDK register access code. + */ + +#ifndef _ESP_WDEV_REGS_H +#define _ESP_WDEV_REGS_H + +#include "esp/types.h" +#include "common_macros.h" + +#define WDEV_BASE 0x3FF20000 +#define WDEV (*(struct WDEV_REGS *)(WDEV_BASE)) + +/* Note: This memory region is not currently well understood. Pretty much all + * of the definitions here are from reverse-engineering the Espressif SDK code, + * many are just educated guesses, and almost certainly some are misleading or + * wrong. If you can improve on any of this, please contribute! + */ + +struct WDEV_REGS { + uint32_t volatile _unknown[768]; // 0x0000 - 0x0bfc + uint32_t volatile SYS_TIME; // 0x0c00 +} __attribute__ (( packed )); + +_Static_assert(sizeof(struct WDEV_REGS) == 0xc04, "WDEV_REGS is the wrong size"); + +#endif /* _ESP_WDEV_REGS_H */ diff --git a/core/include/esp/wdt_regs.h b/core/include/esp/wdt_regs.h index eb51f57..66bf1d0 100644 --- a/core/include/esp/wdt_regs.h +++ b/core/include/esp/wdt_regs.h @@ -31,6 +31,17 @@ struct WDT_REGS { _Static_assert(sizeof(struct WDT_REGS) == 0x18, "WDT_REGS is the wrong size"); +/* Details for CTRL register */ + +/* Note: these are currently just guesses based on interpretation of the startup code */ + +#define WDT_CTRL_ENABLE BIT(0) +#define WDT_CTRL_FIELD0_M 0x00000003 +#define WDT_CTRL_FIELD0_S 1 +#define WDT_CTRL_FLAG3 BIT(3) +#define WDT_CTRL_FLAG4 BIT(4) +#define WDT_CTRL_FLAG5 BIT(5) + /* Writing WDT_FEED_MAGIC to WDT.FEED register "feeds the dog" and holds off * triggering for another cycle (unconfirmed) */ #define WDT_FEED_MAGIC 0x73 diff --git a/core/include/os_version.h b/core/include/os_version.h new file mode 100644 index 0000000..86b3bd8 --- /dev/null +++ b/core/include/os_version.h @@ -0,0 +1,6 @@ +#ifndef _VERSION_H +#define _VERSION_H + +#define OS_VERSION_STR "0.0.1" + +#endif /* _VERSION_H */ diff --git a/core/include/sdk_internal.h b/core/include/sdk_internal.h new file mode 100644 index 0000000..314d2ca --- /dev/null +++ b/core/include/sdk_internal.h @@ -0,0 +1,235 @@ +#ifndef _INTERNAL_SDK_STRUCTURES_H +#define _INTERNAL_SDK_STRUCTURES_H + +#include "espressif/esp_wifi.h" +#include "espressif/spi_flash.h" +#include "lwip/netif.h" + +/////////////////////////////////////////////////////////////////////////////// +// Internal structures and data objects // +/////////////////////////////////////////////////////////////////////////////// + +// 'info' is declared in app_main.o at .bss+0x4 + +struct sdk_info_st { + uint32_t _unknown0; + uint32_t _unknown1; + uint32_t _unknown2; + uint8_t _unknown3[12]; + uint8_t softap_mac_addr[6]; + uint8_t sta_mac_addr[6]; +}; + +extern struct sdk_info_st sdk_info; + +// 'rst_if' is declared in user_interface.o at .bss+0xfc + +struct sdk_rst_if_st { + uint32_t version; + uint8_t _unknown[28]; +}; + +extern struct sdk_rst_if_st sdk_rst_if; + +// 'g_ic' is declared in libnet80211/ieee80211.o at .bss+0x0 +// See also: http://esp8266-re.foogod.com/wiki/G_ic_(IoT_RTOS_SDK_0.9.9) + +struct sdk_g_ic_netif_info { + struct netif *netif; + //TODO: rest of this structure is unknown. +}; + +// This is the portion of g_ic which is not loaded/saved to the flash ROM, and +// starts out zeroed on every boot. +struct sdk_g_ic_volatile_st { + void *_unknown0; + void *_unknown4; + + uint8_t _unknown8[8]; + + struct sdk_g_ic_netif_info *station_netif_info; + struct sdk_g_ic_netif_info *softap_netif_info; + uint8_t _unknown18; + uint32_t _unknown1c; + uint32_t _unknown20; + + uint8_t _unknown24[8]; + + uint8_t _unknown2c; + + uint8_t _unknown30[76]; + + uint8_t _unknown7c; + uint8_t _unknown7d; + uint8_t _unknown7e; + uint8_t _unknown7f; + + uint8_t _unknown80[204]; + + void *_unknown14c; + + uint8_t _unknown150[20]; + + uint32_t _unknown164; + void *_unknown168; + void *_unknown16c; + void *_unknown170; + void *_unknown174; + void *_unknown178; + + uint8_t _unknown17c[4]; + + void *_unknown180; + void *_unknown184; + struct station_info *station_info_head; + struct station_info *station_info_tail; + uint32_t _unknown190; + uint32_t _unknown194; + + uint8_t _unknown198[40]; + + void *_unknown1c0; + void *_unknown1c4; + uint32_t _unknown1c8; + + uint8_t _unknown1cc[4]; + + uint16_t _unknown1d0; + + uint8_t _unknown1d2[2]; + + uint8_t _unknown1d4; + + uint8_t _unknown1d5[3]; +}; + +struct sdk_g_ic_unk0_st { + uint32_t _unknown1e4; + uint8_t _unknown1e8[32]; +}; + +// This is the portion of g_ic which is loaded/saved to the flash ROM, and thus +// is preserved across reboots. +struct sdk_g_ic_saved_st { + uint8_t _unknown1d8; + uint8_t boot_info; + uint8_t user0_addr[3]; + uint8_t user1_addr[3]; + uint8_t wifi_mode; + uint8_t wifi_led_enable; + uint8_t wifi_led_gpio; + uint8_t _unknown1e3; + + struct sdk_g_ic_unk0_st _unknown1e4; + + uint8_t _unknown208; + uint8_t _unknown209; + uint8_t _unknown20a; + uint8_t _unknown20b; + uint8_t _unknown20c; + uint8_t _unknown20d; + uint8_t _unknown20e; + uint8_t _unknown20f[64]; + uint8_t _unknown24f; + + uint8_t _unknown250[49]; + + uint8_t _unknown281; + + uint8_t _unknown282[6]; + + uint32_t _unknown288; + uint8_t _unknown28c; + + uint8_t _unknown290[28]; + + uint8_t _unknown2ac[64]; + uint8_t _unknonwn2ec; + + uint8_t _unknown2ed[32]; + + uint8_t _unknown30d; + uint8_t _unknown30e; + uint8_t _unknown30f; + uint8_t _unknown310; + + uint8_t _unknown311[3]; + + uint8_t ap_number; + uint8_t current_ap_id; + + uint8_t _unknown316[502]; + + uint32_t _unknown50c; + uint16_t _unknown510; + uint16_t _unknown512; + uint16_t _unknown514; + + uint8_t _unknown516[2]; + + uint8_t auto_connect; + + uint8_t _unknown519[3]; + + enum sdk_phy_mode phy_mode; + + uint8_t _unknown520[36]; + + uint16_t _unknown544; + + uint8_t _unknown546[2]; +}; + +struct sdk_g_ic_st { + struct sdk_g_ic_volatile_st v; // 0x0 - 0x1d8 + struct sdk_g_ic_saved_st s; // 0x1d8 - 0x548 +}; + +extern struct sdk_g_ic_st sdk_g_ic; + +/////////////////////////////////////////////////////////////////////////////// +// The above structures all refer to data regions outside our control, and a +// simple mistake/misunderstanding editing things here can completely screw up +// how we access them, so do some basic sanity checks to make sure that they +// appear to match up correctly with the actual data structures other parts of +// the SDK are expecting. +/////////////////////////////////////////////////////////////////////////////// + +_Static_assert(sizeof(struct sdk_info_st) == 0x24, "info_st is the wrong size!"); +_Static_assert(sizeof(struct sdk_rst_if_st) == 0x20, "sdk_rst_if_st is the wrong size!"); +_Static_assert(sizeof(struct sdk_g_ic_volatile_st) == 0x1d8, "sdk_g_ic_volatile_st is the wrong size!"); +_Static_assert(sizeof(struct sdk_g_ic_saved_st) == 0x370, "sdk_g_ic_saved_st is the wrong size!"); +_Static_assert(sizeof(struct sdk_g_ic_st) == 0x548, "sdk_g_ic_st is the wrong size!"); + +/////////////////////////////////////////////////////////////////////////////// +// Function Prototypes // +/////////////////////////////////////////////////////////////////////////////// + +sdk_SpiFlashOpResult sdk_SPIRead(uint32_t src_addr, uint32_t *des_addr, uint32_t size); +sdk_SpiFlashOpResult sdk_SPIWrite(uint32_t des_addr, uint32_t *src_addr, uint32_t size); +void sdk_cnx_attach(struct sdk_g_ic_st); +void sdk_ets_timer_init(void); +void sdk_ieee80211_ifattach(struct sdk_g_ic_st, uint8_t *); +void sdk_ieee80211_phy_init(enum sdk_phy_mode); +void sdk_lmacInit(void); +void sdk_os_install_putc1( void (*func)(uint8_t) ); +void sdk_phy_disable_agc(void); +void sdk_phy_enable_agc(void); +void sdk_pm_attach(void); +void sdk_pp_attach(void); +void sdk_pp_soft_wdt_init(void); +int sdk_register_chipv6_phy(uint8_t *); +void sdk_sleep_reset_analog_rtcreg_8266(void); +uint32_t sdk_system_get_checksum(uint8_t *, uint32_t); +void sdk_system_restart_in_nmi(void); +void sdk_wDevEnableRx(void); +void sdk_wDev_Initialize(void); +void sdk_wifi_mode_set(uint8_t); +void sdk_wifi_softap_cacl_mac(uint8_t *, uint8_t *); +void sdk_wifi_softap_set_default_ssid(void); +void sdk_wifi_softap_start(void); +void sdk_wifi_station_connect(void); +bool sdk_wifi_station_get_auto_connect(void); +void sdk_wifi_station_start(void); + +#endif /* _INTERNAL_SDK_STRUCTURES_H */ diff --git a/core/include/xtensa_ops.h b/core/include/xtensa_ops.h new file mode 100644 index 0000000..49d1fbe --- /dev/null +++ b/core/include/xtensa_ops.h @@ -0,0 +1,21 @@ +/** xtensa_ops.h + * + * Special macros/etc which deal with Xtensa-specific architecture/CPU + * considerations. + * + * Part of esp-open-rtos + * Copyright (C) 2015 Superhouse Automation Pty Ltd + * BSD Licensed as described in the file LICENSE + */ + +#ifndef _XTENSA_OPS_H +#define _XTENSA_OPS_H + +// GCC macros for reading, writing, and exchanging Xtensa processor special +// registers: + +#define RSR(var, reg) asm volatile ("rsr %0, " #reg : "=r" (var)); +#define WSR(var, reg) asm volatile ("wsr %0, " #reg : : "r" (var)); +#define XSR(var, reg) asm volatile ("xsr %0, " #reg : "+r" (var)); + +#endif /* _XTENSA_OPS_H */ diff --git a/lib/libmain.remove b/lib/libmain.remove index ae569f8..35145b3 100644 --- a/lib/libmain.remove +++ b/lib/libmain.remove @@ -2,3 +2,4 @@ printf-stdarg.o libc.o xtensa_vectors.o +app_main.o From 43a712572ce1b541cce1767574c15a32b48b87cf Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Tue, 25 Aug 2015 09:41:49 -0700 Subject: [PATCH 03/11] Don't rename FreeRTOS hook symbols --- FreeRTOS/Source/portable/esp8266/portmacro.h | 3 --- lib/allsymbols.rename | 4 ---- 2 files changed, 7 deletions(-) diff --git a/FreeRTOS/Source/portable/esp8266/portmacro.h b/FreeRTOS/Source/portable/esp8266/portmacro.h index c7f0501..da68720 100644 --- a/FreeRTOS/Source/portable/esp8266/portmacro.h +++ b/FreeRTOS/Source/portable/esp8266/portmacro.h @@ -182,9 +182,6 @@ not necessary for to use this port. They are defined so the common demo files #define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) /*-----------------------------------------------------------*/ -/* ESPTODO: These parts of the FreeRTOS support are still in binary libraries */ -#define vApplicationStackOverflowHook sdk_vApplicationStackOverflowHook - #ifdef __cplusplus } #endif diff --git a/lib/allsymbols.rename b/lib/allsymbols.rename index 2f455f0..7f56f1f 100644 --- a/lib/allsymbols.rename +++ b/lib/allsymbols.rename @@ -669,10 +669,6 @@ user_fatal_exception_handler sdk_user_fatal_exception_handler user_init_flag sdk_user_init_flag user_init_task sdk_user_init_task user_start sdk_user_start -vApplicationIdleHook sdk_vApplicationIdleHook -vApplicationStackOverflowHook sdk_vApplicationStackOverflowHook -vApplicationTickHook sdk_vApplicationTickHook -vPortYield sdk_vPortYield wait_rfpll_cal_end sdk_wait_rfpll_cal_end wDev_AppendRxAmpduLensBlocks sdk_wDev_AppendRxAmpduLensBlocks wDev_AppendRxBlocks sdk_wDev_AppendRxBlocks From c16dd2ef2321e1aa61a6e375b23a7eefbd159bd2 Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Tue, 25 Aug 2015 17:21:51 -0700 Subject: [PATCH 04/11] Add 'sdklike' FLAVOR to makefile --- common.mk | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/common.mk b/common.mk index e05e78e..245e277 100644 --- a/common.mk +++ b/common.mk @@ -100,6 +100,13 @@ LDFLAGS = -nostdlib -Wl,--no-check-sections -Wl,-L$(BUILD_DIR)sdklib -Wl,-L$(RO ifeq ($(FLAVOR),debug) CFLAGS += -g -O0 LDFLAGS += -g -O0 +else ifeq ($(FLAVOR),sdklike) + # These are flags intended to produce object code as similar as possible to + # the output of the compiler used to build the SDK libs (for comparison of + # disassemblies when coding replacement routines). It is not normally + # intended to be used otherwise. + CFLAGS += -O2 -Os -fno-inline -fno-ipa-cp -fno-toplevel-reorder + LDFLAGS += -O2 else CFLAGS += -g -O2 LDFLAGS += -g -O2 From aa7f305e167e0115867ac1223ad08c77fcf66cf6 Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Tue, 25 Aug 2015 17:22:38 -0700 Subject: [PATCH 05/11] Various app_main.c bug fixes --- core/app_main.c | 18 +++++++++--------- core/include/esp/dport_regs.h | 2 +- core/include/sdk_internal.h | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/app_main.c b/core/app_main.c index 86d1cb3..ae8fa07 100644 --- a/core/app_main.c +++ b/core/app_main.c @@ -43,8 +43,8 @@ void user_init(void); #define halt() while (1) {} -extern uint32_t *_bss_start; -extern uint32_t *_bss_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; // .Ldata003 -- .irom.text+0x0 static const uint8_t IROM default_phy_info[PHY_INFO_SIZE] = { @@ -150,7 +150,7 @@ static void IRAM set_spi0_divisor(uint32_t divisor) { } // .text+0x148 -void sdk_user_fatal_exception_handler(void) { +void IRAM sdk_user_fatal_exception_handler(void) { if (!sdk_NMIIrqIsOn) { vPortEnterCritical(); do { @@ -263,17 +263,17 @@ void IRAM sdk_user_start(void) { } // .text+0x3a8 -void vApplicationStackOverflowHook(xTaskHandle task, char *task_name) { +void IRAM vApplicationStackOverflowHook(xTaskHandle task, char *task_name) { printf("\"%s\"(stack_size = %lu) overflow the heap_size.\n", task_name, uxTaskGetStackHighWaterMark(task)); } // .text+0x3d8 -void vApplicationIdleHook(void) { +void IRAM vApplicationIdleHook(void) { printf("idle %lu\n", WDEV.SYS_TIME); } // .text+0x404 -void vApplicationTickHook(void) { +void IRAM vApplicationTickHook(void) { printf("tick %lu\n", WDEV.SYS_TIME); } @@ -281,7 +281,7 @@ void vApplicationTickHook(void) { static void zero_bss(void) { uint32_t *addr; - for (addr = _bss_start; addr < _bss_end; addr++) { + for (addr = &_bss_start; addr < &_bss_end; addr++) { *addr = 0; } } @@ -299,12 +299,12 @@ static void init_networking(uint8_t *phy_info, uint8_t *mac_addr) { sdk_lmacInit(); sdk_wDev_Initialize(); sdk_pp_attach(); - sdk_ieee80211_ifattach(sdk_g_ic, mac_addr); + sdk_ieee80211_ifattach(&sdk_g_ic, mac_addr); _xt_isr_mask(1); DPORT.DPORT0 = SET_FIELD(DPORT.DPORT0, DPORT_DPORT0_FIELD0, 1); sdk_pm_attach(); sdk_phy_enable_agc(); - sdk_cnx_attach(sdk_g_ic); + sdk_cnx_attach(&sdk_g_ic); sdk_wDevEnableRx(); } diff --git a/core/include/esp/dport_regs.h b/core/include/esp/dport_regs.h index df17103..87efca1 100644 --- a/core/include/esp/dport_regs.h +++ b/core/include/esp/dport_regs.h @@ -53,7 +53,7 @@ _Static_assert(sizeof(struct DPORT_REGS) == 0x60, "DPORT_REGS is the wrong size" /* Currently very little known about this register. The following is based on analysis of the startup code in the Espressif SDK: */ -#define DPORT_DPORT0_FIELD0_M 0x0000007f +#define DPORT_DPORT0_FIELD0_M 0x0000001f #define DPORT_DPORT0_FIELD0_S 0 /* Details for INT_ENABLE register */ diff --git a/core/include/sdk_internal.h b/core/include/sdk_internal.h index 314d2ca..6764094 100644 --- a/core/include/sdk_internal.h +++ b/core/include/sdk_internal.h @@ -207,9 +207,9 @@ _Static_assert(sizeof(struct sdk_g_ic_st) == 0x548, "sdk_g_ic_st is the wrong si sdk_SpiFlashOpResult sdk_SPIRead(uint32_t src_addr, uint32_t *des_addr, uint32_t size); sdk_SpiFlashOpResult sdk_SPIWrite(uint32_t des_addr, uint32_t *src_addr, uint32_t size); -void sdk_cnx_attach(struct sdk_g_ic_st); +void sdk_cnx_attach(struct sdk_g_ic_st *); void sdk_ets_timer_init(void); -void sdk_ieee80211_ifattach(struct sdk_g_ic_st, uint8_t *); +void sdk_ieee80211_ifattach(struct sdk_g_ic_st *, uint8_t *); void sdk_ieee80211_phy_init(enum sdk_phy_mode); void sdk_lmacInit(void); void sdk_os_install_putc1( void (*func)(uint8_t) ); From a9eb3a38e328cd91035c5788d78426f15c40fbdd Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Wed, 26 Aug 2015 13:19:53 -0700 Subject: [PATCH 06/11] More app_main fixups from object code comparisons --- core/app_main.c | 7 ++++--- core/include/sdk_internal.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/app_main.c b/core/app_main.c index ae8fa07..8d5a2b9 100644 --- a/core/app_main.c +++ b/core/app_main.c @@ -82,7 +82,7 @@ xTaskHandle sdk_xWatchDogTaskHandle; static void IRAM get_otp_mac_address(uint8_t *buf); static void IRAM set_spi0_divisor(uint32_t divisor); -static void IRAM default_putc(uint8_t c); +static int IRAM default_putc(uint8_t c); static void IRAM default_putc1(uint8_t c); static void zero_bss(void); static void init_networking(uint8_t *phy_info, uint8_t *mac_addr); @@ -167,9 +167,10 @@ void IRAM sdk_user_fatal_exception_handler(void) { } // .Lfunc003 -- .text+0x1d0 -static void IRAM default_putc(uint8_t c) { +static int IRAM default_putc(uint8_t c) { while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(0).STATUS) > 125) {} UART(0).FIFO = c; + return 0; } // .Lfunc004 -- .text+0x1f4 @@ -467,7 +468,7 @@ static void user_start_phase2(void) { free(phy_info); tcpip_init(NULL, NULL); sdk_wdt_init(); - xTaskCreate(sdk_user_init_task, (signed char *)"uiT", 1024, 0, 14, sdk_xUserTaskHandle); + xTaskCreate(sdk_user_init_task, (signed char *)"uiT", 1024, 0, 14, &sdk_xUserTaskHandle); } // .Lfunc010 -- .irom0.text+0x710 diff --git a/core/include/sdk_internal.h b/core/include/sdk_internal.h index 6764094..9c4da3e 100644 --- a/core/include/sdk_internal.h +++ b/core/include/sdk_internal.h @@ -141,7 +141,7 @@ struct sdk_g_ic_saved_st { uint32_t _unknown288; uint8_t _unknown28c; - uint8_t _unknown290[28]; + uint8_t _unknown28d[31]; uint8_t _unknown2ac[64]; uint8_t _unknonwn2ec; From a88f36d98695438d439b8272da88c453f06dbd05 Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Fri, 28 Aug 2015 17:45:38 -0700 Subject: [PATCH 07/11] More app_main.c fixups It's alive! IT'S ALIVE!! --- core/app_main.c | 15 ++++++++------- core/include/sdk_internal.h | 3 --- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/core/app_main.c b/core/app_main.c index 8d5a2b9..025ca9f 100644 --- a/core/app_main.c +++ b/core/app_main.c @@ -23,7 +23,7 @@ #include "esp/wdev_regs.h" #include "os_version.h" -#include "espressif/esp_system.h" +#include "espressif/esp_common.h" #include "sdk_internal.h" /* This is not declared in any header file (but arguably should be) */ @@ -82,8 +82,8 @@ xTaskHandle sdk_xWatchDogTaskHandle; static void IRAM get_otp_mac_address(uint8_t *buf); static void IRAM set_spi0_divisor(uint32_t divisor); -static int IRAM default_putc(uint8_t c); -static void IRAM default_putc1(uint8_t c); +static int IRAM default_putc(char c); +static void IRAM default_putc1(char c); static void zero_bss(void); static void init_networking(uint8_t *phy_info, uint8_t *mac_addr); static void init_g_ic(void); @@ -167,14 +167,14 @@ void IRAM sdk_user_fatal_exception_handler(void) { } // .Lfunc003 -- .text+0x1d0 -static int IRAM default_putc(uint8_t c) { +static int IRAM default_putc(char c) { while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(0).STATUS) > 125) {} UART(0).FIFO = c; return 0; } // .Lfunc004 -- .text+0x1f4 -static void IRAM default_putc1(uint8_t c) { +static void IRAM default_putc1(char c) { if (c == '\n') { default_putc('\r'); } else if (c == '\r') { @@ -238,8 +238,8 @@ void IRAM sdk_user_start(void) { flash_size = flash_sectors * 4096; sdk_flashchip.chip_size = flash_size; set_spi0_divisor(flash_speed_divisor); - sdk_SPIRead(flash_size - 256, buf32, BOOT_INFO_SIZE); - boot_slot = buf8[0]; + sdk_SPIRead(flash_size - 4096, buf32, BOOT_INFO_SIZE); + boot_slot = buf8[0] & 1; cksum_magic = buf32[1]; cksum_len = buf32[3 + boot_slot]; cksum_value = buf32[5 + boot_slot]; @@ -469,6 +469,7 @@ static void user_start_phase2(void) { tcpip_init(NULL, NULL); sdk_wdt_init(); xTaskCreate(sdk_user_init_task, (signed char *)"uiT", 1024, 0, 14, &sdk_xUserTaskHandle); + vTaskStartScheduler(); } // .Lfunc010 -- .irom0.text+0x710 diff --git a/core/include/sdk_internal.h b/core/include/sdk_internal.h index 9c4da3e..5a5aee5 100644 --- a/core/include/sdk_internal.h +++ b/core/include/sdk_internal.h @@ -212,7 +212,6 @@ void sdk_ets_timer_init(void); void sdk_ieee80211_ifattach(struct sdk_g_ic_st *, uint8_t *); void sdk_ieee80211_phy_init(enum sdk_phy_mode); void sdk_lmacInit(void); -void sdk_os_install_putc1( void (*func)(uint8_t) ); void sdk_phy_disable_agc(void); void sdk_phy_enable_agc(void); void sdk_pm_attach(void); @@ -228,8 +227,6 @@ void sdk_wifi_mode_set(uint8_t); void sdk_wifi_softap_cacl_mac(uint8_t *, uint8_t *); void sdk_wifi_softap_set_default_ssid(void); void sdk_wifi_softap_start(void); -void sdk_wifi_station_connect(void); -bool sdk_wifi_station_get_auto_connect(void); void sdk_wifi_station_start(void); #endif /* _INTERNAL_SDK_STRUCTURES_H */ From 8b5e8b923e4b85fb93da9867a93c645f1dc69a32 Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Sun, 30 Aug 2015 12:11:08 -0700 Subject: [PATCH 08/11] Bug fix for dump_flash_config_sectors --- core/app_main.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/core/app_main.c b/core/app_main.c index 025ca9f..3136b2a 100644 --- a/core/app_main.c +++ b/core/app_main.c @@ -89,8 +89,8 @@ static void init_networking(uint8_t *phy_info, uint8_t *mac_addr); static void init_g_ic(void); static void dump_excinfo(void); static void user_start_phase2(void); -static void dump_flash_data(uint32_t start_addr, uint32_t length); -static void dump_flash_config_sectors(uint32_t start_addr); +static void dump_flash_sector(uint32_t start_sector, uint32_t length); +static void dump_flash_config_sectors(uint32_t start_sector); // .Lfunc001 -- .text+0x14 static void IRAM get_otp_mac_address(uint8_t *buf) { @@ -473,31 +473,38 @@ static void user_start_phase2(void) { } // .Lfunc010 -- .irom0.text+0x710 -static void dump_flash_data(uint32_t start_addr, uint32_t length) { +static void dump_flash_sector(uint32_t start_sector, uint32_t length) { uint8_t *buf; int bufsize, i; bufsize = (length + 3) & 0xfffc; buf = malloc(bufsize); - sdk_spi_flash_read(start_addr, (uint32_t *)buf, bufsize); - for (i = 0; i < length; ) { - printf("%02x ", buf[i]); - if ((i & 0x1f) == 0) { - printf("\n"); + sdk_spi_flash_read(start_sector * sdk_flashchip.sector_size, (uint32_t *)buf +, bufsize); + for (i = 0; i < length; i++) { + if ((i & 0xf) == 0) { + if (i) { + printf("\n"); + } + printf("%04x:", i); } + printf(" %02x", buf[i]); } printf("\n"); free(buf); } // .Lfunc011 -- .irom0.text+0x790 -static void dump_flash_config_sectors(uint32_t start_addr) { +static void dump_flash_config_sectors(uint32_t start_sector) { printf("system param error\n"); - // The original code used start_addr+1, start_addr+2, etc. This is - // obviously wrong as start_addr is clearly a byte address, not a sector - // address. - dump_flash_data(start_addr + sdk_flashchip.sector_size, sizeof(struct sdk_g_ic_saved_st)); - dump_flash_data(start_addr + sdk_flashchip.sector_size * 2, sizeof(struct sdk_g_ic_saved_st)); - dump_flash_data(start_addr + sdk_flashchip.sector_size * 3, BOOT_INFO_SIZE); + // Note: original SDK code didn't dump PHY info + printf("phy_info:\n"); + dump_flash_sector(start_sector, PHY_INFO_SIZE); + printf("\ng_ic saved 0:\n"); + dump_flash_sector(start_sector + 1, sizeof(struct sdk_g_ic_saved_st)); + printf("\ng_ic saved 1:\n"); + dump_flash_sector(start_sector + 2, sizeof(struct sdk_g_ic_saved_st)); + printf("\nboot info:\n"); + dump_flash_sector(start_sector + 3, BOOT_INFO_SIZE); } From 19f01b2f7272284fb8478d06433cc92a52c261e6 Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Sun, 30 Aug 2015 13:37:40 -0700 Subject: [PATCH 09/11] app_main.c: load correct g_ic sector from flash --- core/app_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/app_main.c b/core/app_main.c index 3136b2a..1989234 100644 --- a/core/app_main.c +++ b/core/app_main.c @@ -239,11 +239,11 @@ void IRAM sdk_user_start(void) { sdk_flashchip.chip_size = flash_size; set_spi0_divisor(flash_speed_divisor); sdk_SPIRead(flash_size - 4096, buf32, BOOT_INFO_SIZE); - boot_slot = buf8[0] & 1; + boot_slot = buf8[0] ? 1 : 0; cksum_magic = buf32[1]; cksum_len = buf32[3 + boot_slot]; cksum_value = buf32[5 + boot_slot]; - ic_flash_addr = (flash_sectors - 2 + boot_slot) * sdk_flashchip.sector_size; + ic_flash_addr = (flash_sectors - 3 + boot_slot) * sdk_flashchip.sector_size; sdk_SPIRead(ic_flash_addr, buf32, sizeof(struct sdk_g_ic_saved_st)); Cache_Read_Enable(0, 0, 1); zero_bss(); From b280f8a725f18999f2a501cd0b07a852bb454622 Mon Sep 17 00:00:00 2001 From: Alex Stewart Date: Sun, 20 Sep 2015 14:09:30 -0700 Subject: [PATCH 10/11] Fix format strings in app_main.c --- core/app_main.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/app_main.c b/core/app_main.c index 1989234..88ac743 100644 --- a/core/app_main.c +++ b/core/app_main.c @@ -270,12 +270,12 @@ void IRAM vApplicationStackOverflowHook(xTaskHandle task, char *task_name) { // .text+0x3d8 void IRAM vApplicationIdleHook(void) { - printf("idle %lu\n", WDEV.SYS_TIME); + printf("idle %u\n", WDEV.SYS_TIME); } // .text+0x404 void IRAM vApplicationTickHook(void) { - printf("tick %lu\n", WDEV.SYS_TIME); + printf("tick %u\n", WDEV.SYS_TIME); } // .Lfunc005 -- .irom0.text+0x8 @@ -360,12 +360,12 @@ static void dump_excinfo(void) { RSR(excvaddr, excvaddr); RSR(depc, depc); RSR(excsave1, excsave1); - printf("%s=0x%08lx\n", "epc1", epc1); - printf("%s=0x%08lx\n", "epc2", epc2); - printf("%s=0x%08lx\n", "epc3", epc3); - printf("%s=0x%08lx\n", "excvaddr", excvaddr); - printf("%s=0x%08lx\n", "depc", depc); - printf("%s=0x%08lx\n", "excsave1", excsave1); + printf("%s=0x%08x\n", "epc1", epc1); + printf("%s=0x%08x\n", "epc2", epc2); + printf("%s=0x%08x\n", "epc3", epc3); + printf("%s=0x%08x\n", "excvaddr", excvaddr); + printf("%s=0x%08x\n", "depc", depc); + printf("%s=0x%08x\n", "excsave1", excsave1); sdk_system_rtc_mem_read(0, excinfo, 32); // Why? excinfo[0] = 2; excinfo[1] = exccause; From c5a53c87fa04bfbf17324741e1ed02b89d216311 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Mon, 21 Sep 2015 08:46:45 +1000 Subject: [PATCH 11/11] bmp180: Fix more 'temperatue' typos (thanks @atomman) --- extras/bmp180/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/bmp180/README.md b/extras/bmp180/README.md index d6073c6..a8c41f5 100644 --- a/extras/bmp180/README.md +++ b/extras/bmp180/README.md @@ -34,12 +34,12 @@ As all data aqquired from the BMP180/BMP085 is provided to the `bmp180_informUse ``` // Own BMP180 User Inform Implementation -bool my_informUser(const xQueueHandle* resultQueue, uint8_t cmd, bmp180_temp_t temperatue, bmp180_press_t pressure) { +bool my_informUser(const xQueueHandle* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) { my_event_t ev; ev.event_type = MY_EVT_BMP180; ev.bmp180_data.cmd = cmd; - ev.bmp180_data.temperatue = temperatue; + ev.bmp180_data.temperature = temperature; ev.bmp180_data.pressure = pressure; return (xQueueSend(*resultQueue, &ev, 0) == pdTRUE);