From 1762c56956bafd6fc0636516b494dfa935ff8aec Mon Sep 17 00:00:00 2001 From: Bernhard Guillon Date: Wed, 25 Dec 2024 00:34:42 +0100 Subject: space_light: first version TODO: pwm initialization is currently best guess could be wrong active low|high TODO: implement pairing TODO: implement timer TODO: use the button for something TODO: implement a better client --- usr/space_light/src/stubs/ke_stubs.c | 75 ++++++++++++++++++ usr/space_light/src/stubs/other_stubs.c | 107 +++++++++++++++++++++++++ usr/space_light/src/stubs/re_stubs.S | 55 +++++++++++++ usr/space_light/src/stubs/re_stubs.c | 51 ++++++++++++ usr/space_light/src/stubs/stubs.c | 133 ++++++++++++++++++++++++++++++++ 5 files changed, 421 insertions(+) create mode 100644 usr/space_light/src/stubs/ke_stubs.c create mode 100644 usr/space_light/src/stubs/other_stubs.c create mode 100644 usr/space_light/src/stubs/re_stubs.S create mode 100644 usr/space_light/src/stubs/re_stubs.c create mode 100644 usr/space_light/src/stubs/stubs.c (limited to 'usr/space_light/src/stubs') diff --git a/usr/space_light/src/stubs/ke_stubs.c b/usr/space_light/src/stubs/ke_stubs.c new file mode 100644 index 0000000..f1087c8 --- /dev/null +++ b/usr/space_light/src/stubs/ke_stubs.c @@ -0,0 +1,75 @@ +/* +Various functions and data structures required by the KE kernel +*/ + +#include "mm_task.h" + +const struct ke_state_handler mm_default_handler = {0}; +const struct ke_state_handler mm_state_handler[MM_STATE_MAX] = {{0}}; +ke_state_t mm_state[MM_IDX_MAX] = {0}; + +#include "scan_task.h" + +const struct ke_state_handler scan_default_handler = {0}; +ke_state_t scan_state[SCAN_IDX_MAX] = {0}; + +#include "scanu_task.h" + +const struct ke_state_handler scanu_state_handler[SCANU_STATE_MAX] = {{0}}; +const struct ke_state_handler scanu_default_handler = {0}; +ke_state_t scanu_state[SCANU_IDX_MAX] = {0}; + +#include "me_task.h" + +const struct ke_state_handler me_state_handler[ME_STATE_MAX] = {{0}}; +const struct ke_state_handler me_default_handler = {0}; +ke_state_t me_state[ME_IDX_MAX] = {0}; + +#include "sm_task.h" + +const struct ke_state_handler sm_default_handler = {0}; +ke_state_t sm_state[SM_IDX_MAX] = {0}; + +#include "apm_task.h" + +const struct ke_state_handler apm_default_handler = {0}; +ke_state_t apm_state[APM_IDX_MAX] = {0}; + +#include "bam_task.h" + +const struct ke_state_handler bam_default_handler = {0}; +ke_state_t bam_state[BAM_IDX_MAX] = {0}; + +// from txl_cntrl.h +void txl_payload_handle(int access_category) {}; + +// from txl_cfm.h +void txl_cfm_evt(int dummy) {}; + +// from mm.h +void mm_tbtt_evt(int dummy) {}; + +void mm_hw_idle_evt(int dummy) {}; + +// from mm_timer.h +void mm_timer_schedule(int dummy) {}; + +#include "rwnx.h" + +RW_CONNECTOR_T g_rwnx_connector; + +void rwnxl_reset_evt(int dummy) {}; + +// from reg_mac_pl.h +void rwnxl_set_nxmac_timer_value_set_bit(uint32_t bit) {}; + +void rwnxl_set_nxmac_timer_value_clear_bit(uint32_t bit) {}; + +// from rxu_cntrl.h +void rxu_cntrl_evt(int dummy) {}; + +// from txl_frame.h +void txl_frame_evt(int dummy) {}; + +// from hal_dma.h +void hal_dma_evt(int dma_queue) {}; diff --git a/usr/space_light/src/stubs/other_stubs.c b/usr/space_light/src/stubs/other_stubs.c new file mode 100644 index 0000000..f224183 --- /dev/null +++ b/usr/space_light/src/stubs/other_stubs.c @@ -0,0 +1,107 @@ +#include "rw_pub.h" + +unsigned char mhdr_get_station_status() { return RW_EVT_STA_IDLE; } + +#include "td.h" +void td_pck_ps_ind(uint8_t vif_index, bool rx) {}; + +void td_timer_end(void *env) {}; + +struct td_env_tag td_env[NX_VIRT_DEV_MAX] = {{{{0}}}}; + +#include "vif_mgmt.h" + +struct vif_info_tag vif_info_tab[NX_VIRT_DEV_MAX] = {{{0}}}; +struct vif_mgmt_env_tag vif_mgmt_env = {{0}}; + +void rwnx_printf(char *fmt, ...) {} + +#include "rwnx.h" +bool rwnxl_sleep(IDLE_FUNC wait_func, IDLE_FUNC do_func) { return true; }; + +void rwnxl_wakeup(IDLE_FUNC wait_func) {}; + +bool rwnxl_get_status_in_doze(void) { return true; }; + +void tpc_init(void) {}; + +void tpc_deinit(void) {}; + +#include "chan.h" +bool chan_is_on_channel(struct vif_info_tag *vif_entry) { return false; } + +#include "mm_timer.h" +void mm_timer_set(struct mm_timer_tag *timer, uint32_t value) {}; + +// from app_bk.c +#include "app.h" +#include "include.h" +#include "mem_pub.h" +#include "rwnx_config.h" + +#if (NX_POWERSAVE) +#include "ps.h" +#endif //(NX_POWERSAVE) + +#include "main_none.h" +#include "sa_ap.h" +#include "sa_station.h" +#include "sm.h" +#include "uart_pub.h" + +#include "hostapd_intf_pub.h" +#include "lwip/pbuf.h" +#include "mcu_ps_pub.h" +#include "param_config.h" +#include "power_save_pub.h" +#include "ps_debug_pub.h" +#include "rtos_error.h" +#include "rtos_pub.h" +#include "rw_msdu.h" +#include "rw_msg_rx.h" +#include "rw_pub.h" +#include "rxl_cntrl.h" +#include "txu_cntrl.h" +#include "wlan_ui_pub.h" + +#include "app_music_pub.h" +#include "bk7011_cal_pub.h" + +WIFI_CORE_T g_wifi_core = {0}; + +void bmsg_null_sender(void) { + OSStatus ret; + BUS_MSG_T msg; + + msg.type = BMSG_NULL_TYPE; + msg.arg = 0; + msg.len = 0; + msg.sema = NULL; + + if (!rtos_is_queue_empty(&g_wifi_core.io_queue)) { + return; + } + + ret = rtos_push_to_queue(&g_wifi_core.io_queue, &msg, BEKEN_NO_WAIT); + if (kNoErr != ret) { + os_printf("bmsg_null_sender_failed\r\n"); + } +} + +void bmsg_ps_sender(uint8_t arg) { + OSStatus ret; + BUS_MSG_T msg; + if (g_wifi_core.io_queue) { + msg.type = BMSG_STA_PS_TYPE; + msg.arg = (uint32_t)arg; + msg.len = 0; + msg.sema = NULL; + + ret = rtos_push_to_queue(&g_wifi_core.io_queue, &msg, BEKEN_NO_WAIT); + if (kNoErr != ret) { + os_printf("bmsg_ps_sender failed\r\n"); + } + } else { + os_printf("g_wifi_core.io_queue null\r\n"); + } +} diff --git a/usr/space_light/src/stubs/re_stubs.S b/usr/space_light/src/stubs/re_stubs.S new file mode 100644 index 0000000..774a390 --- /dev/null +++ b/usr/space_light/src/stubs/re_stubs.S @@ -0,0 +1,55 @@ + .thumb + .globl rwble_reset + .thumb_func + +rwble_reset: + push {r3, r4, r5, lr} + bl portDISABLE_FIQ + add r5, r0, #0 + bl portDISABLE_IRQ + movs r2, #128 // 0x80 + add r4, r0, #0 + ldr r3, BLE_BASETIMECNT_ADDR + lsl r2, r2, #24 + str r2, [r3, #0] +2: + ldr r2, [r3, #0] + cmp r2, #0 + blt 2b + ldr r2, BLE_FINETIMECNT_ADDR + ldr r3, BLE_BASETIMECNT_ADDR + ldr r3, [r3, #0] + ldr r0, [r2, #0] + add r0, r0, r3 + ldr r3, BLE_BDADDRL_ADDR + ldr r3, [r3, #0] + add r0, r0, r3 + bl srand + bl lld_core_reset + movs r0, #1 + bl lld_init + movs r0, #1 + bl lld_adv_test_init + bl llc_reset + movs r0, #1 + bl llm_init + bl em_buf_init + cmp r5, #0 + bne 0f + bl portENABLE_FIQ +0: + cmp r4, #0 + bne 1f + bl portENABLE_IRQ +1: + pop {r3, r4, r5, pc} + + .balign 4 + +BLE_BASETIMECNT_ADDR: + .word 0x0081001c // BLE_BASETIMECNT_ADDR +BLE_FINETIMECNT_ADDR: + .word 0x00810020 // BLE_FINETIMECNT_ADDR +BLE_BDADDRL_ADDR: + .word 0x00810024 // BLE_BDADDRL_ADDR + diff --git a/usr/space_light/src/stubs/re_stubs.c b/usr/space_light/src/stubs/re_stubs.c new file mode 100644 index 0000000..ca79e2f --- /dev/null +++ b/usr/space_light/src/stubs/re_stubs.c @@ -0,0 +1,51 @@ +#include "include.h" + +#include "attm.h" +#include "gapm.h" +#include "gattm.h" +#include "l2cm.h" +#include "rwble_hl.h" + +void rwble_hl_init(void) { + bk_printf("BLE stack init: %s\n", __func__); + attm_init(0); + gapm_init(0); + gattm_init(0); + l2cm_init(0); +} + +/* +0003dca0 : + 3dca0: b508 push {r3, lr} + 3dca2: 2000 movs r0, #0 + 3dca4: f7f0 fc86 bl 2e5b4 + 3dca8: 2000 movs r0, #0 + 3dcaa: f7ec fe3d bl 2a928 + 3dcae: 2000 movs r0, #0 + 3dcb0: f7ef fdda bl 2d868 + 3dcb4: 2000 movs r0, #0 + 3dcb6: f006 fa3b bl 44130 + 3dcba: bd08 pop {r3, pc} +*/ + +void rwble_hl_reset(void) { + bk_printf("BLE stack reset: %s\n", __func__); + attm_init(1); + gapm_init(1); + gattm_init(1); + l2cm_init(1); +} + +/* +0003dcc8 : + 3dcc8: b508 push {r3, lr} + 3dcca: 2001 movs r0, #1 + 3dccc: f7f0 fc86 bl 2e5dc + 3dcd0: 2001 movs r0, #1 + 3dcd2: f7ec fe3d bl 2a950 + 3dcd6: 2001 movs r0, #1 + 3dcd8: f7ef fdda bl 2d890 + 3dcdc: 2001 movs r0, #1 + 3dcde: f006 fa2d bl 4413c + 3dce2: bd08 pop {r3, pc} +*/ diff --git a/usr/space_light/src/stubs/stubs.c b/usr/space_light/src/stubs/stubs.c new file mode 100644 index 0000000..dcb79b9 --- /dev/null +++ b/usr/space_light/src/stubs/stubs.c @@ -0,0 +1,133 @@ +// stubs +#include "sk_intf.h" +#include "wlan_ui_pub.h" + +// from wlan_ui.c +static monitor_data_cb_t g_bcn_cb = 0; +monitor_data_cb_t g_monitor_cb = 0; +int g_set_channel_postpone_num = 0; + +int bk_wlan_is_monitor_mode(void) { return (0 == g_monitor_cb) ? false : true; } + +monitor_data_cb_t bk_wlan_get_bcn_cb(void) { return g_bcn_cb; } + +monitor_data_cb_t bk_wlan_get_monitor_cb(void) { + if (g_monitor_cb) { + return g_monitor_cb; + } else { + return NULL; + } +} + +int bk_wlan_is_general_sniffer_type(void) { + return false; //(MTR_GENERAL_SNIFFER_TYPE == g_monitor_type); +} + +uint32_t bk_sta_cipher_is_open(void) { + // ASSERT(g_sta_param_ptr); + return false; //(SECURITY_TYPE_NONE == g_sta_param_ptr->cipher_suite); +} + +int bk_wlan_dtim_rf_ps_mode_do_wakeup() { + // void *sem_list = NULL; + + UINT32 ret = 0; +#if 0 + sem_list = power_save_rf_ps_wkup_semlist_create(); + + if (!sem_list) + { + os_printf("err ---- NULL\r\n"); + ASSERT(0); + } + + GLOBAL_INT_DECLARATION(); + GLOBAL_INT_DISABLE(); + + if((power_save_if_ps_rf_dtim_enabled() + && power_save_if_rf_sleep()) || ble_switch_mac_sleeped) + { + power_save_rf_ps_wkup_semlist_wait(sem_list); + } + else + { + power_save_rf_ps_wkup_semlist_destroy(sem_list); + os_free(sem_list); + sem_list = NULL; + } + + GLOBAL_INT_RESTORE(); + + power_save_rf_ps_wkup_semlist_get(sem_list); +#endif + return ret; +} + +void bk_wlan_ap_set_channel_config(uint8_t channel) { + // g_ap_param_ptr->chann = channel; +} + +UINT32 if_other_mode_rf_sleep(void) { return false; } + +int bk_wlan_mcu_suppress_and_sleep(UINT32 sleep_ticks) { return 0; } + +// from wpa_ie.c +struct wpa_ie_data; + +int wpa_parse_wpa_ie(const u8 *wpa_ie, size_t wpa_ie_len, + struct wpa_ie_data *data) { +#if 0 + if (wpa_ie_len >= 1 && wpa_ie[0] == WLAN_EID_RSN) + return wpa_parse_wpa_ie_rsn(wpa_ie, wpa_ie_len, data); + if (wpa_ie_len >= 6 && wpa_ie[0] == WLAN_EID_VENDOR_SPECIFIC && + wpa_ie[1] >= 4 && WPA_GET_BE32(&wpa_ie[2]) == OSEN_IE_VENDOR_TYPE) + return wpa_parse_wpa_ie_rsn(wpa_ie, wpa_ie_len, data); + else + return wpa_parse_wpa_ie_wpa(wpa_ie, wpa_ie_len, data); +#endif + return 0; +} + +// from sk_intf.c +int ke_mgmt_packet_tx(unsigned char *buf, int len, int flag) { + int ret = 0; + +#if 0 + int ret, poll_flag = 0; + SOCKET sk = mgmt_get_socket_num(flag); + + ret = ke_sk_send(sk, buf, len, flag); + if(ret) + { + poll_flag = wpa_hostapd_queue_poll((uint32_t)flag); + } + + if(poll_flag) + { + handle_dummy_read(sk, NULL, NULL); + } +#endif + return ret; +} + +// from pbuf.c +u8_t pbuf_free(struct pbuf *p) { return 0; } + +void pbuf_chain(struct pbuf *h, struct pbuf *t) {} + +struct pbuf *pbuf_dechain(struct pbuf *p) { return NULL; } + +struct pbuf *pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) { + return NULL; +} + +// from rwnx.h +void rwnxl_init(void) {} + +// compiler experiments: can be removed + +int secret_int = 0; + +int *get_that_int(void) { return &secret_int; } + +void change_that_int(int a) { secret_int = a; } -- cgit v1.2.3