|
@@ -0,0 +1,188 @@
|
|
|
+#include "include.h"
|
|
|
+#include "api.h"
|
|
|
+#include "hlw_bt.h"
|
|
|
+#include "func_hlw.h"
|
|
|
+
|
|
|
+#if HLW_UI
|
|
|
+
|
|
|
+#define HLW_BT_TRACE_EN 1
|
|
|
+
|
|
|
+#if HLW_BT_TRACE_EN
|
|
|
+#define TRACE(...) printf(__VA_ARGS__)
|
|
|
+#define TRACE_R(...) print_r(__VA_ARGS__)
|
|
|
+#else
|
|
|
+#define TRACE(...)
|
|
|
+#define TRACE_R(...)
|
|
|
+#endif
|
|
|
+
|
|
|
+void hlw_bt_init(void)
|
|
|
+{
|
|
|
+ if(bt_nor_get_link_info(NULL))
|
|
|
+ {
|
|
|
+ //hlw_bt_mode_set(0x02);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hlw_bt_mode_set(0x03);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+param : scan status
|
|
|
+set bt mode, 0:不可见不可连 2:可连不可见 3:可见可连
|
|
|
+*/
|
|
|
+void hlw_bt_mode_set(u8 scan_status)
|
|
|
+{
|
|
|
+ bt_set_scan_do(scan_status);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void hlw_bt_enter_pairmode_handle(void)
|
|
|
+{
|
|
|
+ hlw_bt_mode_set(0x03);
|
|
|
+}
|
|
|
+
|
|
|
+void hlw_bt_start_reconnect_handle(void)
|
|
|
+{
|
|
|
+ hlw_cb.reconnect_flag = true;
|
|
|
+
|
|
|
+ if(hlw_cb.reconnect_count < 2)
|
|
|
+ {
|
|
|
+ hlw_cb.reconnect_count++;
|
|
|
+ }
|
|
|
+
|
|
|
+ TRACE("%s recon flag %d cnt %d\n", __func__, hlw_cb.reconnect_flag, hlw_cb.reconnect_count);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void hlw_bt_reconnect_fail_handle(void)
|
|
|
+{
|
|
|
+ if(hlw_cb.reconnect_count > 0)
|
|
|
+ {
|
|
|
+ hlw_cb.reconnect_count--;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(hlw_cb.reconnect_count == 0)
|
|
|
+ {
|
|
|
+ hlw_cb.reconnect_flag = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!hlw_cb.reconnect_flag)
|
|
|
+ {
|
|
|
+ hlw_bt_enter_pairmode_handle();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void hlw_bt_connected_handle(void)
|
|
|
+{
|
|
|
+ if(hlw_cb.reconnect_count > 0)
|
|
|
+ {
|
|
|
+ hlw_cb.reconnect_count--;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(hlw_cb.reconnect_count == 0)
|
|
|
+ {
|
|
|
+ hlw_cb.reconnect_flag = false;
|
|
|
+ }
|
|
|
+
|
|
|
+#if BT_2ACL_EN
|
|
|
+ if(hlw_cb.curr_connect_cnt < 2)
|
|
|
+ {
|
|
|
+ hlw_cb.curr_connect_cnt++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(hlw_cb.curr_connect_cnt == 2)
|
|
|
+ {
|
|
|
+ hlw_bt_mode_set(0x02);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hlw_bt_mode_set(0x00);
|
|
|
+ }
|
|
|
+#else
|
|
|
+ hlw_cb.curr_connect_cnt = 1;
|
|
|
+ hlw_bt_mode_set(0x00);
|
|
|
+#endif // BT_2ACL_EN
|
|
|
+ TRACE("%s con num %d\n", __func__, hlw_cb.curr_connect_cnt);
|
|
|
+}
|
|
|
+
|
|
|
+void hlw_bt_disconnected_handle(void)
|
|
|
+{
|
|
|
+ hlw_cb.disconnect_flag = 1;
|
|
|
+ hlw_cb.disconnect_count = 0;
|
|
|
+
|
|
|
+ if(hlw_cb.curr_connect_cnt > 0)
|
|
|
+ {
|
|
|
+ hlw_cb.curr_connect_cnt--;
|
|
|
+ }
|
|
|
+ TRACE("%s con num %d reson %d\n", __func__, hlw_cb.curr_connect_cnt, hlw_cb.disconnect_reason);
|
|
|
+}
|
|
|
+
|
|
|
+void hlw_bt_disconnect_linkloss_handle(void)
|
|
|
+{
|
|
|
+ hlw_cb.disconnect_flag = 2;
|
|
|
+ hlw_cb.disconnect_count = 0;
|
|
|
+ TRACE("%s con num %d\n", __func__, hlw_cb.curr_connect_cnt);
|
|
|
+}
|
|
|
+
|
|
|
+AT(.com_text.detect)
|
|
|
+void hlw_bt_disconnect_count_process(void)
|
|
|
+{
|
|
|
+ if(hlw_cb.disconnect_flag == 1)
|
|
|
+ {
|
|
|
+ if(++hlw_cb.disconnect_count >= 2)
|
|
|
+ {
|
|
|
+ hlw_cb.disconnect_flag = 2;
|
|
|
+ hlw_cb.disconnect_count = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void hlw_bt_disconnect_process_do(void)
|
|
|
+{
|
|
|
+ hlw_cb.disconnect_flag = 0;
|
|
|
+
|
|
|
+#if BT_2ACL_EN
|
|
|
+ if(hlw_cb.curr_connect_cnt == 1)
|
|
|
+ {
|
|
|
+ hlw_bt_mode_set(0x02);
|
|
|
+ }
|
|
|
+ else if(hlw_cb.curr_connect_cnt == 0)
|
|
|
+ {
|
|
|
+ if(hlw_cb.disconnect_reason == 0x08)
|
|
|
+ {
|
|
|
+ hlw_bt_mode_set(0x02);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hlw_bt_mode_set(0x03);
|
|
|
+ }
|
|
|
+ }
|
|
|
+#else
|
|
|
+ if(hlw_cb.disconnect_reason == 0x08)
|
|
|
+ {
|
|
|
+ hlw_bt_mode_set(0x02);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hlw_bt_mode_set(0x03);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+ hlw_cb.disconnect_reason = 0x00;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void hlw_bt_disconnect_process(void)
|
|
|
+{
|
|
|
+ if(hlw_cb.disconnect_flag != 2)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ hlw_bt_disconnect_process_do();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#endif // HLW_UI
|