129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #include "smartbox/config.h"
 | ||
|  | #include "smartbox/command.h"
 | ||
|  | #include "btstack/avctp_user.h"
 | ||
|  | #include "smartbox/event.h"
 | ||
|  | #include "system/timer.h"
 | ||
|  | #include "le_smartbox_module.h"
 | ||
|  | #include "smartbox_rcsp_manage.h"
 | ||
|  | 
 | ||
|  | #if (SMART_BOX_EN)
 | ||
|  | 
 | ||
|  | void smartbox_command_send_bt_scan_result(char *name, u8 name_len, u8 *addr, u32 dev_class, char rssi) | ||
|  | { | ||
|  |     u8 send_len = sizeof(dev_class) + 6 + sizeof(rssi) + sizeof(name_len) + name_len; | ||
|  |     u8 *send_buf = (u8 *)zalloc(send_len); | ||
|  |     if (send_buf == NULL) { | ||
|  |         return ; | ||
|  |     } | ||
|  |     WRITE_BIG_U32(send_buf, dev_class); | ||
|  |     memcpy(send_buf + sizeof(dev_class), addr, 6); | ||
|  |     memcpy(send_buf + sizeof(dev_class) + 6, &rssi, 1); | ||
|  |     memcpy(send_buf + sizeof(dev_class) + 6 + sizeof(rssi), &name_len, 1); | ||
|  |     memcpy(send_buf + sizeof(dev_class) + 6 + sizeof(rssi) + sizeof(name_len), name, name_len); | ||
|  |     JL_CMD_send(JL_OPCODE_SYS_UPDATE_BT_STATUS, send_buf, send_len, JL_NOT_NEED_RESPOND); | ||
|  |     free(send_buf); | ||
|  |     printf("bt name = %s\n", name); | ||
|  | } | ||
|  | 
 | ||
|  | void smartbox_command_send_conncecting_bt_status(u8 *addr, u8 status) | ||
|  | { | ||
|  |     u8 send_buf[7] = {0}; | ||
|  |     send_buf[0] = status; | ||
|  |     memcpy(send_buf, addr, 6); | ||
|  |     JL_CMD_send(JL_OPCODE_SYS_EMITTER_BT_CONNECT_STATUS, send_buf, sizeof(send_buf), JL_NOT_NEED_RESPOND); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | #if RCSP_ADV_FIND_DEVICE_ENABLE
 | ||
|  | static u16 find_device_timer = 0; | ||
|  | static u8 find_device_key_flag = 0; | ||
|  | static void smartbox_command_send_find_device(void *priv) | ||
|  | { | ||
|  |     struct smartbox *smart = (struct smartbox *) priv; | ||
|  |     if (smart == NULL) { | ||
|  |         return ; | ||
|  |     } | ||
|  |     if (!smart->find_dev_en) { | ||
|  |         return; | ||
|  |     } | ||
|  |     //				 查找手机	播放铃声	超时时间(默认10s)
 | ||
|  |     u8 send_buf[4] = {0x00, 	0x01, 		0x00, 0x0A}; | ||
|  |     JL_CMD_send(JL_OPCODE_SYS_FIND_DEVICE, send_buf, sizeof(send_buf), JL_NOT_NEED_RESPOND); | ||
|  | } | ||
|  | 
 | ||
|  | u8 smartbox_find_device_key_flag_get(void) | ||
|  | { | ||
|  |     return find_device_key_flag; | ||
|  | } | ||
|  | 
 | ||
|  | void smartbox_send_find_device_stop(void) | ||
|  | { | ||
|  |     struct smartbox *smart = smartbox_handle_get(); | ||
|  |     if (smart == NULL || 0 == get_rcsp_connect_status()) { | ||
|  |         return ; | ||
|  |     } | ||
|  |     if (!smart->find_dev_en) { | ||
|  |         return ; | ||
|  |     } | ||
|  |     //				 查找手机	关闭铃声	超时时间(不限制)
 | ||
|  |     u8 send_buf[4] = {0x00, 	0x00, 		0x00, 0x00}; | ||
|  |     JL_CMD_send(JL_OPCODE_SYS_FIND_DEVICE, send_buf, sizeof(send_buf), JL_NOT_NEED_RESPOND); | ||
|  | } | ||
|  | 
 | ||
|  | void smartbox_find_device_reset(void) | ||
|  | { | ||
|  |     find_device_key_flag = 0; | ||
|  |     if (find_device_timer) { | ||
|  |         sys_timeout_del(find_device_timer); | ||
|  |         find_device_timer = 0; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | void smartbox_stop_find_device(void *priv) | ||
|  | { | ||
|  |     smartbox_find_device_reset(); | ||
|  |     smartbox_send_find_device_stop(); | ||
|  | 
 | ||
|  |     extern void smartbox_set_vol_for_find_device(u8 vol_flag); | ||
|  |     smartbox_set_vol_for_find_device(find_device_key_flag); | ||
|  | } | ||
|  | 
 | ||
|  | void find_device_timeout_handle(u32 sec) | ||
|  | { | ||
|  |     find_device_key_flag = 1; | ||
|  |     if (sec && (0 == find_device_timer)) { | ||
|  |         find_device_timer = sys_timeout_add(NULL, smartbox_stop_find_device, sec * 1000); | ||
|  |     } | ||
|  | 
 | ||
|  |     extern void smartbox_set_vol_for_find_device(u8 vol_flag); | ||
|  |     smartbox_set_vol_for_find_device(find_device_key_flag); | ||
|  | } | ||
|  | 
 | ||
|  | void smartbox_find_device(void) | ||
|  | { | ||
|  |     struct smartbox *smart = smartbox_handle_get(); | ||
|  |     if (smart == NULL || 0 == get_rcsp_connect_status()) { | ||
|  |         return ; | ||
|  |     } | ||
|  |     if (!smart->find_dev_en) { | ||
|  |         return ; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (find_device_key_flag) { | ||
|  |         smartbox_stop_find_device(NULL); | ||
|  |     } else { | ||
|  |         find_device_key_flag = 1; | ||
|  |         if ((1 == smart->A_platform) && (0 != get_curr_channel_state())) { | ||
|  |             // IOS平台
 | ||
|  |             user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); | ||
|  |         } | ||
|  |         smartbox_command_send_find_device(smart); | ||
|  |     } | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif//SMART_BOX_EN
 | ||
|  | 
 | ||
|  | 
 |