作者 ookk303

添加了新的讯飞库

正在显示 67 个修改的文件 包含 2356 行增加1182 行删除

要显示太多修改。

为保证性能只显示 67 of 67+ 个文件。

... ... @@ -154,7 +154,16 @@
"msp_cmn.h": "c",
"ctype.h": "c",
"intl_interface.h": "c",
"iflytek_1.h": "c"
"iflytek_1.h": "c",
"warnlight.h": "c",
"searchlight.h": "c",
"speex_preprocess.h": "c",
"ff_filter.h": "c",
"motorfinetuning.h": "c",
"debuginfo.h": "c",
"h3_ircut.h": "c",
"dji_high_speed_data_channel.h": "c",
"psdk_ui.h": "c"
},
"Codegeex.GenerationPreference": "automatic",
"C_Cpp.dimInactiveRegions": false,
... ...
# 编译链的配置
#1、编译链与设备类型的选择
set(DEVICE_NAME JZ_H150S)
set(DEVICE_NAME JZ_T40)
#上一行为禁止修改行
message("**************************JZSDK构建编译开始***************************\n")
... ...
... ... @@ -60,19 +60,6 @@ if(${IRCUT_MODULE} STREQUAL "VERSION_SWITCH_ON")
endif()
#如果要加载光源模块,需要加载以下附属内容
if(${LIGHTING_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n光源模块加载中")
#打开光源的代码编译部分
add_definitions(-DMACRO_LIGHTING_MODULE)
#将光源的源代码加入编译中
file(GLOB_RECURSE LIGHTING_SRC ${ROOT_DIRS}Module/Lighting/*.c)
list(APPEND ALL_SRC_FILES ${LIGHTING_SRC})
endif()
#如果要加载探照灯模块,需要加载以下附属内容
if(${SEARCHLIGHT_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n探照灯模块加载中")
... ... @@ -86,6 +73,19 @@ if(${SEARCHLIGHT_MODULE} STREQUAL "VERSION_SWITCH_ON")
endif()
#如果要加载警示灯模块,需要加载以下附属内容
if(${WARNLIGHT_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n警示灯模块加载中")
#打开探照灯的代码编译部分
add_definitions(-DMACRO_WARNLIGHT_MODULE)
#将探照灯的源代码加入编译中
file(GLOB_RECURSE WARNLIGHT_SRC ${ROOT_DIRS}Module/WarnLight/*.c)
list(APPEND ALL_SRC_FILES ${WARNLIGHT_SRC})
endif()
#如果要加载侧面激光模块,需要加载以下附属内容
if(${SIDE_LASER_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n侧面激光模块加载中")
... ...
... ... @@ -17,12 +17,12 @@ set(IRCUT_MODULE VERSION_SWITCH_OFF)
############### 光源模块 ##########################
# LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_OFF)
# SEARCHLIGHT 探照灯处理模块
set(SEARCHLIGHT_MODULE VERSION_SWITCH_OFF)
# WARNLIGHT 警示灯处理模块
set(WARNLIGHT_MODULE VERSION_SWITCH_OFF)
################ 喊话器模块 #######################
# 喊话器模块
... ... @@ -74,6 +74,9 @@ set(LIB_KT_MODULE VERSION_SWITCH_OFF)
# 飒特库
set(LIB_SATIRC_MODULE VERSION_SWITCH_OFF)
# speex库
set(SPEEX_MODULE VERSION_SWITCH_OFF)
########################## 通用库加载 ###########################################
# 添加信息模块
... ... @@ -105,9 +108,6 @@ if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
... ... @@ -128,8 +128,11 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加SEARCHLIGHT 探照灯处理模块
set(SEARCHLIGHT_MODULE VERSION_SWITCH_ON)
# 添加WARNLIGHT 警示灯处理模块
set(WARNLIGHT_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
... ... @@ -151,8 +154,11 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加SEARCHLIGHT 探照灯处理模块
set(SEARCHLIGHT_MODULE VERSION_SWITCH_ON)
# 添加WARNLIGHT 警示灯处理模块
set(WARNLIGHT_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
... ... @@ -174,8 +180,11 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加SEARCHLIGHT 探照灯处理模块
set(SEARCHLIGHT_MODULE VERSION_SWITCH_ON)
# 添加WARNLIGHT 警示灯处理模块
set(WARNLIGHT_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
... ... @@ -200,8 +209,11 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加SEARCHLIGHT 探照灯处理模块
set(SEARCHLIGHT_MODULE VERSION_SWITCH_ON)
# 添加WARNLIGHT 警示灯处理模块
set(WARNLIGHT_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
... ... @@ -223,8 +235,11 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U30")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加SEARCHLIGHT 探照灯处理模块
set(SEARCHLIGHT_MODULE VERSION_SWITCH_ON)
# 添加WARNLIGHT 警示灯处理模块
set(WARNLIGHT_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
... ... @@ -336,9 +351,6 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加MediaProc 媒体管理模块
set(MEDIA_PROC_MODULE VERSION_SWITCH_ON)
... ... @@ -395,9 +407,9 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_T40")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加WARNLIGHT 警示灯处理模块
set(WARNLIGHT_MODULE VERSION_SWITCH_ON)
# 添加探照灯模块
set(SEARCHLIGHT_MODULE VERSION_SWITCH_ON)
... ... @@ -405,6 +417,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_T40")
# 添加AudioDeal 音频处理模块
set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
# 添加speex音频处理模块
# set(SPEEX_MODULE VERSION_SWITCH_ON)
# 添加激光模块
set(SIDE_LASER_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
... ...
... ... @@ -56,6 +56,19 @@ if(${OPUS_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("OPUS模块已加载\n")
endif()
if(${SPEEX_MODULE} STREQUAL "VERSION_SWITCH_ON")
add_definitions(-DMACRO_SPEEX_MODULE) #加载模块
set(SPEEX_DIRS "${ROOT_DIRS}ThirdParty/Speex/lib/arm-cortexa9-linux-gnueabihf")
include_directories(${ROOT_DIRS}ThirdParty/Speex/include)
target_link_libraries(
${PROJECT_NAME}
${SPEEX_DIRS}/libspeexdsp.so
)
message("Speex模块已加载\n")
endif()
# if(${CedarxLib} STREQUAL "VERSION_SWITCH_ON")
# message("\nCedarX已加载\n")
# target_link_libraries(${PROJECT_NAME}
... ... @@ -180,7 +193,6 @@ endif()
endif()
#RK_mmp库
if(${LIB_RK_MMP} STREQUAL "VERSION_SWITCH_ON")
message("RK_MMP库已加载\n")
... ...
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include <string.h> // 添加memcpy函数支持
#include "JZring.h"
typedef struct T_JZring
{
U8_t *buffer; // 缓冲区指针
U32_t size; // 缓冲区总容量
U32_t head; // 写入位置(下一个可写位置)
U32_t tail; // 读取位置(下一个可读位置)
U32_t count; // 当前数据量(可选改进)
} T_JZring;
// 初始化环形缓冲区
T_JZsdkReturnCode JZring_Init(T_JZringHandle *ring, U8_t *buffer, U32_t size)
{
if (!buffer || size == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//注册ring
T_JZring *r = (T_JZring*)malloc(sizeof(T_JZring));
if (!r) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
r->buffer = buffer;
r->size = size;
r->head = 0;
r->tail = 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)
{
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;
// 检查可用空间
U32_t free_space = r->size - r->count;
if (size > free_space) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 分两段复制数据(处理回绕)
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;
}
r->count += size; // 更新数据计数
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 从环形缓冲区读取数据
T_JZsdkReturnCode JZring_Read(T_JZringHandle ring, U8_t *data, U32_t size, U32_t *readSize)
{
if (!ring || !data || !readSize) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
T_JZring *r = (T_JZring*)ring;
*readSize = 0;
if (r->count == 0 || size == 0) {
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 计算实际可读数量
U32_t bytes_to_read = (size > r->count) ? r->count : size;
// 分两段复制数据(处理回绕)
U32_t first_chunk = r->size - r->tail;
if (first_chunk >= bytes_to_read) {
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;
}
r->count -= bytes_to_read; // 更新数据计数
*readSize = bytes_to_read;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZring_GetSize(T_JZringHandle ring, U32_t *size)
{
T_JZring *ringHandle = (T_JZring*)ring;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZring_GetFreeSize(T_JZringHandle ring, U32_t *size)
{
T_JZring *ringHandle = (T_JZring*)ring;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZring_Reset(T_JZringHandle ring)
{
T_JZring *ringHandle = (T_JZring*)ring;
ringHandle->head = 0;
ringHandle->tail = 0;
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;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file WarningLight_V3S_H1T.h
* WarningLight_V3S_H1T的头文件
* @file JZring.h
* 环形缓冲区
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef WARNINGLIGHT_V3S_H1T_H
#define WARNINGLIGHT_V3S_H1T_H
#ifndef JZ_RING_H
#define JZ_RING_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
... ... @@ -18,16 +18,15 @@ extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
typedef void* T_JZringHandle;
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode WarningLight_V3S_H1T_Set_WarningLight_Status(int status, int mode);
T_JZsdkReturnCode WarningLight_V3S_H1T_Set_WarningLight_Color(int color1, int color2);
T_JZsdkReturnCode WarningLight_V3S_H1T_CheckStatus_WarningLightStatus();
T_JZsdkReturnCode WarningLight_V3S_H1T_CheckStatus_WarningLightColor();
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);
#ifdef __cplusplus
}
... ...
... ... @@ -147,6 +147,8 @@ typedef enum {
JZ_INSCODE_5AFRAME_SEARCHLIGHT_CONTROL = 0x10000E00, //探照灯开光
JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMEN = 0x10000E10, //设置探照灯亮度
JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMENPOWERLIMIT = 0x10000E11, //设置探照灯亮度功率限制
JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY = 0x10000E20, //设置把爆闪频率
JZ_INSCODE_5AFRAME_SEARCHLIGHT_MESSAGE_SUBSCRIPTION_CONTROL = 0x10000E21,//探照灯消息订阅控制
... ...
... ... @@ -24,6 +24,7 @@ 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,
... ...
... ... @@ -102,6 +102,19 @@ typedef enum E_JZ_SingleCompensationMode{
JZ_SINGLE_COMPENSATION_MODE_PITCH_RIGHT = 1,
}E_JZ_SingleCompensationMode;
typedef enum E_JZ_GimbalSingleCalibrationMode{
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX = 0,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MIN = 1,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_ZERO = 2,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_RESET = 3,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_DEBUG_ANGLE_RESET = 4,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_MAX = 5,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_MIN = 6,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_ZERO = 7,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_RESET = 8,
JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_DEBUG_ANGLE_RESET = 9,
}E_JZ_GimbalSingleCalibrationMode;
/* Exported types ------------------------------------------------------------*/
... ...
... ... @@ -496,6 +496,10 @@ static int Comparison_5AFRAME_FirstLevelCode_0x63(char *getdata)
return JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMEN;
break;
case 0x53:
return JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMENPOWERLIMIT;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
... ...
... ... @@ -121,6 +121,22 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
}
break;
case JZ_INSCODE_5AFRAME_LASER_CONTROL:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x60 ,0x51 ,0x00, 0x00 , 0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_LASER_MODE:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x60 ,0x52 ,0x00, 0x00 , 0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x61 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
... ... @@ -145,6 +161,14 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
}
break;
case JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMENPOWERLIMIT:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x63 ,0x53 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL:
{
char sendbuf[14] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0E ,0x00 ,0x00 ,0x64 ,0x51 ,0x00 ,0x00 ,0x00 ,0x00 ,0x23};
... ...
... ... @@ -7,9 +7,11 @@
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
#include "Lighting/Lighting_InAndOut.h"
#include "JZsdk_haldata_deal/JZsdk_data_transmisson.h"
#include "SearchLight/SearchLight.h"
#include "WarnLight/WarnLight.h"
#include "IRCUT/ircut.h"
#include "Hal_Send/HalSend.h"
... ... @@ -25,11 +27,12 @@ void *JZ_T40_SubConnectTask(void *arg)
static int DelayTime = 0; //最多尝试连接设备30s
while (RightGimbalConnectFlag == JZ_FLAGCODE_OFF ||
while (
(RightGimbalConnectFlag == JZ_FLAGCODE_OFF ||
LeftGimbalConnectFlag == JZ_FLAGCODE_OFF ||
RightLightConnectFlag == JZ_FLAGCODE_OFF ||
LeftLightConnectFlag == JZ_FLAGCODE_OFF ||
DelayTime < 30000)
LeftLightConnectFlag == JZ_FLAGCODE_OFF ) &&
DelayTime < 20000)
{
s_JZsdk_Hal_Info *HalInfo = JZsdk_Hal_GetHalInfo();
... ... @@ -146,7 +149,6 @@ void *JZ_T40_CheckLightTemperatureTask(void *arg)
delayMs(100);
}
JZSDK_LOG_INFO("开始检查灯温度");
while (1)
{
... ... @@ -202,6 +204,13 @@ static T_JZsdkReturnCode JZ_T40_BaseParamSet(void)
//设置喊话器音量
//测试部分
//1、将总功率设置为无限制
//HalSend_type1Send_SearchLight_SetLumenPowerLimit(UART_DEV_2, 0x00, 0x64, 0x20, 0x00);
}
/****************************
... ... @@ -241,9 +250,9 @@ T_JZsdkReturnCode JZ_T40_init(int mode)
JZsdk_HalPort_Init(UART_DEV_2, (void *)&SerialInfo2);
// //4G初始化
// value[0] = COMM_4G_UART_BITRATE;
// JZsdk_HalPort_Init(UART_4G, value);
//4G初始化
int value[1] = {COMM_4G_UART_BITRATE};
JZsdk_HalPort_Init(UART_4G, value);
//子设备连接
JZ_T40_SubDevice_Init();
... ... @@ -257,11 +266,17 @@ T_JZsdkReturnCode JZ_T40_init(int mode)
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
//探照灯初始化
SearchLight_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//警灯初始化
WarnLight_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//激光初始化
SideLaser_Init();
//制造一个定时查询温度的线程
//JZ_T40_CheckLightTemperature();
//温度检测
JZ_T40_CheckLightTemperature();
//基础参数设置
JZ_T40_BaseParamSet();
... ...
... ... @@ -7,23 +7,23 @@
#define VERSION_CHOOSE_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h"
//1~10行 除了D可以修改版本选择 禁止动任何东西
#define DEVICE_VERSION JZ_H150S
#define DEVICE_VERSION JZ_T40
//禁止修改行 选择是串口程序 还是 psdk程序
#define APP_VERSION APP_PSDK
#define APP_VERSION APP_UART
//禁止修改行 板子型号
#define PLATFORM_VERSION PLATFORM_V3S
//禁止修改行 串口连接程序的软件版本号
#define MAJOR_VERSION_TEN_POSITION 0
#define MAJOR_VERSION_ONE_POSITION 1
#define MAJOR_VERSION_ONE_POSITION 0
#define MINOR_VERSION_TEN_POSITION 0
#define MINOR_VERSION_ONE_POSITION 3
#define MODIFY_VERSION_TEN_POSITION 1
#define MINOR_VERSION_ONE_POSITION 0
#define MODIFY_VERSION_TEN_POSITION 0
#define MODIFY_VERSION_ONE_POSITION 2
#define DEBUG_VERSION_TEN_POSITION 0
#define DEBUG_VERSION_ONE_POSITION 0
#define DEBUG_VERSION_TEN_POSITION 2
#define DEBUG_VERSION_ONE_POSITION 2
... ... @@ -44,6 +44,11 @@
#define AUDIODEAL_CONFIG_STATUS_ON
#endif
//是否开启回声抑制功能
#ifdef MACRO_SPEEX_MODULE
#define SPEEX_STATUS_ON
#endif
//是否开启喊话器功能
#ifdef MACRO_MEGAPHONE_MODULE
#define MEGAPHONE_CONFIG_STATUS_ON
... ... @@ -106,16 +111,16 @@
#define SIDE_LASER_STATUS_ON
#endif
//是否加载光源模块
#ifdef MACRO_LIGHTING_MODULE
#define LIGHTING_STATUS_ON
#endif
//是否加载探照灯模块
#ifdef MACRO_SEARCHLIGHT_MODULE
#define SEARCHLIGHT_STATUS_ON
#endif
//是否加载警灯模块
#ifdef MACRO_WARNLIGHT_MODULE
#define WARNLIGHT_STATUS_ON
#endif
//是否加载云台模块
#ifdef MACRO_GIMBAL_MODULE
#define GIMBAL_STATUS_ON
... ... @@ -125,6 +130,7 @@
//是否开启音频库功能
#define AUDIODEAL_CONFIG_STATUS_ON
#define SPEEX_STATUS_ON //回声抑制库
//是否开启喊话器功能
#define MEGAPHONE_CONFIG_STATUS_ON
... ... @@ -159,12 +165,12 @@
//默认开启satlib
#define SATIRC_LIB_STATUS_ON
//默认开启光源模块
#define LIGHTING_STATUS_ON
//默认开启探照灯模块
#define SEARCHLIGHT_STATUS_ON
//默认开启警灯模块
#define WARNLIGHT_STATUS_ON
//默认开启云台模块
#define GIMBAL_STATUS_ON
#endif
... ...
... ... @@ -3008,23 +3008,21 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_SearchLightLightAttribute(int Port
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#ifdef SEARCHLIGHT_STATUS_ON
//1、获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//2、查询灯光属性
ret = UIcontrol_FlushSearchLightLightAttribute();
T_JzSearchLightAttribute LightAttribute;
ret = SearchLight_Get_SearchLightAttribute(&LightAttribute);
int Frequency;
int Mode;
int LeftBrightness;
int RightBrightness;
ret = UIcontrol_CheckStatus_SearchLightLightAttribute(&LeftBrightness, &RightBrightness, &Mode, &Frequency);
// 2、回复灯光属性
HalSend_type1Send_SearchLight_Frequency(Port, LightAttribute.Frequency);
HalSend_type1Send_SearchLight_Mode(Port, LightAttribute.Mode);
HalSend_type1Send_SearchLight_Lumen(Port, LightAttribute.LeftBrightness, LightAttribute.RightBrightness);
#endif
HalSend_type1Send_SearchLight_Frequency(Port, Frequency);
HalSend_type1Send_SearchLight_Mode(Port, Mode);
HalSend_type1Send_SearchLight_Lumen(Port, LeftBrightness, RightBrightness);
return ret;
}
... ... @@ -3140,8 +3138,8 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_LaserStatus(int Port, char *getbuf
#endif
// 2、回复激光状态
HalSend_type1Send_LaserControl(Port, LaserControl);
HalSend_type1Send_LaserMode(Port, LaserMode);
HalSend_type1Send_LaserControl(Port, 0x00, LaserControl);
HalSend_type1Send_LaserMode(Port, 0x00, LaserMode);
return ReturnCode;
}
... ... @@ -4143,17 +4141,35 @@ static T_JZsdkReturnCode RecvDeal_ObtainSearchLight_Lumen(int Port, char *getbuf
**********/
static T_JZsdkReturnCode RecvDeal_ObtainSearchLight_Temperature(int Port, char *getbuf)
{
//JZSDK_LOG_INFO("%s,收到探照灯温度",JZsdk_DefineCode_GetPortName(Port));
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧2,获取值
int value1 = getbuf[9];
int value2 = getbuf[10];
//判断数据位长度
int FrameLenth = JZsdk_Get_FrameLength(getbuf);
int DataLength = FrameLenth - 11;
//2、发送到本地处理
UIcontrol_ObtainSearchLight_Temperature(Port, value1, value2);
if (DataLength == 2)
{
//1、通过数据帧2,获取值
int value1 = getbuf[9];
int value2 = getbuf[10];
//JZSDK_LOG_DEBUG("%s,收到探照灯温度 %d %d",JZsdk_DefineCode_GetPortName(Port), value1, value2);
//2、发送到本地处理
UIcontrol_ObtainSearchLight_Temperature(Port, value1, value2);
}
if (DataLength == 1)
{
int value = getbuf[9];
//JZSDK_LOG_DEBUG("%s, %x 收到探照灯温度 %d",JZsdk_DefineCode_GetPortName(Port), FrameSequence,value);
//2、发送到本地处理
UIcontrol_ObtainSearchLight_SingleTemperature(Port, FrameSequence, value);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
... ... @@ -1200,6 +1200,27 @@ T_JZsdkReturnCode HalSend_type1Send_SearchLight_SetSingleLumem(int Uartport, in
HalSend_SendData(Uartport ,sendbuf, send_buf_len, MULTI_THREAD_SEND);
}
//设置亮度功率上限
T_JZsdkReturnCode HalSend_type1Send_SearchLight_SetLumenPowerLimit(int Uartport,int dire, int value, int FrameSequence, int ReplyFlag)
{
printf("发送设置亮度功率上限\n");
unsigned char sendbuf[256];
int send_buf_len;
//1、获取帧样板
JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMENPOWERLIMIT, sendbuf, &send_buf_len);
//2、写入数据
sendbuf[5] = ReplyFlag;
sendbuf[6] = FrameSequence; //帧序列
sendbuf[9] = dire;
sendbuf[10] = value;
//3、发送帧
HalSend_SendData(Uartport ,sendbuf, send_buf_len, MULTI_THREAD_SEND);
}
//查询探照灯频率
T_JZsdkReturnCode HalSend_type1Send_CheckStatus_SearchLight_Frequency(int Uartport)
... ... @@ -1264,7 +1285,7 @@ T_JZsdkReturnCode HalSend_type1Send_CheckStatus_SearchLight_Attribute(int Uartpo
//查询探照灯温度
T_JZsdkReturnCode HalSend_type1Send_CheckStatus_SearchLight_Temperture(int Uartport, int FrameSequence)
{
printf("发送查询探照灯温度\n");
//printf("发送查询探照灯温度\n");
unsigned char sendbuf[256];
int send_buf_len;
... ... @@ -1272,6 +1293,7 @@ T_JZsdkReturnCode HalSend_type1Send_CheckStatus_SearchLight_Temperture(int Uartp
//1、获取帧样板
JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE, sendbuf, &send_buf_len);
sendbuf[5] = 0x01;
sendbuf[6] = FrameSequence;
//2、发送帧
... ... @@ -1413,7 +1435,7 @@ T_JZsdkReturnCode HalSend_type1Send_Reply_UpgradeCheckResult(int Uartport, int s
* 设置警灯状态
*
* **************/
T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Status(int Uartport,int status, int mode)
T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Status(int Uartport, int frameSequence,int status, int mode)
{
printf("发送设置警灯状态\n");
... ... @@ -1424,6 +1446,7 @@ T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Status(int Uartport,int sta
JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL, sendbuf, &send_buf_len);
//2、写入数据
sendbuf[6] = frameSequence;
sendbuf[9] = status;
sendbuf[10] = mode;
... ... @@ -1436,7 +1459,7 @@ T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Status(int Uartport,int sta
* 设置警灯颜色
*
* **************/
T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Color(int Uartport,int color1, int color2)
T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Color(int Uartport, int frameSequence, int color1, int color2)
{
printf("发送设置警灯颜色\n");
... ... @@ -1449,6 +1472,7 @@ T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Color(int Uartport,int colo
//2、写入数据
sendbuf[9] = color1;
sendbuf[10] = color2;
sendbuf[6] = frameSequence;
//3、发送帧
HalSend_SendData(Uartport ,sendbuf, send_buf_len, MULTI_THREAD_SEND);
... ... @@ -1557,12 +1581,60 @@ T_JZsdkReturnCode HalSend_type1Send_SearchLight_Lumen(int Uartport,int LeftLumen
HalSend_SendData(Uartport ,sendbuf, send_buf_len, MULTI_THREAD_SEND);
}
/***********
*
* 控制侧面激光
*
* *************/
T_JZsdkReturnCode HalSend_type1Send_SetLaserControl(int Uartport, int frameSequence, int Control)
{
printf("发送 控制侧面激光\n");
unsigned char sendbuf[256];
int send_buf_len;
//1、获取帧样板
JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_LASER_CONTROL, sendbuf, &send_buf_len);
//2、写入数据
sendbuf[6] = frameSequence;
sendbuf[10] = Control;
//3、发送帧
HalSend_SendData(Uartport ,sendbuf, send_buf_len, MULTI_THREAD_SEND);
}
/***********
*
* 控制侧面模式
*
* *************/
T_JZsdkReturnCode HalSend_type1Send_SetLaserMode(int Uartport, int frameSequence, int mode)
{
printf("发送 控制侧面激光模式\n");
unsigned char sendbuf[256];
int send_buf_len;
//1、获取帧样板
JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_LASER_MODE, sendbuf, &send_buf_len);
//2、写入数据
sendbuf[6] = frameSequence;
sendbuf[10] = mode;
//3、发送帧
HalSend_SendData(Uartport ,sendbuf, send_buf_len, MULTI_THREAD_SEND);
}
/********************
*
* 发送侧面激光控制值
*
* *************/
T_JZsdkReturnCode HalSend_type1Send_LaserControl(int Uartport, int Control)
T_JZsdkReturnCode HalSend_type1Send_LaserControl(int Uartport, int frameSequence, int Control)
{
printf("发送侧面激光控制值帧\n");
... ... @@ -1573,6 +1645,7 @@ T_JZsdkReturnCode HalSend_type1Send_LaserControl(int Uartport, int Control)
JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_CHECKSTATUS_LASER_STATUS_CONTROL, sendbuf, &send_buf_len);
//2、写入数据
sendbuf[6] = frameSequence;
sendbuf[10] = Control;
//3、发送帧
... ... @@ -1584,7 +1657,7 @@ T_JZsdkReturnCode HalSend_type1Send_LaserControl(int Uartport, int Control)
* 发送侧面激光模式
*
* *************/
T_JZsdkReturnCode HalSend_type1Send_LaserMode(int Uartport, int mode)
T_JZsdkReturnCode HalSend_type1Send_LaserMode(int Uartport, int frameSequence, int mode)
{
printf("发送侧面激光模式值帧\n");
... ... @@ -1595,6 +1668,7 @@ T_JZsdkReturnCode HalSend_type1Send_LaserMode(int Uartport, int mode)
JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_CHECKSTATUS_LASER_STATUS_MODE, sendbuf, &send_buf_len);
//2、写入数据
sendbuf[6] = frameSequence;
sendbuf[10] = mode;
//3、发送帧
... ...
... ... @@ -91,12 +91,14 @@ T_JZsdkReturnCode HalSend_type1Send_Reply_CurrentPlayTimeStatus(int Uartport, in
T_JZsdkReturnCode HalSend_type1Send_Set_SearchLightFrequency(int Uartport ,int Frequency, int FrameSequence);
T_JZsdkReturnCode HalSend_type1Send_SearchLight_Control(int Uartport,int mode, int FrameSequence);
T_JZsdkReturnCode HalSend_type1Send_SearchLight_SetLumen(int Uartport, int LeftLumen, int RightLumen, int FrameSequence);
T_JZsdkReturnCode HalSend_type1Send_SearchLight_SetLumenPowerLimit(int Uartport,int dire, int value, int FrameSequence, int ReplyFlag);
T_JZsdkReturnCode HalSend_type1Send_SearchLight_SetSingleLumem(int Uartport, int Lumen, int FrameSequence);
T_JZsdkReturnCode HalSend_type1Send_MessageSubcription_Control(int Uartport, int value);
T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Status(int Uartport,int status, int mode);
T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Color(int Uartport,int color1, int color2);
T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Status(int Uartport, int frameSequence,int status, int mode);
T_JZsdkReturnCode HalSend_type1Send_Set_WarningLight_Color(int Uartport, int frameSequence, int color1, int color2);
T_JZsdkReturnCode HalSend_type1Send_SerialNumber(int UartPort, int FrameSequence, char *SerialNumber, int SerialNumberLenth);
T_JZsdkReturnCode HalSend_type1Send_Reply_CheckSpecialParameters(int Uartport,int FrameSequence,int type, int value);
... ... @@ -109,6 +111,7 @@ T_JZsdkReturnCode HalSend_type1Send_Reply_CheckSpecialParameters(int Uartport,in
T_JZsdkReturnCode HalSend_type1Send_SearchLight_Frequency(int Uartport, int Frequency);
T_JZsdkReturnCode HalSend_type1Send_SearchLight_Mode(int Uartport, int mode);
T_JZsdkReturnCode HalSend_type1Send_SearchLight_Lumen(int Uartport,int LeftLumen, int RightLumen);
T_JZsdkReturnCode HalSend_type1Send_SearchLight_Temperature(int Uartport, int LeftTemperature, int RightTemperature);
... ... @@ -134,9 +137,11 @@ T_JZsdkReturnCode HalSend_type1Send_Reply_UpgradeStart(int Uartport);
T_JZsdkReturnCode HalSend_type1Send_Reply_UpgradeEnd(int Uartport);
T_JZsdkReturnCode HalSend_type1Send_Reply_UpgradeCheckResult(int Uartport, int status);
T_JZsdkReturnCode HalSend_type1Send_LaserControl(int Uartport, int Control);
T_JZsdkReturnCode HalSend_type1Send_LaserMode(int Uartport, int mode);
T_JZsdkReturnCode HalSend_type1Send_LaserControl(int Uartport, int frameSequence, int Control);
T_JZsdkReturnCode HalSend_type1Send_LaserMode(int Uartport, int frameSequence, int mode);
T_JZsdkReturnCode HalSend_type1Send_SetLaserControl(int Uartport, int frameSequence, int Control);
T_JZsdkReturnCode HalSend_type1Send_SetLaserMode(int Uartport, int frameSequence, int mode);
/* Exported functions --------------------------------------------------------*/
... ...
... ... @@ -221,7 +221,7 @@ static void *UartDeal_rece(void *arg)
// data_len2+=args->MessageLength;
// printf("当前接收长度%d bytesRead%d bmessage%d reslen%d\n",data_len,bytesRead,data_len2,args->ResLen);
#if 1
#if 0
JZSDK_LOG_INFO("从串口读取到,长度%d",(args->MessageLength-args->ResLen));
for (int i = 0; i < (args->MessageLength-args->ResLen); i++)
... ... @@ -523,17 +523,17 @@ T_JZsdkReturnCode JZsdk_Uart_UartSend_NotTask(int Uart_Name, unsigned char *str,
{
if (Uart_Name == UART_4G)
{
printf("向4G设备发送\n");
//printf("向4G设备发送\n");
write(Uart_4G_fd, str, str_lenth);
}
else if (Uart_Name == UART_DEV_1)
{
printf("向串口1号设备发送\n");
//printf("向串口1号设备发送\n");
write(Uart_DEV1_fd, str, str_lenth);
}
else if (Uart_Name = UART_DEV_2)
{
printf("向串口2号设备发送\n");
//printf("向串口2号设备发送\n");
write(Uart_DEV2_fd, str, str_lenth);
}
... ... @@ -558,17 +558,17 @@ static void JZsdk_Uart_UartSend_Task(void *data)
if (taskData->Uart_name == UART_4G)
{
printf("task4G设备发送\n");
//printf("task4G设备发送\n");
write(Uart_4G_fd, taskData->str, taskData->str_lenth);
}
else if (taskData->Uart_name == UART_DEV_1)
{
printf("task串口1号设备发送\n");
//printf("task串口1号设备发送\n");
write(Uart_DEV1_fd, taskData->str, taskData->str_lenth);
}
else if (taskData->Uart_name == UART_DEV_2)
{
printf("task串口2号设备发送\n");
//printf("task串口2号设备发送\n");
write(Uart_DEV2_fd, taskData->str, taskData->str_lenth);
}
else if (taskData->Uart_name == HAL_DATA_TRANSMISSION)
... ...
... ... @@ -8,7 +8,7 @@
#include "FF_Statement.h"
#include "./AudioDeal.h"
#include "JZsdkLib.h"
#include "version_choose.h"
#include "./AudioDealThread/AudioDealThread.h"
... ... @@ -18,6 +18,10 @@
#include "AudioStreamDeal/AudioStreamDeal.h"
#include "Filter/FF_Filter.h"
#ifdef SPEEX_STATUS_ON
#include "Speex/Speex.h"
#endif
#define MP3_DIR "/root/sdcard/1.mp3"
#define PCM_16000_DIR "/root/sdcard/16000_test.pcm"
#define READ_SIZE (2000)
... ... @@ -119,15 +123,49 @@ T_JZsdkReturnCode AudioDeal_ResampleRest(unsigned int in_sampleRate, AVChannelLa
*
* ***************************************************************************************************************************************************/
/***************************
/*************
*
* 文本类型的pcm数据导入接口
*
* 区别
* a 使用文本专用的滤波
*
* pcm数据接入接口
* **********************/
T_JZsdkReturnCode AudioDeal_PcmDataInput_TextSteam(int In_Bitrate, unsigned char *buffer, int bytesRead)
{
if (AudioDeakInfo_index == NULL)
{
JZSDK_LOG_ERROR("音频处理器未注册");
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
while (Audiodeal_status != JZ_FLAGCODE_ON)
{
delayMs(1);
}
int DateType = 0x00;
//1、打开音频库的处理标志位,该标志可以重复打开,只有强制关闭音频时,需要关闭该标志
AudioDeakInfo_index->AudioDeal_ResampleAndFilter_Execute_Flag = JZ_FLAGCODE_ON;
//默认数据pcm接入口都是 单声道,16位
PCM_PooL_Interface_PcmData(AudioDeakInfo_index, In_Bitrate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16, buffer, bytesRead, DateType);
//printf("Read %zu bytes from the PCM file.\n", bytesRead);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*************
*
* Data Type = 0 为文本pcm
* Date Type = 1 为语音流pcm
* 录音语音类型的pcm数据导入接口
*
* 区别
* a 使用语音专用的滤波
*
* ************/
T_JZsdkReturnCode AudioDeal_PcmDataInput(int In_Bitrate, unsigned char *buffer, int bytesRead, int DataType)
* **********************/
T_JZsdkReturnCode AudioDeal_PcmDataInput_RecordSteam(int In_Bitrate, unsigned char *buffer, int bytesRead)
{
if (AudioDeakInfo_index == NULL)
{
... ... @@ -139,23 +177,79 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput(int In_Bitrate, unsigned char *buffer,
{
delayMs(1);
}
int DateType = 0x01;
//1、打开音频库的处理标志位,该标志可以重复打开,只有强制关闭音频时,需要关闭该标志
AudioDeakInfo_index->AudioDeal_ResampleAndFilter_Execute_Flag = JZ_FLAGCODE_ON;
//默认数据pcm接入口都是 单声道,16位
PCM_PooL_Interface_PcmData(AudioDeakInfo_index, In_Bitrate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16, buffer, bytesRead, DateType);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*************
*
* 实时语音语音类型的pcm数据导入接口
*
* 区别
* a 使用语音专用的滤波
* b 需要进行回音消除
*
* **********************/
T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam(int In_Bitrate, unsigned char *buffer, int bytesRead)
{
if (AudioDeakInfo_index == NULL)
{
JZSDK_LOG_ERROR("音频处理器未注册");
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
while (Audiodeal_status != JZ_FLAGCODE_ON)
{
delayMs(1);
}
int DateType = 0x02;
//1、打开音频库的处理标志位,该标志可以重复打开,只有强制关闭音频时,需要关闭该标志
AudioDeakInfo_index->AudioDeal_ResampleAndFilter_Execute_Flag = JZ_FLAGCODE_ON;
//Set_AudioDeal_ResampleAndFilterAndPlay_Flag(AudioDeakInfo_index, JZ_FLAGCODE_ON);
//将数据拿去进行回音消除
//将数据合并为u16型
//默认数据pcm接入口都是 单声道,16位
PCM_PooL_Interface_PcmData(AudioDeakInfo_index, In_Bitrate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16, buffer, bytesRead, DataType);
//printf("Read %zu bytes from the PCM file.\n", bytesRead);
#ifdef SPEEX_STATUS_ON
//标志音频库已经结束,不过alsa库内有10组缓存,该标志位结束,只能认为重采样和滤波结束
//Set_AudioDeal_ResampleAndFilterAndPlay_Flag(AudioDeakInfo_index, JZ_FLAGCODE_OFF);
short TempPcm[bytesRead / 2];
short OutPcm[bytesRead / 2];
for (int i = 0; i < bytesRead / 2; i++)
{
TempPcm[i] = (buffer[2*i] & 0xFF) | (((short)buffer[2*i + 1]) << 8);
}
//送去回音消除
T_JZsdkReturnCode ret = Speex_DealData(TempPcm, OutPcm, bytesRead / 2);
// if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
// {
// //将输出的pcm还原回u8型到数据缓冲区
// for (int i = 0; i < bytesRead / 2; i++)
// {
// buffer[2*i] = (OutPcm[i] & 0xFF);
// buffer[2*i + 1] = ((OutPcm[i] >> 8) & 0xFF);
// }
// }
#endif
//默认数据pcm接入口都是 单声道,16位
PCM_PooL_Interface_PcmData(AudioDeakInfo_index, In_Bitrate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16, buffer, bytesRead, DateType);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// /***************************
// *
// * 无回复接口
... ... @@ -360,3 +454,18 @@ T_JZsdkReturnCode Get_AudioDealStatus()
{
return Get_AudioDealThreadStatus();
}
/**************
*
* 回音抑制初始化
*
* ***********/
T_JZsdkReturnCode AudioDeal_EchoCancellation_Init(int SampleRate)
{
#ifdef SPEEX_STATUS_ON
Speex_Init(SampleRate);
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
... ... @@ -89,7 +89,13 @@ enum AudioDealPlayType
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode AudioDeal_Init();
T_JZsdkReturnCode AudioDeal_PcmDataInput(int In_Bitrate, unsigned char *buffer, int bytesRead, int DataType);
T_JZsdkReturnCode AudioDeal_PcmDataInput_TextSteam(int In_Bitrate, unsigned char *buffer, int bytesRead);
T_JZsdkReturnCode AudioDeal_PcmDataInput_RecordSteam(int In_Bitrate, unsigned char *buffer, int bytesRead);
T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam(int In_Bitrate, unsigned char *buffer, int bytesRead);
T_JZsdkReturnCode AudioDeal_EchoCancellation_Init(int SampleRate);
T_JZsdkReturnCode AudioDeal_StopDeal();
T_JZsdkReturnCode AudioDeal_FilePlayInput(unsigned char *FilePath);
... ...
#include "JZsdkLib.h"
#include "version_choose.h"
//main函数参数一是原始pcm文件名,参数二是去噪后的pcm文件名
#ifdef SPEEX_STATUS_ON
#include <stdio.h>
#include <string.h>
#include "speex/speex_echo.h" // Speex 回声消除头文件
#include "speex/speex_preprocess.h" // Speex 预处理头文件
/*
graph LR
A[原始语音信号] --> B[预处理]
B --> C[语言检测]
C -->|英语| D[英语参数配置]
C -->|汉语| E[汉语参数配置]
C -->|法语| F[法语参数配置]
D --> G[Speex编码器]
E --> H[Speex编码器]
F --> I[Speex编码器]
G --> J[输出编码数据]
H --> J
I --> J
*/
#define TAIL_TIME 500 //回声尾长,单位毫秒
typedef struct JZ_SpeexInfo{
//处理的音频样本长度, 一般对应10~20ms的音频数据,太小会增加计算开销,太大会增加处理延迟
int DealSampleLen;
/*
回声尾长 表示需要消除的回声持续时间(以样本数计) 建议值对应100-500毫秒的音频数据
对于8kHz采样率:800-4000个样本
对于16kHz采样率:1600-8000个样本
*/
int TailLen;
//音频采样率
int SampleRate;
// Speex回声消除状态
SpeexEchoState *EchoState;
// Speex预处理状态
SpeexPreprocessState *PreprocessState;
// 存储回声消除的样本
short *EchoBuf;
int EchoBufLen;
//标志位
int Flag;
}JZ_SpeexInfo;
static JZ_SpeexInfo g_SpeexInfo = {0};
T_JZsdkReturnCode Speex_Deinit()
{
if (g_SpeexInfo.Flag == JZ_FLAGCODE_ON)
{
speex_echo_state_destroy(g_SpeexInfo.EchoState); // 释放回声消除状态
speex_preprocess_state_destroy(g_SpeexInfo.PreprocessState); // 释放预处理状态
memset(&(g_SpeexInfo.EchoBuf), 0, sizeof(g_SpeexInfo.EchoBuf));
g_SpeexInfo.EchoBufLen = 0;
if (g_SpeexInfo.EchoBuf != NULL)
{
free(g_SpeexInfo.EchoBuf);
g_SpeexInfo.EchoBuf = NULL;
}
g_SpeexInfo.Flag = JZ_FLAGCODE_OFF;
}
JZSDK_LOG_DEBUG("Speex_Deinit success\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode Speex_Init(int SampleRate)
{
//检查speex的参数
if (g_SpeexInfo.Flag == JZ_FLAGCODE_ON)
{
Speex_Deinit();
}
g_SpeexInfo.SampleRate = SampleRate;
//计算长度
g_SpeexInfo.TailLen = SampleRate * TAIL_TIME / 1000 ; //可以×1.2作为余量
g_SpeexInfo.DealSampleLen = 640; //16000 * time / 1000 //目前是因为程序写死了80 后面可以改
// 初始化回声消除状态
g_SpeexInfo.EchoState = speex_echo_state_init(g_SpeexInfo.DealSampleLen, g_SpeexInfo.TailLen);
g_SpeexInfo.PreprocessState = speex_preprocess_state_init(g_SpeexInfo.DealSampleLen, g_SpeexInfo.SampleRate); // 初始化预处理状态
//设置采样率
speex_echo_ctl(g_SpeexInfo.EchoState, SPEEX_ECHO_SET_SAMPLING_RATE, &(g_SpeexInfo.SampleRate));
//将预处理状态与回声消除状态关联
speex_preprocess_ctl(g_SpeexInfo.PreprocessState, SPEEX_PREPROCESS_SET_ECHO_STATE, g_SpeexInfo.EchoState);
//注册预处理数据数组
g_SpeexInfo.EchoBuf = (short *)malloc(g_SpeexInfo.TailLen * sizeof(short));
g_SpeexInfo.Flag = JZ_FLAGCODE_ON;
JZSDK_LOG_DEBUG("Speex_Init success\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode Speex_DealData(short *InData, short *OutData, int frame_size)
{
if (g_SpeexInfo.Flag == JZ_FLAGCODE_OFF)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//填充回声消除的样本
if (g_SpeexInfo.EchoBufLen < g_SpeexInfo.TailLen)
{
memcpy(&(g_SpeexInfo.EchoBuf[g_SpeexInfo.EchoBufLen]), InData, frame_size * sizeof(short));
g_SpeexInfo.EchoBufLen += frame_size;
}
//如果里面有完整数据
else if (g_SpeexInfo.EchoBufLen == g_SpeexInfo.DealSampleLen)
{
//对数据进行位移
memmove(g_SpeexInfo.EchoBuf, &(g_SpeexInfo.EchoBuf[frame_size]), (g_SpeexInfo.EchoBufLen - frame_size) * sizeof(short));
//将新的数据填充到回声消除的样本中
memcpy(&(g_SpeexInfo.EchoBuf[g_SpeexInfo.EchoBufLen - frame_size]), InData, frame_size * sizeof(short));
}
//如果里面的数据超了
else if (g_SpeexInfo.EchoBufLen > g_SpeexInfo.TailLen)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//如果没有填充完回声数组
if (g_SpeexInfo.EchoBufLen < g_SpeexInfo.TailLen)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// // 执行回声消除
// speex_echo_cancellation(g_SpeexInfo.EchoState, InData, g_SpeexInfo.EchoBuf, OutData);
// // 执行预处理(如噪声抑制等)
// speex_preprocess_run(g_SpeexInfo.PreprocessState, OutData);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
#endif // SPEEX_STATUS_ON
\ No newline at end of file
... ...
/**
********************************************************************
* @file SearchLight_V3S_TFA1.h
* SearchLight_V3S_TFA1的头文件
* @file speex.h
* speex的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef SEARCHLIGHT_V3S_TFA1_H
#define SEARCHLIGHT_V3S_TFA1_H
#ifndef SPEEX_H
#define SPEEX_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
... ... @@ -20,14 +20,12 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode SearchLight_V3S_TFA1_Set_SearchLightFrequency(int value);
T_JZsdkReturnCode SearchLight_V3S_TFA1_SearchLightControl(int mode);
T_JZsdkReturnCode SearchLight_V3S_TFA1_Set_SearchLightLumen(int LeftLumen, int RightLumen);
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode Speex_DealData(short *InData, short *OutData, int frame_size);
T_JZsdkReturnCode Speex_Init(int SampleRate);
#ifdef __cplusplus
}
... ...
#include "JZsdkLib.h"
#include "version_choose.h"
#include "DebugInfo.h"
static int DebugMode_Flag = JZ_FLAGCODE_OFF;
T_JZsdkReturnCode DebugInfo_Init()
{
//强制打开调试模式
#if 1
JZsdk_create_file("/root/ShakedownTest");
DebugMode_Flag = JZ_FLAGCODE_ON;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#endif
//目前仅psdk支持debug模式
#if APP_VERSION != APP_PSDK
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#endif
if (JZsdk_check_file_exists("/root/ShakedownTest") != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
JZSDK_LOG_INFO("打开调试模式");
DebugMode_Flag = JZ_FLAGCODE_ON;
if(JZsdk_Osal_delete("/root/ShakedownTest") != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("移除调试模式失败");
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode DebugInfo_ModeSet(int mode)
{
if (mode == JZ_FLAGCODE_ON)
{
if(JZsdk_create_file("/root/ShakedownTest") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_INFO("已开启shakedownTest调试模式");
}
DebugMode_Flag = JZ_FLAGCODE_ON;
JZSDK_LOG_DEBUG("DebugMode_Flag = %d", DebugMode_Flag);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (mode == JZ_FLAGCODE_OFF)
{
if(JZsdk_Osal_delete("/root/ShakedownTest") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_INFO("已关闭shakedownTest调试模式");
}
DebugMode_Flag = JZ_FLAGCODE_OFF;
JZSDK_LOG_DEBUG("DebugMode_Flag = %d", DebugMode_Flag);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_HARDLY_FAILURE;
}
int DebugInfo_ModeGet()
{
return DebugMode_Flag;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file SearchLight_V3S.h
* SearchLight_V3S的头文件
* @file DebugInfo.h
* DebugInfo.h 的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef SEARCHLIGHT_V3S_H
#define SEARCHLIGHT_V3S_H
#ifndef DEBUG_INFO_H
#define DEBUG_INFO_H
/* Includes ------------------------------------------------------------------*/
#include "./SearchLight_V3S_U3/SearchLight_V3S_U3.h"
#include "./SearchLight_V3S_H1T/SearchLight_V3S_H1T.h"
#include "./SearchLight_V3S_TFA1/SearchLight_V3S_TFA1.h"
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
... ... @@ -23,11 +20,12 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode DebugInfo_ModeSet(int mode);
T_JZsdkReturnCode DebugInfo_Init();
int DebugInfo_ModeGet();
#ifdef __cplusplus
}
... ...
... ... @@ -57,6 +57,9 @@ T_JZsdkReturnCode DeviceInfo_Init()
//设备属性初始化
Attribute_Init();
//debug模式
DebugInfo_Init();
JZSDK_LOG_INFO("MODULE_DEVICE_INFO_INIT_COMPLETE");
}
... ...
... ... @@ -15,6 +15,7 @@
#include "DeviceInfo/HardwareInfo/HardwareInfo.h"
#include "DeviceInfo/Attribute/Attribute.h"
#include "LanguageInfo/LanguageInfo.h"
#include "DebugInfo/DebugInfo.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
... ...
... ... @@ -16,7 +16,9 @@
#include "Megaphone/MegTempControl/MegTempControl.h"
#endif
#include "Lighting/Lighting_InAndOut.h"
#ifdef SEARCHLIGHT_STATUS_ON
#include "Searchlight/Searchlight.h"
#endif
#define MESSAGE_MAX_LEN 1024
... ... @@ -258,7 +260,9 @@ static T_JZsdkReturnCode DeviceMessage_Enter_Default(unsigned char *message)
#endif
//如果为组合版
#if (DEVICE_VERSION == TF_A1 || DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S ||DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30)
#if (DEVICE_VERSION == TF_A1 || DEVICE_VERSION == JZ_U3 || \
DEVICE_VERSION == JZ_U3S ||DEVICE_VERSION == JZ_U3D \
|| DEVICE_VERSION == JZ_U30 || DEVICE_VERSION == JZ_T40)
// //组合板写入
// snprintf(new_message,128,"光斑y值%d\n",Widget_GetCenter_ValueY());
... ... @@ -269,7 +273,11 @@ static T_JZsdkReturnCode DeviceMessage_Enter_Default(unsigned char *message)
static int SearchLight_RightTemperature = 0;
//获取温度
Lighting_Get_SearchLightTemperature(&SearchLight_LeftTemperature, &SearchLight_RightTemperature);
T_JzSearchLightAttribute searchLightInfo;
SearchLight_Get_SearchLightAttribute(&searchLightInfo);
SearchLight_LeftTemperature = searchLightInfo.LeftTemperature;
SearchLight_RightTemperature = searchLightInfo.RightTemperature;
memset(new_message,0,sizeof(new_message));
memset(old_message,0,sizeof(old_message));
... ...
... ... @@ -20,6 +20,16 @@
#include "BaseConfig.h"
#include "Hal_Send/HalSend.h"
#include "DeviceInfo/DebugInfo/DebugInfo.h"
static T_GimbalInfo g_GimbalInfo = {
.PitchLimitMax = MAX_PITCH,
.PitchLimitMin = MIN_PITCH,
.DebugPitch_Left = 0,
.DebugPitch_Right = 0,
};
//云台使用的模式, 当前有透传模式和独立模式
static int g_Gimbal_Mode = JZ_FLAGCODE_OFF;
... ... @@ -52,9 +62,25 @@ static int g_JZsdk_GimbalStatusFlag = JZ_FLAGCODE_OFF; //云台状态,用于
static T_JZsdkReturnCode Gimbal_Set_RealPitchAngle(int pitch, int FineTuningP, int UAV_pitch);
//手动刷新角度标志位
static int g_Flush_Pitch = JZ_FLAGCODE_OFF;
/****************
*
* 软件云台限位刷新
*
*
* *****************/
T_JZsdkReturnCode Gimbal_LimitAngleFlush()
{
g_GimbalInfo.PitchLimitMax = MAX_PITCH;
g_GimbalInfo.PitchLimitMin = MIN_PITCH;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/**************************
*
*
... ... @@ -67,6 +93,8 @@ static void *Gimbal_SendAngleTask(void *arg)
int Old_angle = 0; //上一次变化的角度
int Old_UAV_self_angle; //上一次飞机的角度
int Old_PitchFineTuning; //上一次微调的角度
int Old_DebugPitchLeft = 0; //上一次调试角度
int Old_DebugPitchRight = 0; //上一次调试角度
JZSDK_LOG_INFO("云台角度发送初始化完成");
... ... @@ -78,11 +106,15 @@ static void *Gimbal_SendAngleTask(void *arg)
|| Gimbal_UavSelfPitch != Old_UAV_self_angle //飞机自身角度发生了变化
|| g_MotorFineTuningPitch != Old_PitchFineTuning //微调角度发生了变化
|| g_Flush_Pitch == JZ_FLAGCODE_ON
|| g_GimbalInfo.DebugPitch_Left != Old_DebugPitchLeft
|| g_GimbalInfo.DebugPitch_Right != Old_DebugPitchRight
)
{
Old_angle = Gimbal_PitchAngle;
Old_UAV_self_angle = Gimbal_UavSelfPitch;
Old_PitchFineTuning = g_MotorFineTuningPitch;
Old_DebugPitchLeft = g_GimbalInfo.DebugPitch_Left;
Old_DebugPitchRight = g_GimbalInfo.DebugPitch_Right;
g_Flush_Pitch = JZ_FLAGCODE_OFF;
Gimbal_Set_RealPitchAngle(Old_angle, Old_PitchFineTuning, Old_UAV_self_angle);
}
... ... @@ -142,7 +174,7 @@ T_JZsdkReturnCode Gimbal_Set_PitchAngle(int angle)
//独立模式
case JZ_MODULE_CONTROL_WAY_INDEPENDENT:
{
if (angle < MIN_PITCH || angle > MAX_PITCH || (MIN_PITCH == MAX_PITCH))
if (angle < g_GimbalInfo.PitchLimitMin || angle > g_GimbalInfo.PitchLimitMax || (g_GimbalInfo.PitchLimitMin == g_GimbalInfo.PitchLimitMax))
{
printf("云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
... ... @@ -239,6 +271,89 @@ T_JZsdkReturnCode Gimbal_SetGimbalRange(int flag, int value)
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/********************************
*
*
* 单边云台校准选择
*
*
* ************************************/
T_JZsdkReturnCode Gimbal_Set_GimbalSingleCalibration(E_JZ_GimbalSingleCalibrationMode Mode)
{
JZSDK_LOG_INFO("单边云台校准选择 Mode:%d 0x%x", Mode);
switch (Mode)
{
case JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX:
{
#if DEVICE_VERSION == JZ_T40
HalSend_type1Send_SetGimbalRange(UART_DEV_2, 0x11, 0xFF);
#endif
}
break;
case JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MIN:
{
#if DEVICE_VERSION == JZ_T40
HalSend_type1Send_SetGimbalRange(UART_DEV_2, 0x11, 0x00);
#endif
}
break;
case JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_ZERO:
{
#if DEVICE_VERSION == JZ_T40
HalSend_type1Send_SetGimbalRange(UART_DEV_2, 0x11, 0x02);
#endif
}
break;
case JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_RESET:
{
#if DEVICE_VERSION == JZ_T40
HalSend_type1Send_SetGimbalRange(UART_DEV_2, 0x11, 0x01);
#endif
}
break;
case JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_MAX:
{
#if DEVICE_VERSION == JZ_T40
HalSend_type1Send_SetGimbalRange(UART_DEV_2, 0x12, 0xFF);
#endif
}
break;
case JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_MIN:
{
#if DEVICE_VERSION == JZ_T40
HalSend_type1Send_SetGimbalRange(UART_DEV_2, 0x12, 0x00);
#endif
}
break;
case JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_ZERO:
{
#if DEVICE_VERSION == JZ_T40
HalSend_type1Send_SetGimbalRange(UART_DEV_2, 0x12, 0x02);
#endif
}
break;
case JZ_GIMBAL_SINGLE_CALIBRATION_MODE_RIGHT_RESET:
{
#if DEVICE_VERSION == JZ_T40
HalSend_type1Send_SetGimbalRange(UART_DEV_2, 0x12, 0x01);
#endif
}
break;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//查询云台微调值
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalFineTuning(int *FineTuningPitch, int *FineTuningYaw, int *FineTuningRoll)
{
... ... @@ -717,11 +832,11 @@ T_JZsdkReturnCode Gimbal_PitchSelfangleMode(int Pitch)
//2、滑动条 换算 云台角度
int Gimbal_PitchScaleMode(int value)
{
int step = (abs(MAX_PITCH) + abs(MIN_PITCH)) / 100;
int step = (abs(g_GimbalInfo.PitchLimitMax) + abs(g_GimbalInfo.PitchLimitMin)) / 100;
int angle = 0;
angle = value * step + MIN_PITCH;
angle = value * step + g_GimbalInfo.PitchLimitMin;
return angle;
}
... ... @@ -732,20 +847,20 @@ T_JZsdkReturnCode Gimbal_PitchRotationMode(int value)
int angle;
//JZSDK_LOG_DEBUG("拨轮控制");
if (MAX_PITCH == MIN_PITCH)
if (g_GimbalInfo.PitchLimitMax == g_GimbalInfo.PitchLimitMin)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
angle = Gimbal_PitchAngle + value;
if (angle > MAX_PITCH)
if (angle > g_GimbalInfo.PitchLimitMax)
{
angle = MAX_PITCH;
angle = g_GimbalInfo.PitchLimitMax;
}
else if (angle < MIN_PITCH)
else if (angle < g_GimbalInfo.PitchLimitMin)
{
angle = MIN_PITCH;
angle = g_GimbalInfo.PitchLimitMin;
}
if (angle == Gimbal_PitchAngle)
... ... @@ -764,8 +879,8 @@ int Gimbal_ReplyPitchToUAVScale(int angle)
{
int value;
int step = (abs(MAX_PITCH) + abs(MIN_PITCH)) / 100;
value = (angle - MIN_PITCH)/step;
int step = (abs(g_GimbalInfo.PitchLimitMax) + abs(g_GimbalInfo.PitchLimitMin)) / 100;
value = (angle - g_GimbalInfo.PitchLimitMin)/step;
return value;
}
... ... @@ -783,14 +898,14 @@ static T_JZsdkReturnCode Gimbal_Set_RealPitchAngle(int pitch, int FineTuningP, i
//叠加飞机角度和微调角度
temp_angle = pitch - UAV_pitch + FineTuningP;
if (temp_angle < MIN_PITCH)
if (temp_angle < g_GimbalInfo.PitchLimitMin)
{
temp_angle = MIN_PITCH;
temp_angle = g_GimbalInfo.PitchLimitMin;
}
if (temp_angle > MAX_PITCH)
if (temp_angle > g_GimbalInfo.PitchLimitMax)
{
temp_angle = MAX_PITCH;
temp_angle = g_GimbalInfo.PitchLimitMax;
}
Gimbal_RealPitchAngle = temp_angle;
... ... @@ -830,8 +945,45 @@ static T_JZsdkReturnCode Gimbal_Set_RealPitchAngle(int pitch, int FineTuningP, i
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*
输入调试角度
pitch加减的值
flag标志位 =on时 重置调试角度
direction = 0 左调试角度
direction = 1 右调试角度
*/
T_JZsdkReturnCode Gimbal_Set_DebugPitch(int pitch, int flag, int direction)
{
//如果重置标志位开启
if (flag == JZ_FLAGCODE_ON)
{
if (direction == 0)
{
g_GimbalInfo.DebugPitch_Left = 0;
}
else if (direction == 1)
{
g_GimbalInfo.DebugPitch_Right = 0;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (direction == 0)
{
g_GimbalInfo.DebugPitch_Left += pitch;
}
else if (direction == 1)
{
g_GimbalInfo.DebugPitch_Right += pitch;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -867,6 +1019,12 @@ T_JZsdkReturnCode Gimbal_Flush_Pitch()
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode Gimbal_Get_GimbalInfo(T_GimbalInfo *GimbalInfo)
{
memcpy(GimbalInfo, &g_GimbalInfo, sizeof(T_GimbalInfo));
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -964,6 +1122,9 @@ static T_JZsdkReturnCode Gimbal_Init_IndependentControl()
* ******************************/
T_JZsdkReturnCode Gimbal_Init(enum JZ_MODULE_CONTROL_WAY Mode)
{
//限位初始化
Gimbal_LimitAngleFlush();
switch (Mode)
{
//独立控制模式
... ...
... ... @@ -19,6 +19,12 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
typedef struct T_GimbalInfo{
int PitchLimitMax;
int PitchLimitMin;
int DebugPitch_Left;
int DebugPitch_Right;
}T_GimbalInfo;
/* Exported types ------------------------------------------------------------*/
... ... @@ -39,6 +45,8 @@ T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int pitch);
T_JZsdkReturnCode Gimbal_Set_YawFineTuning(int yaw);
T_JZsdkReturnCode Gimbal_Set_RollFineTuning(int pitch, int yaw, int roll);
T_JZsdkReturnCode Gimbal_Set_GimbalLinkageControl(int value);
T_JZsdkReturnCode Gimbal_Set_DebugPitch(int pitch, int flag, int direction);
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalLinkage(int *value);
T_JZsdkReturnCode Gimbal_Obtain_GimbalLinkage(int GimbalLinkage);
T_JZsdkReturnCode Gimbal_CheckStatus_Angle(int *PitchAngle, int *YawAngle, int *RollAngle);
... ... @@ -52,11 +60,16 @@ int Gimbal_PitchScaleMode(int value);
T_JZsdkReturnCode Gimbal_PitchRotationMode(int value);
int Gimbal_ReplyPitchToUAVScale(int angle);
T_JZsdkReturnCode Gimbal_Set_GimbalSingleCalibration(E_JZ_GimbalSingleCalibrationMode Mode);
int Gimbal_Get_PitchAngle();
int Gimbal_Get_PitchFineTuning();
int Gimbal_Get_PitchRealPitchAngle();
T_JZsdkReturnCode Gimbal_Get_GimbalInfo(T_GimbalInfo *GimbalInfo);
T_JZsdkReturnCode Gimbal_Flush_Pitch();
T_JZsdkReturnCode Gimbal_LimitAngleFlush();
#ifdef __cplusplus
}
... ...
... ... @@ -13,6 +13,7 @@
#include "Hal_Send/HalSend.h"
#include "JZsdk_uart/JZsdk_Uart.h"
#include "Ircut/H3_ircut/H3_ircut.h"
#include "DeviceInfo/DebugInfo/DebugInfo.h"
#ifdef WIRINGPI_STATUS_ON
#include <wiringPi.h>
... ... @@ -127,6 +128,23 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle)
//T40很特殊,需要控制两个子设备,所以要准备帧序列
HalSend_type1Send_Set_GimbalPitchAngle(UART_DEV_2, angle, 0x10, JZ_FLAGCODE_OFF);
//如果处于调试模式
if(DebugInfo_ModeGet() == JZ_FLAGCODE_ON)
{
//获取云台的debug角度
T_GimbalInfo gimbalinfo;
Gimbal_Get_GimbalInfo(&gimbalinfo);
if (gimbalinfo.DebugPitch_Left != 0)
{
HalSend_type1Send_Set_GimbalPitchAngle(UART_DEV_2, (angle+gimbalinfo.DebugPitch_Left), 0x11, JZ_FLAGCODE_OFF);
}
if (gimbalinfo.DebugPitch_Right != 0)
{
HalSend_type1Send_Set_GimbalPitchAngle(UART_DEV_2, (angle+gimbalinfo.DebugPitch_Right), 0x12, JZ_FLAGCODE_OFF);
}
}
#else
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
... ... @@ -393,3 +411,4 @@ static T_JZsdkReturnCode Gimbal_DataDeal_Write_PitchBaseOffset(int offset)
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
#include <stdio.h>
#include <string.h>
#include "version_choose.h"
#include "Lighting_InAndOut.h"
#include "./SearchLight/SearchLight_V3S/SearchLight_V3S.h"
#include "./WarningLight/WarningLight_V3S/WarningLight_V3S.h"
#include "SearchLight/SearchLightTemControl/SearchLightTemControl.h"
#include "UI_control.h"
#include "BaseConfig.h"
#include "Hal_Send/HalSend.h"
static int SearchLight_Frequency; //探照灯频率
static int SearchLight_Mode; //探照灯模式
static int SearchLight_LeftLumen; //探照灯设置左灯亮度
static int SearchLight_RightLumen; //探照灯设置右灯亮度
static int SearchLight_LeftTemperature; //探照灯左边温度
static int SearchLight_RightTemperature; //探照灯右边温度
static int WarningLight_Status; //警灯状态
static int WarningLight_Mode; //警灯模式
static int WarningLight_Color1; //警灯颜色1
static int WarningLight_Color2; //警灯颜色2
static int g_SearchLight_Subscription_Flag = JZ_FLAGCODE_ON; //消息订阅状态
#define MAX(a,b) ( (a>b) ?a:b )
T_JZsdkReturnCode Lighting_Init()
{
//温控初始化
JZsdk_SearchLightTemControl_Init();
}
/********************************************************************************************************************************
*
* 探照灯 灯光属性
*
********************************************************************************************************************************/
// //查询灯光属性
// T_JZsdkReturnCode Lighting_CheckStatus_SearchLightLightAttribute(int *ValueFrequency, int *ValueMode, int *ValueLeftLumen, int *ValueRightLumen)
// {
// //1、刷新查询灯光属性
// if (DEVICE_VERSION == JZ_H1T)
// {
// SearchLight_V3S_H1T_CheckStatus_LightAttribute();
// }
// //2、获取一次本地灯光属性
// Lighting_Get_SearchLightMode(ValueMode);
// Lighting_Get_SearchLightLumen(ValueLeftLumen, ValueRightLumen);
// Lighting_Get_SearchLightFrequency(ValueFrequency);
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
/********************************************************************************************************************************
*
* 探照灯 模式相关
*
********************************************************************************************************************************/
// //设置探照灯模式
// T_JZsdkReturnCode Lighting_SearchLightControl(int mode)
// {
// printf("设置%x探照灯模式\n",DEVICE_VERSION);
// SearchLight_Mode = mode;
// if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30)
// {
// return SearchLight_V3S_U3_SearchLightControl(mode);
// }
// else if (DEVICE_VERSION == JZ_T40)
// {
// return SearchLight_V3S_T40_SearchLightControl(mode);
// }
// else if (DEVICE_VERSION == JZ_H1T)
// {
// return SearchLight_V3S_H1T_SearchLightControl(mode);
// }
// else if (DEVICE_VERSION == TF_A1)
// {
// return SearchLight_V3S_TFA1_SearchLightControl(mode);
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// //收到并修改探照灯模式(中继修改)
// T_JZsdkReturnCode Lighting_Obtain_SearchLightMode(int mode)
// {
// printf("%x探照灯模式改变%d\n",DEVICE_VERSION, mode);
// SearchLight_Mode = mode;
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// //获取探照灯的灯光模式
// T_JZsdkReturnCode Lighting_Get_SearchLightMode(int *mode)
// {
// *mode = SearchLight_Mode;
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// //查询探照灯灯光模式
// T_JZsdkReturnCode Lighting_CheckStatus_SearchLightMode()
// {
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
/********************************************************************************************************************************
*
* 探照灯 灯光亮度相关
*
********************************************************************************************************************************/
// //设置探照灯的灯光亮度
// T_JZsdkReturnCode Lighting_Set_SearchLightLumen(int LeftLumen, int RightLumen)
// {
// printf("设置%x探照灯灯光亮度\n",DEVICE_VERSION);
// if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30)
// {
// SearchLight_RightLumen = RightLumen;
// SearchLight_LeftLumen = LeftLumen;
// return SearchLight_V3S_U3_Set_SearchLightLumen(LeftLumen, RightLumen);
// }
// else if (DEVICE_VERSION == JZ_T40)
// {
// SearchLight_RightLumen = RightLumen;
// SearchLight_LeftLumen = LeftLumen;
// return SearchLight_V3S_T40_Set_SearchLightLumen(LeftLumen, RightLumen);
// }
// else if (DEVICE_VERSION == JZ_H1T)
// {
// return SearchLight_V3S_H1T_Set_SearchLightLumen(LeftLumen, RightLumen);
// }
// else if (DEVICE_VERSION == TF_A1)
// {
// SearchLight_RightLumen = RightLumen;
// SearchLight_LeftLumen = LeftLumen;
// return SearchLight_V3S_TFA1_Set_SearchLightLumen(LeftLumen, RightLumen);
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// //收到并修改探照灯的灯光亮度(中继修改)
// T_JZsdkReturnCode Lighting_Obtain_SearchLightLumen(int LeftLumen, int RightLumen)
// {
// printf("接收到%x探照灯灯光亮度 左灯%d 右灯%d\n",DEVICE_VERSION, LeftLumen, RightLumen);
// //如果是主喊话器副灯的单一设备
// if (DEVICE_VERSION == TF_A1 || DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30)
// {
// }
// else
// {
// SearchLight_RightLumen = RightLumen;
// SearchLight_LeftLumen = LeftLumen;
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// //获取探照灯设置的灯光亮度
// T_JZsdkReturnCode Lighting_Get_SearchLightLumen(int *LeftLumen, int *RightLumen)
// {
// *LeftLumen = SearchLight_LeftLumen;
// *RightLumen = SearchLight_RightLumen;
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// //查询探照灯灯光亮度
// T_JZsdkReturnCode Lighting_CheckStatus_SearchLightLumen()
// {
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
/********************************************************************************************************************************
*
* 探照灯 灯光频率相关
*
********************************************************************************************************************************/
// //设置爆闪灯频率
// T_JZsdkReturnCode Lighting_Set_SearchLightFrequency(int value)
// {
// printf("设置0x%x:探照灯爆闪频率\n",DEVICE_VERSION);
// if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30)
// {
// SearchLight_Frequency = value;
// return SearchLight_V3S_U3_Set_SearchLightFrequency(value);
// }
// else if (DEVICE_VERSION == JZ_T40)
// {
// return SearchLight_V3S_T40_Set_SearchLightFrequency(value);
// }
// else if (DEVICE_VERSION == JZ_H1T)
// {
// return SearchLight_V3S_H1T_Set_SearchLightFrequency(value);
// }
// else if (DEVICE_VERSION == TF_A1)
// {
// return SearchLight_V3S_TFA1_Set_SearchLightFrequency(value);
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// //收到并修改探照灯的灯光频率(中继修改)
// T_JZsdkReturnCode Lighting_Obtain_SearchLightFrequency(int Frequency)
// {
// printf("%x探照灯爆闪频率改变%d\n",DEVICE_VERSION, Frequency);
// SearchLight_Frequency = Frequency;
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// //获取探照灯的灯光频率
// T_JZsdkReturnCode Lighting_Get_SearchLightFrequency(int *Frequency)
// {
// *Frequency = SearchLight_Frequency;
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// //查询探照灯灯光频率
// T_JZsdkReturnCode Lighting_CheckStatus_SearchLightFrequency()
// {
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
// //收到并修改探照灯的温度(中继修改)
// T_JZsdkReturnCode Lighting_Obtain_SearchLightTemperature(int LeftTemperature, int RightTemperature)
// {
// printf("设备0x1010%x探照灯温度改变左灯%d 右灯%d\n",DEVICE_VERSION, LeftTemperature ,RightTemperature);
// SearchLight_LeftTemperature = LeftTemperature;
// SearchLight_RightTemperature = RightTemperature;
// int Max_tmeperature; //最大温度值
// Max_tmeperature = MAX(LeftTemperature, RightTemperature);
// //判断探照灯是否有打开
// if (SearchLight_Mode == JZ_FLAGCODE_OFF)
// {
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// if (DEVICE_VERSION == JZ_U3 ||
// DEVICE_VERSION == JZ_U3S ||
// DEVICE_VERSION == JZ_U3D ||
// DEVICE_VERSION == JZ_U30 ||
// DEVICE_VERSION == TF_A1 ||
// DEVICE_VERSION == JZ_T40
// )
// {
// //输入温度进温度控制线程
// SearchLightTemControl_Set_g_InputTemp(Max_tmeperature);
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// //获取探照灯的灯光温度
// T_JZsdkReturnCode Lighting_Get_SearchLightTemperature(int *LeftTemperature, int *RightTemperature)
// {
// *LeftTemperature = SearchLight_LeftTemperature;
// *RightTemperature = SearchLight_RightTemperature;
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
// //查询灯光温度
// T_JZsdkReturnCode Lighting_CheckStatus_SearchLightTemperture(int *ValueLeftTemperature, int *ValueRightTemperaturen)
// {
// //1、刷新查询灯光温度
// if (DEVICE_VERSION == JZ_H1T)
// {
// SearchLight_V3S_H1T_CheckStatus_SearchLightTemperture();
// }
// //2、获取一次本地灯光温度
// Lighting_Get_SearchLightTemperature(ValueLeftTemperature, ValueRightTemperaturen);
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
/********************************************************************************************************************************
*
* 探照灯 警灯状态
*
********************************************************************************************************************************/
//设置警灯状态
T_JZsdkReturnCode Lighting_Set_WarningLight_Status(int status, int mode)
{
printf("设置0x%x:警灯状态\n",DEVICE_VERSION);
#if DEVICE_VERSION == JZ_H1T
return WarningLight_V3S_H1T_Set_WarningLight_Status(status, mode);
#elif DEVICE_VERSION == TF_A1
return WarningLight_V3S_TFA1_Set_WarningLight_Status(status, mode);
#elif DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30
WarningLight_Status = status;
WarningLight_Mode = mode;
return HalSend_type1Send_Set_WarningLight_Status(UART_DEV_2, status, mode);
#else
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
}
//收到并修改警灯状态
T_JZsdkReturnCode Lighting_Obtain_WarningLight_Status(int status, int mode)
{
printf("%x警灯状态改变 状态%d 模式%d\n",DEVICE_VERSION, status ,mode);
WarningLight_Status = status;
WarningLight_Mode = mode;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//获取探警灯状态
T_JZsdkReturnCode Lighting_Get_WarningLight_Status(int *status, int *mode)
{
*status = WarningLight_Status;
*mode = WarningLight_Mode;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 查询警灯状态
*
**********/
T_JZsdkReturnCode Lighting_CheckStatus_WarningLightStatus(int *ValueSwitch, int *ValueMode)
{
//1、刷新查询警灯状态
if (DEVICE_VERSION == JZ_H1T)
{
WarningLight_V3S_H1T_CheckStatus_WarningLightStatus();
}
else if (DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30)
{
HalSend_type1Send_CheckStatus_WarningLightStatus(UART_DEV_2);
}
//2、获取一次本地警灯状态
Lighting_Get_WarningLight_Status(ValueSwitch, ValueMode);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/********************************************************************************************************************************
*
* 探照灯 警灯颜色
*
********************************************************************************************************************************/
//设置警灯颜色
T_JZsdkReturnCode Lighting_Set_WarningLight_Color(int color1, int color2)
{
printf("设置0x%x:警灯颜色\n",DEVICE_VERSION);
#if DEVICE_VERSION == JZ_H1T
return WarningLight_V3S_H1T_Set_WarningLight_Color(color1, color2);
#elif DEVICE_VERSION == TF_A1
return WarningLight_V3S_TFA1_Set_WarningLight_Color(color1, color2);
#elif DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30
//临时方案,u3s查不到警灯颜色
#if DEVICE_VERSION == JZ_U3S
WarningLight_Color1 = color1;
WarningLight_Color2 = color2;
#endif
return HalSend_type1Send_Set_WarningLight_Color(UART_DEV_2, color1, color2);
#else
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//收到并修改警灯颜色
T_JZsdkReturnCode Lighting_Obtain_WarningLight_Color(int color1, int color2)
{
printf("%x警灯颜色改变 颜色1:%d 颜色2:%d\n",DEVICE_VERSION, color1 ,color2);
WarningLight_Color1 = color1;
WarningLight_Color2 = color2;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//获取探警灯颜色
T_JZsdkReturnCode Lighting_Get_WarningLight_Color(int *color1, int *color2)
{
*color1 = WarningLight_Color1;
*color2 = WarningLight_Color2;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 查询探警灯颜色
*
**********/
T_JZsdkReturnCode Lighting_CheckStatus_WarningLightColor(int *ValueColor1, int *ValueColor2)
{
//1、刷新查询探警灯颜色
if (DEVICE_VERSION == JZ_H1T)
{
WarningLight_V3S_H1T_CheckStatus_WarningLightColor();
}
//2、获取一次本地探警灯颜色
Lighting_Get_WarningLight_Color(ValueColor1, ValueColor2);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// /*********
// *
// *刷新亮度函数
// *
// **********/
// T_JZsdkReturnCode JZsdk_SearchLight_FlushLumen(int InputLumen)
// {
// JZsdk_SearchLightTemControl_FlushLumen(InputLumen);
// }
// /****************
// *
// * 获取消息订阅状态
// *
// * *************/
// int JZsdk_SearchLight_GetMessageSubFlag(void)
// {
// return g_SearchLight_Subscription_Flag;
// }
// /***************************
// *
// * 设置消息订阅状态
// *
// *
// ************************/
// T_JZsdkReturnCode JZsdk_SearchLight_SetMessageSubFlag(int InputFlag)
// {
// g_SearchLight_Subscription_Flag = InputFlag;
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
\ No newline at end of file
/**
********************************************************************
* @file Lighting_InAndOut.h
* Lighting_InAndOut的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef LIGHTING_INANDOUT_H
#define LIGHTING_INANDOUT_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode Lighting_Init();
T_JZsdkReturnCode Lighting_CheckStatus_SearchLightLightAttribute(int *ValueFrequency, int *ValueMode, int *ValueLeftLumen, int *ValueRightLumen);
T_JZsdkReturnCode Lighting_SearchLightControl(int mode);
T_JZsdkReturnCode Lighting_Obtain_SearchLightMode(int mode);
T_JZsdkReturnCode Lighting_Get_SearchLightMode(int *mode);
T_JZsdkReturnCode Lighting_Set_SearchLightLumen(int LeftLumen, int RightLumen);
T_JZsdkReturnCode Lighting_Obtain_SearchLightLumen(int LeftLumen, int RightLumen);
T_JZsdkReturnCode Lighting_Get_SearchLightLumen(int *LeftLumen, int *RightLumen);
T_JZsdkReturnCode Lighting_Set_SearchLightFrequency(int value);
T_JZsdkReturnCode Lighting_Obtain_SearchLightFrequency(int Frequency);
T_JZsdkReturnCode Lighting_Get_SearchLightFrequency(int *Frequency);
T_JZsdkReturnCode Lighting_Obtain_SearchLightTemperature(int LeftTemperature, int RightTemperature);
T_JZsdkReturnCode Lighting_Get_SearchLightTemperature(int *LeftTemperature, int *RightTemperature);
T_JZsdkReturnCode Lighting_CheckStatus_SearchLightTemperture(int *ValueLeftTemperature, int *ValueRightTemperaturen);
T_JZsdkReturnCode Lighting_Set_WarningLight_Status(int status, int mode);
T_JZsdkReturnCode Lighting_Obtain_WarningLight_Status(int status, int mode);
T_JZsdkReturnCode Lighting_Get_WarningLight_Status(int *status, int *mode);
T_JZsdkReturnCode Lighting_CheckStatus_WarningLightStatus(int *ValueSwitch, int *ValueMode);
T_JZsdkReturnCode Lighting_Set_WarningLight_Color(int color1, int color2);
T_JZsdkReturnCode Lighting_Obtain_WarningLight_Color(int color1, int color2);
T_JZsdkReturnCode Lighting_Get_WarningLight_Color(int *color1, int *color2);
T_JZsdkReturnCode Lighting_CheckStatus_WarningLightColor(int *ValueColor1, int *ValueColor2);
T_JZsdkReturnCode JZsdk_SearchLight_FlushLumen(int InputLumen);
int JZsdk_SearchLight_GetMessageSubFlag(void);
T_JZsdkReturnCode JZsdk_SearchLight_SetMessageSubFlag(int InputFlag);
#ifdef __cplusplus
}
#endif
#endif
#include <stdio.h>
#include "./SearchLight_V3S_H1T.h"
#include "BaseConfig.h"
#include "Hal_Send/HalSend.h"
//设置探照灯频率
T_JZsdkReturnCode SearchLight_V3S_H1T_Set_SearchLightFrequency(int value)
{
//向H1T的单片机发送调节频率帧
HalSend_type1Send_Set_SearchLightFrequency(UART_DEV_1, value, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置探照灯控制模式
T_JZsdkReturnCode SearchLight_V3S_H1T_SearchLightControl(int mode)
{
//向H1T的单片机发送探照灯控制帧
HalSend_type1Send_SearchLight_Control(UART_DEV_1, mode, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置灯亮度
T_JZsdkReturnCode SearchLight_V3S_H1T_Set_SearchLightLumen(int LeftLumen, int RightLumen)
{
//向H1T的单片机发送探照灯控制帧
HalSend_type1Send_SearchLight_SetLumen(UART_DEV_1, LeftLumen, RightLumen, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//查询探照灯模式
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightMode()
{
//向H1T的单片机发送探照灯灯光模式查询帧
HalSend_type1Send_CheckStatus_SearchLight_Mode(UART_DEV_1);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//查询探照灯亮度
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightLumen()
{
//向H1T的单片机发送探照灯灯光模式查询帧
HalSend_type1Send_CheckStatus_SearchLight_Lumen(UART_DEV_1);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//查询探照灯频率
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightFrequency()
{
//向H1T的单片机发送探照灯灯光模式查询帧
HalSend_type1Send_CheckStatus_SearchLight_Frequency(UART_DEV_1);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//查询探照灯灯光属性
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightAttribute()
{
//向H1T的单片机发送探照灯灯光模式查询帧
HalSend_type1Send_CheckStatus_SearchLight_Attribute(UART_DEV_1);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//查询探照灯灯光温度
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_SearchLightTemperture()
{
//向H1T的单片机发送探照灯灯光模式查询帧
HalSend_type1Send_CheckStatus_SearchLight_Temperture(UART_DEV_1, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
/**
********************************************************************
* @file SearchLight_V3S_H1T.h
* SearchLight_V3S_H1T的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef SEARCHLIGHT_V3S_H1T_H
#define SEARCHLIGHT_V3S_H1T_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode SearchLight_V3S_H1T_Set_SearchLightFrequency(int value);
T_JZsdkReturnCode SearchLight_V3S_H1T_SearchLightControl(int mode);
T_JZsdkReturnCode SearchLight_V3S_H1T_Set_SearchLightLumen(int LeftLumen, int RightLumen);
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightAttribute();
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightMode();
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightLumen();
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightFrequency();
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_LightAttribute();
T_JZsdkReturnCode SearchLight_V3S_H1T_CheckStatus_SearchLightTemperture();
#ifdef __cplusplus
}
#endif
#endif
#include <stdio.h>
#include "./SearchLight_V3S_TFA1.h"
#include "BaseConfig.h"
#include "Hal_Send/HalSend.h"
T_JZsdkReturnCode SearchLight_V3S_TFA1_Set_SearchLightFrequency(int value)
{
//向u3的单片机发送调节频率帧
HalSend_type1Send_Set_SearchLightFrequency(UART_DEV_2, value, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode SearchLight_V3S_TFA1_SearchLightControl(int mode)
{
//向u3的单片机发送探照灯控制帧
HalSend_type1Send_SearchLight_Control(UART_DEV_2, mode, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode SearchLight_V3S_TFA1_Set_SearchLightLumen(int LeftLumen, int RightLumen)
{
//向tfa1的单片机发送探照灯控制帧
HalSend_type1Send_SearchLight_SetLumen(UART_DEV_2, LeftLumen, RightLumen, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
#include <stdio.h>
#include "./SearchLight_V3S_U3.h"
#include "BaseConfig.h"
#include "Hal_Send/HalSend.h"
T_JZsdkReturnCode SearchLight_V3S_U3_Set_SearchLightFrequency(int value)
{
//向u3的单片机发送调节频率帧
HalSend_type1Send_Set_SearchLightFrequency(UART_DEV_2, value, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode SearchLight_V3S_U3_SearchLightControl(int mode)
{
//向u3的单片机发送探照灯控制帧
HalSend_type1Send_SearchLight_Control(UART_DEV_2, mode, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode SearchLight_V3S_U3_Set_SearchLightLumen(int LeftLumen, int RightLumen)
{
//向u3的单片机发送探照灯控制帧
HalSend_type1Send_SearchLight_SetLumen(UART_DEV_2, LeftLumen, RightLumen, 0x00);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/***********************************
*
* 以下为T40的临时存放
*
*
* ********************************/
T_JZsdkReturnCode SearchLight_V3S_T40_Set_SearchLightFrequency(int value)
{
//向u3的单片机发送调节频率帧
HalSend_type1Send_Set_SearchLightFrequency(UART_DEV_2, value, 0x20);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode SearchLight_V3S_T40_SearchLightControl(int mode)
{
//向u3的单片机发送探照灯控制帧
HalSend_type1Send_SearchLight_Control(UART_DEV_2, mode, 0x20);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode SearchLight_V3S_T40_Set_SearchLightLumen(int LeftLumen, int RightLumen)
{
//向单片机发送探照灯控制帧
HalSend_type1Send_SearchLight_SetSingleLumem(UART_DEV_2, LeftLumen, 0x20);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
/**
********************************************************************
* @file SearchLight_V3S_U3.h
* SearchLight_V3S_U3的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef SEARCHLIGHT_V3S_U3_H
#define SEARCHLIGHT_V3S_U3_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode SearchLight_V3S_U3_Set_SearchLightFrequency(int value);
T_JZsdkReturnCode SearchLight_V3S_U3_SearchLightControl(int mode);
T_JZsdkReturnCode SearchLight_V3S_U3_Set_SearchLightLumen(int LeftLumen, int RightLumen);
T_JZsdkReturnCode SearchLight_V3S_T40_Set_SearchLightFrequency(int value);
T_JZsdkReturnCode SearchLight_V3S_T40_SearchLightControl(int mode);
T_JZsdkReturnCode SearchLight_V3S_T40_Set_SearchLightLumen(int LeftLumen, int RightLumen);
#ifdef __cplusplus
}
#endif
#endif
#include <stdio.h>
#include "./WarningLight_V3S_H1T.h"
#include "BaseConfig.h"
#include "Hal_Send/HalSend.h"
//设置警灯状态
T_JZsdkReturnCode WarningLight_V3S_H1T_Set_WarningLight_Status(int status, int mode)
{
//向底座T60s发送警灯状态
HalSend_type1Send_Set_WarningLight_Status(UART_DEV_1, status, mode);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置警灯颜色
T_JZsdkReturnCode WarningLight_V3S_H1T_Set_WarningLight_Color(int color1, int color2)
{
HalSend_type1Send_Set_WarningLight_Color(UART_DEV_1, color1, color2);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 查询警灯状态
*
**********/
T_JZsdkReturnCode WarningLight_V3S_H1T_CheckStatus_WarningLightStatus()
{
HalSend_type1Send_CheckStatus_WarningLightStatus(UART_DEV_1);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 查询警灯颜色
*
**********/
T_JZsdkReturnCode WarningLight_V3S_H1T_CheckStatus_WarningLightColor()
{
HalSend_type1Send_CheckStatus_WarningLightColor(UART_DEV_1);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
#include <stdio.h>
#include "./WarningLight_V3S_TFA1.h"
#include "BaseConfig.h"
#include "Hal_Send/HalSend.h"
//设置警灯状态
T_JZsdkReturnCode WarningLight_V3S_TFA1_Set_WarningLight_Status(int status, int mode)
{
//向单片机发送警灯状态
HalSend_type1Send_Set_WarningLight_Status(UART_DEV_2, status, mode);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置警灯颜色
T_JZsdkReturnCode WarningLight_V3S_TFA1_Set_WarningLight_Color(int color1, int color2)
{
HalSend_type1Send_Set_WarningLight_Color(UART_DEV_2, color1, color2);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 查询警灯状态
*
**********/
T_JZsdkReturnCode WarningLight_V3S_TFA1_CheckStatus_WarningLightStatus()
{
HalSend_type1Send_CheckStatus_WarningLightStatus(UART_DEV_2);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 查询警灯颜色
*
**********/
T_JZsdkReturnCode WarningLight_V3S_TFA1_CheckStatus_WarningLightColor()
{
HalSend_type1Send_CheckStatus_WarningLightColor(UART_DEV_2);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
/**
********************************************************************
* @file WarningLight_V3S_TFA1.h
* WarningLight_V3S_TFA1的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef WARNINGLIGHT_V3S_TFA1_H
#define WARNINGLIGHT_V3S_TFA1_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode WarningLight_V3S_TFA1_Set_WarningLight_Status(int status, int mode);
T_JZsdkReturnCode WarningLight_V3S_TFA1_Set_WarningLight_Color(int color1, int color2);
T_JZsdkReturnCode WarningLight_V3S_TFA1_CheckStatus_WarningLightStatus();
T_JZsdkReturnCode WarningLight_V3S_TFA1_CheckStatus_WarningLightColor();
#ifdef __cplusplus
}
#endif
#endif
... ... @@ -31,7 +31,7 @@ T_JZsdkReturnCode VideoStream_PushFrame(unsigned char* h264_data, unsigned int d
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//JZSDK_LOG_INFO("推送帧");
//JZSDK_LOG_DEBUG("相机推流帧%d",data_len);
//放入到对应的传输函数
#if APP_VERSION == APP_PSDK
... ...
... ... @@ -46,7 +46,7 @@ static T_JZsdkReturnCode PcmPlay_Interface(t_PcmParam *PcmParam)
nbBytes = fread(cbits, 1, 3 * 1276, Pcm_fp);
if(nbBytes > 0)
{
AudioDeal_PcmDataInput(g_opus_sampleRate, (unsigned char *)cbits, nbBytes, 1);
AudioDeal_PcmDataInput_RecordSteam(g_opus_sampleRate, (unsigned char *)cbits, nbBytes);
}
int totalSamples = nbBytes / (2);
... ...
... ... @@ -73,7 +73,7 @@ T_JZsdkReturnCode Megaphone_Tts_Play(unsigned char *str, unsigned int str_len, i
int tone = TTS_Get_tone();
if (tone >= 0x00 && tone <= 0x36)
{
return Ifytek_1_Play(str, str_len, ReplyFlag);
return Iflytek_1_Play(str, str_len, ReplyFlag);
}
else
{
... ... @@ -84,7 +84,7 @@ T_JZsdkReturnCode Megaphone_Tts_Play(unsigned char *str, unsigned int str_len, i
#ifdef IFLAY_TTS_2_CONFIG_STATUS_ON
return Ifytek_2_Play(str, str_len, ReplyFlag);
return Iflytek_2_Play(str, str_len, ReplyFlag);
#endif
... ...
... ... @@ -98,7 +98,7 @@ static T_JZsdkReturnCode TTS_Synthesis(const char* src_text, const char* params)
//没将数据放入PCM通道
//printf("产生了%d 的数据\n",audio_len);
AudioDeal_PcmDataInput(16000, (unsigned char *)data, audio_len, 0);
AudioDeal_PcmDataInput_TextSteam(16000, (unsigned char *)data, audio_len);
}
if (synth_status == MSP_TTS_FLAG_DATA_END)
... ... @@ -408,7 +408,7 @@ T_JZsdkReturnCode Iflytek_1_Init()
* 讯飞TTS_播放函数
*
**********/
T_JZsdkReturnCode Ifytek_1_Play(unsigned char *str, unsigned int str_len, int ReplyFlag)
T_JZsdkReturnCode Iflytek_1_Play(unsigned char *str, unsigned int str_len, int ReplyFlag)
{
//1、制造一个数据产生函数
pthread_t TTS_flie_task;
... ...
... ... @@ -27,7 +27,7 @@ extern "C" {
T_JZsdkReturnCode Iflytek_1_Init();
T_JZsdkReturnCode Ifytek_1_Play(unsigned char *str, unsigned int str_len, int ReplyFlag);
T_JZsdkReturnCode Iflytek_1_Play(unsigned char *str, unsigned int str_len, int ReplyFlag);
#ifdef __cplusplus
... ...
#include <fstream>
#include <assert.h>
#include <cstring>
#include <atomic>
#include <unistd.h>
#include <string>
#include "JZsdkLib.h"
#include "version_choose.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();
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);
}
}
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()
{
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 "JZsdkLib.h"
#include "version_choose.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();
static FILE *iflytts_fp = NULL;
#define IFLYTTS_FP_NAME "/root/tmp_tts_file.pcm"
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 (iflytts_fp != NULL)
{
fwrite(output->node->value, sizeof(char), output->node->len, iflytts_fp);
fflush(iflytts_fp);
}
}
}
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)
{
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;
// 重置完成标志
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
//打开临存文件
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);
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_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");
break;
}
AudioDeal_PcmDataInput_TextSteam(16000, buffer, len);
}
JZSDK_LOG_INFO("播放完成");
ret = AIKIT_End(g_AikitHandle);
exit:
if(paramBuilder != nullptr) {
delete paramBuilder;
}
if(dataBuilder != nullptr) {
delete dataBuilder;
}
if (iflytts_fp != NULL)
{
fclose(iflytts_fp);
iflytts_fp = NULL;
}
return 0;
}
int IflytekLib_2_Init()
{
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
... ...
... ... @@ -22,47 +22,47 @@ static T_JZsdkReturnCode IflyTek_2_Tts_Input(int language, char *Text, int speed
{
//1、将JZSDK的Language索引值转换为 IFLTEK2的语言索引值
//2、将language转换为音色文件
int IfyTek_language = 0;
int IflyTek_language = 0;
char role[20] = {0};
switch (language)
{
case 0x01: // 中文女生
IfyTek_language = 1;
IflyTek_language = 1;
strcpy(role, "xiaoyan");
break;
case 0x02: // 中文男生
IfyTek_language = 1;
IflyTek_language = 1;
strcpy(role, "xiaofeng");
break;
case 0x11: // 英文女生
IfyTek_language = 2;
IflyTek_language = 2;
strcpy(role, "catherine");
break;
case 0x12: // 英文男生
IfyTek_language = 2;
IflyTek_language = 2;
strcpy(role, "john");
break;
case 0x31: // 东北
IfyTek_language = 1;
IflyTek_language = 1;
strcpy(role, "xiaoqian");
break;
case 0x32: // 四川
IfyTek_language = 1;
IflyTek_language = 1;
strcpy(role, "yezi");
break;
case 0x33: // 河南
IfyTek_language = 1;
IflyTek_language = 1;
strcpy(role, "xiaokun");
break;
case 0x34: // 湖南
IfyTek_language = 1;
IflyTek_language = 1;
strcpy(role, "xiaoqiang");
break;
... ... @@ -72,12 +72,12 @@ static T_JZsdkReturnCode IflyTek_2_Tts_Input(int language, char *Text, int speed
*/
case 0x36: // 广东
IfyTek_language = 12; // 粤语
IflyTek_language = 12; // 粤语
strcpy(role, "xiaomei");
break;
case 0x37: // 湖北
IfyTek_language = 1;
IflyTek_language = 1;
strcpy(role, "xiaowang");
break;
... ... @@ -87,12 +87,12 @@ static T_JZsdkReturnCode IflyTek_2_Tts_Input(int language, char *Text, int speed
*/
default: // 默认中文女生
IfyTek_language = 1;
IflyTek_language = 1;
strcpy(role, "xiaoyan");
break;
}
IflytekLib_2_TextToTts(IfyTek_language, role, Text, speed, volume);
IflytekLib_2_TextToTts(IflyTek_language, role, Text, speed, volume);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -187,7 +187,7 @@ static void *Play_cntts_pthread(void *arg)
* 讯飞TTS_播放函数
*
**********/
T_JZsdkReturnCode Ifytek_2_Play(unsigned char *str, unsigned int str_len, int ReplyFlag)
T_JZsdkReturnCode Iflytek_2_Play(unsigned char *str, unsigned int str_len, int ReplyFlag)
{
//1、制造一个数据产生函数
pthread_t TTS_flie_task;
... ...
... ... @@ -26,9 +26,9 @@ extern "C" {
T_JZsdkReturnCode Ifytek_2_Init();
T_JZsdkReturnCode Iflytek_2_Init();
T_JZsdkReturnCode Iflytek_2_DeInit();
T_JZsdkReturnCode Ifytek_2_Play(unsigned char *str, unsigned int str_len, int ReplyFlag);
T_JZsdkReturnCode Iflytek_2_Play(unsigned char *str, unsigned int str_len, int ReplyFlag);
... ...
... ... @@ -28,6 +28,8 @@ 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"
void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output)
... ... @@ -46,10 +48,18 @@ void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output)
//生产的数据长度 output->node->len
//char类型
JZSDK_LOG_DEBUG("生产了数据%d", output->node->len);
//JZSDK_LOG_DEBUG("生产了数据%d", output->node->len);
printf("生产了数据%d\n", output->node->len);
//将该数据发送到alsa播放器
AudioDeal_PcmDataInput(16000, (unsigned char *)output->node->value, output->node->len, 0);
//AudioDeal_PcmDataInput_TextSteam(16000, (unsigned char *)output->node->value, output->node->len);
if (iflytts_fp != NULL)
{
fwrite(output->node->value, sizeof(char), output->node->len, iflytts_fp);
fflush(iflytts_fp);
}
}
... ... @@ -74,6 +84,13 @@ int IflytekLib_2_TextToTts(int language,
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;
... ... @@ -101,6 +118,14 @@ int IflytekLib_2_TextToTts(int language,
//声音
//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);
... ... @@ -126,7 +151,27 @@ int IflytekLib_2_TextToTts(int language,
usleep(1000);
}
//JZSDK_LOG_INFO("合成完成");
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");
break;
}
AudioDeal_PcmDataInput_TextSteam(16000, buffer, len);
}
JZSDK_LOG_INFO("播放完成");
ret = AIKIT_End(g_AikitHandle);
... ... @@ -137,6 +182,14 @@ exit:
if(dataBuilder != nullptr) {
delete dataBuilder;
}
if (iflytts_fp != NULL)
{
fclose(iflytts_fp);
iflytts_fp = NULL;
}
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
... ...
... ... @@ -104,8 +104,8 @@ extern "C" {
#define MAX_TTS_VOLUME (82)
#elif DEVICE_VERSION == JZ_T40
#define MAX_VOLUME (100)
#define MAX_TTS_VOLUME (100)
#define MAX_VOLUME (63)
#define MAX_TTS_VOLUME (70)
#else
#define MAX_VOLUME (75)
... ...
... ... @@ -100,7 +100,7 @@ static T_JZsdkReturnCode FixedFilePlay()
nbBytes = fread(cbits, 1, 3 * 1276, PlayFixedFile_pcm_fp);
if(nbBytes > 0)
{
AudioDeal_PcmDataInput(g_opus_sampleRate, (unsigned char *)cbits, nbBytes, 1);
AudioDeal_PcmDataInput_RecordSteam(g_opus_sampleRate, (unsigned char *)cbits, nbBytes);
}
int totalSamples = nbBytes / (2);
... ...
... ... @@ -68,6 +68,9 @@ static T_JZsdkReturnCode Opus_RealTimeVoiceInit(int decode_rate)
ReadTimeVoice_StatusFlag = JZ_FLAGCODE_ON;
RealTimeDecodeRate = decode_rate;
//将音频库里的回音抑制开了
AudioDeal_EchoCancellation_Init(decode_rate);
//2、创建线程输入缓冲池线程
ret = Opus_RealTimeVoice_WriteData_init();
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
... ... @@ -225,7 +228,7 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len
pcm_bytes[2 * i + 1] = (TempPcm[i] >> 8) & 0xFF;
}
AudioDeal_PcmDataInput(RealTimeDecodeRate, pcm_bytes, frame_size*2, 1);
AudioDeal_PcmDataInput_RealTimeSteam(RealTimeDecodeRate, pcm_bytes, frame_size*2);
if (decodeErrorFlag == JZ_FLAGCODE_ON)
{
... ...
... ... @@ -119,7 +119,8 @@ T_JZsdkReturnCode SearchLight_SetBrightness(int left, int right, int FlushTempLu
#elif (DEVICE_VERSION == JZ_T40)
HalSend_type1Send_SearchLight_SetLumen(UART_DEV_2, left, right, 0x20);
int lumen = MAX(left, right);
HalSend_type1Send_SearchLight_SetSingleLumem(UART_DEV_2, lumen, 0x20);
#elif (DEVICE_VERSION == JZ_H1T)
... ... @@ -237,7 +238,7 @@ T_JZsdkReturnCode SearchLight_Get_SearchLightAttribute(T_JzSearchLightAttribute
* ********************/
T_JZsdkReturnCode SearchLight_Flush_SearchLightAttribute()
{
#if DEVISE_VERSION == JZ_H1T
#if DEVICE_VERSION == JZ_H1T
HalSend_type1Send_CheckStatus_SearchLight_Attribute(UART_DEV_1);
#endif
... ... @@ -252,7 +253,7 @@ T_JZsdkReturnCode SearchLight_Flush_SearchLightAttribute()
* *************/
T_JZsdkReturnCode SearchLight_Flush_SearchLightTemerature()
{
#if DEVISE_VERSION == JZ_H1T
#if DEVICE_VERSION == JZ_H1T
HalSend_type1Send_CheckStatus_SearchLight_Temperture(UART_DEV_1);
#endif
... ...
... ... @@ -48,4 +48,9 @@ T_JZsdkReturnCode SearchLight_Obtain_Frequency(int Frequency);
T_JZsdkReturnCode SearchLight_Obtain_Brightness(int left, int right);
T_JZsdkReturnCode SearchLight_Obtain_Mode(E_JzSearchLightMode mode);
T_JZsdkReturnCode JZsdk_SearchLight_SetMessageSubFlag(int InputFlag);
int JZsdk_SearchLight_GetMessageSubFlag(void);
T_JZsdkReturnCode SearchLight_Init(enum JZ_MODULE_CONTROL_WAY Mode);
#endif
... ...
... ... @@ -94,7 +94,7 @@ static int JZsdk_SearchLightGetLimitTemp(int DeviceMode)
break;
case JZ_T40:
return 70;
return 65;
break;
default:
... ...
... ... @@ -13,8 +13,6 @@
#include "./SearchLightTemControl.h"
#include "../SearchLight.h"
#include "Lighting_InAndOut.h"
static int g_InputTemp = 0; //全局输入温度
static int g_InputLumen = 0; //全局输入亮度
static int g_OutputLumen = 0; //温控线程返回来的亮度
... ... @@ -124,7 +122,7 @@ static void *TempControl_TempTask(void *arg)
if (light_mode != JZ_FLAGCODE_OFF)
{
//重设亮度
UIcontrol_Set_SearchLightLumen(NO_SPECIFIED, 0, Lumen, Lumen);
UIcontrol_Set_SearchLightLumen(NO_SPECIFIED, JZ_FLAGCODE_OFF, Lumen, Lumen);
}
}
... ...
... ... @@ -7,6 +7,7 @@
#include "Ircut/ircut.h"
#include "SideLaser/SideLaser.h"
#include "Hal_Send/HalSend.h"
static T_JZsdkReturnCode SideLaser_RealCotrol(int LaserNum, int status);
... ... @@ -20,13 +21,18 @@ static int g_SideLaserControl = JZ_FLAGCODE_OFF;
static int SideLaser_Frequency = 50; //1~100
static void *SideLaserControl_task(void *arg)
{
int status = JZ_FLAGCODE_OFF;
static T_SideLaserMode Last_LaserMode = SIDE_LASER_OFF;
#if DEVICE_VERSION == JZ_U3S
while (1)
{
switch (g_SideLaser_RealMode)
{
case SIDE_LASER_OFF:
... ... @@ -149,8 +155,34 @@ static void *SideLaserControl_task(void *arg)
}
delayMs(10);
}
#endif
#if DEVICE_VERSION == JZ_T40
while(1)
{
if (Last_LaserMode != g_SideLaser_RealMode)
{
Last_LaserMode = g_SideLaser_RealMode;
if (g_SideLaser_RealMode == SIDE_LASER_OFF)
{
HalSend_type1Send_SetLaserControl(UART_DEV_2, 0x20 ,JZ_FLAGCODE_OFF);
}
else
{
int mode = g_SideLaser_RealMode - 1;
HalSend_type1Send_SetLaserControl(UART_DEV_2, 0x20 ,JZ_FLAGCODE_ON);
HalSend_type1Send_SetLaserMode(UART_DEV_2, 0x20, mode);
}
}
}
#endif
}
/************************************
... ...
#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
... ...
... ... @@ -87,6 +87,7 @@ 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);
}
}
... ...
#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
... ...
/**
********************************************************************
* @file WarningLight_V3S.h
* WarningLight_V3S的头文件
* @file Psdk_Ui.h
* Psdk_Ui的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef WARNINGLIGHT_V3S_H
#define WARNINGLIGHT_V3S_H
#ifndef PSDK_UI_H
#define PSDK_UI_H
/* Includes ------------------------------------------------------------------*/
#include "./WarningLight_V3S_H1T/WarningLight_V3S_H1T.h"
#include "./WarningLight_V3S_TFA1/WarningLight_V3S_TFA1.h"
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "UI_control/WidegMgmt/JZsdk_WidgetIndex.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_UI_value_set(JZsdk_Widget_Control index, int value);
#ifdef __cplusplus
... ...
... ... @@ -4,7 +4,6 @@
#include "BaseConfig.h"
#include "Megaphone/Megaphone.h"
#include "Lighting_InAndOut.h"
#include "Gimbal/Gimbal.h"
#include "Psdk_UI_io.h"
#include "ircut.h"
... ... @@ -33,6 +32,10 @@
#include "SearchLight/SearchLight.h"
#endif
#ifdef WARNLIGHT_STATUS_ON
#include "WarnLight/WarnLight.h"
#endif
static char *UI_CONTROL_ERROR = "ui_control处错误";
/********************************************************************************************************
... ... @@ -1138,7 +1141,7 @@ T_JZsdkReturnCode UIcontrol_Obtain_GimbalLinkage(int DeviceName, int GimbalLinka
**********/
T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value)
{
#ifdef LIGHTING_STATUS_ON
#ifdef SEARCHLIGHT_STATUS_ON
//调用探照灯的接口
T_JZsdkReturnCode ret = SearchLight_SetFrequency(value);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
... ... @@ -1188,7 +1191,7 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value)
**********/
T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int value)
{
#ifdef LIGHTING_STATUS_ON
#ifdef SEARCHLIGHT_STATUS_ON
//调用探照灯的灯光模式接口
T_JZsdkReturnCode ret = SearchLight_SetMode(value);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
... ... @@ -1238,7 +1241,7 @@ T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int value)
**********/
T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlush, int value1, int value2)
{
#ifdef LIGHTING_STATUS_ON
#ifdef SEARCHLIGHT_STATUS_ON
//检查是否合法
if (value1 >= 100)
{
... ... @@ -1271,24 +1274,24 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlus
//获取探照灯属性
T_JzSearchLightAttribute LightAttribute;
SearchLight_Get_SearchLightAttribute(&LightAttribute);
int LeftLumen = LightAttribute.LeftBrightness;
int RightLumen = LightAttribute.RightBrightness;
int LeftTemp = LightAttribute.LeftTemperature;
int RightTemp = LightAttribute.RightTemperature;
//通知其他设备的ui界面变化
//如果4G模块有启动
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
{
HalSend_type1Send_SearchLight_Lumen(UART_4G, LeftLumen, RightLumen);
HalSend_type1Send_SearchLight_Lumen(UART_4G, LeftTemp, RightTemp);
}
//如果设备1有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1) )
{
HalSend_type1Send_SearchLight_Lumen(UART_DEV_1, LeftLumen, RightLumen);
HalSend_type1Send_SearchLight_Lumen(UART_DEV_1, LeftTemp, RightTemp);
}
//如果设备2有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2) )
{
HalSend_type1Send_SearchLight_Lumen(UART_DEV_2, LeftLumen, RightLumen);
HalSend_type1Send_SearchLight_Lumen(UART_DEV_2, LeftTemp, RightTemp);
}
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
... ... @@ -1305,12 +1308,26 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlus
* 查询灯光属性
*
**********/
T_JZsdkReturnCode UIcontrol_FlushSearchLightLightAttribute()
T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightLightAttribute(int *ValueLeftLumen, int *ValueRightLumen, int *ValueMode, int *ValueFrequency)
{
#ifdef SEARCHLIGHT_STATUS_ON
//刷新探照灯属性
SearchLight_Flush_SearchLightAttribute();
T_JzSearchLightAttribute LightAttribute;
T_JZsdkReturnCode ret = SearchLight_Get_SearchLightAttribute(&LightAttribute);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
printf("%s:%s\n",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret));
return ret;
}
*ValueLeftLumen = LightAttribute.LeftBrightness;
*ValueRightLumen = LightAttribute.RightBrightness;
*ValueMode = LightAttribute.Mode;
*ValueFrequency = LightAttribute.Frequency;
#endif
}
... ... @@ -1346,7 +1363,7 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightTemperture(int *ValueLeftTemp
******************/
T_JZsdkReturnCode UIcontrol_Set_SearchLight_MessageSubscribe(int DeviceName, int value)
{
#ifdef LIGHTING_STATUS_ON
#ifdef SEARCHLIGHT_STATUS_ON
//调用探照灯的接口
T_JZsdkReturnCode ret = JZsdk_SearchLight_SetMessageSubFlag(value);
... ... @@ -1362,9 +1379,9 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLight_MessageSubscribe(int DeviceName, int
//设置警灯状态
T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int value1, int value2)
{
#ifdef LIGHTING_STATUS_ON
#ifdef WARNLIGHT_STATUS_ON
//调用探照灯的接口
T_JZsdkReturnCode ret = Lighting_Set_WarningLight_Status(value1, value2);
T_JZsdkReturnCode ret = WarnLight_Set_StatusAndMode(value1, value2);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
printf("%s:%s\n",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret));
... ... @@ -1373,25 +1390,25 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int val
delayMs(10);
//获取当前警灯状态
int status, mode;
Lighting_Get_WarningLight_Status(&status, &mode);
//获取当前警灯属性
T_JzWarnLightAttribute LightAttribute;
WarnLight_Get_Attribute(&LightAttribute);
//通知其他设备的ui界面变化
//如果4G模块有启动
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
{
HalSend_type1Send_WarningLight_Status(UART_4G, status, mode);
HalSend_type1Send_WarningLight_Status(UART_4G, LightAttribute.status, LightAttribute.mode);
}
//如果设备1有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1) )
{
HalSend_type1Send_WarningLight_Status(UART_DEV_1, status, mode);
HalSend_type1Send_WarningLight_Status(UART_DEV_1, LightAttribute.status, LightAttribute.mode);
}
//如果设备2有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2) )
{
HalSend_type1Send_WarningLight_Status(UART_DEV_2, status, mode);
HalSend_type1Send_WarningLight_Status(UART_DEV_2, LightAttribute.status, LightAttribute.mode);
}
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
... ... @@ -1407,9 +1424,9 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int val
//设置警灯颜色
T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, int value2)
{
#ifdef LIGHTING_STATUS_ON
#ifdef WARNLIGHT_STATUS_ON
//调用探照灯的接口
T_JZsdkReturnCode ret = Lighting_Set_WarningLight_Color(value1, value2);
T_JZsdkReturnCode ret = WarnLight_Set_Color(value1, value2);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
printf("%s:%s\n",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret));
... ... @@ -1418,25 +1435,25 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i
delayMs(10);
//获取当前警灯颜色
int color1, color2;
Lighting_Get_WarningLight_Color(&color1, &color2);
//获取当前警灯属性
T_JzWarnLightAttribute LightAttribute;
WarnLight_Get_Attribute(&LightAttribute);
//通知其他设备的ui界面变化
//如果4G模块有启动
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
{
HalSend_type1Send_WarningLight_Color(UART_4G, color1, color2);
HalSend_type1Send_WarningLight_Color(UART_4G, LightAttribute.Color1, LightAttribute.Color2);
}
//如果设备1有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1) )
{
HalSend_type1Send_WarningLight_Color(UART_DEV_1, color1, color2);
HalSend_type1Send_WarningLight_Color(UART_DEV_1, LightAttribute.Color1, LightAttribute.Color2);
}
//如果设备2有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2) )
{
HalSend_type1Send_WarningLight_Color(UART_DEV_2, color1, color2);
HalSend_type1Send_WarningLight_Color(UART_DEV_2, LightAttribute.Color1, LightAttribute.Color2);
}
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
... ... @@ -1456,9 +1473,19 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i
**********/
T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightStatus(int *ValueSwitch, int *ValueMode)
{
#ifdef LIGHTING_STATUS_ON
//获取本地的警灯状态,并主动刷新一次警灯状态
Lighting_CheckStatus_WarningLightStatus(ValueSwitch, ValueMode);
#ifdef WARNLIGHT_STATUS_ON
//去刷新一次警灯状态
WarnLight_Flush_StatusAndMode();
//获取警灯属性
T_JzWarnLightAttribute LightAttribute;
WarnLight_Get_Attribute(&LightAttribute);
*ValueSwitch = LightAttribute.status;
*ValueMode = LightAttribute.mode;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#endif
}
... ... @@ -1469,9 +1496,20 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightStatus(int *ValueSwitch, int
**********/
T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightColor(int *ValueColor1, int *ValueColor2)
{
#ifdef LIGHTING_STATUS_ON
//获取本地的警灯颜色,并主动刷新一次警灯颜色
Lighting_CheckStatus_WarningLightColor(ValueColor1, ValueColor2);
#ifdef WARNLIGHT_STATUS_ON
//去刷新一次警灯颜色
WarnLight_Flush_StatusAndMode();
//获取警灯属性
T_JzWarnLightAttribute LightAttribute;
WarnLight_Get_Attribute(&LightAttribute);
*ValueColor1 = LightAttribute.Color1;
*ValueColor2 = LightAttribute.Color2;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#endif
}
... ... @@ -1603,7 +1641,7 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_OutPutPowerValue(int *Value)
**********/
T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Frequency(int DeviceName, int Frequency)
{
#ifdef LIGHTING_STATUS_ON
#ifdef SEARCHLIGHT_STATUS_ON
//1、设置本地存储值
SearchLight_Obtain_Frequency(Frequency);
... ... @@ -1639,7 +1677,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Frequency(int DeviceName, int Freq
**********/
T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Mode(int DeviceName, int mode)
{
#ifdef LIGHTING_STATUS_ON
#ifdef SEARCHLIGHT_STATUS_ON
//1、设置本地存储值
SearchLight_Obtain_Mode(mode);
... ... @@ -1675,7 +1713,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Mode(int DeviceName, int mode)
**********/
T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Lumen(int DeviceName, int LeftLumen, int RightLumen)
{
#ifdef LIGHTING_STATUS_ON
#ifdef SEARCHLIGHT_STATUS_ON
//1、设置本地存储值
SearchLight_Obtain_Brightness(LeftLumen, RightLumen);
... ... @@ -1715,7 +1753,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Lumen(int DeviceName, int LeftLume
**********/
T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int LeftTemperature, int RightTemperature)
{
#ifdef LIGHTING_STATUS_ON
#ifdef SEARCHLIGHT_STATUS_ON
//1、设置本地存储值
SearchLight_Obtain_Temperature(LeftTemperature, RightTemperature);
... ... @@ -1728,15 +1766,10 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int Le
//如果设备1有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1) )
{
#ifdef LIGHTING_STATUS_ON
if (JZsdk_SearchLight_GetMessageSubFlag() == JZ_FLAGCODE_ON)
{
HalSend_type1Send_SearchLight_Temperature(UART_DEV_1, LeftTemperature, RightTemperature);
}
#else
HalSend_type1Send_SearchLight_Temperature(UART_DEV_1, LeftTemperature, RightTemperature);
#endif
}
}
//如果设备2有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2) )
... ... @@ -1751,8 +1784,81 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int Le
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
/*********
*
* 收到单边灯光温度
*
**********/
T_JZsdkReturnCode UIcontrol_ObtainSearchLight_SingleTemperature(int DeviceName, int FrameSequence, int Temperature)
{
//目前只有T40用
#ifdef SEARCHLIGHT_STATUS_ON
int Brocastflag = JZ_FLAGCODE_OFF;
#if DEVICE_VERSION == JZ_T40
//先读取本地探照灯属性
T_JzSearchLightAttribute SearchLightAttribute;
SearchLight_Get_SearchLightAttribute(&SearchLightAttribute);
//分析出左右
if (FrameSequence == 0x21) //左
{
SearchLight_Obtain_Temperature(Temperature, SearchLightAttribute.RightTemperature);
Brocastflag = JZ_FLAGCODE_ON;
}
if (FrameSequence == 0x22) //右
{
SearchLight_Obtain_Temperature(SearchLightAttribute.LeftTemperature, Temperature);
Brocastflag = JZ_FLAGCODE_ON;
}
#endif
T_JzSearchLightAttribute Attribute;
SearchLight_Get_SearchLightAttribute(&Attribute);
if(Brocastflag == JZ_FLAGCODE_ON && FrameSequence == 0x21)
{
//通知其他设备的ui界面变化
//如果4G模块有启动
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
{
HalSend_type1Send_SearchLight_Temperature(UART_4G, Attribute.LeftTemperature, Attribute.RightTemperature);
}
//如果设备1有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1) )
{
if (JZsdk_SearchLight_GetMessageSubFlag() == JZ_FLAGCODE_ON)
{
HalSend_type1Send_SearchLight_Temperature(UART_DEV_1, Attribute.LeftTemperature, Attribute.RightTemperature);
}
}
//如果设备2有启动
if ( (JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2) )
{
HalSend_type1Send_SearchLight_Temperature(UART_DEV_1, Attribute.LeftTemperature, Attribute.RightTemperature);
}
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
{
HalSend_type1Send_SearchLight_Temperature(UART_DEV_1, Attribute.LeftTemperature, Attribute.RightTemperature);
}
}
#endif
}
/****************************************************************************************************************************************
*
* 警灯相关
... ... @@ -1765,9 +1871,10 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int Le
**********/
T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status, int mode)
{
#ifdef LIGHTING_STATUS_ON
#ifdef WARNLIGHT_STATUS_ON
//1、设置本地存储值
Lighting_Obtain_WarningLight_Status(status, mode);
WarnLight_Obatin_StatusAndMode(status, mode);
//2、通知其他设备变化
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
... ... @@ -1801,9 +1908,9 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status
**********/
T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Color(int DeviceName, int color1, int color2)
{
#ifdef LIGHTING_STATUS_ON
#ifdef WARNLIGHT_STATUS_ON
//1、设置本地存储值
Lighting_Obtain_WarningLight_Color(color1, color2);
WarnLight_Obatin_Color(color1, color2);
//2、通知其他设备变化
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
... ...
... ... @@ -75,8 +75,10 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalAngle(int *PitchValue, int *YawVal
T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value);
T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int mode);
T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlush, int value1, int value2);
T_JZsdkReturnCode UIcontrol_FlushSearchLightLightAttribute();
T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightLightAttribute(int *ValueLeftLumen, int *ValueRightLumen, int *ValueMode, int *ValueFrequency);
T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightTemperture(int *ValueLeftTemperature, int *ValueRightTemperaturen);
T_JZsdkReturnCode UIcontrol_ObtainSearchLight_SingleTemperature(int DeviceName, int FrameSequence, int Temperature);
T_JZsdkReturnCode UIcontrol_Set_SearchLight_MessageSubscribe(int DeviceName, int value);
//警灯类
... ...
#include "JZsdkLib.h"
#include "version_choose.h"
#include "Hal_Send/HalSend.h"
#include "WarnLight/WarnLight.h"
typedef struct T_JzWarnLightInfo{
T_JzWarnLightAttribute Attribute;
JZ_MODULE_CONTROL_WAY ControlMode; //控制模式
}T_JzWarnLightInfo;
static T_JzWarnLightInfo g_WarnLightInfo;
T_JZsdkReturnCode WarnLight_Init(enum JZ_MODULE_CONTROL_WAY Mode)
{
//初始化参数
static T_JzWarnLightAttribute Attribute = {
.Color1 = E_JZ_WARNLIGHT_COLOR_RED,
.Color2 = E_JZ_WARNLIGHT_COLOR_BLUE,
.mode = E_JZ_WARNLIGHT_MODE_ALTERATING_FAST_FALSHING,
.status = JZ_FLAGCODE_OFF,
};
memcpy(&g_WarnLightInfo.Attribute, &Attribute, sizeof(T_JzWarnLightAttribute));
g_WarnLightInfo.ControlMode = Mode;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode WarnLight_Set_StatusAndMode(int status, int mode)
{
JZSDK_LOG_DEBUG("WarnLight_Set_StatusAndMode: status = %d, mode = %d", status, mode);
#if DEVICE_VERSION == JZ_H1T
HalSend_type1Send_Set_WarningLight_Status(UART_DEV_1, 0x00, status, mode);
#elif DEVICE_VERSION == TF_A1 || \
DEVICE_VERSION == JZ_U3S || \
DEVICE_VERSION == JZ_U3D || \
DEVICE_VERSION == JZ_U30
HalSend_type1Send_Set_WarningLight_Status(UART_DEV_2, 0x00, status, mode);
#elif DEVICE_VERSION == JZ_T40
HalSend_type1Send_Set_WarningLight_Status(UART_DEV_2, 0x20, status, mode);
#endif
g_WarnLightInfo.Attribute.mode = mode;
g_WarnLightInfo.Attribute.status = status;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//收到警灯状态
T_JZsdkReturnCode WarnLight_Obatin_StatusAndMode(int status, int mode)
{
JZSDK_LOG_DEBUG("%x警灯状态改变 状态%d 模式%d",DEVICE_VERSION, status ,mode);
g_WarnLightInfo.Attribute.mode = mode;
g_WarnLightInfo.Attribute.status = status;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 刷新警灯状态
*
**********/
T_JZsdkReturnCode WarnLight_Flush_StatusAndMode()
{
//如果是中继设备,则进行一次灯光属性查询
if(g_WarnLightInfo.ControlMode == JZ_MODULE_CONTROL_WAY_TRANSPARENT)
{
//查询灯光属性
HalSend_type1Send_CheckStatus_WarningLightStatus(UART_DEV_1);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置警灯颜色
T_JZsdkReturnCode WarnLight_Set_Color(int Color1, int Color2)
{
JZSDK_LOG_DEBUG("设置0x%x:警灯颜色 Color1:0x%x, color:0x%x",DEVICE_VERSION, Color1, Color2);
#if DEVICE_VERSION == JZ_H1T
HalSend_type1Send_Set_WarningLight_Color(UART_DEV_1, 0x00, Color1, Color2);
#elif DEVICE_VERSION == TF_A1 || \
DEVICE_VERSION == JZ_U3S || \
DEVICE_VERSION == JZ_U3D || \
DEVICE_VERSION == JZ_U30
HalSend_type1Send_Set_WarningLight_Color(UART_DEV_2, 0x00, Color1, Color2);
#elif DEVICE_VERSION == JZ_T40
HalSend_type1Send_Set_WarningLight_Color(UART_DEV_2, 0x20, Color1, Color2);
#endif
g_WarnLightInfo.Attribute.Color1 = Color1;
g_WarnLightInfo.Attribute.Color2 = Color2;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//收到警灯颜色
T_JZsdkReturnCode WarnLight_Obatin_Color(int Color1, int Color2)
{
JZSDK_LOG_DEBUG("收到0x%x:警灯颜色 Color1:0x%x, color:0x%x",DEVICE_VERSION, Color1, Color2);
g_WarnLightInfo.Attribute.Color1 = Color1;
g_WarnLightInfo.Attribute.Color2 = Color2;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//刷新警灯颜色
T_JZsdkReturnCode WarnLight_Flush_Color()
{
//如果是中继设备,则进行一次灯光属性查询
if(g_WarnLightInfo.ControlMode == JZ_MODULE_CONTROL_WAY_TRANSPARENT)
{
//查询灯光属性
HalSend_type1Send_CheckStatus_WarningLightColor(UART_DEV_1);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//获取警灯属性
T_JZsdkReturnCode WarnLight_Get_Attribute(T_JzWarnLightAttribute *Attribute)
{
if(Attribute == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
memcpy(Attribute, &g_WarnLightInfo.Attribute, sizeof(T_JzWarnLightAttribute));
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
/**
********************************************************************
* @file WarnLight.h
* WarnLight的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef WARNLIGHT_H
#define WARNLIGHT_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
typedef struct T_JzWarnLightAttribute{
int mode; //模式
int status; //状态
int Color1; //颜色1
int Color2; //颜色2
}T_JzWarnLightAttribute;
typedef enum E_JzWarnLightColor{
E_JZ_WARNLIGHT_COLOR_RED = 1,
E_JZ_WARNLIGHT_COLOR_GREEN = 2,
E_JZ_WARNLIGHT_COLOR_BLUE = 3,
E_JZ_WARNLIGHT_COLOR_YELLOW = 4,
E_JZ_WARNLIGHT_COLOR_WHITE = 5,
}E_JzWarnLightColor;
typedef enum E_JzWarnLightMode{
E_JZ_WARNLIGHT_MODE_ALTERATING_FAST_FALSHING = 0, //交替快速闪烁
E_JZ_WARNLIGHT_MODE_ALTERATING_SLOW_FALSHING = 1, //交替慢速闪烁
E_JZ_WARNLIGHT_MODE_ALTERATING_UNISONG_FALSHING = 2, //交替单色闪烁
E_JZ_WARNLIGHT_MODE_SIMULTANEOUS_FAST_FALSHING = 3, //同时快速闪烁
E_JZ_WARNLIGHT_MODE_SIMULTANEOUS_SLOW_FALSHING = 4, //同时慢速闪烁
}E_JzWarnLightMode;
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode WarnLight_Set_StatusAndMode(int status, int mode);
T_JZsdkReturnCode WarnLight_Set_Color(int Color1, int Color2);
T_JZsdkReturnCode WarnLight_Get_Attribute(T_JzWarnLightAttribute *Attribute);
T_JZsdkReturnCode WarnLight_Flush_StatusAndMode();
T_JZsdkReturnCode WarnLight_Flush_Color();
T_JZsdkReturnCode WarnLight_Obatin_StatusAndMode(int status, int mode);
T_JZsdkReturnCode WarnLight_Obatin_Color(int Color1, int Color2);
T_JZsdkReturnCode WarnLight_Init(enum JZ_MODULE_CONTROL_WAY Mode);
#ifdef __cplusplus
}
#endif
#endif
... ...