作者 ookk303

ui改动, 讯飞库2代库改动,将探照灯和警灯分离

... ... @@ -163,7 +163,13 @@
"debuginfo.h": "c",
"h3_ircut.h": "c",
"dji_high_speed_data_channel.h": "c",
"psdk_ui.h": "c"
"psdk_ui.h": "c",
"jzsdk_widgetindex.h": "c",
"psdk_ui_change.h": "c",
"psdk_ui_value_menu.h": "c",
"iflybak": "c",
"iflybak2": "c",
"ifybak3": "c"
},
"Codegeex.GenerationPreference": "automatic",
"C_Cpp.dimInactiveRegions": false,
... ...
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include <string.h> // 添加memcpy函数支持
#include <string.h>
#include <pthread.h> // 添加线程互斥锁支持
#include "JZring.h"
typedef struct T_JZring
... ... @@ -8,65 +9,68 @@ typedef struct T_JZring
U32_t size; // 缓冲区总容量
U32_t head; // 写入位置(下一个可写位置)
U32_t tail; // 读取位置(下一个可读位置)
U32_t count; // 当前数据量(可选改进)
U32_t count; // 当前数据量
pthread_mutex_t mutex; // 互斥锁保护共享资源
} T_JZring;
// 初始化环形缓冲区
T_JZsdkReturnCode JZring_Init(T_JZringHandle *ring, U8_t *buffer, U32_t size)
{
if (!buffer || size == 0)
if (!ring || !buffer || size == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
//注册ring
T_JZring *r = (T_JZring*)malloc(sizeof(T_JZring));
if (!r) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 初始化互斥锁
if (pthread_mutex_init(&r->mutex, NULL) != 0) {
free(r);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
r->buffer = buffer;
r->size = size;
r->head = 0;
r->tail = 0;
r->count = 0; // 初始化数据计数
r->count = 0;
*ring = (T_JZringHandle)r;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 写入数据到环形缓冲区
T_JZsdkReturnCode JZring_Write(T_JZringHandle ring, const U8_t *data, U32_t size)
// 获取缓冲区总容量
T_JZsdkReturnCode JZring_GetSize(T_JZringHandle ring, U32_t *size)
{
if (!ring || !data) {
if (!ring || !size) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
if (size == 0) {
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZring *r = (T_JZring*)ring;
// 检查可用空间
U32_t free_space = r->size - r->count;
if (size > free_space) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
pthread_mutex_lock(&r->mutex);
*size = r->size;
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 分两段复制数据(处理回绕)
U32_t first_chunk = r->size - r->head;
if (first_chunk >= size) {
memcpy(r->buffer + r->head, data, size);
r->head = (r->head + size) % r->size;
} else {
memcpy(r->buffer + r->head, data, first_chunk);
memcpy(r->buffer, data + first_chunk, size - first_chunk);
r->head = size - first_chunk;
// 获取当前数据量
T_JZsdkReturnCode JZring_GetDataCount(T_JZringHandle ring, U32_t *count)
{
if (!ring || !count) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
T_JZring *r = (T_JZring*)ring;
pthread_mutex_lock(&r->mutex);
*count = r->count;
pthread_mutex_unlock(&r->mutex);
r->count += size; // 更新数据计数
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -80,61 +84,153 @@ T_JZsdkReturnCode JZring_Read(T_JZringHandle ring, U8_t *data, U32_t size, U32_t
T_JZring *r = (T_JZring*)ring;
*readSize = 0;
pthread_mutex_lock(&r->mutex);
if (r->count == 0 || size == 0) {
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 计算实际可读数量
U32_t bytes_to_read = (size > r->count) ? r->count : size;
*readSize = bytes_to_read;
// 分两段复制数据(处理回绕)
U32_t first_chunk = r->size - r->tail;
if (first_chunk >= bytes_to_read) {
// 计算连续可读空间(可能被尾部分割)
U32_t contig = r->size - r->tail;
if (bytes_to_read <= contig) {
memcpy(data, r->buffer + r->tail, bytes_to_read);
r->tail = (r->tail + bytes_to_read) % r->size;
} else {
memcpy(data, r->buffer + r->tail, first_chunk);
memcpy(data + first_chunk, r->buffer, bytes_to_read - first_chunk);
r->tail = bytes_to_read - first_chunk;
memcpy(data, r->buffer + r->tail, contig);
memcpy(data + contig, r->buffer, bytes_to_read - contig);
}
r->count -= bytes_to_read; // 更新数据计数
*readSize = bytes_to_read;
// 更新读指针和数据计数
r->tail = (r->tail + bytes_to_read) % r->size;
r->count -= bytes_to_read;
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZring_GetSize(T_JZringHandle ring, U32_t *size)
// 写入数据到环形缓冲区
T_JZsdkReturnCode JZring_Write(T_JZringHandle ring, const U8_t *data, U32_t size)
{
if (!ring || !data) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
if (size == 0) {
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZring *r = (T_JZring*)ring;
pthread_mutex_lock(&r->mutex);
// 直接检查可用空间
if (size > (r->size - r->count))
{
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_BUFFER_SIZE_NOT_ENOUGH;
}
// 计算连续可写空间(可能被尾部分割)
U32_t contig = r->size - r->head;
if (size <= contig) {
memcpy(r->buffer + r->head, data, size);
} else {
memcpy(r->buffer + r->head, data, contig);
memcpy(r->buffer, data + contig, size - contig);
}
// 更新写指针和数据计数
r->head = (r->head + size) % r->size;
r->count += size;
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 获取空闲空间
T_JZsdkReturnCode JZring_GetFreeSpace(T_JZringHandle ring, U32_t *size)
{
T_JZring *ringHandle = (T_JZring*)ring;
if (!ring || !size) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
T_JZring *r = (T_JZring*)ring;
pthread_mutex_lock(&r->mutex);
*size = r->size - r->count;
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZring_GetFreeSize(T_JZringHandle ring, U32_t *size)
// 检查缓冲区是否为空
T_JZsdkReturnCode JZring_IsEmpty(T_JZringHandle ring, bool *isEmpty)
{
T_JZring *ringHandle = (T_JZring*)ring;
if (!ring || !isEmpty) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
T_JZring *r = (T_JZring*)ring;
pthread_mutex_lock(&r->mutex);
*isEmpty = (r->count == 0);
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZring_Reset(T_JZringHandle ring)
// 检查缓冲区是否已满
T_JZsdkReturnCode JZring_IsFull(T_JZringHandle ring, bool *isFull)
{
T_JZring *ringHandle = (T_JZring*)ring;
if (!ring || !isFull) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
ringHandle->head = 0;
ringHandle->tail = 0;
T_JZring *r = (T_JZring*)ring;
pthread_mutex_lock(&r->mutex);
*isFull = (r->count == r->size);
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 重置环形缓冲区
T_JZsdkReturnCode JZring_Reset(T_JZringHandle ring)
{
if (!ring) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
T_JZring *r = (T_JZring*)ring;
pthread_mutex_lock(&r->mutex);
r->head = 0;
r->tail = 0;
r->count = 0;
pthread_mutex_unlock(&r->mutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 反初始化环形缓冲区
T_JZsdkReturnCode JZring_DeInit(T_JZringHandle ring)
{
T_JZring *ringHandle = (T_JZring*)ring;
ringHandle->buffer = NULL;
ringHandle->size = 0;
ringHandle->head = 0;
ringHandle->tail = 0;
if (!ring) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
T_JZring *r = (T_JZring*)ring;
// 销毁互斥锁
pthread_mutex_destroy(&r->mutex);
// 释放管理结构体
free(r);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
... ... @@ -28,6 +28,10 @@ T_JZsdkReturnCode JZring_Init(T_JZringHandle *ring, U8_t *buffer, U32_t size);
T_JZsdkReturnCode JZring_Write(T_JZringHandle ring, const U8_t *data, U32_t size);
T_JZsdkReturnCode JZring_Read(T_JZringHandle ring, U8_t *data, U32_t size, U32_t *readSize);
T_JZsdkReturnCode JZring_GetDataCount(T_JZringHandle ring, U32_t *count);
T_JZsdkReturnCode JZring_Reset(T_JZringHandle ring);
T_JZsdkReturnCode JZring_DeInit(T_JZringHandle ring);
#ifdef __cplusplus
}
#endif
... ...
... ... @@ -24,9 +24,10 @@ typedef enum JZsdk_Widget_Control
JZSDK_WIDGET_LASTSONG = 0x0000, // 控件上一曲
JZSDK_WIDGET_NEXTSONG = 0x0001, // 控件下一曲
JZSDK_WIDGET_PLAYANDSTOP = 0x0002, // 控件播放暂停
JZSDK_WIDGET_VOLUME = 0x0003, // 控件音量
JZSDK_WIDGET_SIDE_LASER_MODE = 0x0020,
JZSDK_WIDGET_VOLUME = 0x003, // 控件音量
JZSDK_WIDGET_TTS_SPEED = 0x0004, // 控件tts速度
JZSDK_WIDGET_TTS_TONE = 0x0005, // 控件tts音色
JZSDK_WIDGET_LOOP_PLAY = 0x0010, // 控件循环播放
JZSDK_WIDGET_VIDEOPUSH_INDEX = 0x0021, //切换视频流
JZSDK_WIDGET_TEMP_MEASUREMENT_MODE = 0x0022, //测温
... ... @@ -55,8 +56,12 @@ typedef enum JZsdk_Widget_Control
JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_LOW_CALIBRATION = 0x0039, //气体增强纠正低温校准
JZSDK_WIDGET_WARNLIGHT_COLOR_1 = 0x0040, //警告灯颜色1
JZSDK_WIDGET_WARNLIGHT_COLOR_2 = 0x0041, //警告灯颜色2
JZSDK_WIDGET_WARNLIGHT_MODE = 0x0042, //警告灯模式
JZSDK_WIDGET_SIDE_LASER_MODE = 0x0050, //侧射激光模式
}JZsdk_Widget_Control;
... ...
... ... @@ -29,6 +29,7 @@ typedef enum {
JZ_ERROR_SYSTEM_MODULE_CODE_MEMORY_ALLOC_FAILED = 0x0004, //内存分配失败
JZ_ERROR_SYSTEM_MODULE_CODE_IS_BUSY = 0x0005, //忙错误
JZ_ERROR_SYSTEM_MODULE_CODE_CHECK_CODE_ERROR = 0x0006, //校验码错误
JZ_ERROR_SYSTEM_MODULE_CODE_BUFFER_SIZE_NOT_ENOUGH = 0x0007, //缓冲区大小不足
} JZ_SYSTEM_Code;
typedef enum {
... ...
... ... @@ -209,7 +209,7 @@ static T_JZsdkReturnCode JZ_T40_BaseParamSet(void)
//测试部分
//1、将总功率设置为无限制
//HalSend_type1Send_SearchLight_SetLumenPowerLimit(UART_DEV_2, 0x00, 0x64, 0x20, 0x00);
HalSend_type1Send_SearchLight_SetLumenPowerLimit(UART_DEV_2, 0x00, 0x64, 0x20, 0x00);
}
... ... @@ -251,8 +251,8 @@ T_JZsdkReturnCode JZ_T40_init(int mode)
JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2);
//4G初始化
int value[1] = {COMM_4G_UART_BITRATE};
JZsdk_HalPort_Init(UART_4G, value);
// int value[1] = {COMM_4G_UART_BITRATE};
// JZsdk_HalPort_Init(UART_4G, value);
//子设备连接
JZ_T40_SubDevice_Init();
... ...
... ... @@ -10,20 +10,20 @@
#define DEVICE_VERSION JZ_T40
//禁止修改行 选择是串口程序 还是 psdk程序
#define APP_VERSION APP_UART
#define APP_VERSION APP_PSDK
//禁止修改行 板子型号
#define PLATFORM_VERSION PLATFORM_V3S
//禁止修改行 串口连接程序的软件版本号
#define MAJOR_VERSION_TEN_POSITION 0
#define MAJOR_VERSION_ONE_POSITION 0
#define MAJOR_VERSION_ONE_POSITION 1
#define MINOR_VERSION_TEN_POSITION 0
#define MINOR_VERSION_ONE_POSITION 0
#define MODIFY_VERSION_TEN_POSITION 0
#define MINOR_VERSION_ONE_POSITION 3
#define MODIFY_VERSION_TEN_POSITION 1
#define MODIFY_VERSION_ONE_POSITION 2
#define DEBUG_VERSION_TEN_POSITION 2
#define DEBUG_VERSION_ONE_POSITION 2
#define DEBUG_VERSION_TEN_POSITION 0
#define DEBUG_VERSION_ONE_POSITION 0
... ...
... ... @@ -478,7 +478,7 @@ static T_JZsdkReturnCode RecvDeal_RealTimeMP2_Limit_transmission(int Port, char
}
HalRecvDataLen += DataLen;
JZSDK_LOG_DEBUG("%s,MP2实时喊话定长制传输中 长度:%d 总长度:%d",JZsdk_DefineCode_GetPortName(Port), DataLen, HalRecvDataLen);
JZSDK_LOG_INFO("%s,MP2实时喊话定长制传输中 长度:%d 总长度:%d",JZsdk_DefineCode_GetPortName(Port), DataLen, HalRecvDataLen);
//传输数据接口
#ifdef MEGAPHONE_CONFIG_STATUS_ON
... ... @@ -1994,7 +1994,7 @@ static T_JZsdkReturnCode RecvDeal_TTS_Trans_LimitTransmission(int Port, char *ge
//2、记录已加载的长度
TTS_RecvBufferLen = TTS_RecvBufferLen + DataLen;
JZSDK_LOG_DEBUG("%s,tts定长传输中, 长度:%d 总长度:%d",JZsdk_DefineCode_GetPortName(Port), DataLen, TTS_RecvBufferLen);
JZSDK_LOG_INFO("%s,tts定长传输中, 长度:%d 总长度:%d",JZsdk_DefineCode_GetPortName(Port), DataLen, TTS_RecvBufferLen);
}
else
{
... ... @@ -2563,7 +2563,7 @@ static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_LimitTransmission(int Port,
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZSDK_LOG_DEBUG("%s,传输opus定长语音传输中 长度:%d",JZsdk_DefineCode_GetPortName(Port), DataLen);
JZSDK_LOG_INFO("%s,传输opus定长语音传输中 长度:%d",JZsdk_DefineCode_GetPortName(Port), DataLen);
//传输数据接口
#ifdef MEGAPHONE_CONFIG_STATUS_ON
... ...
... ... @@ -4,11 +4,15 @@
#include <atomic>
#include <unistd.h>
#include <string>
#include <thread>
#include <mutex>
#include <condition_variable>
#include "JZsdkLib.h"
#include "version_choose.h"
#include "JZsdk_base/JZring/JZring.h"
#ifdef IFLAY_TTS_2_CONFIG_STATUS_ON
#if 1
#include "aikit_biz_api.h"
#include "aikit_constant.h"
... ... @@ -18,71 +22,137 @@
#include "../../Megaphone.h"
#include "iflytek_tts.h"
using namespace std;
using namespace AIKIT;
static std::atomic_bool ttsFinished(false);
static std::atomic_bool g_playThreadRunning(false);
static const char *ABILITY = "e2e44feff";
static AIKIT_HANDLE *g_AikitHandle = nullptr; //合成句柄
static AIKIT_HANDLE *g_AikitHandle = nullptr; // 合成句柄
static int IflytekLib_2_StopTts();
#define IFLYTEK_RING_BUF_SIZE (1024 * 100) // 100KB缓冲区
static T_JZringHandle g_ringHandle = nullptr;
static char *g_ringBuf = nullptr;
// 同步机制
static std::mutex g_mutex;
static std::condition_variable g_cv;
void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output)
// 播放线程函数
void PlaybackThreadFunc()
{
//检测数据生成标志位是否有关闭,如果有关闭,则主动关闭合成,并退出该事件
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF)
U8_t buffer[2048]; // 每次读取2KB
U32_t readSize = 0;
T_JZsdkReturnCode ret;
g_playThreadRunning = true;
while (g_playThreadRunning)
{
// 等待有数据可读
{
std::unique_lock<std::mutex> lock(g_mutex);
U32_t dataCount = 0;
JZring_GetDataCount(g_ringHandle, &dataCount);
if (dataCount == 0) {
// 等待最多100ms或通知
g_cv.wait_for(lock, std::chrono::milliseconds(100));
continue;
}
}
JZSDK_LOG_DEBUG("有数据可读");
// 从环形缓冲区读取数据
ret = JZring_Read(g_ringHandle, buffer, sizeof(buffer), &readSize);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS || readSize == 0) {
usleep(10000); // 10ms
continue;
}
// 发送到音频播放器
AudioDeal_PcmDataInput_TextSteam(16000, buffer, readSize);
// 检查是否需要停止播放
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
break;
}
}
g_playThreadRunning = false;
}
void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output)
{
// 检测数据生成标志位是否有关闭
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
IflytekLib_2_StopTts();
return;
}
//如果存在数据,则播放
if (output->node->value)
{
//生产的文本数据 output->node->value
//生产的数据长度 output->node->len
//char类型
//JZSDK_LOG_DEBUG("生产了数据%d", output->node->len);
printf("生产了数据%d\n", output->node->len);
//将该数据发送到alsa播放器
AudioDeal_PcmDataInput_TextSteam(16000, (unsigned char *)output->node->value, output->node->len);
if (output->node->value) {
JZSDK_LOG_DEBUG("生产了数据%d", output->node->len);
// 写入环形缓冲区
T_JZsdkReturnCode ret;
U32_t written = 0;
while (written < static_cast<U32_t>(output->node->len)) {
U32_t chunkSize = std::min(static_cast<U32_t>(output->node->len) - written,
static_cast<U32_t>(4096));
ret = JZring_Write(g_ringHandle,
reinterpret_cast<U8_t*>(output->node->value) + written,
chunkSize);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
JZSDK_LOG_ERROR("写入环形缓冲区失败: %d", ret);
break;
}
written += chunkSize;
}
// 通知播放线程有新数据
g_cv.notify_one();
}
}
void OnEvent(AIKIT_HANDLE* handle, AIKIT_EVENT eventType, const AIKIT_OutputEvent* eventValue) {
if (eventType == AIKIT_Event_End) {
ttsFinished = true;
JZSDK_LOG_INFO("合成完成");
// 通知播放线程所有数据已生成
g_cv.notify_one();
}
}
void OnError(AIKIT_HANDLE* handle, int32_t err, const char* desc) {
printf("OnError:%d\n", err);
//报错
JZSDK_LOG_ERROR("TTS错误: %d, %s", err, desc);
IflytekLib_2_StopTts();
}
int IflytekLib_2_TextToTts(int language,
const char *TtsRole,
const char *text, int speed, int volume)
const char *TtsRole,
const char *text, int speed, int volume)
{
AIKIT_ParamBuilder* paramBuilder = nullptr;
AIKIT_DataBuilder* dataBuilder = nullptr;
AiText* aiText_raw = nullptr;
int ret = 0;
// 重置完成标志
ttsFinished = false;
// 重置环形缓冲区
JZring_Reset(g_ringHandle);
paramBuilder = AIKIT_ParamBuilder::create();
paramBuilder->clear();
// 设置发音人
... ... @@ -92,66 +162,67 @@ int IflytekLib_2_TextToTts(int language,
paramBuilder->param("language", language);
// 设置文本编码
paramBuilder->param("textEncoding", "UTF-8", strlen("UTF-8"));
// 音量
paramBuilder->param("volume", volume);
// 语速
paramBuilder->param("speed", speed);
//语速
//paramBuilder->param("speed",speed); //可选参数,默认为0
//音调
//paramBuilder->param("pitch",100); //可选参数,默认为0
//声音
//paramBuilder->param("volume",100);//可选参数,默认为0
//JZSDK_LOG_DEBUG("TTS Role:%s Len:%d, Text:%s Len:%d, language:%d", TtsRole, strlen(TtsRole), text, strlen(text), language);
JZSDK_LOG_DEBUG("TTS Role:%s, Text:%s, language:%d", TtsRole, text, language);
int ret = AIKIT_Start(ABILITY, AIKIT_Builder::build(paramBuilder), nullptr, &g_AikitHandle);
ret = AIKIT_Start(ABILITY, AIKIT_Builder::build(paramBuilder), nullptr, &g_AikitHandle);
if(ret != 0) {
printf("AIKIT_Start failed: %d\n", ret);
JZSDK_LOG_ERROR("AIKIT_Start failed: %d", ret);
goto exit;
}
dataBuilder = AIKIT_DataBuilder::create();
dataBuilder->clear();
//aiText_raw = AiText::get("text")->data(text.c_str(), text.length())->once()->valid();
aiText_raw = AiText::get("text")->data(text, strlen(text) )->once()->valid();
aiText_raw = AiText::get("text")->data(text, strlen(text))->once()->valid();
dataBuilder->payload(aiText_raw);
ret = AIKIT_Write(g_AikitHandle, AIKIT_Builder::build(dataBuilder));
if(ret != 0) {
printf("AIKIT_Write failed: %d\n", ret);
JZSDK_LOG_ERROR("AIKIT_Write failed: %d", ret);
goto exit;
}
// 等待合成完成
// 等待合成完成或停止信号
while(!ttsFinished) {
usleep(1000);
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
break;
}
usleep(10000); // 10ms
}
//JZSDK_LOG_INFO("合成完成");
// 结束合成
ret = AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
exit:
exit:
if(paramBuilder != nullptr) {
delete paramBuilder;
}
if(dataBuilder != nullptr) {
delete dataBuilder;
}
return ret;
}
int IflytekLib_2_Init()
{
// 初始化环形缓冲区
g_ringBuf = new char[IFLYTEK_RING_BUF_SIZE];
if (JZring_Init(&g_ringHandle, reinterpret_cast<U8_t*>(g_ringBuf), IFLYTEK_RING_BUF_SIZE)
!= JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
JZSDK_LOG_ERROR("环形缓冲区初始化失败");
return -1;
}
// 启动播放线程
std::thread(PlaybackThreadFunc).detach();
// 初始化TTS SDK
AIKIT_Configurator::builder()
.app()
.appID("03857dfd")
... ... @@ -166,7 +237,7 @@ int IflytekLib_2_Init()
int ret = AIKIT_Init();
if(ret != 0) {
printf("AIKIT_Init failed: %d\n", ret);
JZSDK_LOG_ERROR("AIKIT_Init failed: %d", ret);
return -1;
}
... ... @@ -178,18 +249,49 @@ int IflytekLib_2_Init()
int IflytekLib_2_UnInit()
{
// 停止播放线程
g_playThreadRunning = false;
g_cv.notify_one();
// 等待播放线程退出
int waitCount = 0;
while (g_playThreadRunning && waitCount++ < 50) {
usleep(100000); // 100ms
}
// 反初始化TTS SDK
if (g_AikitHandle) {
AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
}
AIKIT_UnInit();
// 释放环形缓冲区
if (g_ringHandle) {
JZring_DeInit(g_ringHandle);
g_ringHandle = nullptr;
}
if (g_ringBuf) {
delete[] g_ringBuf;
g_ringBuf = nullptr;
}
return 0;
}
static int IflytekLib_2_StopTts()
{
AIKIT_OutputEvent eventData = {};
if (g_AikitHandle != nullptr)
{
OnEvent(g_AikitHandle,AIKIT_Event_End,&eventData);
if (g_AikitHandle) {
AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
ttsFinished = true;
JZSDK_LOG_INFO("TTS合成已停止");
}
// 通知播放线程
g_cv.notify_one();
return 0;
}
... ...
... ... @@ -110,7 +110,7 @@ int IflytekLib_2_TextToTts(int language,
paramBuilder->param("textEncoding", "UTF-8", strlen("UTF-8"));
//语速
//paramBuilder->param("speed",speed); //可选参数,默认为0
paramBuilder->param("speed",speed); //可选参数,默认为0
//音调
//paramBuilder->param("pitch",100); //可选参数,默认为0
... ...
... ... @@ -4,11 +4,15 @@
#include <atomic>
#include <unistd.h>
#include <string>
#include <thread>
#include <mutex>
#include <condition_variable>
#include "JZsdkLib.h"
#include "version_choose.h"
#include "JZsdk_base/JZring/JZring.h"
#ifdef IFLAY_TTS_2_CONFIG_STATUS_ON
#if 1
#include "aikit_biz_api.h"
#include "aikit_constant.h"
... ... @@ -18,87 +22,146 @@
#include "../../Megaphone.h"
#include "iflytek_tts.h"
using namespace std;
using namespace AIKIT;
static std::atomic_bool ttsFinished(false);
static std::atomic_bool g_playThreadRunning(false);
static const char *ABILITY = "e2e44feff";
static AIKIT_HANDLE *g_AikitHandle = nullptr; //合成句柄
static AIKIT_HANDLE *g_AikitHandle = nullptr; // 合成句柄
static int IflytekLib_2_StopTts();
static FILE *iflytts_fp = NULL;
#define IFLYTTS_FP_NAME "/root/tmp_tts_file.pcm"
#define IFLYTEK_RING_BUF_SIZE (1024 * 100) // 100KB缓冲区
static T_JZringHandle g_ringHandle = nullptr;
static char *g_ringBuf = nullptr;
static int g_AudioPlayFinshFlag = JZ_FLAGCODE_OFF;
// 同步机制
static std::mutex g_mutex;
static std::condition_variable g_cv;
void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output)
// 播放线程函数
void PlaybackThreadFunc()
{
//检测数据生成标志位是否有关闭,如果有关闭,则主动关闭合成,并退出该事件
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF)
{
IflytekLib_2_StopTts();
return;
}
U8_t buffer[2048]; // 每次读取2KB
U32_t readSize = 0;
T_JZsdkReturnCode ret;
//如果存在数据,则播放
if (output->node->value)
g_playThreadRunning = true;
while (g_playThreadRunning)
{
//生产的文本数据 output->node->value
//生产的数据长度 output->node->len
//char类型
// 等待有数据可读
{
std::unique_lock<std::mutex> lock(g_mutex);
U32_t dataCount = 0;
JZring_GetDataCount(g_ringHandle, &dataCount);
//JZSDK_LOG_DEBUG("生产了数据%d", output->node->len);
printf("生产了数据%d\n", output->node->len);
JZSDK_LOG_DEBUG("缓冲区数据量: %d", dataCount);
if (dataCount == 0) {
// 等待最多100ms或通知
g_cv.wait_for(lock, std::chrono::milliseconds(100));
continue;
}
}
//将该数据发送到alsa播放器
//AudioDeal_PcmDataInput_TextSteam(16000, (unsigned char *)output->node->value, output->node->len);
g_AudioPlayFinshFlag = JZ_FLAGCODE_ON;
if (iflytts_fp != NULL)
{
fwrite(output->node->value, sizeof(char), output->node->len, iflytts_fp);
fflush(iflytts_fp);
JZSDK_LOG_DEBUG("有数据可读");
// 从环形缓冲区读取数据
ret = JZring_Read(g_ringHandle, buffer, sizeof(buffer), &readSize);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS || readSize == 0) {
usleep(10000); // 10ms
continue;
}
JZSDK_LOG_DEBUG("输入数据进音频库");
}
// 发送到音频播放器
AudioDeal_PcmDataInput_TextSteam(16000, buffer, readSize);
g_AudioPlayFinshFlag = JZ_FLAGCODE_OFF;
JZSDK_LOG_DEBUG("音频库播放完毕");
// 检查是否需要停止播放
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
break;
}
}
g_playThreadRunning = false;
}
void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output)
{
// 检测数据生成标志位是否有关闭
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
IflytekLib_2_StopTts();
return;
}
if (output->node->value) {
JZSDK_LOG_DEBUG("生产了数据%d", output->node->len);
// 写入环形缓冲区
T_JZsdkReturnCode ret;
U32_t written = 0;
while (written < static_cast<U32_t>(output->node->len)) {
U32_t chunkSize = std::min(static_cast<U32_t>(output->node->len) - written,
static_cast<U32_t>(4096));
ret = JZring_Write(g_ringHandle,
reinterpret_cast<U8_t*>(output->node->value) + written,
chunkSize);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
JZSDK_LOG_ERROR("写入环形缓冲区失败: %d", ret);
break;
}
written += chunkSize;
}
// 通知播放线程有新数据
g_cv.notify_one();
}
}
void OnEvent(AIKIT_HANDLE* handle, AIKIT_EVENT eventType, const AIKIT_OutputEvent* eventValue) {
if (eventType == AIKIT_Event_End) {
ttsFinished = true;
JZSDK_LOG_INFO("合成完成");
// 通知播放线程所有数据已生成
g_cv.notify_one();
}
}
void OnError(AIKIT_HANDLE* handle, int32_t err, const char* desc) {
printf("OnError:%d\n", err);
//报错
JZSDK_LOG_ERROR("TTS错误: %d, %s", err, desc);
IflytekLib_2_StopTts();
}
int IflytekLib_2_TextToTts(int language,
const char *TtsRole,
const char *text, int speed, int volume)
const char *TtsRole,
const char *text, int speed, int volume)
{
if (iflytts_fp != NULL)
{
JZSDK_LOG_ERROR("file %s is not closed\n", IFLYTTS_FP_NAME);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
AIKIT_ParamBuilder* paramBuilder = nullptr;
AIKIT_DataBuilder* dataBuilder = nullptr;
AiText* aiText_raw = nullptr;
int ret = 0;
// 重置完成标志
ttsFinished = false;
// 重置环形缓冲区
JZring_Reset(g_ringHandle);
paramBuilder = AIKIT_ParamBuilder::create();
paramBuilder->clear();
// 设置发音人
... ... @@ -108,102 +171,69 @@ int IflytekLib_2_TextToTts(int language,
paramBuilder->param("language", language);
// 设置文本编码
paramBuilder->param("textEncoding", "UTF-8", strlen("UTF-8"));
// 音量
paramBuilder->param("volume", volume);
// 语速
paramBuilder->param("speed", speed);
//语速
//paramBuilder->param("speed",speed); //可选参数,默认为0
JZSDK_LOG_DEBUG("TTS Role:%s, Text:%s, language:%d", TtsRole, text, language);
//音调
//paramBuilder->param("pitch",100); //可选参数,默认为0
//声音
//paramBuilder->param("volume",100);//可选参数,默认为0
//打开临存文件
iflytts_fp = fopen(IFLYTTS_FP_NAME, "w+b");
if (iflytts_fp == NULL)
{
JZSDK_LOG_ERROR("open file %s failed\n", IFLYTTS_FP_NAME);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//JZSDK_LOG_DEBUG("TTS Role:%s Len:%d, Text:%s Len:%d, language:%d", TtsRole, strlen(TtsRole), text, strlen(text), language);
int ret = AIKIT_Start(ABILITY, AIKIT_Builder::build(paramBuilder), nullptr, &g_AikitHandle);
ret = AIKIT_Start(ABILITY, AIKIT_Builder::build(paramBuilder), nullptr, &g_AikitHandle);
if(ret != 0) {
printf("AIKIT_Start failed: %d\n", ret);
JZSDK_LOG_ERROR("AIKIT_Start failed: %d", ret);
goto exit;
}
dataBuilder = AIKIT_DataBuilder::create();
dataBuilder->clear();
//aiText_raw = AiText::get("text")->data(text.c_str(), text.length())->once()->valid();
aiText_raw = AiText::get("text")->data(text, strlen(text) )->once()->valid();
aiText_raw = AiText::get("text")->data(text, strlen(text))->once()->valid();
dataBuilder->payload(aiText_raw);
ret = AIKIT_Write(g_AikitHandle, AIKIT_Builder::build(dataBuilder));
if(ret != 0) {
printf("AIKIT_Write failed: %d\n", ret);
JZSDK_LOG_ERROR("AIKIT_Write failed: %d", ret);
goto exit;
}
// 等待合成完成
while(!ttsFinished) {
usleep(1000);
}
JZSDK_LOG_DEBUG("合成完成,开始播放");
//将fp指针移到文件开头
fseek(iflytts_fp, 0, SEEK_SET);
//将数据导入播放器
unsigned char buffer[1024];
int len;
while (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) != JZ_FLAGCODE_OFF)
{
len = fread(buffer, sizeof(char), 1024, iflytts_fp);
if (len <= 0)
{
JZSDK_LOG_DEBUG("已读取完毕\n");
// 等待合成完成或停止信号
while(!ttsFinished || g_AudioPlayFinshFlag == JZ_FLAGCODE_ON) {
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
break;
}
AudioDeal_PcmDataInput_TextSteam(16000, buffer, len);
usleep(10000); // 10ms
}
JZSDK_LOG_INFO("播放完成");
JZSDK_LOG_INFO("合成结束");
// 结束合成
ret = AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
exit:
exit:
if(paramBuilder != nullptr) {
delete paramBuilder;
}
if(dataBuilder != nullptr) {
delete dataBuilder;
}
if (iflytts_fp != NULL)
{
fclose(iflytts_fp);
iflytts_fp = NULL;
}
return 0;
return ret;
}
int IflytekLib_2_Init()
{
// 初始化环形缓冲区
g_ringBuf = new char[IFLYTEK_RING_BUF_SIZE];
if (JZring_Init(&g_ringHandle, reinterpret_cast<U8_t*>(g_ringBuf), IFLYTEK_RING_BUF_SIZE)
!= JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
JZSDK_LOG_ERROR("环形缓冲区初始化失败");
return -1;
}
// 启动播放线程
std::thread(PlaybackThreadFunc).detach();
// 初始化TTS SDK
AIKIT_Configurator::builder()
.app()
.appID("03857dfd")
... ... @@ -218,7 +248,7 @@ int IflytekLib_2_Init()
int ret = AIKIT_Init();
if(ret != 0) {
printf("AIKIT_Init failed: %d\n", ret);
JZSDK_LOG_ERROR("AIKIT_Init failed: %d", ret);
return -1;
}
... ... @@ -230,18 +260,49 @@ int IflytekLib_2_Init()
int IflytekLib_2_UnInit()
{
// 停止播放线程
g_playThreadRunning = false;
g_cv.notify_one();
// 等待播放线程退出
int waitCount = 0;
while (g_playThreadRunning && waitCount++ < 50) {
usleep(100000); // 100ms
}
// 反初始化TTS SDK
if (g_AikitHandle) {
AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
}
AIKIT_UnInit();
// 释放环形缓冲区
if (g_ringHandle) {
JZring_DeInit(g_ringHandle);
g_ringHandle = nullptr;
}
if (g_ringBuf) {
delete[] g_ringBuf;
g_ringBuf = nullptr;
}
return 0;
}
static int IflytekLib_2_StopTts()
{
AIKIT_OutputEvent eventData = {};
if (g_AikitHandle != nullptr)
{
OnEvent(g_AikitHandle,AIKIT_Event_End,&eventData);
if (g_AikitHandle) {
AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
ttsFinished = true;
JZSDK_LOG_INFO("TTS合成已停止");
}
// 通知播放线程
g_cv.notify_one();
return 0;
}
... ...
#include <fstream>
#include <assert.h>
#include <cstring>
#include <atomic>
#include <unistd.h>
#include <string>
#include "JZsdkLib.h"
#include "version_choose.h"
#include "JZsdk_base/JZring/JZring.h"
#ifdef IFLAY_TTS_2_CONFIG_STATUS_ON
#include "aikit_biz_api.h"
#include "aikit_constant.h"
#include "aikit_biz_config.h"
#include "iflytek_tts.h"
#include "AudioDeal/AudioDeal.h"
#include "../../Megaphone.h"
#include "iflytek_tts.h"
using namespace std;
using namespace AIKIT;
static std::atomic_bool ttsFinished(false);
static const char *ABILITY = "e2e44feff";
static AIKIT_HANDLE *g_AikitHandle = nullptr; //合成句柄
static int IflytekLib_2_StopTts();
#define IFLYTEK_RING_BUF_SIZE 1024*100
static T_JZringHandle g_ringHandle;
static char *g_ringBuf = NULL;
void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output)
{
T_JZsdkReturnCode ret;
//检测数据生成标志位是否有关闭,如果有关闭,则主动关闭合成,并退出该事件
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF)
{
IflytekLib_2_StopTts();
return;
}
//如果存在数据,则播放
if (output->node->value)
{
//生产的文本数据 output->node->value
//生产的数据长度 output->node->len
//char类型
//JZSDK_LOG_DEBUG("生产了数据%d", output->node->len);
printf("生产了数据%d\n", output->node->len);
//将该数据发送到alsa播放器
//AudioDeal_PcmDataInput_TextSteam(16000, (unsigned char *)output->node->value, output->node->len);
while (1)
{
ret = JZring_Write(g_ringHandle, (U8_t *)output->node->value, (U32_t)output->node->len);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
break;
}
}
}
}
void OnEvent(AIKIT_HANDLE* handle, AIKIT_EVENT eventType, const AIKIT_OutputEvent* eventValue) {
if (eventType == AIKIT_Event_End) {
ttsFinished = true;
JZSDK_LOG_INFO("合成完成");
}
}
void OnError(AIKIT_HANDLE* handle, int32_t err, const char* desc) {
printf("OnError:%d\n", err);
//报错
}
int IflytekLib_2_TextToTts(int language,
const char *TtsRole,
const char *text, int speed, int volume)
{
AIKIT_ParamBuilder* paramBuilder = nullptr;
AIKIT_DataBuilder* dataBuilder = nullptr;
AiText* aiText_raw = nullptr;
// 重置完成标志
ttsFinished = false;
paramBuilder = AIKIT_ParamBuilder::create();
paramBuilder->clear();
// 设置发音人
paramBuilder->param("vcn", TtsRole, strlen(TtsRole));
paramBuilder->param("vcnModel", TtsRole, strlen(TtsRole));
// 设置语种
paramBuilder->param("language", language);
// 设置文本编码
paramBuilder->param("textEncoding", "UTF-8", strlen("UTF-8"));
//语速
//paramBuilder->param("speed",speed); //可选参数,默认为0
//音调
//paramBuilder->param("pitch",100); //可选参数,默认为0
//声音
//paramBuilder->param("volume",100);//可选参数,默认为0
//JZSDK_LOG_DEBUG("TTS Role:%s Len:%d, Text:%s Len:%d, language:%d", TtsRole, strlen(TtsRole), text, strlen(text), language);
int ret = AIKIT_Start(ABILITY, AIKIT_Builder::build(paramBuilder), nullptr, &g_AikitHandle);
if(ret != 0) {
printf("AIKIT_Start failed: %d\n", ret);
goto exit;
}
dataBuilder = AIKIT_DataBuilder::create();
dataBuilder->clear();
//aiText_raw = AiText::get("text")->data(text.c_str(), text.length())->once()->valid();
aiText_raw = AiText::get("text")->data(text, strlen(text) )->once()->valid();
dataBuilder->payload(aiText_raw);
ret = AIKIT_Write(g_AikitHandle, AIKIT_Builder::build(dataBuilder));
if(ret != 0) {
printf("AIKIT_Write failed: %d\n", ret);
goto exit;
}
// 等待合成完成
while(!ttsFinished) {
usleep(1000);
}
//JZSDK_LOG_INFO("合成完成");
ret = AIKIT_End(g_AikitHandle);
exit:
if(paramBuilder != nullptr) {
delete paramBuilder;
}
if(dataBuilder != nullptr) {
delete dataBuilder;
}
}
int IflytekLib_2_Init()
{
//初始化环形缓冲区数组
g_ringBuf = (char *)malloc(IFLYTEK_RING_BUF_SIZE * sizeof(char));
JZring_Init(&g_ringHandle, g_ringBuf, IFLYTEK_RING_BUF_SIZE);
AIKIT_Configurator::builder()
.app()
.appID("03857dfd")
.apiSecret("OTA2OTEzMTVlOGYwMjllMmJkYzEwZGY5")
.apiKey("2b2c60f8a80b8cdfe45ae1058a25149a")
.workDir("/root/Iflytek_2")
.auth()
.authType(0)
.log()
.logLevel(LOG_LVL_OFF) //关闭日志打印
.logMode(LOG_STDOUT); //日志输出为控制台
int ret = AIKIT_Init();
if(ret != 0) {
printf("AIKIT_Init failed: %d\n", ret);
return -1;
}
AIKIT_Callbacks cbs = {OnOutput, OnEvent, OnError};
AIKIT_RegisterAbilityCallback(ABILITY, cbs);
return 0;
}
int IflytekLib_2_UnInit()
{
AIKIT_UnInit();
return 0;
}
static int IflytekLib_2_StopTts()
{
AIKIT_OutputEvent eventData = {};
if (g_AikitHandle != nullptr)
{
OnEvent(g_AikitHandle,AIKIT_Event_End,&eventData);
}
return 0;
}
#endif
\ No newline at end of file
#include <fstream>
#include <assert.h>
#include <cstring>
#include <atomic>
#include <unistd.h>
#include <string>
#include <thread>
#include <mutex>
#include <condition_variable>
#include "JZsdkLib.h"
#include "version_choose.h"
#include "JZsdk_base/JZring/JZring.h"
#if 0
#include "aikit_biz_api.h"
#include "aikit_constant.h"
#include "aikit_biz_config.h"
#include "iflytek_tts.h"
#include "AudioDeal/AudioDeal.h"
#include "../../Megaphone.h"
#include "iflytek_tts.h"
using namespace std;
using namespace AIKIT;
static std::atomic_bool ttsFinished(false);
static std::atomic_bool g_playThreadRunning(false);
static const char *ABILITY = "e2e44feff";
static AIKIT_HANDLE *g_AikitHandle = nullptr; // 合成句柄
static int IflytekLib_2_StopTts();
#define IFLYTEK_RING_BUF_SIZE (1024 * 100) // 100KB缓冲区
static T_JZringHandle g_ringHandle = nullptr;
static char *g_ringBuf = nullptr;
// 同步机制
static std::mutex g_mutex;
static std::condition_variable g_cv;
// 播放线程函数
void PlaybackThreadFunc()
{
U8_t buffer[2048]; // 每次读取2KB
U32_t readSize = 0;
T_JZsdkReturnCode ret;
g_playThreadRunning = true;
while (g_playThreadRunning)
{
// 等待有数据可读
{
std::unique_lock<std::mutex> lock(g_mutex);
U32_t dataCount = 0;
JZring_GetDataCount(g_ringHandle, &dataCount);
if (dataCount == 0) {
// 等待最多100ms或通知
g_cv.wait_for(lock, std::chrono::milliseconds(100));
continue;
}
}
JZSDK_LOG_DEBUG("有数据可读");
// 从环形缓冲区读取数据
ret = JZring_Read(g_ringHandle, buffer, sizeof(buffer), &readSize);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS || readSize == 0) {
usleep(10000); // 10ms
continue;
}
// 发送到音频播放器
AudioDeal_PcmDataInput_TextSteam(16000, buffer, readSize);
// 检查是否需要停止播放
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
break;
}
}
g_playThreadRunning = false;
}
void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output)
{
// 检测数据生成标志位是否有关闭
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
IflytekLib_2_StopTts();
return;
}
if (output->node->value) {
JZSDK_LOG_DEBUG("生产了数据%d", output->node->len);
// 写入环形缓冲区
T_JZsdkReturnCode ret;
U32_t written = 0;
while (written < static_cast<U32_t>(output->node->len)) {
U32_t chunkSize = std::min(static_cast<U32_t>(output->node->len) - written,
static_cast<U32_t>(4096));
ret = JZring_Write(g_ringHandle,
reinterpret_cast<U8_t*>(output->node->value) + written,
chunkSize);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
JZSDK_LOG_ERROR("写入环形缓冲区失败: %d", ret);
break;
}
written += chunkSize;
}
// 通知播放线程有新数据
g_cv.notify_one();
}
}
void OnEvent(AIKIT_HANDLE* handle, AIKIT_EVENT eventType, const AIKIT_OutputEvent* eventValue) {
if (eventType == AIKIT_Event_End) {
ttsFinished = true;
JZSDK_LOG_INFO("合成完成");
// 通知播放线程所有数据已生成
g_cv.notify_one();
}
}
void OnError(AIKIT_HANDLE* handle, int32_t err, const char* desc) {
JZSDK_LOG_ERROR("TTS错误: %d, %s", err, desc);
IflytekLib_2_StopTts();
}
int IflytekLib_2_TextToTts(int language,
const char *TtsRole,
const char *text, int speed, int volume)
{
AIKIT_ParamBuilder* paramBuilder = nullptr;
AIKIT_DataBuilder* dataBuilder = nullptr;
AiText* aiText_raw = nullptr;
int ret = 0;
// 重置完成标志
ttsFinished = false;
// 重置环形缓冲区
JZring_Reset(g_ringHandle);
paramBuilder = AIKIT_ParamBuilder::create();
paramBuilder->clear();
// 设置发音人
paramBuilder->param("vcn", TtsRole, strlen(TtsRole));
paramBuilder->param("vcnModel", TtsRole, strlen(TtsRole));
// 设置语种
paramBuilder->param("language", language);
// 设置文本编码
paramBuilder->param("textEncoding", "UTF-8", strlen("UTF-8"));
// 音量
paramBuilder->param("volume", volume);
// 语速
paramBuilder->param("speed", speed);
JZSDK_LOG_DEBUG("TTS Role:%s, Text:%s, language:%d", TtsRole, text, language);
ret = AIKIT_Start(ABILITY, AIKIT_Builder::build(paramBuilder), nullptr, &g_AikitHandle);
if(ret != 0) {
JZSDK_LOG_ERROR("AIKIT_Start failed: %d", ret);
goto exit;
}
dataBuilder = AIKIT_DataBuilder::create();
dataBuilder->clear();
aiText_raw = AiText::get("text")->data(text, strlen(text))->once()->valid();
dataBuilder->payload(aiText_raw);
ret = AIKIT_Write(g_AikitHandle, AIKIT_Builder::build(dataBuilder));
if(ret != 0) {
JZSDK_LOG_ERROR("AIKIT_Write failed: %d", ret);
goto exit;
}
// 等待合成完成或停止信号
while(!ttsFinished) {
if (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_OFF) {
break;
}
usleep(10000); // 10ms
}
// 结束合成
ret = AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
exit:
if(paramBuilder != nullptr) {
delete paramBuilder;
}
if(dataBuilder != nullptr) {
delete dataBuilder;
}
return ret;
}
int IflytekLib_2_Init()
{
// 初始化环形缓冲区
g_ringBuf = new char[IFLYTEK_RING_BUF_SIZE];
if (JZring_Init(&g_ringHandle, reinterpret_cast<U8_t*>(g_ringBuf), IFLYTEK_RING_BUF_SIZE)
!= JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
JZSDK_LOG_ERROR("环形缓冲区初始化失败");
return -1;
}
// 启动播放线程
std::thread(PlaybackThreadFunc).detach();
// 初始化TTS SDK
AIKIT_Configurator::builder()
.app()
.appID("03857dfd")
.apiSecret("OTA2OTEzMTVlOGYwMjllMmJkYzEwZGY5")
.apiKey("2b2c60f8a80b8cdfe45ae1058a25149a")
.workDir("/root/Iflytek_2")
.auth()
.authType(0)
.log()
.logLevel(LOG_LVL_OFF) //关闭日志打印
.logMode(LOG_STDOUT); //日志输出为控制台
int ret = AIKIT_Init();
if(ret != 0) {
JZSDK_LOG_ERROR("AIKIT_Init failed: %d", ret);
return -1;
}
AIKIT_Callbacks cbs = {OnOutput, OnEvent, OnError};
AIKIT_RegisterAbilityCallback(ABILITY, cbs);
return 0;
}
int IflytekLib_2_UnInit()
{
// 停止播放线程
g_playThreadRunning = false;
g_cv.notify_one();
// 等待播放线程退出
int waitCount = 0;
while (g_playThreadRunning && waitCount++ < 50) {
usleep(100000); // 100ms
}
// 反初始化TTS SDK
if (g_AikitHandle) {
AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
}
AIKIT_UnInit();
// 释放环形缓冲区
if (g_ringHandle) {
JZring_DeInit(g_ringHandle);
g_ringHandle = nullptr;
}
if (g_ringBuf) {
delete[] g_ringBuf;
g_ringBuf = nullptr;
}
return 0;
}
static int IflytekLib_2_StopTts()
{
if (g_AikitHandle) {
AIKIT_End(g_AikitHandle);
g_AikitHandle = nullptr;
ttsFinished = true;
JZSDK_LOG_INFO("TTS合成已停止");
}
// 通知播放线程
g_cv.notify_one();
return 0;
}
#endif
\ No newline at end of file
... ...
... ... @@ -8,7 +8,7 @@
#define MAX(a,b) ( (a>b) ?a:b )
static int g_SearchLight_Subscription_Flag = JZ_FLAGCODE_ON; //消息订阅状态
static int g_SearchLight_Subscription_Flag = JZ_FLAGCODE_OFF; //消息订阅状态 默认关闭本机的
typedef struct T_JzSearchLightInfo{
... ... @@ -191,7 +191,7 @@ T_JZsdkReturnCode SearchLight_Obtain_Frequency(int Frequency)
//收到探照灯温度
T_JZsdkReturnCode SearchLight_Obtain_Temperature(int left, int right)
{
JZSDK_LOG_DEBUG("%x收到探照灯温度回复%d %d",DEVICE_VERSION, left, right);
//JZSDK_LOG_DEBUG("%x收到探照灯温度回复%d %d",DEVICE_VERSION, left, right);
g_SearchLight_Info.Attribute.LeftTemperature = left;
g_SearchLight_Info.Attribute.RightTemperature = right;
... ...
... ... @@ -11,175 +11,160 @@
static T_JZsdkReturnCode SideLaser_RealCotrol(int LaserNum, int status);
static T_SideLaserMode g_SideLaser_RealMode = SIDE_LASER_OFF; //实际控制灯光的值
static int g_SideLaserMode = 0; //realmode -1
static int g_SideLaserControl = JZ_FLAGCODE_OFF;
static int SideLaser_Frequency = 50; //1~100
static T_JZsdkSideLaserInfo g_SideLaserInfo;
static void *SideLaserControl_task(void *arg)
{
int status = JZ_FLAGCODE_OFF;
static T_SideLaserMode Last_LaserMode = SIDE_LASER_OFF;
T_JZsdkSideLaserInfo LastSideLaserInfo = g_SideLaserInfo;
int tempStatus = LastSideLaserInfo.status;
#if DEVICE_VERSION == JZ_U3S
while (1)
{
switch (g_SideLaser_RealMode)
if (g_SideLaserInfo.status == JZ_FLAGCODE_OFF)
{
case SIDE_LASER_OFF:
if (LastSideLaserInfo.status != JZ_FLAGCODE_OFF)
{
if (Last_LaserMode == g_SideLaser_RealMode)
{
delayMs(10);
continue;
}
else
{
Last_LaserMode = g_SideLaser_RealMode;
SideLaser_RealCotrol(255, JZ_FLAGCODE_OFF);
continue;
}
break;
SideLaser_RealCotrol(255, JZ_FLAGCODE_OFF);
}
LastSideLaserInfo.status = g_SideLaserInfo.status;
delayMs(10);
continue;
}
switch(g_SideLaserInfo.mode)
{
case SIDE_LASER_GREEN_AWALYS_ON:
{
if (Last_LaserMode == g_SideLaser_RealMode)
{
delayMs(10);
continue;
}
else
if (LastSideLaserInfo.mode != g_SideLaserInfo.mode)
{
Last_LaserMode = g_SideLaser_RealMode;
SideLaser_RealCotrol(255, JZ_FLAGCODE_OFF);
SideLaser_RealCotrol(0, JZ_FLAGCODE_ON);
continue;
}
break;
LastSideLaserInfo.mode = g_SideLaserInfo.mode;
delayMs(10);
continue;
}
break;
case SIDE_LASER_RED_AWALYS_ON:
{
if (Last_LaserMode == g_SideLaser_RealMode)
if (LastSideLaserInfo.mode != g_SideLaserInfo.mode)
{
delayMs(10);
continue;
}
else
{
Last_LaserMode = g_SideLaser_RealMode;
SideLaser_RealCotrol(255, JZ_FLAGCODE_OFF);
SideLaser_RealCotrol(1, JZ_FLAGCODE_ON);
continue;
}
break;
LastSideLaserInfo.mode = g_SideLaserInfo.mode;
delayMs(10);
continue;
}
break;
case SIDE_LASER_GREEN_AND_RED_AWALYS_ON:
{
if (Last_LaserMode == g_SideLaser_RealMode)
{
delayMs(10);
continue;
}
else
if (LastSideLaserInfo.mode != g_SideLaserInfo.mode)
{
Last_LaserMode = g_SideLaser_RealMode;
SideLaser_RealCotrol(255, JZ_FLAGCODE_ON);
continue;
SideLaser_RealCotrol(255, JZ_FLAGCODE_OFF);
}
break;
LastSideLaserInfo.mode = g_SideLaserInfo.mode;
delayMs(10);
continue;
}
break;
case SIDE_LASER_GREEN_ADD_RED_TOGETHER_FLICKER:
{
if (Last_LaserMode != g_SideLaser_RealMode)
{
Last_LaserMode = g_SideLaser_RealMode;
}
LastSideLaserInfo.mode = g_SideLaserInfo.mode;
if (status == JZ_FLAGCODE_OFF)
if (tempStatus == JZ_FLAGCODE_OFF)
{
status = JZ_FLAGCODE_ON;
tempStatus = JZ_FLAGCODE_ON;
}
else
{
status = JZ_FLAGCODE_OFF;
tempStatus = JZ_FLAGCODE_OFF;
}
SideLaser_RealCotrol(255, status);
delayMs(1000/SideLaser_Frequency);
SideLaser_RealCotrol(255, tempStatus);
delayMs(1000/g_SideLaserInfo.Frequency);
continue;
}
break;
case SIDE_LASER_GREEN_ADD_RED_ALTERNATION_FLICKER:
{
if (Last_LaserMode != g_SideLaser_RealMode)
{
Last_LaserMode = g_SideLaser_RealMode;
}
LastSideLaserInfo.mode = g_SideLaserInfo.mode;
if (status == JZ_FLAGCODE_OFF)
if (tempStatus == JZ_FLAGCODE_OFF)
{
status = JZ_FLAGCODE_ON;
tempStatus = JZ_FLAGCODE_ON;
SideLaser_RealCotrol(0,JZ_FLAGCODE_ON);
SideLaser_RealCotrol(1,JZ_FLAGCODE_OFF);
}
else
{
status = JZ_FLAGCODE_OFF;
tempStatus = JZ_FLAGCODE_OFF;
SideLaser_RealCotrol(0,JZ_FLAGCODE_OFF);
SideLaser_RealCotrol(1,JZ_FLAGCODE_ON);
}
delayMs(1000/SideLaser_Frequency);
delayMs(1000/g_SideLaserInfo.Frequency);
continue;
}
break;
default:
{
SideLaser_RealCotrol(255, JZ_FLAGCODE_OFF);
delayMs(10);
continue;
}
default:
break;
break;
}
delayMs(10);
}
#endif
#if DEVICE_VERSION == JZ_T40
while(1)
while (1)
{
if (Last_LaserMode != g_SideLaser_RealMode)
if (g_SideLaserInfo.status == JZ_FLAGCODE_OFF)
{
Last_LaserMode = g_SideLaser_RealMode;
if (g_SideLaser_RealMode == SIDE_LASER_OFF)
if (LastSideLaserInfo.status != JZ_FLAGCODE_OFF)
{
HalSend_type1Send_SetLaserControl(UART_DEV_2, 0x20 ,JZ_FLAGCODE_OFF);
}
else
LastSideLaserInfo.status = g_SideLaserInfo.status;
delayMs(10);
continue;
}
if (g_SideLaserInfo.status == JZ_FLAGCODE_ON)
{
if (LastSideLaserInfo.status != JZ_FLAGCODE_ON)
{
int mode = g_SideLaser_RealMode - 1;
HalSend_type1Send_SetLaserControl(UART_DEV_2, 0x20 ,JZ_FLAGCODE_ON);
HalSend_type1Send_SetLaserMode(UART_DEV_2, 0x20, mode);
}
LastSideLaserInfo.status = g_SideLaserInfo.status;
}
if (g_SideLaserInfo.mode != LastSideLaserInfo.mode)
{
LastSideLaserInfo.mode = g_SideLaserInfo.mode;
HalSend_type1Send_SetLaserMode(UART_DEV_2, 0x20, LastSideLaserInfo.mode);
}
delayMs(10);
}
#endif
... ... @@ -193,6 +178,11 @@ static void *SideLaserControl_task(void *arg)
* *******************************/
T_JZsdkReturnCode SideLaser_Init()
{
g_SideLaserInfo.status = JZ_FLAGCODE_OFF;
g_SideLaserInfo.mode = SIDE_LASER_GREEN_AWALYS_ON;
g_SideLaserInfo.Frequency = 50;
pthread_t Task;
pthread_attr_t task_attribute; //线程属性
pthread_attr_init(&task_attribute); //初始化线程属性
... ... @@ -256,19 +246,19 @@ T_JZsdkReturnCode SideLaser_param(int flagcode, enum SideLaserParam paramflag, i
{
case SIDELASER_REALMODE:
{
*value = g_SideLaser_RealMode;
*value = g_SideLaserInfo.Uimode;
}
break;
case SIDELASER_CONTROL:
{
*value = g_SideLaserControl;
*value = g_SideLaserInfo.status;
}
break;
case SIDELASER_MODE:
{
*value = g_SideLaserMode;
*value = g_SideLaserInfo.mode;
}
default:
... ... @@ -286,35 +276,49 @@ T_JZsdkReturnCode SideLaser_param(int flagcode, enum SideLaserParam paramflag, i
{
case SIDELASER_CONTROL:
{
g_SideLaserControl = *value;
JZSDK_LOG_INFO("设置激光控制值:%d",g_SideLaserControl);
//从灯光的模式和控制计算得到实际控制值
if (g_SideLaserControl == JZ_FLAGCODE_OFF)
JZSDK_LOG_INFO("设置激光控制值:%d",*value);
g_SideLaserInfo.status = *value;
if (*value == JZ_FLAGCODE_OFF)
{
g_SideLaser_RealMode = SIDE_LASER_OFF;
g_SideLaserInfo.Uimode = JZ_FLAGCODE_OFF;
}
else
{
g_SideLaser_RealMode = g_SideLaserMode+1;
g_SideLaserInfo.Uimode = g_SideLaserInfo.mode + 1;
}
}
break;
case SIDELASER_MODE:
{
g_SideLaserMode = *value;
JZSDK_LOG_INFO("设置激光模式值:%d",g_SideLaserMode);
if (g_SideLaserControl == JZ_FLAGCODE_OFF)
JZSDK_LOG_INFO("设置激光模式值:%d",*value);
g_SideLaserInfo.mode = *value;
if (g_SideLaserInfo.status == JZ_FLAGCODE_OFF)
{
g_SideLaser_RealMode = SIDE_LASER_OFF;
g_SideLaserInfo.Uimode = JZ_FLAGCODE_OFF;
}
else
{
g_SideLaser_RealMode = g_SideLaserMode+1;
g_SideLaserInfo.Uimode = g_SideLaserInfo.mode + 1;
}
}
break;
case SIDELASER_REALMODE:
{
if (*value == JZ_FLAGCODE_OFF)
{
g_SideLaserInfo.status = JZ_FLAGCODE_OFF;
g_SideLaserInfo.Uimode = JZ_FLAGCODE_OFF;
}
else
{
g_SideLaserInfo.status = JZ_FLAGCODE_ON;
g_SideLaserInfo.Uimode = JZ_FLAGCODE_ON;
g_SideLaserInfo.mode = *value - 1;
}
}
default:
{
*value = JZ_FLAGCODE_OFF;
... ... @@ -327,4 +331,19 @@ T_JZsdkReturnCode SideLaser_param(int flagcode, enum SideLaserParam paramflag, i
JZSDK_LOG_ERROR("参数获取出错");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
/************************
*
* 获取激光侧面信息
*
*
* ***********************/
T_JZsdkReturnCode SideLaser_getInfo(T_JZsdkSideLaserInfo *SideLaserInfo)
{
SideLaserInfo->status = g_SideLaserInfo.status;
SideLaserInfo->mode = g_SideLaserInfo.mode;
SideLaserInfo->Frequency = g_SideLaserInfo.Frequency;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
... ... @@ -25,15 +25,14 @@ extern "C" {
* 激光模式结构体
*
* **********/
typedef enum T_SideLaserMode
typedef enum E_SideLaserMode
{
SIDE_LASER_OFF = 0x0000, //关闭
SIDE_LASER_GREEN_AWALYS_ON = 0x0001, //绿色常亮
SIDE_LASER_RED_AWALYS_ON = 0x0002, //红色常亮
SIDE_LASER_GREEN_AND_RED_AWALYS_ON = 0x0003, //红绿常亮
SIDE_LASER_GREEN_ADD_RED_TOGETHER_FLICKER = 0x0004, //红绿齐闪
SIDE_LASER_GREEN_ADD_RED_ALTERNATION_FLICKER = 0x0005, //红绿交替闪
}T_SideLaserMode;
SIDE_LASER_GREEN_AWALYS_ON = 0x00, //绿色常亮
SIDE_LASER_RED_AWALYS_ON = 0x01, //红色常亮
SIDE_LASER_GREEN_AND_RED_AWALYS_ON = 0x02, //红绿常亮
SIDE_LASER_GREEN_ADD_RED_TOGETHER_FLICKER = 0x03, //红绿齐闪
SIDE_LASER_GREEN_ADD_RED_ALTERNATION_FLICKER = 0x04, //红绿交替闪
}E_SideLaserMode;
/*********
... ... @@ -48,11 +47,20 @@ typedef enum SideLaserParam
SIDELASER_MODE = 0x000002,
}SideLaserParam;
typedef struct T_JZsdkSideLaserInfo{
int status;
E_SideLaserMode mode;
int Frequency;
int Uimode; //0 关闭 1~5就是 E_SideLaserMode
}T_JZsdkSideLaserInfo;
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode SideLaser_param(int flagcode, enum SideLaserParam paramflag, int *value);
T_JZsdkReturnCode SideLaser_Init();
T_JZsdkReturnCode SideLaser_getInfo(T_JZsdkSideLaserInfo *SideLaserInfo);
#ifdef __cplusplus
}
... ...
#include "Psdk_To_UI.h"
#include "JZsdkLib.h"
#include "UI_control/Psdk_Ui.h"
#include "UI_control/UI_control.h"
#include "version_choose.h"
T_JZsdkReturnCode JZsdk_PsdkToUi_PlayLastSong()
{
//1、将播放上一首歌曲的命令发送到UIcontrol
UIcontrol_LastSong(DEVICE_PSDK);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_PsdkToUi_PlayNextSong()
{
//1、将播放下一首歌曲的命令发送到UIcontrol
UIcontrol_NextSong(DEVICE_PSDK);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_PsdkToUi_SetVolume(int volume)
{
//1、将volume传递到所有的psdk ui (因为psdk有两个音量ui)
JZsdk_UI_value_set(JZSDK_WIDGET_VOLUME, volume);
//2、将音量控制值发送到UIcontrol 用于控制设备
UIcontrol_SetVolume(DEVICE_PSDK, volume, JZ_FLAGCODE_ON);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ... @@ -39,9 +39,9 @@ int Get_UI_Widget_OpusRealTimeMode()
#define AUTO_CONTROL 0x02
//警灯颜色
static int FirstWarningLight = 1;
static int SecondWarningLight = 3;
// //警灯颜色
// static int FirstWarningLight = 1;
// static int SecondWarningLight = 3;
//探照灯模式
static int SearchLightMode = 0;
... ... @@ -321,146 +321,81 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Reply_GimbalPitchAngle(int angle)
//-------------------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------------
// psdk上一曲
T_JZsdkReturnCode JZsdk_Psdk_UI_io_LastSong(int wheather_control)
{
T_JZsdkReturnCode ret;
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 将控件界面的播放开关打开
UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 0);
// 将ttsSpeaker的开关关闭
UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS, 0);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
ret = UIcontrol_LastSong(DEVICE_PSDK);
return ret;
}
}
// psdk下一曲
T_JZsdkReturnCode JZsdk_Psdk_UI_io_NextSong(int wheather_control)
{
T_JZsdkReturnCode ret;
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 将控件界面的播放开关打开
UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 0);
// 将ttsSpeaker的开关关闭
UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS, 0);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
ret = UIcontrol_NextSong(DEVICE_PSDK);
return ret;
}
}
// psdk播放当前歌曲
T_JZsdkReturnCode JZsdk_Psdk_UI_io_PlaySong(int wheather_control)
{
T_JZsdkReturnCode ret;
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
char MusicName[256];
int MusicNameLen;
// 将控件界面的播放开关打开
UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 0);
// // psdk下一曲
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_NextSong(int wheather_control)
// {
// T_JZsdkReturnCode ret;
// // 开启实时喊话时,锁定该功能
// if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
// {
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// // 将控件界面的播放开关打开
// UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 0);
// // 将ttsSpeaker的开关关闭
// UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS, 0);
// // 如果有进行控制,不只是改控件
// if (wheather_control == 1)
// {
// ret = UIcontrol_NextSong(DEVICE_PSDK);
// return ret;
// }
// }
// // psdk播放当前歌曲
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_PlaySong(int wheather_control)
// {
// T_JZsdkReturnCode ret;
// // 开启实时喊话时,锁定该功能
// if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
// {
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// char MusicName[256];
// int MusicNameLen;
// // 将控件界面的播放开关打开
// UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 0);
// 将ttsSpeaker的开关关闭
UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS, 0);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
#ifdef MEGAPHONE_CONFIG_STATUS_ON
// 获取当前播放的歌曲名字
Megaphone_get_play_FileName(MusicName, &MusicNameLen);
// 播放歌曲
ret = UIcontrol_PlayAudioFile(DEVICE_PSDK,MusicName, MusicNameLen);
return ret;
#endif
}
}
// psdk 音频 继续播放/暂停
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(int wheather_control, int value)
{
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, value);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (value == JZ_FLAGCODE_ON)
{
// 将控件界面的播放开关 转化为打开
UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 0);
// 将ttsSpeaker的开关关闭
UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS, 0);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
return UIcontrol_ContinuePlayAudio(DEVICE_PSDK);
}
}
else if (value == JZ_FLAGCODE_OFF)
{
// 将控件界面的播放开关 转化为关闭
UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 1);
// 将ttsSpeaker的开关关闭
UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS, 0);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
return UIcontrol_PausePlayAudio(DEVICE_PSDK);
}
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 关闭喊话器所有音频
T_JZsdkReturnCode JZsdk_Psdk_UI_io_StopPlayAudio()
{
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 1);
UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS,0);
T_JZsdkReturnCode ret;
ret = UIcontrol_StopPlayAudio(DEVICE_PSDK);
return ret;
}
// // 将ttsSpeaker的开关关闭
// UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS, 0);
// // 如果有进行控制,不只是改控件
// if (wheather_control == 1)
// {
// #ifdef MEGAPHONE_CONFIG_STATUS_ON
// // 获取当前播放的歌曲名字
// Megaphone_get_play_FileName(MusicName, &MusicNameLen);
// // 播放歌曲
// ret = UIcontrol_PlayAudioFile(DEVICE_PSDK,MusicName, MusicNameLen);
// return ret;
// #endif
// }
// }
// // 关闭喊话器所有音频
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_StopPlayAudio()
// {
// // 开启实时喊话时,锁定该功能
// if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
// {
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 1);
// UI_control_WidgetSet(PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS,0);
// T_JZsdkReturnCode ret;
// ret = UIcontrol_StopPlayAudio(DEVICE_PSDK);
// return ret;
// }
/*********
... ... @@ -519,283 +454,283 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_SetVolume(int wheather_control, int value)
}
}
//psdk 变量获取tts语速
int JZsdk_Psdk_UI_io_GetTTSSpeed_ByValue(int value)
{
switch (value)
{
case 0:
return 25;
break;
case 1:
return 50;
break;
case 2:
return 75;
break;
case 3:
return 100;
break;
default:
break;
}
}
// psdkTTS语速 0-100 25 50 75 100
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_speed(int wheather_control, int speed)
{
T_JZsdkReturnCode ret;
int value;
if (speed >=0 && speed <=25 )
{
value = 0;
}
else if (speed > 25 && speed <= 50)
{
value = 1;
}
else if (speed > 50 && speed <= 75)
{
value = 2;
}
else if (speed > 75 && speed <= 100)
{
value = 3;
}
// //psdk 变量获取tts语速
// int JZsdk_Psdk_UI_io_GetTTSSpeed_ByValue(int value)
// {
// switch (value)
// {
// case 0:
// return 25;
// break;
// case 1:
// return 50;
// break;
// case 2:
// return 75;
// break;
// case 3:
// return 100;
// break;
// default:
// break;
// }
// }
// // psdkTTS语速 0-100 25 50 75 100
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_speed(int wheather_control, int speed)
// {
// T_JZsdkReturnCode ret;
// int value;
// if (speed >=0 && speed <=25 )
// {
// value = 0;
// }
// else if (speed > 25 && speed <= 50)
// {
// value = 1;
// }
// else if (speed > 50 && speed <= 75)
// {
// value = 2;
// }
// else if (speed > 75 && speed <= 100)
// {
// value = 3;
// }
// 调整控件
UI_control_WidgetSet(PSDK_UI_WIDGET_SPEED, value);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
ret = UIcontrol_Set_TTS_speed(DEVICE_PSDK, speed);
return ret;
}
}
//psdk 变量获取tts音色
int JZsdk_Psdk_UI_io_GetTTSTone_ByValue(int value)
{
E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo();
if (LanguageInfo == LANGUAGE_INFO_CHINESE)
{
switch (value)
{
case 0:
return 0x01;
break;
case 1:
return 0x02;
break;
case 2:
return 0x11;
break;
case 3:
return 0x12;
break;
case 4:
return 0x31;
break;
case 5:
return 0x32;
break;
case 6:
return 0x33;
break;
case 7:
return 0x34;
break;
case 8:
return 0x35;
break;
case 9:
return 0x36;
break;
default:
return 0x01;
break;
}
}
// // 调整控件
// UI_control_WidgetSet(PSDK_UI_WIDGET_SPEED, value);
// // 如果有进行控制,不只是改控件
// if (wheather_control == 1)
// {
// ret = UIcontrol_Set_TTS_speed(DEVICE_PSDK, speed);
// return ret;
// }
// }
// //psdk 变量获取tts音色
// int JZsdk_Psdk_UI_io_GetTTSTone_ByValue(int value)
// {
// E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo();
// if (LanguageInfo == LANGUAGE_INFO_CHINESE)
// {
// switch (value)
// {
// case 0:
// return 0x01;
// break;
// case 1:
// return 0x02;
// break;
// case 2:
// return 0x11;
// break;
// case 3:
// return 0x12;
// break;
// case 4:
// return 0x31;
// break;
// case 5:
// return 0x32;
// break;
// case 6:
// return 0x33;
// break;
// case 7:
// return 0x34;
// break;
// case 8:
// return 0x35;
// break;
// case 9:
// return 0x36;
// break;
// default:
// return 0x01;
// break;
// }
// }
else
{
switch (value)
{
case 0:
return 0x11;
break;
case 1:
return 0x12;
break;
case 2:
return 0x01;
break;
case 3:
return 0x02;
break;
case 4:
return 0x41;
break;
case 5:
return 0x42;
break;
case 6:
return 0x43;
break;
case 7:
return 0x44;
break;
case 8:
return 0x45;
break;
case 9:
return 0x46;
break;
case 10:
return 0x47;
break;
case 11:
return 0x48;
break;
// else
// {
// switch (value)
// {
// case 0:
// return 0x11;
// break;
// case 1:
// return 0x12;
// break;
// case 2:
// return 0x01;
// break;
// case 3:
// return 0x02;
// break;
// case 4:
// return 0x41;
// break;
// case 5:
// return 0x42;
// break;
// case 6:
// return 0x43;
// break;
// case 7:
// return 0x44;
// break;
// case 8:
// return 0x45;
// break;
// case 9:
// return 0x46;
// break;
// case 10:
// return 0x47;
// break;
// case 11:
// return 0x48;
// break;
default:
return 0x11;
break;
}
}
// default:
// return 0x11;
// break;
// }
// }
}
// psdkTTS音色 10个音色
// 要分国内版和海外版
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_tone(int wheather_control, int tone)
{
T_JZsdkReturnCode ret;
int value;
E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo();
if (LanguageInfo == LANGUAGE_INFO_CHINESE)
{
switch (tone)
{
case 0x01:
value = 0;
break;
case 0x02:
value = 1;
break;
case 0x11:
value = 2;
break;
case 0x12:
value = 3;
break;
case 0x31:
value = 4;
break;
case 0x32:
value = 5;
break;
case 0x33:
value = 6;
break;
case 0x34:
value = 7;
break;
case 0x35:
value = 8;
break;
case 0x36:
value = 9;
break;
default:
printf("无效的tts设置\n");
return JZ_ERRORCODE_TTS_INVALID_TONE;
break;
}
}
else {
switch (tone)
{
case 0x01:
value = 2;
break;
case 0x02:
value = 3;
break;
case 0x11:
value = 0;
break;
case 0x12:
value = 1;
break;
case 0x41://俄 russian ru
value = 4;
break;
case 0x42://法 french fr-fr
value = 5;
break;
case 0x43://德 german de
value = 6;
break;
case 0x44://韩 ko
value = 7;
break;
case 0x45://意大利 italian it
value = 8;
break;
case 0x46://波兰 polish pl
value = 9;
break;
case 0x47://西班牙 spanish es
value = 10;
break;
case 0x48://葡萄牙 portugal pt-pt
value = 11;
break;
default:
printf("无效的tts设置\n");
return JZ_ERRORCODE_TTS_INVALID_TONE;
break;
}
}
// 将控件界面的播放开关 转化为关闭
ret = UI_control_WidgetSet(PSDK_UI_WIDGET_TONE, value);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
return UIcontrol_Set_TTS_tone(DEVICE_PSDK,tone);
}
return ret;
}
// }
// // psdkTTS音色 10个音色
// // 要分国内版和海外版
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_tone(int wheather_control, int tone)
// {
// T_JZsdkReturnCode ret;
// int value;
// E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo();
// if (LanguageInfo == LANGUAGE_INFO_CHINESE)
// {
// switch (tone)
// {
// case 0x01:
// value = 0;
// break;
// case 0x02:
// value = 1;
// break;
// case 0x11:
// value = 2;
// break;
// case 0x12:
// value = 3;
// break;
// case 0x31:
// value = 4;
// break;
// case 0x32:
// value = 5;
// break;
// case 0x33:
// value = 6;
// break;
// case 0x34:
// value = 7;
// break;
// case 0x35:
// value = 8;
// break;
// case 0x36:
// value = 9;
// break;
// default:
// printf("无效的tts设置\n");
// return JZ_ERRORCODE_TTS_INVALID_TONE;
// break;
// }
// }
// else {
// switch (tone)
// {
// case 0x01:
// value = 2;
// break;
// case 0x02:
// value = 3;
// break;
// case 0x11:
// value = 0;
// break;
// case 0x12:
// value = 1;
// break;
// case 0x41://俄 russian ru
// value = 4;
// break;
// case 0x42://法 french fr-fr
// value = 5;
// break;
// case 0x43://德 german de
// value = 6;
// break;
// case 0x44://韩 ko
// value = 7;
// break;
// case 0x45://意大利 italian it
// value = 8;
// break;
// case 0x46://波兰 polish pl
// value = 9;
// break;
// case 0x47://西班牙 spanish es
// value = 10;
// break;
// case 0x48://葡萄牙 portugal pt-pt
// value = 11;
// break;
// default:
// printf("无效的tts设置\n");
// return JZ_ERRORCODE_TTS_INVALID_TONE;
// break;
// }
// }
// // 将控件界面的播放开关 转化为关闭
// ret = UI_control_WidgetSet(PSDK_UI_WIDGET_TONE, value);
// // 如果有进行控制,不只是改控件
// if (wheather_control == 1)
// {
// return UIcontrol_Set_TTS_tone(DEVICE_PSDK,tone);
// }
// return ret;
// }
// psdk追加音色 0 1 2
T_JZsdkReturnCode JZsdk_Psdk_UI_io_AppendTone(int wheather_control, int value)
... ... @@ -1063,69 +998,69 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_SearchLightLumen(int wheather_control,int
return ret;
}
//警灯模式 0 关 1交替快闪 2交替满闪 3交替齐闪
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightMode(int wheather_control, int value)
{
T_JZsdkReturnCode ret;
// //警灯模式 0 关 1交替快闪 2交替满闪 3交替齐闪
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightMode(int wheather_control, int value)
// {
// T_JZsdkReturnCode ret;
//控件值 0 关闭 1快闪 2 满闪 3齐闪
int mode = 0;
int Switch = 0;
if (value >= 1)
{
mode = value - 1;
Switch = 1;
}
else
{
Switch = 0;
mode = 0;
}
// //控件值 0 关闭 1快闪 2 满闪 3齐闪
// int mode = 0;
// int Switch = 0;
// if (value >= 1)
// {
// mode = value - 1;
// Switch = 1;
// }
// else
// {
// Switch = 0;
// mode = 0;
// }
ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_MODE, value);
// ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_MODE, value);
if (wheather_control == JZ_FLAGCODE_ON)
{
ret = UIcontrol_Set_WarningLight_ModeControl(DEVICE_PSDK, Switch, mode);
}
// if (wheather_control == JZ_FLAGCODE_ON)
// {
// ret = UIcontrol_Set_WarningLight_ModeControl(DEVICE_PSDK, Switch, mode);
// }
return ret;
}
// return ret;
// }
//警灯颜色1
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(int wheather_control, int value)
{
T_JZsdkReturnCode ret;
// //警灯颜色1
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(int wheather_control, int value)
// {
// T_JZsdkReturnCode ret;
ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_FIRSTCOLOR, (value-1));
// ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_FIRSTCOLOR, (value-1));
FirstWarningLight = value;
// FirstWarningLight = value;
if (wheather_control == JZ_FLAGCODE_ON)
{
ret = UIcontrol_Set_WarningLight_Color(DEVICE_PSDK, FirstWarningLight, SecondWarningLight);
}
// if (wheather_control == JZ_FLAGCODE_ON)
// {
// ret = UIcontrol_Set_WarningLight_Color(DEVICE_PSDK, FirstWarningLight, SecondWarningLight);
// }
return ret;
}
// return ret;
// }
//警灯颜色2
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(int wheather_control, int value)
{
T_JZsdkReturnCode ret;
// //警灯颜色2
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(int wheather_control, int value)
// {
// T_JZsdkReturnCode ret;
ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_SECONDCOLOR, (value-1));
// ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_SECONDCOLOR, (value-1));
SecondWarningLight = value;
// SecondWarningLight = value;
if (wheather_control == JZ_FLAGCODE_ON)
{
ret = UIcontrol_Set_WarningLight_Color(DEVICE_PSDK, FirstWarningLight, SecondWarningLight);
}
// if (wheather_control == JZ_FLAGCODE_ON)
// {
// ret = UIcontrol_Set_WarningLight_Color(DEVICE_PSDK, FirstWarningLight, SecondWarningLight);
// }
return ret;
}
// return ret;
// }
// 设置云台最大值
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_MAXGimbalRangen()
... ... @@ -1639,31 +1574,31 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_IrcMarkLowAndHighTemp(int wheather_ChangeWidg
*
* 侧面激光模式
*
**********/
T_JZsdkReturnCode JZsdk_Psdk_UI_io_SideLaserMode(int wheather_ChangeWidget, int wheather_control, int value)
{
//如果修改控件
if (wheather_ChangeWidget == JZ_FLAGCODE_ON)
{
UI_control_WidgetSet(JZSDK_WIDGET_SIDE_LASER_MODE, value);
}
//如果进行控制
if (wheather_control == JZ_FLAGCODE_ON)
{
if (value == 0)
{
UIcontrol_SideLaser_SetControl(DEVICE_PSDK, JZ_FLAGCODE_OFF);
}
else
{
UIcontrol_SideLaser_SetMode(DEVICE_PSDK, value);
UIcontrol_SideLaser_SetControl(DEVICE_PSDK, JZ_FLAGCODE_ON);
}
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// **********/
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_SideLaserMode(int wheather_ChangeWidget, int wheather_control, int value)
// {
// //如果修改控件
// if (wheather_ChangeWidget == JZ_FLAGCODE_ON)
// {
// UI_control_WidgetSet(JZSDK_WIDGET_SIDE_LASER_MODE, value);
// }
// //如果进行控制
// if (wheather_control == JZ_FLAGCODE_ON)
// {
// if (value == 0)
// {
// UIcontrol_SideLaser_SetControl(DEVICE_PSDK, JZ_FLAGCODE_OFF);
// }
// else
// {
// UIcontrol_SideLaser_SetMode(DEVICE_PSDK, value);
// UIcontrol_SideLaser_SetControl(DEVICE_PSDK, JZ_FLAGCODE_ON);
// }
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
/*******************************************************8****************************************************
*
... ...
... ... @@ -173,7 +173,7 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_AutoBadPixelCorrectMode(int wheather_Chan
T_JZsdkReturnCode JZsdk_Psdk_UI_io_SetPowerStatus(int value);
//侧面激光
T_JZsdkReturnCode JZsdk_Psdk_UI_io_SideLaserMode(int wheather_ChangeWidget, int wheather_control, int value);
T_JZsdkReturnCode JZsdk_Psdk_UI_io_SideLaserMode(int wheather_control, int value);
//获取控件的实时opus模式是否开启
... ...
#include "JZsdkLib.h"
#include "UI_control/Psdk_ui_value_menu.h"
#include "UI_control/UI_control.h"
#include "version_choose.h"
#include "UI_control/Psdk_UI_io.h"
#ifdef WARNLIGHT_STATUS_ON
#include "WarnLight/WarnLight.h"
#endif
#ifdef SIDE_LASER_STATUS_ON
#include "SideLaser/SideLaser.h"
#endif
//警灯颜色
static int FirstWarningLight = 1;
static int SecondWarningLight = 3;
//播放上一首歌曲
T_JZsdkReturnCode JZsdk_Psdk_UI_io_LastSong(int wheather_control)
{
T_JZsdkReturnCode ret =JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//将播放状态给到psdk ui
JZsdk_PsdkUi_value_set(JZSDK_WIDGET_PLAYANDSTOP, JZ_FLAGCODE_ON);
if(wheather_control == JZ_FLAGCODE_ON)
{
//将播放上一首歌曲的命令发送到UIcontrol
ret = UIcontrol_LastSong(DEVICE_PSDK);
}
return ret;
}
//播放下一首歌曲
T_JZsdkReturnCode JZsdk_Psdk_UI_io_NextSong(int wheather_control)
{
T_JZsdkReturnCode ret =JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//将播放状态给到psdk ui
JZsdk_PsdkUi_value_set(JZSDK_WIDGET_PLAYANDSTOP, JZ_FLAGCODE_ON);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
ret = UIcontrol_NextSong(DEVICE_PSDK);
return ret;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//播放暂停
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(int wheather_control, int value)
{
T_JZsdkReturnCode ret =JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZsdk_PsdkUi_value_set(JZSDK_WIDGET_PLAYANDSTOP, value);
if(wheather_control == JZ_FLAGCODE_ON)
{
if (value == JZ_FLAGCODE_ON)
{
ret = UIcontrol_ContinuePlayAudio(DEVICE_PSDK);
}
else
{
ret = UIcontrol_PausePlayAudio(DEVICE_PSDK);
}
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 关闭喊话器所有音频
T_JZsdkReturnCode JZsdk_Psdk_UI_io_StopPlayAudio()
{
// 开启实时喊话时,锁定该功能
if (Get_UI_Widget_OpusRealTimeMode() == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZsdk_PsdkUi_value_set(JZSDK_WIDGET_PLAYANDSTOP, JZ_FLAGCODE_OFF);
T_JZsdkReturnCode ret;
ret = UIcontrol_StopPlayAudio(DEVICE_PSDK);
return ret;
}
// T_JZsdkReturnCode JZsdk_Psdk_UI_io_SetVolume(int wheather_control, int value)
// {
// //后续需要优化掉
// widget_volume = value;
// //控件变化
// JZsdk_PsdkUi_value_set(JZSDK_WIDGET_VOLUME, value);
// //将音量控制值发送到UIcontrol 用于控制设备
// if(wheather_control == JZ_FLAGCODE_ON)
// {
// UIcontrol_SetVolume(DEVICE_PSDK, value, JZ_FLAGCODE_ON);
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_speed(int wheather_control, int speed)
{
//将TTS速度的控件变化给到psdk ui
JZsdk_PsdkUi_value_set(JZSDK_WIDGET_TTS_SPEED, speed);
if (wheather_control == JZ_FLAGCODE_ON)
{
//将TTS速度的命令发送到UIcontrol
UIcontrol_Set_TTS_speed(DEVICE_PSDK, speed);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// psdkTTS音色 10个音色
// 要分国内版和海外版
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_tone(int wheather_control, int tone)
{
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// 将控件界面的播放开关 转化为关闭
JZsdk_PsdkUi_value_set(JZSDK_WIDGET_TTS_TONE, tone);
// 如果有进行控制,不只是改控件
if (wheather_control == 1)
{
ret = UIcontrol_Set_TTS_tone(DEVICE_PSDK,tone);
}
return ret;
}
/*
侧面激光 0 关 1绿常亮 2红常亮 3齐亮 4齐闪 5交替闪
这里传入的value是控件值,要将其转换为开关与模式再转到uicontrol
*/
T_JZsdkReturnCode JZsdk_Psdk_UI_io_SideLaserMode(int wheather_control, int value)
{
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
ret = JZsdk_PsdkUi_value_set(JZSDK_WIDGET_SIDE_LASER_MODE, value);
#ifdef SIDE_LASER_STATUS_ON
if (wheather_control == JZ_FLAGCODE_ON)
{
//获取模式
int mode = 0;
SideLaser_param(JZ_FLAGCODE_GET ,SIDELASER_MODE, &mode);
if (value == 0)
{
UIcontrol_SideLaser_SetControl(DEVICE_PSDK, JZ_FLAGCODE_OFF);
}
else
{
mode = value - 1;
UIcontrol_SideLaser_SetMode(DEVICE_PSDK, mode);
UIcontrol_SideLaser_SetControl(DEVICE_PSDK, JZ_FLAGCODE_ON);
}
}
#endif
return ret;
}
/*
警灯模式 0 关 1交替快闪 2交替满闪 3交替齐闪 4(同时快闪) 5(同时慢闪)
这里传入的value是控件值,要将其转换为开关与模式再转到uicontrol
*/
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightMode(int wheather_control, int value)
{
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
ret = JZsdk_PsdkUi_value_set(JZSDK_WIDGET_WARNLIGHT_MODE, value);
#ifdef WARNLIGHT_STATUS_ON
if (wheather_control == JZ_FLAGCODE_ON)
{
T_JzWarnLightAttribute Attribute;
WarnLight_Get_Attribute(&Attribute);
//将ui值转换为模式值
int Lswitch = 0;
int mode = 0;
if (value == 0)
{
Lswitch = JZ_FLAGCODE_OFF;
//去获取上次的模式
mode = Attribute.mode;
}
else
{
Lswitch = JZ_FLAGCODE_ON;
mode = value - 1;
}
ret = UIcontrol_Set_WarningLight_ModeControl(DEVICE_PSDK, Lswitch, mode);
}
#endif
return ret;
}
//警灯颜色1
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(int wheather_control, int value)
{
T_JZsdkReturnCode ret;
ret = JZsdk_PsdkUi_value_set(JZSDK_WIDGET_WARNLIGHT_COLOR_1, value);
FirstWarningLight = value;
if (wheather_control == JZ_FLAGCODE_ON)
{
ret = UIcontrol_Set_WarningLight_Color(DEVICE_PSDK, FirstWarningLight, SecondWarningLight);
}
return ret;
}
//警灯颜色2
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(int wheather_control, int value)
{
T_JZsdkReturnCode ret;
ret = JZsdk_PsdkUi_value_set(JZSDK_WIDGET_WARNLIGHT_COLOR_2, value);
SecondWarningLight = value;
if (wheather_control == JZ_FLAGCODE_ON)
{
ret = UIcontrol_Set_WarningLight_Color(DEVICE_PSDK, FirstWarningLight, SecondWarningLight);
}
return ret;
}
\ No newline at end of file
... ...
#include "Psdk_Ui.h"
#include "JZsdkLib.h"
#include "ExtensionAPI/JZsdk_ExpansionApi.h"
/****************
*
* 控件设置
*
* *************/
static T_JZsdkReturnCode UI_control_WidgetArraySet(int index, int value)
{
T_JZsdkToPsdkHandler *handle = ExpansionApi_JZsdkToPsdk_GetHandler();
if (handle != NULL && handle->Set_UI_Widget_Value != NULL)
{
//将控件值设置到psdk的ui控件
handle->Set_UI_Widget_Value(index, value);
}
}
/****************
*
* 二级控件设置
*
* *************/
static T_JZsdkReturnCode UI_control_SecondaryWidgetArraySet(int type, int value)
{
T_JZsdkToPsdkHandler *handle = ExpansionApi_JZsdkToPsdk_GetHandler();
if (handle == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
switch (type)
{
case PSDK_UI_SECONDARY_WIDGET_PLAYSTATUS:
if (handle->Set_UI_SpeakerWidget_PlayState != NULL)
{
return handle->Set_UI_SpeakerWidget_PlayState(value);
}
break;
case PSDK_UI_SECONDARY_WIDGET_LOOPPLAY:
if (handle->Set_UI_SpeakerWidget_LoopMode != NULL)
{
return handle->Set_UI_SpeakerWidget_LoopMode(value);
}
break;
case JZSDK_WIDGET_VOLUME://音量
if (handle->Set_UI_SpeakerWidget_Volume != NULL)
{
return handle->Set_UI_SpeakerWidget_Volume(value);
}
break;
default:
break;
}
}
static T_JZsdkReturnCode JZsdk_UI_DJIpsdk_Widget_set(JZsdk_Widget_Control index, int value)
{
switch (index)
{
case JZSDK_WIDGET_VOLUME:
{
//1、大疆音量控件需要去设置喊话器控件内的音量
UI_control_WidgetArraySet(3, value);
UI_control_WidgetArraySet(4, value);
//2、大疆音量控件需要去设置悬浮窗的音量
UI_control_SecondaryWidgetArraySet(JZSDK_WIDGET_VOLUME, value);
}
break;
default:
break;
}
}
T_JZsdkReturnCode JZsdk_UI_value_set(JZsdk_Widget_Control index, int value)
{
JZsdk_UI_DJIpsdk_Widget_set(index, value);
}
\ No newline at end of file
#include "Psdk_ui_value_menu.h"
#include "JZsdkLib.h"
#include "DeviceInfo/DeviceInfo.h"
#include "version_choose.h"
#include "JZsdkLib.h"
#include "ExtensionAPI/JZsdk_ExpansionApi.h"
#ifdef IFLAY_TTS_1_CONFIG_STATUS_ON
static char Ify1_TTS_Value[10] = {0x00, 0x02, 0x11, 0x12, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36};
#endif
#ifdef IFLAY_TTS_2_CONFIG_STATUS_ON
static char Ify2_TTS_Value[10] = {0x01, 0x02, 0x11, 0x12, 0x31, 0x32, 0x33, 0x34, 0x36, 0x37};
#endif
/****************
*
* 控件设置
*
* *************/
static T_JZsdkReturnCode UI_control_WidgetArraySet(int index, int value)
{
T_JZsdkToPsdkHandler *handle = ExpansionApi_JZsdkToPsdk_GetHandler();
if (handle != NULL && handle->Set_UI_Widget_Value != NULL)
{
//将控件值设置到psdk的ui控件
handle->Set_UI_Widget_Value(index, value);
}
}
/****************
*
* 二级控件设置
*
* *************/
static T_JZsdkReturnCode UI_control_SecondaryWidgetArraySet(int type, int value)
{
T_JZsdkToPsdkHandler *handle = ExpansionApi_JZsdkToPsdk_GetHandler();
if (handle == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
switch (type)
{
case JZSDK_WIDGET_PLAYANDSTOP:
if (handle->Set_UI_SpeakerWidget_PlayState != NULL)
{
return handle->Set_UI_SpeakerWidget_PlayState(value);
}
break;
case JZSDK_WIDGET_LOOP_PLAY:
if (handle->Set_UI_SpeakerWidget_LoopMode != NULL)
{
return handle->Set_UI_SpeakerWidget_LoopMode(value);
}
break;
case JZSDK_WIDGET_VOLUME://音量
if (handle->Set_UI_SpeakerWidget_Volume != NULL)
{
return handle->Set_UI_SpeakerWidget_Volume(value);
}
break;
default:
break;
}
}
static T_JZsdkReturnCode JZsdk_UI_DJIpsdk_Widget_set(JZsdk_Widget_Control index, int value)
{
switch (index)
{
case JZSDK_WIDGET_PLAYANDSTOP:
{
//如果是要播放
if (value == JZ_FLAGCODE_ON)
{
// 将控件界面的播放开关打开
UI_control_WidgetArraySet(JZSDK_WIDGET_PLAYANDSTOP, 0);
// 将ttsSpeaker的开关关闭
UI_control_SecondaryWidgetArraySet(JZSDK_WIDGET_PLAYANDSTOP, JZ_FLAGCODE_OFF);
}
else
{
// 将控件界面的播放开关关闭
UI_control_WidgetArraySet(JZSDK_WIDGET_PLAYANDSTOP, 1);
// 将ttsSpeaker的开关关闭
UI_control_SecondaryWidgetArraySet(JZSDK_WIDGET_PLAYANDSTOP, JZ_FLAGCODE_OFF);
}
}
break;
case JZSDK_WIDGET_VOLUME:
{
//1、大疆音量控件需要去设置喊话器控件内的音量
UI_control_WidgetArraySet(3, value);
UI_control_WidgetArraySet(4, value);
//2、大疆音量控件需要去设置悬浮窗的音量
UI_control_SecondaryWidgetArraySet(JZSDK_WIDGET_VOLUME, value);
}
break;
case JZSDK_WIDGET_TTS_SPEED:
{
//将音量转换为控件值
int index = 0;
if (value >=0 && value <=25 )
{
index = 0;
}
else if (value > 25 && value <= 50)
{
index = 1;
}
else if (value > 50 && value <= 75)
{
index = 2;
}
else if (value > 75 && value <= 100)
{
index = 3;
}
UI_control_WidgetArraySet(5, index);
}
break;
case JZSDK_WIDGET_TTS_TONE:
{
//将音色转换为控件值
int index = 0;
#ifdef IFLAY_TTS_1_CONFIG_STATUS_ON //讯飞一代音色转换
T_JZsdkReturnCode ret;
int value;
E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo();
//中文音色控件值转换
if (LanguageInfo == LANGUAGE_INFO_CHINESE)
{
switch (value)
{
case 0x01:
index = 0;
break;
case 0x02:
index = 1;
break;
case 0x11:
index = 2;
break;
case 0x12:
index = 3;
break;
case 0x31:
index = 4;
break;
case 0x32:
index = 5;
break;
case 0x33:
index = 6;
break;
case 0x34:
index = 7;
break;
case 0x35:
index = 8;
break;
case 0x36:
index = 9;
break;
default:
printf("无效的tts设置\n");
return JZ_ERRORCODE_TTS_INVALID_TONE;
break;
}
}
else {
switch (value)
{
case 0x01:
index = 2;
break;
case 0x02:
index = 3;
break;
case 0x11:
index = 0;
break;
case 0x12:
index = 1;
break;
case 0x41://俄 russian ru
index = 4;
break;
case 0x42://法 french fr-fr
index = 5;
break;
case 0x43://德 german de
index = 6;
break;
case 0x44://韩 ko
index = 7;
break;
case 0x45://意大利 italian it
index = 8;
break;
case 0x46://波兰 polish pl
index = 9;
break;
case 0x47://西班牙 spanish es
index = 10;
break;
case 0x48://葡萄牙 portugal pt-pt
index = 11;
break;
default:
printf("无效的tts设置\n");
return JZ_ERRORCODE_TTS_INVALID_TONE;
break;
}
}
#endif // IFLAY_TTS_1_CONFIG_STATUS_ON
#ifdef IFLAY_TTS_2_CONFIG_STATUS_ON //讯飞二代音色转换
index = -1;
int num = sizeof(Ify2_TTS_Value) / sizeof(Ify2_TTS_Value[0]);
//将音色转换为控件值
for (int i = 0; i < num; i++)
{
if (Ify2_TTS_Value[i] == value)
{
index = i;
break;
}
}
if (index < 0)
{
printf("无效的tts设置\n");
return JZ_ERRORCODE_TTS_INVALID_TONE;
break;
}
#endif // IFLAY_TTS_2_CONFIG_STATUS_ON
JZsdk_PsdkUi_value_set(6 , index);
}
break;
case JZSDK_WIDGET_SIDE_LASER_MODE:
{
int index = value;
#if DEVICE_VERSION == JZ_T40
if (value == 0)
{
index = 0;
}
else if (value == 3)
{
index = 1;
}
else if (value == 4)
{
index = 2;
}
else
{
index = 0;
}
#endif
UI_control_WidgetArraySet(15, index);
}
break;
case JZSDK_WIDGET_WARNLIGHT_MODE:
{
int index = value;
#if DEVICE_VERSION == JZ_T40
if (value == 0)
{
index = 0;
}
else if (value == 4)
{
index = 1;
}
else if (value == 5)
{
index = 2;
}
else
{
index = 0;
}
#endif
UI_control_WidgetArraySet(16, index);
}
break;
case JZSDK_WIDGET_WARNLIGHT_COLOR_1:
{
int index = value - 1;
#if DEVICE_VERSION == JZ_T40
if (index == 1)
{
index = 0;
}
else if (index == 3)
{
index = 1;
}
#endif
UI_control_WidgetArraySet(17, index);
}
break;
case JZSDK_WIDGET_WARNLIGHT_COLOR_2:
{
int index = value - 1;
#if DEVICE_VERSION == JZ_T40
if (index == 1)
{
index = 0;
}
else if (index == 3)
{
index = 1;
}
#endif
UI_control_WidgetArraySet(18, index);
}
break;
default:
break;
}
}
//设置控件值
T_JZsdkReturnCode JZsdk_PsdkUi_value_set(JZsdk_Widget_Control index, int value)
{
JZsdk_UI_DJIpsdk_Widget_set(index, value);
}
//控件值转换为变量, 专门用在test wideget
T_JZsdkReturnCode JZsdk_PsdkUi_value_get(JZsdk_Widget_Control index, int *value)
{
switch (index)
{
case JZSDK_WIDGET_TTS_SPEED:
{
int index = 0;
if (*value == 0)
{
index = 25;
}
else if (*value == 1)
{
index = 50;
}
else if (*value == 2)
{
index = 75;
}
else if (*value == 3)
{
index = 100;
}
*value = index;
}
break;
case JZSDK_WIDGET_TTS_TONE:
{
int tone = 0x01;
#ifdef IFLAY_TTS_1_CONFIG_STATUS_ON //讯飞一代音色转换
E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo();
if (LanguageInfo == LANGUAGE_INFO_CHINESE)
{
switch (value)
{
case 0:
tone = 0x01;
break;
case 1:
tone = 0x02;
break;
case 2:
tone = 0x11;
break;
case 3:
tone = 0x12;
break;
case 4:
tone = 0x31;
break;
case 5:
tone = 0x32;
break;
case 6:
tone = 0x33;
break;
case 7:
tone = 0x34;
break;
case 8:
tone = 0x35;
break;
case 9:
tone = 0x36;
break;
default:
tone = 0x01;
break;
}
}
else
{
switch (value)
{
case 0:
tone = 0x11;
break;
case 1:
tone = 0x12;
break;
case 2:
tone = 0x01;
break;
case 3:
tone = 0x02;
break;
case 4:
tone = 0x41;
break;
case 5:
tone = 0x42;
break;
case 6:
tone = 0x43;
break;
case 7:
tone = 0x44;
break;
case 8:
tone = 0x45;
break;
case 9:
tone = 0x46;
break;
case 10:
tone = 0x47;
break;
case 11:
tone = 0x48;
break;
default:
tone = 0x11;
break;
}
}
#endif //讯飞一代音色转换
#ifdef IFLAY_TTS_2_CONFIG_STATUS_ON //讯飞二代音色转换
if (*value > (sizeof(Ify2_TTS_Value)/sizeof(Ify2_TTS_Value[0])))
{
JZSDK_LOG_ERROR("TTS tone value error");
tone = 0;
}
else
{
tone = Ify2_TTS_Value[*value];
}
#endif
*value = tone;
}
break;
case JZSDK_WIDGET_WARNLIGHT_COLOR_1:
case JZSDK_WIDGET_WARNLIGHT_COLOR_2:
{
int color;
#if DEVICE_VERSION == JZ_T40
if (*value == 0)
{
color = 0x01; //红色
}
else if (*value == 1)
{
color = 0x03; //蓝色
}
#else
if (*value == 0)
{
color = 0x01; //红色
}
else if (*value == 1)
{
color = 0x02; //绿色
}
else if (*value == 2)
{
color = 0x03; //蓝色
}
else if (*value == 3)
{
color = 0x04; //黄色
}
else if (*value == 4)
{
color = 0x05; //白色
}
#endif
*value = color;
}
break;
case JZSDK_WIDGET_SIDE_LASER_MODE:
{
int index = *value;
#if DEVICE_VERSION == JZ_T40
if(index == 0)
{
*value = 0;
}
else if (index == 1)
{
*value = 3;
}
else if (index == 2)
{
*value = 4;
}
else
{
*value = 0;
}
#else
*value = index;
#endif
}
break;
case JZSDK_WIDGET_WARNLIGHT_MODE:
{
int index = *value;
#if DEVICE_VERSION == JZ_T40
if(index == 0)
{
*value = 0;
}
else if (index == 1)
{
*value = 4;
}
else if (index == 2)
{
*value = 5;
}
else
{
*value = 0;
}
#else
*value = index;
#endif
}
break;
default:
break;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file Psdk_Ui.h
* Psdk_Ui的头文件
* @file Psdk_ui_change.h
* Psdk_ui_change的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef PSDK_UI_H
#define PSDK_UI_H
#ifndef PSDK_UI_CHANGE_H
#define PSDK_UI_CHANGE_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
... ... @@ -25,7 +25,8 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_UI_value_set(JZsdk_Widget_Control index, int value);
T_JZsdkReturnCode JZsdk_PsdkUi_value_set(JZsdk_Widget_Control index, int value);
T_JZsdkReturnCode JZsdk_PsdkUi_value_get(JZsdk_Widget_Control index, int *value);
#ifdef __cplusplus
... ...
... ... @@ -1413,7 +1413,18 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int val
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
{
int index;
if (LightAttribute.status == JZ_FLAGCODE_OFF)
{
index = 0;
}
else
{
index = LightAttribute.mode + 1;
}
JZsdk_Psdk_UI_io_Set_WarningLightMode(JZ_FLAGCODE_OFF, index);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
... ... @@ -1458,7 +1469,8 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
{
JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(JZ_FLAGCODE_OFF, value1);
JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(JZ_FLAGCODE_OFF, value2);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
... ... @@ -2652,25 +2664,29 @@ T_JZsdkReturnCode UIcontrol_SideLaser_SetControl(int DeviceName, int value)
return ret;
}
T_JZsdkSideLaserInfo Info;
//获取参数
SideLaser_getInfo(&Info);
//2、通知其他设备变化
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
{
HalSend_type1Send_LaserControl(UART_4G, 0x00, Info.status);
}
//如果设备1有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1) )
{
HalSend_type1Send_LaserControl(UART_DEV_1, 0x00, Info.status);
}
//如果设备2有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2) )
{
HalSend_type1Send_LaserControl(UART_DEV_2, 0x00, Info.status);
}
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
{
int RealMode;
//psdk的ui是开关和模式一起的,所以需要另外获取
SideLaser_param(JZ_FLAGCODE_GET, SIDELASER_REALMODE, &RealMode);
JZsdk_Psdk_UI_io_SideLaserMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_OFF, RealMode);
JZsdk_Psdk_UI_io_SideLaserMode(JZ_FLAGCODE_OFF, Info.Uimode);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
... ... @@ -2690,25 +2706,29 @@ T_JZsdkReturnCode UIcontrol_SideLaser_SetMode(int DeviceName, int value)
return ret;
}
T_JZsdkSideLaserInfo Info;
//获取参数
SideLaser_getInfo(&Info);
//2、通知其他设备变化
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
{
HalSend_type1Send_LaserMode(UART_4G, 0x00, Info.mode);
}
//如果设备1有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1) )
{
HalSend_type1Send_LaserMode(UART_DEV_1, 0x00, Info.mode);
}
//如果设备2有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2) )
{
HalSend_type1Send_LaserMode(UART_DEV_2, 0x00, Info.mode);
}
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
{
int RealMode;
//psdk的ui是开关和模式一起的,所以需要另外获取
SideLaser_param(JZ_FLAGCODE_GET, SIDELASER_REALMODE, &RealMode);
JZsdk_Psdk_UI_io_SideLaserMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_OFF, RealMode);
JZsdk_Psdk_UI_io_SideLaserMode(JZ_FLAGCODE_OFF, Info.Uimode);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
... ...
... ... @@ -12,6 +12,7 @@
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "UI_control/Psdk_ui_value_menu.h"
#ifdef __cplusplus
extern "C" {
... ...
... ... @@ -48,6 +48,27 @@ static int WidgetMgMT_Control_WorkFuntion(int Inscode, int value)
JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(JZ_FLAGCODE_ON, value);
break;
case JZSDK_WIDGET_TTS_SPEED:
JZsdk_Psdk_UI_io_Set_TTS_speed(JZ_FLAGCODE_ON,value);
break;
case JZSDK_WIDGET_TTS_TONE:
JZsdk_Psdk_UI_io_Set_TTS_tone(JZ_FLAGCODE_ON,value);
break;
case JZSDK_WIDGET_WARNLIGHT_COLOR_1:
JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(JZ_FLAGCODE_ON, value);
break;
case JZSDK_WIDGET_WARNLIGHT_COLOR_2:
JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(JZ_FLAGCODE_ON, value);
break;
case JZSDK_WIDGET_WARNLIGHT_MODE:
JZsdk_Psdk_UI_io_Set_WarningLightMode(JZ_FLAGCODE_ON, value);
break;
//相机
case JZSDK_WIDGET_VIDEOPUSH_INDEX:
JZsdk_Psdk_UI_io_Set_VideoMgmtPush(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
... ... @@ -125,12 +146,10 @@ static int WidgetMgMT_Control_WorkFuntion(int Inscode, int value)
case JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_LOW_CALIBRATION:
printf("未设置");
break;
break;
case JZSDK_WIDGET_SIDE_LASER_MODE:
JZsdk_Psdk_UI_io_SideLaserMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
JZsdk_Psdk_UI_io_SideLaserMode(JZ_FLAGCODE_ON, value);
break;
default:
... ...
... ... @@ -499,14 +499,16 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value)
}
case 5://TTS语速 list
{
int speed = JZsdk_Psdk_UI_io_GetTTSSpeed_ByValue(value);
JZsdk_Psdk_UI_io_Set_TTS_speed(1,speed);
int speed = value;
JZsdk_PsdkUi_value_get(JZSDK_WIDGET_TTS_SPEED, &speed);
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TTS_SPEED, speed);
break;
}
case 6://TTS音色 list
{
int tone = JZsdk_Psdk_UI_io_GetTTSTone_ByValue(value);
JZsdk_Psdk_UI_io_Set_TTS_tone(1,tone);
{
int tone = value;
JZsdk_PsdkUi_value_get(JZSDK_WIDGET_TTS_TONE, &tone);
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TTS_TONE, tone);
break;
}
case 7://TTS追加音色 list
... ... @@ -579,23 +581,31 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value)
//侧面激光部分
case 15://激光开关
{
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_MODE, value);
int mode = value;
JZsdk_PsdkUi_value_get(JZSDK_WIDGET_SIDE_LASER_MODE, &mode);
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_MODE, mode);
break;
}
//警灯部分
case 16://警灯模式
{
JZsdk_Psdk_UI_io_Set_WarningLightMode(1,value);
{
int mode = value;
JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_MODE, &mode);
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_MODE, mode);
break;
}
case 17://警灯颜色1
{
JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(1,(value+1));
int color = value;
JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_COLOR_1, &color);
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_COLOR_1,color);
break;
}
case 18://警灯颜色2
{
JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(1,(value+1));
int color = value;
JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_COLOR_1, &color);
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_COLOR_2,color);
break;
}
//云台部分
... ...
# cmake 最低版本要求 第三行名字不能动
cmake_minimum_required(VERSION 2.8)
project(JZ_H150S)
project(JZ_T40)
#set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++")
#"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。
... ...