161 lines
4.2 KiB
C
161 lines
4.2 KiB
C
|
#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
|