重构语音TTS播放框架,修复gps定位成功后系统异常复位问题 zsxfly20250307
This commit is contained in:
parent
a603926c44
commit
96f140a6f3
|
|
@ -14,12 +14,19 @@
|
|||
#include "gps_config.h"
|
||||
#include "local_tts.h"
|
||||
|
||||
#if 0
|
||||
#include "app_uart.h"
|
||||
#define DEBUG(fmt, args...) app_printf("[GPS]" fmt, ##args)
|
||||
#else
|
||||
#include "app_uart.h"
|
||||
#define DEBUG(fmt, ...)
|
||||
#endif
|
||||
|
||||
#define GPS_URAT CM_UART_DEV_1
|
||||
#define GPS_RX_IOMUX UART1_RX_IOMUX
|
||||
#define GPS_TX_IOMUX UART1_TX_IOMUX
|
||||
|
||||
#define GPS_BUF_LEN 1024
|
||||
#define GPS_BUF_LEN 512
|
||||
|
||||
static int gps_rev_len = 0;
|
||||
static char gps_rev_data[GPS_BUF_LEN] = {0};
|
||||
|
|
@ -45,7 +52,7 @@ void trace(const char *str, int str_size){
|
|||
*/
|
||||
void error(const char *str, int str_size){
|
||||
// app_printf("\r\nError: ");
|
||||
// cm_uart_write(CM_UART_DEV_0, (void*)str, str_size, 1000);
|
||||
// uart0_send_msg((uint8_t*)str, str_size, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -80,16 +87,15 @@ static void gps_TaskHandle(void *param){
|
|||
if(gps_uart_sem != NULL){
|
||||
osSemaphoreAcquire(gps_uart_sem, osWaitForever);//阻塞
|
||||
}
|
||||
temp_len = cm_uart_read(GPS_URAT, (void*)&gps_rev_data[gps_rev_len], GPS_BUF_LEN, 1000);
|
||||
temp_len = cm_uart_read(GPS_URAT, (void*)&gps_rev_data[gps_rev_len], GPS_BUF_LEN - gps_rev_len, 1000);
|
||||
gps_rev_len += temp_len;
|
||||
if(gps_rev_len > 480){
|
||||
if(gps_rev_len > 370){
|
||||
nmea_parse(&parser, gps_rev_data, gps_rev_len, &gps_data.info);
|
||||
nmea_info2pos(&gps_data.info, &gps_data.dpos);
|
||||
gps_data.flow_num++;
|
||||
// app_printf(
|
||||
// "[GPS]:%03d,Lat:%.02f,Lon:%.02f,Sig:%d,Fix:%d,RL=%d\n",
|
||||
// it++, gps_data.info.lat, gps_data.info.lon, gps_data.info.sig, gps_data.info.fix, gps_rev_len
|
||||
// );
|
||||
DEBUG("%03d,Lat:%.02f,Lon:%.02f,Sig:%d,Fix:%d,RL=%d\n",
|
||||
it++, gps_data.info.lat, gps_data.info.lon, gps_data.info.sig, gps_data.info.fix, gps_rev_len
|
||||
);
|
||||
|
||||
if((gps_data.info.fix == 1)||(gps_data.info.sig == 0)){ // 不可用
|
||||
gps_flag =0;
|
||||
|
|
@ -127,6 +133,7 @@ static void gps_uart_event_callback(void *param, uint32_t type){
|
|||
|
||||
if (CM_UART_EVENT_TYPE_RX_OVERFLOW & type){
|
||||
/* 收到溢出事件,触发其他线程处理溢出事件 */
|
||||
osSemaphoreRelease(gps_uart_sem);
|
||||
// msg.msg_type = type;
|
||||
|
||||
// if (uart_event_queue != NULL){//向队列发送数据
|
||||
|
|
@ -193,9 +200,9 @@ void gps_config_close(void){
|
|||
cm_uart_dev_e dev = GPS_URAT;
|
||||
|
||||
if(0 == cm_uart_close(dev)){
|
||||
app_printf("uart%d close is ok\n", dev);
|
||||
DEBUG("uart%d close is ok\n", dev);
|
||||
}else{
|
||||
app_printf("uart%d close is error\n", dev);
|
||||
DEBUG("uart%d close is error\n", dev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ int32_t get_voltage(adc_chx_t chx){
|
|||
return 0;
|
||||
}
|
||||
// cm_gpio_set_level(CM_GPIO_NUM_20, 1); //恢复默认状态
|
||||
DEBUG("CH%d voltage:%d\n",chx ,voltage);
|
||||
return voltage;
|
||||
}
|
||||
|
||||
|
|
@ -76,6 +77,7 @@ uint32_t ACC_Dmax =(((ACC_OUT_Voltage_MAX*ACC_OUT_RES_DOWN)/(ACC_OUT_RES_UP+ACC_
|
|||
// 获取输入油门百分比(unit:%)(踏板信号)
|
||||
uint16_t get_in_acc_percent(void){
|
||||
uint16_t acc_voltage =get_voltage(ADC_acc);
|
||||
DEBUG("acc_voltage:%d\n",acc_voltage);
|
||||
if(acc_voltage < 900){
|
||||
return 0;
|
||||
}else if(acc_voltage > 3800){
|
||||
|
|
@ -93,6 +95,18 @@ void set_out_acc_percent(uint8_t percent){//1000000设置频率为10KHz
|
|||
}
|
||||
}
|
||||
|
||||
// // 设置输出油门大小
|
||||
// void set_out_acc_percent(uint8_t percent){//1000000设置频率为10KHz
|
||||
// static uint32_t last_period_h = 0;
|
||||
// uint32_t period_h = (ACC_Dmin+((ACC_Dmax-ACC_Dmin)*(percent))/100);
|
||||
// if(last_period_h != period_h){
|
||||
// last_period_h = period_h;
|
||||
// if(0 != cm_pwm_open_ns(CM_PWM_DEV_0,ACC_OUT_PERIOD_US,period_h){
|
||||
// DEBUG("pwm0 open error\n");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
const uint16_t coulomp_voltage_table[11] = {
|
||||
BAT_LEVEL_0PERCENT_VOLT,
|
||||
BAT_LEVEL_10PERCENT_VOLT,
|
||||
|
|
@ -149,6 +163,7 @@ void control_out_task(void *argument){
|
|||
while(1){
|
||||
|
||||
uint16_t in_acc_percent= get_in_acc_percent();
|
||||
// DEBUG("in_acc_percent:%d\n\n",in_acc_percent);
|
||||
|
||||
if(BAT_Message.Runing_Time < 0xFFFF){
|
||||
BAT_Message.Runing_Time++;
|
||||
|
|
@ -162,7 +177,7 @@ void control_out_task(void *argument){
|
|||
Voltage_update_count=0;
|
||||
temp_bat_voltage = 0;
|
||||
}
|
||||
in_acc_percent =80;
|
||||
// in_acc_percent =80;
|
||||
if(in_acc_percent >= 80){ // 油门大于80%时,
|
||||
if(BAT_Message.Deep_ACC_Time < 0xFFFF){
|
||||
BAT_Message.Deep_ACC_Time++;
|
||||
|
|
@ -249,24 +264,24 @@ void control_out_task(void *argument){
|
|||
if((0 == sys_sta.MAG_MODE)||(0 == sys_sta.PLT_MODE)){ // 管理模式
|
||||
DEBUG("\n\nMAG_MODE\r\n\n");
|
||||
// local_tts_set(5, 7, CM_LOCAL_TTS_DIGIT_AUTO);
|
||||
local_tts_text_play("管理员模式",0,0);
|
||||
local_tts_text_play("管理员模式",0,1);
|
||||
}else{ // 退出管理员模式
|
||||
DEBUG("\n\nPLT_MODE\r\n\n");
|
||||
// local_tts_set(10, 7, CM_LOCAL_TTS_DIGIT_AUTO);
|
||||
local_tts_text_play("退出管理员模式",0,0);
|
||||
local_tts_text_play("退出管理员模式",0,1);
|
||||
}
|
||||
}
|
||||
|
||||
if((sys_sta.IO_RX_back == 0)&&((1 == sys_sta.O_door_lock) || (0 == sys_sta.MAG_MODE ))){ // 倒车模式
|
||||
back_timecount++;
|
||||
// DEBUG("back_timecount:%d\r\n\n",back_timecount);
|
||||
if(back_timecount > _out_UPDETE_TIME*10){ // 3秒播报倒车提示语一次
|
||||
back_timecount = 0;
|
||||
DEBUG("\n\n>>>>>>>>>>>>back time play.......... \r\n\n");
|
||||
// local_tts_set(5, 15, CM_LOCAL_TTS_DIGIT_AUTO);
|
||||
local_tts_text_play("请注意倒车!",0,1); // 忙时自动取消倒车提示语
|
||||
}
|
||||
}
|
||||
// if((sys_sta.IO_RX_back == 0)&&((1 == sys_sta.O_door_lock) || (0 == sys_sta.MAG_MODE ))){ // 倒车模式
|
||||
// back_timecount++;
|
||||
// // DEBUG("back_timecount:%d\r\n\n",back_timecount);
|
||||
// if(back_timecount > _out_UPDETE_TIME*10){ // 3秒播报倒车提示语一次
|
||||
// back_timecount = 0;
|
||||
// DEBUG("\n\n>>>>>>>>>>>>back time play.......... \r\n\n");
|
||||
// // local_tts_set(5, 15, CM_LOCAL_TTS_DIGIT_AUTO);
|
||||
// local_tts_text_play("请注意倒车!",0,0); // 忙时自动取消倒车提示语
|
||||
// }
|
||||
// }
|
||||
|
||||
//油门控制
|
||||
if((1 == sys_sta.O_door_lock) || (0 == sys_sta.MAG_MODE )){
|
||||
|
|
@ -282,7 +297,8 @@ void control_out_task(void *argument){
|
|||
acc_percent = (in_acc_percent * SYS_CONF_MANAGER_ACC) / 100.0;
|
||||
}
|
||||
set_out_acc_percent(acc_percent);
|
||||
// DEBUG("acc_percent:%d\r\n",acc_percent);
|
||||
DEBUG("in_acc_percent:%d ,acc_percent:%d \r\n",in_acc_percent, acc_percent);
|
||||
DEBUG("SYS_CONF_SPEED_CUT_ACC:%d,SYS_CONF_TOURIST_ACC:%d,SYS_CONF_MANAGER_ACC:%d\r\n",SYS_CONF_SPEED_CUT_ACC,SYS_CONF_TOURIST_ACC,SYS_CONF_MANAGER_ACC);
|
||||
}else{
|
||||
cm_gpio_set_level(OUT_Door_lock, 0); // 关闭电门锁
|
||||
set_out_acc_percent(0);
|
||||
|
|
|
|||
|
|
@ -152,12 +152,13 @@ void my_appimg_enter(char *param){
|
|||
DEBUG("heap total:%d,remain:%d\n",stats.total_size,stats.free);
|
||||
}
|
||||
local_tts_init();
|
||||
// local_tts_mute(0);// 取消静音
|
||||
local_tts_mute(0);// 取消静音
|
||||
local_tts_volume(50); // 设置音量为55
|
||||
// local_tts_set(7, 7, CM_LOCAL_TTS_DIGIT_AUTO);
|
||||
local_tts_text_play("设备已开机",0,0);
|
||||
local_tts_text_play("已开机",0,0);
|
||||
|
||||
control_out_init();
|
||||
jt808_set_term_param_init();
|
||||
// /*
|
||||
if( 0 ){
|
||||
while(1){
|
||||
|
|
@ -193,7 +194,7 @@ void my_appimg_enter(char *param){
|
|||
// local_tts_text_play("轻盈步伐,让流逝的永远流逝,让脚下的路延伸到尽头,依一素颜,走自己该走的路..…",0,0);
|
||||
// osDelay(25000/5);
|
||||
|
||||
local_tts_volume(5);
|
||||
local_tts_volume(15);
|
||||
// local_tts_set(2, 2, CM_LOCAL_TTS_DIGIT_AUTO);
|
||||
cm_gpio_set_level(CM_GPIO_NUM_0, 1);
|
||||
local_tts_text_play("测试0",0 ,1);
|
||||
|
|
@ -236,16 +237,15 @@ void my_appimg_enter(char *param){
|
|||
local_tts_volume(100);
|
||||
// local_tts_set(6, 0, CM_LOCAL_TTS_DIGIT_AUTO);
|
||||
cm_gpio_set_level(CM_GPIO_NUM_0, 1);
|
||||
local_tts_text_play("测试16",0 ,1);
|
||||
local_tts_text_play("测试17",0 ,1); // 不可打断
|
||||
local_tts_text_play("测试18",0 ,1);
|
||||
local_tts_text_play("测试16",0 ,0);
|
||||
local_tts_text_play("测试17",0 ,0); // 不可打断
|
||||
local_tts_text_play("测试18",0 ,0);
|
||||
cm_gpio_set_level(CM_GPIO_NUM_0, 0);
|
||||
local_tts_text_play("测试19",0 ,0);
|
||||
osDelay(5000/5);
|
||||
}
|
||||
}
|
||||
// */
|
||||
jt808_set_term_param_init();
|
||||
jt808_init();
|
||||
tcp_client_init();
|
||||
gps_config_init();
|
||||
|
|
|
|||
|
|
@ -393,6 +393,64 @@ void jt808_Autoreport_param_stop(void){
|
|||
void jt808_set_term_param_init(void){
|
||||
memset(&jt808_term_param_item,0,sizeof(Term_Param_item_t));
|
||||
|
||||
do{ // 终端属性参数初始化
|
||||
jt808_term_param_item.big_term_attr_resp.term_type = Swap16(0); // 终端类型
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.manufacturer_id, "LAT01", 5); // 制造商ID
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.term_model, jt808_term_param_item.big_reg_info.term_model, 20); // 终端型号
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.term_id, jt808_term_param_item.big_reg_info.term_id, 7); // 终端ID
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.term_ICCID+4, jt808_term_param_item.phone_BCDnum, 6); // 终端手机号码
|
||||
|
||||
char str_hw_ver[] = "1.0.0"; // 硬件版本
|
||||
char str_fw_ver[] = "1.0.0"; // 固件版本
|
||||
jt808_term_param_item.big_term_attr_resp.hw_ver_len = strlen(str_hw_ver); // 硬件版本长度
|
||||
jt808_term_param_item.big_term_attr_resp.fw_ver_len = strlen(str_fw_ver); // 固件版本长度
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.str_hw_ver, str_hw_ver, strlen(str_hw_ver)); // 硬件版本
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.str_fw_ver, str_fw_ver, strlen(str_fw_ver)); // 固件版本
|
||||
jt808_term_param_item.big_term_attr_resp.GnssModule_attr = 0x03; // GNSS模块属性
|
||||
jt808_term_param_item.big_term_attr_resp.CommModule_attr = 0x01; // 通信模块属性
|
||||
}while(0);
|
||||
do{// 授权信息初始化
|
||||
char str_auth[]="auth code error..."; // 授权码
|
||||
jt808_term_param_item.big_auth_info.str_auth_code = jt808_malloc(strlen(str_auth)+1); // 授权码
|
||||
if(jt808_term_param_item.big_auth_info.str_auth_code == NULL){
|
||||
JT808_DEBUG("malloc auth_code failed\r\n");
|
||||
}
|
||||
memcpy(jt808_term_param_item.big_auth_info.str_auth_code, str_auth, strlen(str_auth)+1); // 授权码
|
||||
JT808_DEBUG("auth_code:%d,%s\r\n",strlen(jt808_term_param_item.big_auth_info.str_auth_code), jt808_term_param_item.big_auth_info.str_auth_code);
|
||||
// jt808_free(jt808_term_param_item.big_auth_info.str_auth_code);
|
||||
// jt808_term_param_item.big_auth_info.str_auth_code = NULL;
|
||||
}while(0);
|
||||
do{// 终端参数初始化
|
||||
jt808_term_param_item.set_term_param.HeartBeatInterval = 30; // 心跳包间隔(秒)
|
||||
// char ServerAddr[] ="47.99.118.34"; // 测试服务器地址
|
||||
// uint32_t ServerPort = 5000; // 服务器端口
|
||||
char ServerAddr[] ="106.14.30.23"; // 生产服务器地址
|
||||
uint32_t ServerPort = 5000; // 服务器端口
|
||||
// memset(jt808_term_param_item.set_term_param.MainServerAddr, 0, 50);
|
||||
memcpy(jt808_term_param_item.set_term_param.MainServerAddr, ServerAddr, strlen(ServerAddr)+1); // 主服务器地址
|
||||
jt808_term_param_item.set_term_param.ServerPort = ServerPort; // 服务器端口
|
||||
jt808_term_param_item.set_term_param.DefaultTimeReportInterval = 60; // 默认时间上报间隔(秒)
|
||||
jt808_term_param_item.set_term_param.InflexionAngle = 0; // 俯仰角(度)
|
||||
jt808_term_param_item.set_term_param.MaxSpeed = 0; // 最大速度(km/h)
|
||||
jt808_term_param_item.set_term_param.ProvinceID = 0; // 省域ID
|
||||
jt808_term_param_item.set_term_param.CityID = 0; // 市域ID
|
||||
jt808_term_param_item.set_term_param.CarPlateNum[0] = 0; // 车牌号码
|
||||
jt808_term_param_item.set_term_param.CarPlateColor = 0; // 车牌颜色
|
||||
|
||||
jt808_term_param_item.set_term_param.RadarEN =1; // 雷达使能位, 0 代表关闭, 1 代表开启
|
||||
jt808_term_param_item.set_term_param.ManagerACC =100; // 管理员模式油门0~100%
|
||||
jt808_term_param_item.set_term_param.TouristACC =50; // 游客模式油门0~100%
|
||||
jt808_term_param_item.set_term_param.SpeedCutACC =20; // 自动减速油门0~100%
|
||||
jt808_term_param_item.set_term_param.BrakeLimit =1200; //前进刹车距离
|
||||
jt808_term_param_item.set_term_param.SpeedCutLimit =2000; // 前进自动减速刹车距离
|
||||
jt808_term_param_item.set_term_param.BrakeLimit_B =1200; // 后退刹车距离
|
||||
jt808_term_param_item.set_term_param.SpeedCutLimit_B =2000; // 后退自动减速刹车距离
|
||||
}while(0);
|
||||
do{// 位置信息上报初始化
|
||||
memset(&jt808_term_param_item.big_loc_report.basic_info,0,sizeof(Loc_basic_info_t));
|
||||
jt808_term_param_item.big_loc_report.basic_info.status.val32 = 0; // 状态信息
|
||||
jt808_term_param_item.big_loc_report.basic_info.alarm_flag.val32 = 0; // 报警标志
|
||||
}while(0);
|
||||
do{ // 设置终端手机号
|
||||
char cm_iccid[32] = {0};
|
||||
char get_iccid_ok = 0;
|
||||
|
|
@ -454,55 +512,6 @@ void jt808_set_term_param_init(void){
|
|||
char CarPlateNum[] ="京A12345"; // 车牌号码
|
||||
memcpy(jt808_term_param_item.big_reg_info.car_plate_num, CarPlateNum, strlen(CarPlateNum)); // 车牌号码
|
||||
}while(0);
|
||||
do{ // 终端属性参数初始化
|
||||
jt808_term_param_item.big_term_attr_resp.term_type = Swap16(0); // 终端类型
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.manufacturer_id, "LAT01", 5); // 制造商ID
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.term_model, jt808_term_param_item.big_reg_info.term_model, 20); // 终端型号
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.term_id, jt808_term_param_item.big_reg_info.term_id, 7); // 终端ID
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.term_ICCID+4, jt808_term_param_item.phone_BCDnum, 6); // 终端手机号码
|
||||
|
||||
char str_hw_ver[] = "1.0.0"; // 硬件版本
|
||||
char str_fw_ver[] = "1.0.0"; // 固件版本
|
||||
jt808_term_param_item.big_term_attr_resp.hw_ver_len = strlen(str_hw_ver); // 硬件版本长度
|
||||
jt808_term_param_item.big_term_attr_resp.fw_ver_len = strlen(str_fw_ver); // 固件版本长度
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.str_hw_ver, str_hw_ver, strlen(str_hw_ver)); // 硬件版本
|
||||
memcpy(jt808_term_param_item.big_term_attr_resp.str_fw_ver, str_fw_ver, strlen(str_fw_ver)); // 固件版本
|
||||
jt808_term_param_item.big_term_attr_resp.GnssModule_attr = 0x03; // GNSS模块属性
|
||||
jt808_term_param_item.big_term_attr_resp.CommModule_attr = 0x01; // 通信模块属性
|
||||
}while(0);
|
||||
do{// 授权信息初始化
|
||||
char str_auth[]="auth code error..."; // 授权码
|
||||
jt808_term_param_item.big_auth_info.str_auth_code = jt808_malloc(strlen(str_auth)+1); // 授权码
|
||||
if(jt808_term_param_item.big_auth_info.str_auth_code == NULL){
|
||||
JT808_DEBUG("malloc auth_code failed\r\n");
|
||||
}
|
||||
memcpy(jt808_term_param_item.big_auth_info.str_auth_code, str_auth, strlen(str_auth)+1); // 授权码
|
||||
JT808_DEBUG("auth_code:%d,%s\r\n",strlen(jt808_term_param_item.big_auth_info.str_auth_code), jt808_term_param_item.big_auth_info.str_auth_code);
|
||||
// jt808_free(jt808_term_param_item.big_auth_info.str_auth_code);
|
||||
// jt808_term_param_item.big_auth_info.str_auth_code = NULL;
|
||||
}while(0);
|
||||
do{// 终端参数初始化
|
||||
jt808_term_param_item.set_term_param.HeartBeatInterval = 30; // 心跳包间隔(秒)
|
||||
// char ServerAddr[] ="47.99.118.34"; // 测试服务器地址
|
||||
// uint32_t ServerPort = 5000; // 服务器端口
|
||||
char ServerAddr[] ="106.14.30.23"; // 生产服务器地址
|
||||
uint32_t ServerPort = 5000; // 服务器端口
|
||||
// memset(jt808_term_param_item.set_term_param.MainServerAddr, 0, 50);
|
||||
memcpy(jt808_term_param_item.set_term_param.MainServerAddr, ServerAddr, strlen(ServerAddr)+1); // 主服务器地址
|
||||
jt808_term_param_item.set_term_param.ServerPort = ServerPort; // 服务器端口
|
||||
jt808_term_param_item.set_term_param.DefaultTimeReportInterval = 60; // 默认时间上报间隔(秒)
|
||||
jt808_term_param_item.set_term_param.InflexionAngle = 0; // 俯仰角(度)
|
||||
jt808_term_param_item.set_term_param.MaxSpeed = 0; // 最大速度(km/h)
|
||||
jt808_term_param_item.set_term_param.ProvinceID = 0; // 省域ID
|
||||
jt808_term_param_item.set_term_param.CityID = 0; // 市域ID
|
||||
jt808_term_param_item.set_term_param.CarPlateNum[0] = 0; // 车牌号码
|
||||
jt808_term_param_item.set_term_param.CarPlateColor = 0; // 车牌颜色
|
||||
}while(0);
|
||||
do{// 位置信息上报初始化
|
||||
memset(&jt808_term_param_item.big_loc_report.basic_info,0,sizeof(Loc_basic_info_t));
|
||||
jt808_term_param_item.big_loc_report.basic_info.status.val32 = 0; // 状态信息
|
||||
jt808_term_param_item.big_loc_report.basic_info.alarm_flag.val32 = 0; // 报警标志
|
||||
}while(0);
|
||||
PrsResult.term_param_item =&jt808_term_param_item;// 全局变量指针指向终端参数项
|
||||
|
||||
// JT808_DEBUG("auth_code:%s\r\n",PrsResult.term_param_item->big_auth_info.str_auth_code);
|
||||
|
|
|
|||
|
|
@ -23,8 +23,10 @@
|
|||
|
||||
static osMessageQueueId_t local_tts_play_queue = NULL;
|
||||
// static osMessageQueueId_t local_tts_free_sem_queue = NULL;
|
||||
static osSemaphoreId_t local_tts_play_start_sem = NULL;
|
||||
static osSemaphoreId_t local_tts_play_ok_sem = NULL;
|
||||
static osSemaphoreId_t local_tts_play_stat_sem = NULL;
|
||||
static osSemaphoreId_t local_tts_play_end_sem = NULL;
|
||||
// static osSemaphoreId_t local_tts_play_stat_sem = NULL;
|
||||
// static int32_t TTS_play_finish_flag = 0; //播放完成标志位 0-完成 !=0-未完成
|
||||
|
||||
typedef struct{
|
||||
|
|
@ -89,13 +91,13 @@ void local_tts_set(int32_t speed, int32_t volume, cm_local_tts_digit_e mode){
|
|||
// len=0时自动计算长度//interruptible =1时,表示允许被打断播放
|
||||
int8_t local_tts_text_play(char *text, uint8_t len, uint8_t en_interruptible){
|
||||
// return 0;
|
||||
DEBUG("tts text:%s,len:%d,en_interruptible:%d \n", text, len, en_interruptible);
|
||||
// DEBUG("tts text:%s,len:%d,en_interruptible:%d \n", text, len, en_interruptible);
|
||||
tts_play_queue_t tts_play_queue = {0};
|
||||
local_tts_mute(0); // 取消静音
|
||||
|
||||
if(0 == len || len > strlen(text)){
|
||||
len = strlen(text);
|
||||
DEBUG("tts text: len > len:%d \n", len);
|
||||
// DEBUG("tts text: len > len:%d \n", len);
|
||||
}
|
||||
tts_play_queue.text = cm_malloc(len + 1);
|
||||
if(tts_play_queue.text == NULL){
|
||||
|
|
@ -106,7 +108,7 @@ int8_t local_tts_text_play(char *text, uint8_t len, uint8_t en_interruptible){
|
|||
tts_play_queue.text[len] = '\0';
|
||||
tts_play_queue.len = len;
|
||||
tts_play_queue.en_interruptible = en_interruptible;
|
||||
DEBUG("tts text:Put queue\n");
|
||||
// DEBUG("tts text:Put queue\n");
|
||||
if(local_tts_play_queue == NULL){
|
||||
DEBUG("local_tts_play_queue is null\n");
|
||||
cm_free(tts_play_queue.text);
|
||||
|
|
@ -121,31 +123,74 @@ int8_t local_tts_text_play(char *text, uint8_t len, uint8_t en_interruptible){
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* 离线TTS回调函数 */
|
||||
static void __local_tts_callback(cm_local_tts_event_e event, void *param)
|
||||
{
|
||||
// /* 离线TTS回调函数 */
|
||||
// static void __local_tts_callback(cm_local_tts_event_e event, void *param)
|
||||
// {
|
||||
// switch(event){
|
||||
// case CM_LOCAL_TTS_EVENT_SYNTH_DATA:{
|
||||
// // cm_local_tts_synth_data_t *data = (cm_local_tts_synth_data_t *)param;
|
||||
// // DEBUG("[%s] SYNTH_DATA [%d] \n", data->user, data->len); //打印log操作较费时
|
||||
// break;
|
||||
// }
|
||||
// case CM_LOCAL_TTS_EVENT_SYNTH_FAIL:
|
||||
// case CM_LOCAL_TTS_EVENT_SYNTH_INTERRUPT:
|
||||
// case CM_LOCAL_TTS_EVENT_SYNTH_FINISH:
|
||||
// break;
|
||||
// case CM_LOCAL_TTS_EVENT_PLAY_FAIL:
|
||||
// DEBUG("[%s] PLAY_FAIL\n", (char *)param);
|
||||
// break;
|
||||
// case CM_LOCAL_TTS_EVENT_PLAY_INTERRUPT:
|
||||
// DEBUG("[[%s] PLAY_INTERRUPT\n", (char *)param);
|
||||
// // break;
|
||||
// case CM_LOCAL_TTS_EVENT_PLAY_FINISH:{
|
||||
// DEBUG("[PLAY_FINISH] %p=%x \n\n", param, *((osSemaphoreId_t *)param));
|
||||
// osSemaphoreRelease(local_tts_play_ok_sem); // 释放发送成功应答信号量
|
||||
// osSemaphoreRelease(local_tts_play_stat_sem);
|
||||
// break;
|
||||
// }
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
#define TTS_FRAME_BUFFER_SIZE (320 * 50 * 10) // (320 * 50 * 10)支持存放10秒数据,可修改
|
||||
|
||||
|
||||
typedef enum{
|
||||
TTS_STATE_IDLE = 0, /*!< TTS空闲 */
|
||||
TTS_STATE_WORKING, /*!< TTS工作中 */
|
||||
TTS_STATE_SUSPEND, /*!< TTS播放中断 */
|
||||
}tts_state_t;
|
||||
|
||||
typedef struct {
|
||||
osSemaphoreId_t SemHandle; /* TTS播放信号量句柄 */
|
||||
uint8_t play_state; /* TTS播放状态 */
|
||||
uint8_t TtsPcmBuf[TTS_FRAME_BUFFER_SIZE]; /* TTS转码后的数据 */
|
||||
uint32_t TtsPcmBufLen; /* 当前TTS已完成转码的数据长度 */
|
||||
}tts_play_cfg_t;
|
||||
|
||||
tts_play_cfg_t tts_play_cfg;
|
||||
|
||||
|
||||
|
||||
static void tts_play_callback(cm_local_tts_event_e event, void *param){
|
||||
switch(event){
|
||||
case CM_LOCAL_TTS_EVENT_SYNTH_DATA:{
|
||||
// cm_local_tts_synth_data_t *data = (cm_local_tts_synth_data_t *)param;
|
||||
// DEBUG("[%s] SYNTH_DATA [%d] \n", data->user, data->len); //打印log操作较费时
|
||||
cm_local_tts_synth_data_t *synth_data = (cm_local_tts_synth_data_t *)param;
|
||||
|
||||
if (TTS_FRAME_BUFFER_SIZE > (tts_play_cfg.TtsPcmBufLen + synth_data->len)){
|
||||
memcpy (tts_play_cfg.TtsPcmBuf + tts_play_cfg.TtsPcmBufLen, (uint8_t *)synth_data->data, synth_data->len);
|
||||
tts_play_cfg.TtsPcmBufLen = tts_play_cfg.TtsPcmBufLen + synth_data->len;
|
||||
}
|
||||
// DEBUG("SYNTH_DATA [%d] \n", synth_data->len);
|
||||
break;
|
||||
}
|
||||
case CM_LOCAL_TTS_EVENT_SYNTH_FAIL:
|
||||
case CM_LOCAL_TTS_EVENT_SYNTH_INTERRUPT:
|
||||
case CM_LOCAL_TTS_EVENT_SYNTH_FINISH:
|
||||
break;
|
||||
case CM_LOCAL_TTS_EVENT_PLAY_FAIL:
|
||||
DEBUG("[%s] PLAY_FAIL\n", (char *)param);
|
||||
break;
|
||||
case CM_LOCAL_TTS_EVENT_PLAY_INTERRUPT:
|
||||
DEBUG("[[%s] PLAY_INTERRUPT\n", (char *)param);
|
||||
// break;
|
||||
case CM_LOCAL_TTS_EVENT_PLAY_FINISH:{
|
||||
DEBUG("[PLAY_FINISH] %p=%x \n\n", param, *((osSemaphoreId_t *)param));
|
||||
osSemaphoreRelease(local_tts_play_ok_sem); // 释放发送成功应答信号量
|
||||
osSemaphoreRelease(local_tts_play_stat_sem);
|
||||
break;
|
||||
}
|
||||
case CM_LOCAL_TTS_EVENT_PLAY_FINISH:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -153,9 +198,11 @@ static void __local_tts_callback(cm_local_tts_event_e event, void *param)
|
|||
|
||||
// 异步播放,播放完成后播放下一条 //TODO: 待优化(暂时方案,打断播放)
|
||||
static osThreadFunc_t local_tts_play_task(void *arg){
|
||||
// cm_audio_sample_param_t frame = {.sample_format = CM_AUDIO_SAMPLE_FORMAT_16BIT, .rate = CM_AUDIO_SAMPLE_RATE_8000HZ, .num_channels = CM_AUDIO_SOUND_MONO};
|
||||
tts_play_queue_t tts_play_queue;
|
||||
osStatus_t ret=0;
|
||||
|
||||
DEBUG("local_tts_play_task start\n");
|
||||
while(1){
|
||||
if(osOK == osMessageQueueGet(local_tts_play_queue, &tts_play_queue, NULL, osWaitForever)){ //
|
||||
|
||||
|
|
@ -175,33 +222,209 @@ static osThreadFunc_t local_tts_play_task(void *arg){
|
|||
DEBUG("tts task: text= null\n");
|
||||
continue;
|
||||
}
|
||||
if(0 == cm_local_tts_play_status()){ // 正在播放中
|
||||
cm_local_tts_play_stop();// 停止播放
|
||||
ret =osSemaphoreAcquire(local_tts_play_stat_sem, 30000/5);// 等待播放结束
|
||||
if(osOK != ret){
|
||||
DEBUG("local_tts_play_stat_sem:%d\n", ret);
|
||||
}
|
||||
// ret = cm_audio_player_stream_open(CM_AUDIO_PLAY_FORMAT_PCM, &frame); //从pipe中播放音频(开启)
|
||||
// if(ret != osOK){
|
||||
// DEBUG("cm_audio_player_stream_open error\n");
|
||||
// continue;
|
||||
// }
|
||||
// DEBUG("tts task: play %s\n\n", tts_play_queue.text);
|
||||
|
||||
if(TTS_STATE_IDLE != tts_play_cfg.play_state){
|
||||
// DEBUG("tts task: wait end\n");
|
||||
osSemaphoreRelease(local_tts_play_end_sem); // 释放播放结束信号量
|
||||
osSemaphoreAcquire(local_tts_play_ok_sem,(300/5));
|
||||
}
|
||||
// DEBUG("tts task: 00000000000\n\n");
|
||||
cm_local_tts_play(tts_play_queue.text, tts_play_queue.len, __local_tts_callback, NULL);
|
||||
// DEBUG("tts task: 1111111111\n\n");
|
||||
// if(0 == tts_play_queue.en_interruptible){ // 不允许被打断播放
|
||||
// DEBUG("tts task: 2222222222\n\n");
|
||||
ret =osSemaphoreAcquire(local_tts_play_ok_sem, (0 == tts_play_queue.en_interruptible)?(30000/5):(2000/5));// 等待播放结束
|
||||
if(osOK != ret){
|
||||
DEBUG("local_tts_play_ok_sem:%d\n", ret);
|
||||
}
|
||||
// }else{
|
||||
// osSemaphoreAcquire(local_tts_play_ok_sem, 300/5);
|
||||
tts_play_cfg.TtsPcmBufLen = 0;
|
||||
// DEBUG("tts_synth_start\n\n========\n");
|
||||
ret = cm_local_tts_synth(tts_play_queue.text, tts_play_queue.len, tts_play_callback, NULL);
|
||||
// DEBUG("tts_synth_end\n\n========\n");
|
||||
if(ret != osOK){
|
||||
DEBUG("cm_local_tts_synth error:%d\n", ret);
|
||||
// cm_free(tts_play_queue.text);
|
||||
}
|
||||
osSemaphoreRelease(local_tts_play_start_sem); // 释放播放信号量
|
||||
ret =osSemaphoreAcquire(local_tts_play_ok_sem, (0 == tts_play_queue.en_interruptible)?(12000/5):(300/5));// 等待播放结束
|
||||
if(osOK != ret){
|
||||
// DEBUG("local_tts_play_ok_sem\n");
|
||||
}
|
||||
DEBUG("tts task: play end\n");
|
||||
|
||||
// if(0 == cm_local_tts_play_status()){ // 正在播放中
|
||||
// cm_local_tts_play_stop();// 停止播放
|
||||
// ret =osSemaphoreAcquire(local_tts_play_stat_sem, 30000/5);// 等待播放结束
|
||||
// if(osOK != ret){
|
||||
// DEBUG("local_tts_play_stat_sem:%d\n", ret);
|
||||
// }
|
||||
// }
|
||||
// DEBUG("tts task: 3333333333\n\n");
|
||||
// // DEBUG("tts task: 00000000000\n\n");
|
||||
// cm_local_tts_play(tts_play_queue.text, tts_play_queue.len, __local_tts_callback, NULL);
|
||||
// // DEBUG("tts task: 1111111111\n\n");
|
||||
// // if(0 == tts_play_queue.en_interruptible){ // 不允许被打断播放
|
||||
// // DEBUG("tts task: 2222222222\n\n");
|
||||
// ret =osSemaphoreAcquire(local_tts_play_ok_sem, (0 == tts_play_queue.en_interruptible)?(30000/5):(2000/5));// 等待播放结束
|
||||
// if(osOK != ret){
|
||||
// DEBUG("local_tts_play_ok_sem:%d\n", ret);
|
||||
// }
|
||||
// // }else{
|
||||
// // osSemaphoreAcquire(local_tts_play_ok_sem, 300/5);
|
||||
// // }
|
||||
// // DEBUG("tts task: 3333333333\n\n");
|
||||
cm_free(tts_play_queue.text);
|
||||
tts_play_queue.text = NULL;
|
||||
osDelay(5/5);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static osThreadFunc_t __local_tts_play_task(void *param){
|
||||
cm_audio_sample_param_t frame = {.sample_format = CM_AUDIO_SAMPLE_FORMAT_16BIT, .rate = CM_AUDIO_SAMPLE_RATE_8000HZ, .num_channels = CM_AUDIO_SOUND_MONO};
|
||||
int32_t index = 0;
|
||||
// bool isError = false; // 播放过程中是否有错误
|
||||
osStatus_t ret=0;
|
||||
DEBUG("__local_tts_play_task :start\n");
|
||||
while(1){
|
||||
osSemaphoreAcquire(local_tts_play_start_sem, osWaitForever);
|
||||
tts_play_cfg.play_state = TTS_STATE_WORKING; // 正在播放中
|
||||
// DEBUG("_play_task :start\n");
|
||||
ret = cm_audio_player_stream_open(CM_AUDIO_PLAY_FORMAT_PCM, &frame); //从pipe中播放音频(开启)
|
||||
if(ret != osOK){
|
||||
DEBUG("cm_audio_player_stream_open error\n");
|
||||
continue;
|
||||
}
|
||||
// isError = false;
|
||||
index = 0;
|
||||
while(index < tts_play_cfg.TtsPcmBufLen){/* 转码速度大于播放速度,故无需考虑播放速度大于转码速度情况的延迟等待问题 */
|
||||
// DEBUG("_play_task :len:%d, index: %d\n",tts_play_cfg.TtsPcmBufLen, index);
|
||||
|
||||
if(index + 3200 <= tts_play_cfg.TtsPcmBufLen){/* 每200ms传10帧PCM数据 */
|
||||
if(0 != cm_audio_player_stream_push(tts_play_cfg.TtsPcmBuf + index, 3200)){
|
||||
// isError = true;
|
||||
}
|
||||
index += 3200;
|
||||
}else{
|
||||
if(index >= tts_play_cfg.TtsPcmBufLen){ // 播放完成
|
||||
break;
|
||||
}else{
|
||||
if(0 != cm_audio_player_stream_push(tts_play_cfg.TtsPcmBuf + index, (tts_play_cfg.TtsPcmBufLen - index))){
|
||||
// isError = true;
|
||||
}
|
||||
index = tts_play_cfg.TtsPcmBufLen;
|
||||
}
|
||||
}
|
||||
if(osSemaphoreAcquire(local_tts_play_end_sem, 0) == osOK){ // 等待播放结束
|
||||
// DEBUG("_play_task :wait end\n");
|
||||
break;
|
||||
}
|
||||
osDelay(40);
|
||||
}
|
||||
cm_audio_player_stream_close();
|
||||
osSemaphoreRelease(local_tts_play_ok_sem); // 释放发送成功应答信号量
|
||||
tts_play_cfg.play_state = TTS_STATE_IDLE; // 播放结束
|
||||
// DEBUG("_play_task :end\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
int32_t local_tts_play(const char *text, int32_t len){
|
||||
//需要判断当前是否处于播放过程中,处于播放过程中报错
|
||||
if (CM_LOCAL_TTS_STATE_WORKING == cm_tts_play_cfg.state)
|
||||
{
|
||||
DEBUG(" TTS busy\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (NULL == cm_tts_play_cfg.TtsPcmBuf)
|
||||
{
|
||||
cm_tts_play_cfg.TtsPcmBuf = cm_malloc(CM_TTS_FRAME_BUFFER_SIZE);
|
||||
|
||||
if (NULL == cm_tts_play_cfg.TtsPcmBuf)
|
||||
{
|
||||
DEBUG("__%d__ cm_malloc() error",__LINE__);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
cm_tts_play_cfg.state = CM_LOCAL_TTS_STATE_WORKING;
|
||||
|
||||
cm_audio_sample_param_t frame = {.sample_format = CM_AUDIO_SAMPLE_FORMAT_16BIT, .rate = CM_AUDIO_SAMPLE_RATE_8000HZ, .num_channels = CM_AUDIO_SOUND_MONO};
|
||||
int32_t ret = cm_audio_player_stream_open(CM_AUDIO_PLAY_FORMAT_PCM, &frame); //从pipe中播放音频(开启)
|
||||
|
||||
if (-1 == ret){
|
||||
DEBUG("%s() __%d__ cm_audio_player_stream_open0() error, ret is %d", __func__, __LINE__, ret);
|
||||
// cm_audio_player_stream_close();
|
||||
// ret = cm_audio_player_stream_open(CM_AUDIO_PLAY_FORMAT_PCM, &frame); //从pipe中播放音频(开启)
|
||||
// if (-1 == ret){
|
||||
// DEBUG("__%d__ stream_open1() error, ret: %d", __LINE__, ret);
|
||||
cm_tts_play_cfg.state = CM_LOCAL_TTS_STATE_IDLE;
|
||||
return -1;
|
||||
// }
|
||||
}
|
||||
|
||||
if (NULL == cm_tts_play_cfg.SemHandle)
|
||||
{
|
||||
cm_tts_play_cfg.SemHandle = osSemaphoreNew(1, 0, NULL);
|
||||
|
||||
if (NULL == cm_tts_play_cfg.SemHandle)
|
||||
{
|
||||
DEBUG("__%d__ osSemaphoreNew0() error",__LINE__);
|
||||
cm_audio_player_stream_close();
|
||||
cm_tts_play_cfg.state = CM_LOCAL_TTS_STATE_IDLE;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (NULL == cm_tts_play_cfg.SemHandle_ack)
|
||||
{
|
||||
cm_tts_play_cfg.SemHandle_ack = osSemaphoreNew(1, 0, NULL);
|
||||
|
||||
if (NULL == cm_tts_play_cfg.SemHandle_ack)
|
||||
{
|
||||
DEBUG("__%d__ osSemaphoreNew1() error",__LINE__);
|
||||
cm_audio_player_stream_close();
|
||||
cm_tts_play_cfg.state = CM_LOCAL_TTS_STATE_IDLE;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// 创建线程资源
|
||||
if (NULL == cm_tts_play_cfg.TaskHandle)
|
||||
{
|
||||
osThreadAttr_t tts_task_attr = {0};
|
||||
tts_task_attr.name = "tts_play_task";
|
||||
tts_task_attr.stack_size = 2048;
|
||||
tts_task_attr.priority= osPriorityNormal;
|
||||
|
||||
cm_tts_play_cfg.TaskHandle = osThreadNew(__cm_tts_play_task, 0, &tts_task_attr);
|
||||
|
||||
if (NULL == cm_tts_play_cfg.TaskHandle)
|
||||
{
|
||||
DEBUG("__%d__ osThreadNew() error", __LINE__);
|
||||
cm_audio_player_stream_close();
|
||||
cm_tts_play_cfg.state = CM_LOCAL_TTS_STATE_IDLE;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
cm_tts_play_cfg.user_cb = cb;
|
||||
cm_tts_play_cfg.user_cb_param = cb_param;
|
||||
cm_tts_play_cfg.TtsPcmBufLen = 0;
|
||||
// cm_tts_play_cfg.state = CM_LOCAL_TTS_STATE_WORKING;
|
||||
// DEBUG("tts_synth_start\n\n========\n");
|
||||
ret = cm_local_tts_synth(text, len, __cm_tts_play_callback, cb_param);
|
||||
// DEBUG("tts_synth_end\n\n========\n");
|
||||
if (0 == ret)
|
||||
{
|
||||
osSemaphoreRelease(cm_tts_play_cfg.SemHandle);
|
||||
}
|
||||
|
||||
if(cm_tts_play_cfg.SemHandle_ack != NULL)
|
||||
{
|
||||
osSemaphoreAcquire(cm_tts_play_cfg.SemHandle_ack, 3000/5);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
*/
|
||||
// 初始化
|
||||
void local_tts_init(void){
|
||||
cm_gpio_cfg_t cfg = {0};
|
||||
|
|
@ -226,18 +449,30 @@ void local_tts_init(void){
|
|||
DEBUG("local_tts_init error\n");
|
||||
}
|
||||
if(local_tts_play_queue == NULL){
|
||||
local_tts_play_queue = osMessageQueueNew(50, sizeof(tts_play_queue_t), NULL);
|
||||
local_tts_play_queue = osMessageQueueNew(13, sizeof(tts_play_queue_t), NULL);
|
||||
}
|
||||
if(local_tts_play_start_sem == NULL){
|
||||
local_tts_play_start_sem = osSemaphoreNew(1, 0, NULL);
|
||||
}
|
||||
if(local_tts_play_ok_sem == NULL){
|
||||
local_tts_play_ok_sem = osSemaphoreNew(1, 0, NULL);
|
||||
}
|
||||
if(local_tts_play_stat_sem == NULL){
|
||||
local_tts_play_stat_sem = osSemaphoreNew(1, 0, NULL);
|
||||
if(local_tts_play_end_sem == NULL){
|
||||
local_tts_play_end_sem = osSemaphoreNew(1, 0, NULL);
|
||||
}
|
||||
// if(local_tts_play_stat_sem == NULL){
|
||||
// local_tts_play_stat_sem = osSemaphoreNew(1, 0, NULL);
|
||||
// }
|
||||
|
||||
memset(tts_play_cfg.TtsPcmBuf, 0, TTS_FRAME_BUFFER_SIZE);
|
||||
tts_play_cfg.TtsPcmBufLen = 0;
|
||||
|
||||
|
||||
osThreadAttr_t local_tts_play_thread_attr = {
|
||||
.name = "local_tts_play_thread",
|
||||
.stack_size = 4096*4,
|
||||
.priority = osPriorityNormal
|
||||
};
|
||||
osThreadNew((osThreadFunc_t)local_tts_play_task, NULL, &local_tts_play_thread_attr);
|
||||
osThreadNew((osThreadFunc_t)__local_tts_play_task, NULL, &local_tts_play_thread_attr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@
|
|||
#include "cm_mem.h"
|
||||
#define name_malloc(size) malloc(size)
|
||||
#define name_free(ptr) free(ptr)
|
||||
|
||||
// #include "cm_mem.h"
|
||||
// #define name_malloc(size) cm_malloc(size)
|
||||
// #define name_free(ptr) cm_free(ptr)
|
||||
// #define name_realloc(ptr, size) cm_realloc(ptr, size)
|
||||
|
||||
#endif /* __NMEA_CONFIG_H__ */
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ TCP_DISABLE:
|
|||
DEBUG("NetwarK connected!\r\n");
|
||||
// local_tts_set(5, 15, CM_LOCAL_TTS_DIGIT_AUTO);
|
||||
local_tts_text_play("网络已连接",0,0);
|
||||
local_tts_text_play("欢迎使用莱昂特智能终端设备...。",0,0); // 0:表示自动计算字符串长度,10000表示最大等待时间
|
||||
// local_tts_text_play("欢迎使用莱昂特智能终端设备...。",0,0); // 0:表示自动计算字符串长度,10000表示最大等待时间
|
||||
osSemaphoreAcquire(netconn_disconnect_sem, osWaitForever); // 等待断开连接信号
|
||||
jt808_Autoreport_param_stop();//停止自动上报参数设置
|
||||
led_set_event(EVENT_NETWORK_DISCONNECT); // 网络断开连接
|
||||
|
|
|
|||
|
|
@ -32,20 +32,16 @@ static cm_tts_play_cfg_t cm_tts_play_cfg = {NULL, NULL, NULL, CM_LOCAL_TTS_STATE
|
|||
|
||||
static void __cm_tts_play_callback(cm_local_tts_event_e event, void *param)
|
||||
{
|
||||
switch(event)
|
||||
{
|
||||
case CM_LOCAL_TTS_EVENT_SYNTH_DATA:
|
||||
{
|
||||
switch(event){
|
||||
case CM_LOCAL_TTS_EVENT_SYNTH_DATA:{
|
||||
cm_local_tts_synth_data_t *synth_data = (cm_local_tts_synth_data_t *)param;
|
||||
|
||||
if (CM_TTS_FRAME_BUFFER_SIZE > (cm_tts_play_cfg.TtsPcmBufLen + synth_data->len))
|
||||
{
|
||||
if (CM_TTS_FRAME_BUFFER_SIZE > (cm_tts_play_cfg.TtsPcmBufLen + synth_data->len)){
|
||||
memcpy (cm_tts_play_cfg.TtsPcmBuf + cm_tts_play_cfg.TtsPcmBufLen, (uint8_t *)synth_data->data, synth_data->len);
|
||||
cm_tts_play_cfg.TtsPcmBufLen = cm_tts_play_cfg.TtsPcmBufLen + synth_data->len;
|
||||
}
|
||||
|
||||
if (cm_tts_play_cfg.user_cb)
|
||||
{
|
||||
if (cm_tts_play_cfg.user_cb){
|
||||
cm_tts_play_cfg.user_cb(event, param);
|
||||
}
|
||||
DEBUG("SYNTH_DATA [%d] \n", synth_data->len);
|
||||
|
|
@ -236,9 +232,9 @@ int32_t cm_local_tts_play(const char *text, int32_t len, cm_local_tts_callback c
|
|||
cm_tts_play_cfg.user_cb_param = cb_param;
|
||||
cm_tts_play_cfg.TtsPcmBufLen = 0;
|
||||
// cm_tts_play_cfg.state = CM_LOCAL_TTS_STATE_WORKING;
|
||||
// DEBUG("tts_synth_start\n\n========\n");
|
||||
DEBUG("tts_synth_start\n\n========\n");
|
||||
ret = cm_local_tts_synth(text, len, __cm_tts_play_callback, cb_param);
|
||||
// DEBUG("tts_synth_end\n\n========\n");
|
||||
DEBUG("tts_synth_end\n\n========\n");
|
||||
if (0 == ret)
|
||||
{
|
||||
osSemaphoreRelease(cm_tts_play_cfg.SemHandle);
|
||||
|
|
|
|||
Loading…
Reference in New Issue