KT24-1110_65E-HA-651B/apps/soundbox/smartbox/smartbox.c
2024-11-10 18:44:17 +08:00

161 lines
4.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "smartbox/smartbox.h"
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "string.h"
#include "system/timer.h"
#include "app_core.h"
#include "spp_user.h"
#include "app_task.h"
#include "system/task.h"
#include "smartbox/config.h"
#include "smartbox/event.h"
#include "btstack_3th_protocol_user.h"
#include "smartbox_rcsp_manage.h"
#include "smartbox_setting_opt.h"
#if (SMART_BOX_EN)
#define SMARTBOX_TASK_NAME "smartbox"
#ifndef JL_SMART_BOX_CUSTOM_APP_EN
#define SMARTBOX_SPP_INTERACTIVE_SUPPORT 1
#define SMARTBOX_BLE_INTERACTIVE_SUPPORT 1
#endif
struct smartbox *__this = NULL;
extern void cmd_recieve(void *priv, u8 OpCode, u8 OpCode_SN, u8 *data, u16 len);
extern void cmd_recieve_no_respone(void *priv, u8 OpCode, u8 *data, u16 len);
extern void cmd_respone(void *priv, u8 OpCode, u8 status, u8 *data, u16 len);
extern void data_recieve(void *priv, u8 OpCode_SN, u8 CMD_OpCode, u8 *data, u16 len);
extern void data_recieve_no_respone(void *priv, u8 CMD_OpCode, u8 *data, u16 len);
extern void data_respone(void *priv, u8 status, u8 CMD_OpCode, u8 *data, u16 len);
extern void JL_recieve_packet_parse_process(void);
void JL_rcsp_recieve_resume(void)
{
int argv[3];
argv[0] = (int)JL_recieve_packet_parse_process;
argv[1] = 1;
argv[2] = 0;
int ret = os_taskq_post_type("app_core", Q_CALLBACK, 3, argv);
}
void JL_rcsp_resume_do(void)
{
os_sem_post(&__this->sem);
JL_rcsp_recieve_resume();
}
static void smartbox_process(void *p)
{
int res;
while (1) {
os_sem_pend(&__this->sem, 0);
JL_send_packet_process();
/* JL_protocol_process(); */
}
}
struct smartbox *smartbox_handle_get(void)
{
return __this;
}
static u16 smartbox_timer = 0;
static void smartbox_process_timer()
{
os_sem_post(&__this->sem);
}
extern int smartbox_user_spp_state_specific(u8 packet_type);
static BT_3TH_USER_CB bt_rcsp_callback = {
.type = APP_TYPE_RCSP,
.bt_config = 0
#if (SMARTBOX_BLE_INTERACTIVE_SUPPORT)
| BT_CONFIG_BLE
#endif
#if (SMARTBOX_SPP_INTERACTIVE_SUPPORT)
| BT_CONFIG_SPP
#endif
,
.bt_3th_handler.priv = NULL,
.bt_3th_handler.fw_ready = NULL,
.bt_3th_handler.fw_send = NULL,
.bt_3th_handler.CMD_resp = cmd_recieve,
.bt_3th_handler.CMD_no_resp = cmd_recieve_no_respone,
.bt_3th_handler.CMD_recieve_resp = cmd_respone,
.bt_3th_handler.DATA_resp = data_recieve,
.bt_3th_handler.DATA_no_resp = data_recieve_no_respone,
.bt_3th_handler.DATA_recieve_resp = data_respone,
.bt_3th_handler.wait_resp_timeout = NULL,
.BT_3TH_spp_state_specific = smartbox_user_spp_state_specific,
.BT_3TH_event_handler = rcsp_user_event_handler,
};
void smartbox_init(void)
{
if (__this) {
return;
}
btstack_3th_protocol_user_init(&bt_rcsp_callback);
//set_jl_mtu_resv();
///设置rcsp最大发送buf 即MTU
set_jl_mtu_send(264);
//如果支持大文件传输可以通过修改接收buf大小优化传输速度
set_jl_rcsp_recieve_buf_size(4 * 1024);
u32 size = rcsp_protocol_need_buf_size();
u8 *ptr = zalloc(size);
ASSERT(ptr, "no ram for rcsp !!\n");
JL_protocol_init(ptr, size);
struct smartbox *smart = (struct smartbox *)zalloc(sizeof(struct smartbox));
ASSERT(smart, "no ram for smartbox !!\n");
smartbox_config(smart);
__this = smart;
__this->smartbox_buf = ptr;
os_sem_create(&__this->sem, 0);
smartbox_timer = sys_timer_add(NULL, smartbox_process_timer, 500);
///从vm获取相关配置
smart_setting_init();
int err = task_create(smartbox_process, (void *)smart, SMARTBOX_TASK_NAME);
if (err) {
printf("smartbox creat fail %x\n", err);
}
}
void smartbox_exit(void)
{
//extern void rcsp_resume(void);
//rcsp_resume();
if (smartbox_timer) {
sys_timer_del(smartbox_timer);
smartbox_timer = 0;
}
task_kill(SMARTBOX_TASK_NAME);
if (__this->smartbox_buf) {
free(__this->smartbox_buf);
__this->smartbox_buf = NULL;
}
if (__this) {
free(__this);
__this = NULL;
}
smartbox_opt_release();
}
#endif//SMART_BOX_EN