2025-01-08 19:12:06 +08:00
|
|
|
|
|
2024-09-30 17:06:01 +08:00
|
|
|
|
#include "bt_config.h"
|
|
|
|
|
|
#include "bt_api.h"
|
|
|
|
|
|
#include "bt_os.h"
|
|
|
|
|
|
#include "bt_core.h"
|
|
|
|
|
|
|
2025-01-08 19:12:06 +08:00
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
extern "C" {
|
|
|
|
|
|
#endif
|
2024-09-30 17:06:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-01-08 19:12:06 +08:00
|
|
|
|
#if LINUX
|
|
|
|
|
|
|
|
|
|
|
|
static int32_t bt_receivecmd_timer;
|
|
|
|
|
|
static int32_t bt_decodecmd_timer;
|
2024-09-30 17:06:01 +08:00
|
|
|
|
|
|
|
|
|
|
static pthread_t uart_recive_task_id;
|
|
|
|
|
|
static pthread_t uart_decode_task_id;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if (runmode == 1)//<2F>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>
|
2025-01-08 19:12:06 +08:00
|
|
|
|
|
|
|
|
|
|
void sys_bt_decode_task(void*parg)
|
|
|
|
|
|
{
|
|
|
|
|
|
while(1)
|
|
|
|
|
|
{
|
|
|
|
|
|
sys_bt_decode_cmd(parg);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
void sys_bt_receive_task(void*parg)
|
|
|
|
|
|
{
|
|
|
|
|
|
while(1)
|
|
|
|
|
|
{
|
|
|
|
|
|
sys_bt_receive_cmd(parg);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-30 17:06:01 +08:00
|
|
|
|
__s32 bt_task_start(void)//task
|
|
|
|
|
|
{
|
|
|
|
|
|
int err;
|
|
|
|
|
|
|
2025-01-08 19:12:06 +08:00
|
|
|
|
printf("bt_task_start\n");
|
|
|
|
|
|
err = pthread_create(&uart_decode_task_id, NULL, sys_bt_decode_task, (void*)NULL);
|
2024-09-30 17:06:01 +08:00
|
|
|
|
if (err)
|
|
|
|
|
|
{
|
|
|
|
|
|
printf("decode_task pthread_create error!");
|
|
|
|
|
|
return EPDK_FAIL;
|
|
|
|
|
|
}
|
|
|
|
|
|
printf("create uart_decode_task_id:0x%x", uart_decode_task_id);
|
|
|
|
|
|
|
2025-01-08 19:12:06 +08:00
|
|
|
|
err = pthread_create(&uart_recive_task_id, NULL, sys_bt_receive_task, (void*)NULL);
|
2024-09-30 17:06:01 +08:00
|
|
|
|
if (err)
|
|
|
|
|
|
{
|
2025-01-08 19:12:06 +08:00
|
|
|
|
printf("recive_task pthread_create error!");
|
2024-09-30 17:06:01 +08:00
|
|
|
|
return EPDK_FAIL;
|
|
|
|
|
|
}
|
|
|
|
|
|
printf("create uart_recive_task_id:0x%x", uart_recive_task_id);
|
2025-01-08 19:12:06 +08:00
|
|
|
|
|
2024-09-30 17:06:01 +08:00
|
|
|
|
return EPDK_OK;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
__s32 bt_task_stop(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(uart_recive_task_id != 0)
|
|
|
|
|
|
{
|
2025-01-08 19:12:06 +08:00
|
|
|
|
pthread_cancel(uart_recive_task_id);
|
2024-09-30 17:06:01 +08:00
|
|
|
|
uart_recive_task_id = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(uart_decode_task_id != 0)
|
|
|
|
|
|
{
|
2025-01-08 19:12:06 +08:00
|
|
|
|
pthread_cancel(uart_decode_task_id);
|
2024-09-30 17:06:01 +08:00
|
|
|
|
uart_decode_task_id = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
return EPDK_OK;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#elif(runmode == 0)//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-01-08 19:12:06 +08:00
|
|
|
|
__s32 bt_task_start(void) //timer
|
2024-09-30 17:06:01 +08:00
|
|
|
|
{
|
2025-01-08 19:12:06 +08:00
|
|
|
|
struct itimerspec its1;
|
|
|
|
|
|
timer_t timerid1; // <20><>ʼ<EFBFBD><CABC> itimerspec <20>ṹ<EFBFBD><E1B9B9>
|
|
|
|
|
|
struct sigevent se1;
|
|
|
|
|
|
struct itimerspec its2;
|
|
|
|
|
|
timer_t timerid2; // <20><>ʼ<EFBFBD><CABC> itimerspec <20>ṹ<EFBFBD><E1B9B9>
|
|
|
|
|
|
struct sigevent se2;
|
|
|
|
|
|
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
se1.sigev_notify = SIGEV_THREAD; // ʹ<><CAB9><EFBFBD>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|
|
|
|
|
se1.sigev_notify_function = sys_bt_decode_cmd; // <20><><EFBFBD><EFBFBD><EFBFBD>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
se1.sigev_notify_attributes = NULL;
|
2024-09-30 17:06:01 +08:00
|
|
|
|
|
2025-01-08 19:12:06 +08:00
|
|
|
|
printf("timer_create bt_decodecmd_timer\n");
|
|
|
|
|
|
timer_create(CLOCK_REALTIME, &se1, &timerid1)
|
|
|
|
|
|
if(timerid1 == NULL)
|
2024-09-30 17:06:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
printf("create bt_decodecmd_timer failed\n");
|
|
|
|
|
|
return EPDK_FAIL;
|
|
|
|
|
|
}
|
2025-01-08 19:12:06 +08:00
|
|
|
|
|
|
|
|
|
|
its1.it_value.tv_sec = 0; //<2F><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>ʱʱ<CAB1><CAB1>Ϊ10ms
|
|
|
|
|
|
its1.it_value.tv_nsec = 10*1000;
|
|
|
|
|
|
its1.it_interval.tv_sec = 0; // <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ20ms
|
|
|
|
|
|
its1.it_interval.tv_nsec = 20*1000;
|
|
|
|
|
|
timer_settime(timerid1, 0, &its1, NULL);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
se2.sigev_notify = SIGEV_THREAD; // ʹ<><CAB9><EFBFBD>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|
|
|
|
|
se2.sigev_notify_function = sys_bt_receive_cmd; // <20><><EFBFBD><EFBFBD><EFBFBD>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
se2.sigev_notify_attributes = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
printf("timer_create bt_receivecmd_timer\n");
|
|
|
|
|
|
timer_create(CLOCK_REALTIME, &se2, &timerid2);
|
2024-09-30 17:06:01 +08:00
|
|
|
|
if(bt_receivecmd_timer == NULL)
|
|
|
|
|
|
{
|
|
|
|
|
|
printf("create bt_receivecmd_timer failed\n");
|
|
|
|
|
|
return EPDK_FAIL;
|
|
|
|
|
|
}
|
2025-01-08 19:12:06 +08:00
|
|
|
|
|
|
|
|
|
|
its2.it_value.tv_sec = 0; //<2F><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>ʱʱ<CAB1><CAB1>Ϊ70ms
|
|
|
|
|
|
its2.it_value.tv_nsec = 70*1000;
|
|
|
|
|
|
its2.it_interval.tv_sec = 0; // <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ80ms
|
|
|
|
|
|
its2.it_interval.tv_nsec = 80*1000;
|
|
|
|
|
|
timer_settime(timerid2, 0, &its2, NULL);
|
2024-09-30 17:06:01 +08:00
|
|
|
|
|
2025-01-08 19:12:06 +08:00
|
|
|
|
printf("timer_settime end\n");
|
|
|
|
|
|
|
2024-09-30 17:06:01 +08:00
|
|
|
|
return EPDK_OK;
|
|
|
|
|
|
start_exit:
|
2025-01-08 19:12:06 +08:00
|
|
|
|
{
|
|
|
|
|
|
struct itimerspec its = {{0, 0}, {0, 0}};
|
|
|
|
|
|
if(bt_receivecmd_timer!=0)
|
|
|
|
|
|
{
|
|
|
|
|
|
timer_settime(bt_receivecmd_timer, 0, &its, NULL);
|
|
|
|
|
|
timer_delete(bt_receivecmd_timer);//<2F><><EFBFBD>ڴ<EFBFBD><DAB4>Ŷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĽṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bt_receivecmd_timer = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(bt_decodecmd_timer!=0)
|
|
|
|
|
|
{
|
|
|
|
|
|
timer_settime(bt_decodecmd_timer, 0, &its, NULL);
|
|
|
|
|
|
timer_delete(bt_decodecmd_timer);//<2F><><EFBFBD>ڴ<EFBFBD><DAB4>Ŷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĽṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bt_decodecmd_timer = 0;
|
|
|
|
|
|
}
|
2024-09-30 17:06:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
return EPDK_FAIL;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
__s32 bt_task_stop(void)
|
|
|
|
|
|
{
|
2025-01-08 19:12:06 +08:00
|
|
|
|
struct itimerspec its = {{0, 0}, {0, 0}};
|
|
|
|
|
|
if(bt_receivecmd_timer!=0)
|
2024-09-30 17:06:01 +08:00
|
|
|
|
{
|
2025-01-08 19:12:06 +08:00
|
|
|
|
timer_settime(bt_receivecmd_timer, 0, &its, NULL);
|
|
|
|
|
|
timer_delete(bt_receivecmd_timer);//<2F><><EFBFBD>ڴ<EFBFBD><DAB4>Ŷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĽṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bt_receivecmd_timer = 0;
|
2024-09-30 17:06:01 +08:00
|
|
|
|
}
|
2025-01-08 19:12:06 +08:00
|
|
|
|
if(bt_decodecmd_timer!=0)
|
2024-09-30 17:06:01 +08:00
|
|
|
|
{
|
2025-01-08 19:12:06 +08:00
|
|
|
|
timer_settime(bt_decodecmd_timer, 0, &its, NULL);
|
|
|
|
|
|
timer_delete(bt_decodecmd_timer);//<2F><><EFBFBD>ڴ<EFBFBD><DAB4>Ŷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĽṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bt_decodecmd_timer = 0;
|
2024-09-30 17:06:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
return EPDK_OK;
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|