aboutsummaryrefslogtreecommitdiffstats
path: root/usr/space_light/src/stubs
diff options
context:
space:
mode:
authorBernhard Guillon <Bernhard.Guillon@begu.org>2024-12-25 00:34:42 +0100
committerBernhard Guillon <Bernhard.Guillon@begu.org>2024-12-29 19:54:53 +0100
commit1762c56956bafd6fc0636516b494dfa935ff8aec (patch)
tree5b693c0c70400b71c982401fd9693a48991d3c23 /usr/space_light/src/stubs
parent40404fb81dfad3f5c5cf567bb053796a9135165e (diff)
downloadwb3s-ble-nebula-galaxy-1762c56956bafd6fc0636516b494dfa935ff8aec.tar.gz
wb3s-ble-nebula-galaxy-1762c56956bafd6fc0636516b494dfa935ff8aec.zip
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
Diffstat (limited to 'usr/space_light/src/stubs')
-rw-r--r--usr/space_light/src/stubs/ke_stubs.c75
-rw-r--r--usr/space_light/src/stubs/other_stubs.c107
-rw-r--r--usr/space_light/src/stubs/re_stubs.S55
-rw-r--r--usr/space_light/src/stubs/re_stubs.c51
-rw-r--r--usr/space_light/src/stubs/stubs.c133
5 files changed, 421 insertions, 0 deletions
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 <rwble_hl_init>:
+ 3dca0: b508 push {r3, lr}
+ 3dca2: 2000 movs r0, #0
+ 3dca4: f7f0 fc86 bl 2e5b4 <attm_init>
+ 3dca8: 2000 movs r0, #0
+ 3dcaa: f7ec fe3d bl 2a928 <gapm_init>
+ 3dcae: 2000 movs r0, #0
+ 3dcb0: f7ef fdda bl 2d868 <gattm_init>
+ 3dcb4: 2000 movs r0, #0
+ 3dcb6: f006 fa3b bl 44130 <l2cm_init>
+ 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 <rwble_hl_reset>:
+ 3dcc8: b508 push {r3, lr}
+ 3dcca: 2001 movs r0, #1
+ 3dccc: f7f0 fc86 bl 2e5dc <attm_init>
+ 3dcd0: 2001 movs r0, #1
+ 3dcd2: f7ec fe3d bl 2a950 <gapm_init>
+ 3dcd6: 2001 movs r0, #1
+ 3dcd8: f7ef fdda bl 2d890 <gattm_init>
+ 3dcdc: 2001 movs r0, #1
+ 3dcde: f006 fa2d bl 4413c <l2cm_init>
+ 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; }