作者 ookk303

修改了dji的speaker逻辑,避免说循环无法打断的情况,修正了4g警灯相关的同步问题,修正了opusfile列表上传索引值未正常归0的问题

修复了 修改hal层时,devicepsdk的结构体出错,导致uartid错乱的问题
增加了部分警灯5b帧
# 编译链的配置
#1、编译链与设备类型的选择
set(DEVICE_NAME JZ_H150A)
set(DEVICE_NAME JZ_T40S)
#上一行为禁止修改行
message("**************************JZSDK构建编译开始***************************\n")
... ...
#include <stdio.h>
#include <stdio.h>
#include "../JZsdk_Code/JZsdk_Code.h"
... ... @@ -328,7 +328,7 @@ static int Comparison_5BFRAME_FirstLevelCode_0x66(char *getdata)
//回复警灯控制2类
case 0xA2:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_CONTROL_2;
return JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_CONTROL_2;
break;
default:
... ...
... ... @@ -62,14 +62,17 @@ static T_JZsdkReturnCode JzUser_LocalWrite(const JZ_U8* data, JZ_U16 dataLen)
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
realLen = fwrite(data, 1, dataLen, logFile);
fflush(logFile);
if (realLen != dataLen)
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
if (fflush(logFile) != 0)
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
//这里后续考虑加入保存fileno
//if (fflush(logFile) != 0)
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
//if (fsync(fileno(logFile)) != 0)
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
if (fsync(fileno(logFile)) != 0)
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -144,17 +147,17 @@ static T_JZsdkReturnCode JzUser_LocalWriteFsInit(const JZ_U8 *path)
fclose(logFileCnt);
//移除sd卡的计数文件
memset(systemCmd, 0, sizeof(systemCmd));
sprintf(systemCmd, "rm -f %sthelast", JZSDK_LOG_PATH);
ret = system(systemCmd);
if (ret != 0) {
JZSDK_LOG_ERROR("Remove file error, ret:%d.\r\n", ret);
}
////移除sd卡的计数文件
//memset(systemCmd, 0, sizeof(systemCmd));
//sprintf(systemCmd, "rm -f %sthelast", JZSDK_LOG_PATH);
//ret = system(systemCmd);
//if (ret != 0) {
// JZSDK_LOG_ERROR("Remove file error, ret:%d.\r\n", ret);
//}
//复制日志计数文件到sd卡
memset(systemCmd, 0, sizeof(systemCmd));
sprintf(systemCmd, "cp %s %s", JZSDK_LOG_INDEX_FILE_NAME, JZSDK_LOG_PATH);
sprintf(systemCmd, "cp %s %s/thelast", JZSDK_LOG_INDEX_FILE_NAME, JZSDK_LOG_PATH);
ret = system(systemCmd);
if (ret != 0) {
JZSDK_LOG_ERROR("Copy file error, ret:%d.\r\n", ret);
... ...
/******************************
/******************************
*
* JZsdk的任务管理模块
*
... ... @@ -42,6 +42,8 @@ T_JZsdkReturnCode TaskManagement_Init()
pthread_cond_init(&TaskPool[i].condition, NULL);
pthread_create(&TaskPool[i].thread, NULL, TaskManagement_ThreadFunction, &TaskPool[i]);
}
}
/**************
... ...
... ... @@ -7,7 +7,7 @@
#define VERSION_CHOOSE_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h"
//1~10行 除了D可以修改版本选择 禁止动任何东西
#define DEVICE_VERSION JZ_H150A
#define DEVICE_VERSION JZ_T40S
//禁止修改行 选择是串口程序 还是 psdk程序
#define APP_VERSION APP_PSDK
... ... @@ -23,7 +23,7 @@
#define MODIFY_VERSION_TEN_POSITION 1
#define MODIFY_VERSION_ONE_POSITION 5
#define DEBUG_VERSION_TEN_POSITION 0
#define DEBUG_VERSION_ONE_POSITION 2
#define DEBUG_VERSION_ONE_POSITION 4
#define FIRMWARE_ORIGIN DOMESTIC_VERSION
... ...
... ... @@ -3483,6 +3483,8 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_LaserStatus(int Port, char *getbuf
//2、查询激光状态
int LaserControl = JZ_FLAGCODE_OFF;
int LaserMode = 0;
int LaserLumen = 0;
int LaserColor = 0;
T_JZsdkReturnCode ReturnCode = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#ifdef SIDE_LASER_STATUS_ON
... ... @@ -3494,6 +3496,15 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_LaserStatus(int Port, char *getbuf
LaserControl = LaserInfo.attribute.status;
LaserMode = LaserInfo.attribute.mode;
if(LaserInfo.PowerAttribute.flag == JZ_FLAGCODE_ON )
{
LaserLumen = LaserInfo.PowerAttribute.lumen;
LaserColor = LaserInfo.PowerAttribute.color;
HalSend_type1Send_LaserLumen(Port, 0x00, LaserLumen);
HalSend_type1Send_LaserColor(Port, 0x00, LaserColor);
}
#else
JZSDK_LOG_ERROR("没有加载侧边激光模块");
... ...
... ... @@ -1915,6 +1915,55 @@ T_JZsdkReturnCode HalSend_type1Send_LaserMode(int Uartport, int frameSequence, i
}
/********************
*
* 发送侧面激光亮度
*
* *************/
T_JZsdkReturnCode HalSend_type1Send_LaserLumen(int Uartport, int frameSequence, int Lumen)
{
JZSDK_LOG_INFO("发送侧面激光亮度值帧\n");
unsigned char sendbuf[256];
int send_buf_len;
//1、获取帧样板
JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_CHECKSTATUS_LASER_STATUS_LUMEN, sendbuf, &send_buf_len);
//2、写入数据
sendbuf[6] = frameSequence;
sendbuf[9] = Lumen;
//3、发送帧
HalSend_SendData(Uartport ,sendbuf, send_buf_len, MULTI_THREAD_SEND);
}
/********************
*
* 发送侧面激光颜色
*
* *************/
T_JZsdkReturnCode HalSend_type1Send_LaserColor(int Uartport, int frameSequence, int Color)
{
JZSDK_LOG_INFO("发送侧面激光颜色帧\n");
unsigned char sendbuf[256];
int send_buf_len;
//1、获取帧样板
JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_CHECKSTATUS_LASER_STATUS_COLOR, sendbuf, &send_buf_len);
//2、写入数据
sendbuf[6] = frameSequence;
sendbuf[9] = Color;
//3、发送帧
HalSend_SendData(Uartport ,sendbuf, send_buf_len, MULTI_THREAD_SEND);
}
/*************
*
* 发送探照灯温度
... ...
/**
/**
********************************************************************
* @file JZsdk_Uart_SendDeal.h
*
... ... @@ -131,6 +131,8 @@ T_JZsdkReturnCode HalSend_type1Send_CheckStatus_SearchLight_Temperture(int Uartp
T_JZsdkReturnCode HalSend_type1Send_WarningLight_Status(int Uartport, int status, int mode);
T_JZsdkReturnCode HalSend_type1Send_WarningLight_WarningLightMode2(int Uartport, int mode);
T_JZsdkReturnCode HalSend_type1Send_WarningLight_Color(int Uartport, int color1, int color2);
T_JZsdkReturnCode HalSend_type1Send_CheckStatus_WarningLightStatus(int Uartport);
T_JZsdkReturnCode HalSend_type1Send_CheckStatus_WarningLightColor(int Uartport);
... ... @@ -149,6 +151,8 @@ T_JZsdkReturnCode HalSend_type1Send_Reply_UpgradeStatus(int Uartport, int status
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_LaserLumen(int Uartport, int frameSequence, int Lumen);
T_JZsdkReturnCode HalSend_type1Send_LaserColor(int Uartport, int frameSequence, int Color);
T_JZsdkReturnCode HalSend_type1Send_SetLaserControl(int Uartport, int frameSequence, int Control);
... ...
... ... @@ -155,7 +155,7 @@ T_JZsdkReturnCode JZsdk_HalUartInit(T_JZsdk_UartInfo* pUartInfo)
g_pHalInfo->HaveUsePortId[g_pHalInfo->HaveUsePortNum] = pUartInfo->Base.PortId;
g_pHalInfo->HaveUsePortNum++;
JZSDK_LOG_INFO("UART端口 0x%x 初始化成功", pUartInfo->Base.PortId);
JZSDK_LOG_INFO("UART端口 第:%d 0x%x 初始化成功", (g_pHalInfo->HaveUsePortNum - 1), g_pHalInfo->HaveUsePortId[g_pHalInfo->HaveUsePortNum - 1]);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
unlock:
... ... @@ -296,16 +296,16 @@ T_JZsdkReturnCode JZsdk_HalDirectDataInit(T_JZsdk_DirectDataInfo* pDirectDataInf
// 4 初始化直通
//(只是把id打开)
// 5. 保存UART信息到UART数组(使用UartNum作为索引)
int Index = g_pHalInfo->DirectNum;
memcpy(&g_pHalInfo->DirectDataInfo[Index], pDirectDataInfo, sizeof(T_JZsdk_UartInfo));
g_pHalInfo->UartNum++;
memcpy(&g_pHalInfo->DirectDataInfo[Index], pDirectDataInfo, sizeof(T_JZsdk_DirectDataInfo));
g_pHalInfo->DirectNum++;
// 6. 记录端口ID到全局已使用表
g_pHalInfo->HaveUsePortId[g_pHalInfo->HaveUsePortNum] = g_pHalInfo->DirectDataInfo->Base.PortId;
g_pHalInfo->HaveUsePortNum++;
(g_pHalInfo->HaveUsePortNum)++;
JZSDK_LOG_INFO("DIRECT端口 0x%x 初始化成功", pDirectDataInfo->Base.PortId);
JZSDK_LOG_INFO("DIRECT端口 num:%d 0x%x 初始化成功", (g_pHalInfo->HaveUsePortNum - 1 ),pDirectDataInfo->Base.PortId);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
unlock:
... ...
... ... @@ -27,7 +27,7 @@ T_JZsdkReturnCode HeartBeat_HalCheck(void)
T_JZsdk_PortBase* portBase = JZsdk_FindPortBase(portId);
if (portBase == NULL)
{
JZSDK_LOG_WARN("端口 %d 在已使用列表中但未找到对应结构", portId);
JZSDK_LOG_WARN("第 %d 端口 %d 在已使用列表中但未找到对应结构",i ,portId);
continue;
}
... ...
... ... @@ -280,7 +280,7 @@ T_JZsdkReturnCode Gimbal_SetGimbalRange(int flag, int FrameSequence,int value)
* ************************************/
T_JZsdkReturnCode Gimbal_Set_GimbalSingleCalibration(E_JZ_GimbalSingleCalibrationMode Mode)
{
JZSDK_LOG_INFO("单边云台校准选择 Mode:%d 0x%x", Mode);
JZSDK_LOG_INFO("单边云台校准选择 Mode:%d", Mode);
switch (Mode)
{
... ...
... ... @@ -299,6 +299,8 @@ T_JZsdkReturnCode Megaphone_TTS_Play(unsigned char *str, unsigned int str_len, i
{
T_JZsdkReturnCode ret;
JZSDK_LOG_INFO("TTS_PLAY:%s",str);
memset(g_MegaphoneInfo, 0, sizeof(struct MegaphoneInfo));
memcpy(g_MegaphoneInfo->str,str,str_len);
g_MegaphoneInfo->str_len = str_len;
... ... @@ -1168,15 +1170,19 @@ T_JZsdkReturnCode Megaphone_Init()
//TTS功能初始化
Megaphone_TTS_Init();
JZSDK_LOG_INFO("TTS_INIT_SUCESS");
//音频文件管理功能初始化
Megaphone_AudioFile_Init();
JZSDK_LOG_INFO("AUDIO_FILE_INIT_SUCESS");
//pcm列表初始化
Megaphone_PcmFile_Init();
JZSDK_LOG_INFO("PCM_FILE_INIT_SUCESS");
//温控初始化
MegTempControl_Init();
JZSDK_LOG_INFO("MEG_TEMP_INIT_SUCESS");
//根据语言信息设置默认语言
E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo();
... ...
... ... @@ -60,6 +60,7 @@ T_JZsdkReturnCode OpusInfo_GetList(T_JZ_opusInfo** list, int* count);
T_JZsdkReturnCode OpusInfo_DeleteAllByName(const char* fileName);
T_JZsdkReturnCode OpusInfo_FlushList();
T_JZsdkReturnCode JZsdk_OpusFileSave_Get_g_TempOpus(T_OpusSaveParam* Param);
T_JZsdkReturnCode OpusInfo_Init();
... ...
... ... @@ -363,6 +363,8 @@ DecodeFinsh:
/*******************
*
* opus解码线程
* 注意,这里只会第一上传的opus调用
* 如果是opus列表播放,是不会用到这里的
*
*******************/
static void *DecodeOpus_task(void *arg)
... ... @@ -374,6 +376,16 @@ static void *DecodeOpus_task(void *arg)
{
//广播解码失败
Megaphone_Broadcast_OpusDecodeStatus(1);
//如果开启了opus保存,则把opus列表里的也移除
//从opusfilesave.c 里获取第一次上传后,是否开启保存,以及保存的地址
T_OpusSaveParam Param = { 0 };
JZsdk_OpusFileSave_Get_g_TempOpus(&Param);
if (Param.saveflag == JZ_FLAGCODE_ON && Param.FileName != NULL)
{
OpusInfo_DeleteAllByName(Param.FileName);
}
}
else
{
... ...
... ... @@ -6,7 +6,13 @@
#define OPUS_TEMP_SAVE_DIR "/root/test_audio.opus"
static T_OpusSaveParam g_TempOpus = {0};
static T_OpusSaveParam g_TempOpus = {
.BitRate = 0,
.Channels = 0,
.FileName = {0},
.SampleRate = 0,
.saveflag = JZ_FLAGCODE_OFF
};
static int g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF; //判断是否开启保存中的标志位
static int g_OpusFile_SaveLen = 0; //当前文件已存储的长度
static T_JZTaskHandle s_OpusSaveThread = NULL;
... ... @@ -19,6 +25,13 @@ int OpusFile_GetSaveFlag()
return g_OpusFile_SaveFlag;
}
T_JZsdkReturnCode JZsdk_OpusFileSave_Get_g_TempOpus(T_OpusSaveParam *Param)
{
memcpy(Param, &g_TempOpus, sizeof(T_OpusSaveParam));
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/******************
*
*
... ... @@ -72,6 +85,7 @@ T_JZsdkReturnCode OpusFile_SaveOpusFileStart(T_OpusSaveParam TempOpus)
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
g_OpusFile_SaveLen = 0;
g_OpusFile_SaveFlag = JZ_FLAGCODE_ON;
//创建存储显示线程
... ...
... ... @@ -18,6 +18,8 @@
#include "iflytek_tts.h"
static int ttsFlag = JZ_FLAGCODE_OFF; //避免同时2个tts线程
static T_JZsdkReturnCode IflyTek_2_Tts_Input(int language, char *Text, int speed, int volume)
{
//1、将JZSDK的Language索引值转换为 IFLTEK2的语言索引值
... ... @@ -157,6 +159,8 @@ static T_JZsdkReturnCode TTS_FILE_play(struct t_Megaphone_tts_param *Megaphone_t
//TTS合成线程
static void *Play_cntts_pthread(void *arg)
{
ttsFlag = JZ_FLAGCODE_ON;
struct t_Megaphone_tts_param *Megaphone_tts_param = (struct t_Megaphone_tts_param *) arg;
int ReplyFlag = Megaphone_tts_param->ReplyFlag;
... ... @@ -199,6 +203,7 @@ static void *Play_cntts_pthread(void *arg)
Megaphone_status_Broadcast(JZ_FLAGCODE_OFF);
}
ttsFlag = JZ_FLAGCODE_OFF;
}
/*********
... ... @@ -208,6 +213,12 @@ static void *Play_cntts_pthread(void *arg)
**********/
T_JZsdkReturnCode Iflytek_2_Play(unsigned char *str, unsigned int str_len, int ReplyFlag)
{
//保证一次只有一个文本线程在运行
while (ttsFlag == JZ_FLAGCODE_ON)
{
delayMs(1);
}
//1、制造一个数据产生函数
pthread_t TTS_flie_task;
pthread_attr_t task_attribute; //线程属性
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "Megaphone.h"
#include "./VolumeLimit.h"
#include "DeviceInfo/DeviceInfo.h"
... ... @@ -124,7 +124,7 @@ static T_JZsdkReturnCode Megaphone_SetTTSvolume()
//v3s自设系统 要提高10初始音量
if (DEVICE_VERSION == JZ_H10T || DEVICE_VERSION == JZ_U3 ||
DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D ||
DEVICE_VERSION == JZ_U30 || DEVICE_VERSION == JZ_T40 || DEVICE_VERSION == JZ_T40S)
DEVICE_VERSION == JZ_U30 || DEVICE_VERSION == JZ_T40S || DEVICE_VERSION == JZ_H150A)
{
if (value > 0)
{
... ...
... ... @@ -104,6 +104,7 @@ static T_JZsdkReturnCode UI_control_SecondaryWidgetArraySet(int type, int value)
T_JZsdkToPsdkHandler *handle = ExpansionApi_JZsdkToPsdk_GetHandler();
if (handle == NULL)
{
JZSDK_LOG_ERROR("api handle is null");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
... ... @@ -129,6 +130,10 @@ static T_JZsdkReturnCode UI_control_SecondaryWidgetArraySet(int type, int value)
{
return handle->Set_UI_SpeakerWidget_Volume(value);
}
else
{
JZSDK_LOG_ERROR("音量表格错误");
}
break;
... ...
#include "Psdk_ui_value_menu.h"
#include "Psdk_ui_value_menu.h"
#include "JZsdkLib.h"
#include "DeviceInfo/DeviceInfo.h"
... ... @@ -322,14 +322,14 @@ static T_JZsdkReturnCode JZsdk_UI_DJIpsdk_Widget_set(JZsdk_Widget_Control index,
case JZSDK_WIDGET_SIDE_LASER_LUMEN:
{
temp = value;
UI_control_WidgetArraySet(34, temp);
UI_control_WidgetArraySet(30, temp);
}
break;
case JZSDK_WIDGET_SIDE_LASER_COLOR:
{
temp = value;
UI_control_WidgetArraySet(35, temp);
UI_control_WidgetArraySet(31, temp);
}
break;
... ...
... ... @@ -1927,6 +1927,10 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status
//1、设置本地存储值
WarnLight_Obatin_StatusAndMode(status, mode);
//获取当前警灯属性
T_JzWarnLightAttribute LightAttribute;
WarnLight_Get_Attribute(&LightAttribute);
//2、通知其他设备变化
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) )
{
... ... @@ -1945,7 +1949,18 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status
//如果psdk接口已经使用
if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK )
{
int index;
if (LightAttribute.status == JZ_FLAGCODE_OFF)
{
index = 0;
}
else
{
index = LightAttribute.mode;
}
JZsdk_Psdk_UI_io_Set_WarningLightMode(JZ_FLAGCODE_OFF, index);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
... ... @@ -2802,14 +2817,17 @@ T_JZsdkReturnCode UIcontrol_SideLaser_SetLumen(int DeviceName, int WeatherFlush,
//2、通知其他设备变化
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G))
{
HalSend_type1Send_LaserLumen(UART_4G, 0x00, Info.PowerAttribute.lumen);
}
//如果设备1有启动
if ((JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1))
{
HalSend_type1Send_LaserLumen(UART_DEV_1, 0x00, Info.PowerAttribute.lumen);
}
//如果设备2有启动
if ((JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2))
{
HalSend_type1Send_LaserLumen(UART_DEV_2, 0x00, Info.PowerAttribute.lumen);
}
//如果psdk接口已经使用
if ((JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK)
... ... @@ -2844,14 +2862,17 @@ T_JZsdkReturnCode UIcontrol_SideLaser_SetColor(int DeviceName, int value)
//2、通知其他设备变化
if ((JZsdk_HalPort_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G))
{
HalSend_type1Send_LaserColor(UART_4G, 0x00, Info.PowerAttribute.color);
}
//如果设备1有启动
if ((JZsdk_HalPort_UseFlag(UART_DEV_1) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_1))
{
HalSend_type1Send_LaserColor(UART_DEV_1, 0x00, Info.PowerAttribute.color);
}
//如果设备2有启动
if ((JZsdk_HalPort_UseFlag(UART_DEV_2) == JZ_FLAGCODE_ON) && (DeviceName != UART_DEV_2))
{
HalSend_type1Send_LaserColor(UART_DEV_2, 0x00, Info.PowerAttribute.color);
}
//如果psdk接口已经使用
if ((JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK)
... ... @@ -2908,7 +2929,6 @@ T_JZsdkReturnCode UIcontrol_Broadcast_PlayStatus_end()
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
#include "JZsdkLib.h"
#include "JZsdkLib.h"
#include "version_choose.h"
#include "Hal_Send/HalSend.h"
... ... @@ -148,14 +148,15 @@ T_JZsdkReturnCode WarnLight_Get_Attribute(T_JzWarnLightAttribute *Attribute)
T_JZsdkReturnCode WarnLight_SendStatus(T_JzWarnLightAttribute LightAttribute, int UartPort)
{
//Ⅰ型控制
if (g_WarnLightInfo.mode_version == 0)
{
HalSend_type1Send_WarningLight_Status(UartPort, LightAttribute.status, LightAttribute.mode);
HalSend_type1Send_WarningLight_Status(UartPort, LightAttribute.status, (LightAttribute.mode - 1));
}
else
{
HalSend_type1Send_WarningLight_WarningLightMode2(UartPort, LightAttribute.mode);
}
// else
// {
// HalSend_type1Send_WarningLight_Status_2(UartPort, LightAttribute.mode);
// }
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
... ... @@ -171,10 +171,10 @@ static const T_DjiWidgetHandlerListItem s_widgetHandlerList[] = {
{28, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL}, //云台补偿模式
{29, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL}, //设置云台补偿值
{30, DJI_WIDGET_TYPE_SCALE, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//占坑
{31, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//占坑
//占坑 后续加载方法肯定要换,这种手写方式太不好了
{29, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//占坑
{30, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//占坑
{31, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//占坑
{32, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//占坑
{33, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//占坑
{34, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//占坑
... ... @@ -639,14 +639,14 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value)
case 3://内显示音量 scale
{
delayMs(50);//避免拉滑动条设置太多次
delayMs(100);//避免拉滑动条设置太多次
JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(1, value);
JZsdk_Psdk_UI_io_SetVolume(1,value);
break;
}
case 4://外显示音量 scale
{
delayMs(50);//避免拉滑动条设置太多次
delayMs(100);//避免拉滑动条设置太多次
JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(1, value);
JZsdk_Psdk_UI_io_SetVolume(1,value);
break;
... ... @@ -751,14 +751,14 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value)
break;
}
case 34://激光亮度
case 30://激光亮度
{
int lumen = value;
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_LUMEN, lumen);
break;
}
case 35://激光颜色
case 31://激光颜色
{
int color = value;
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_COLOR, color);
... ... @@ -927,6 +927,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value)
case 42://设置云台补偿
{
JZSDK_LOG_INFO("设置云台补充:%d", Temp_GimbalCompensation_Flag);
Temp_GimbalCalibration_Flag = value;
break;
}
... ...
/**
/**
********************************************************************
* @file test_widget_speaker.c
* @brief
... ... @@ -320,7 +320,7 @@ DecodeFinsh:
static T_DjiReturnCode DjiTest_PlayAudioData(void)
{
USER_LOG_INFO("播放固定位置的录音DjiTest_PlayAudioData ");
JZSDK_LOG_INFO("播放固定位置的录音DjiTest_PlayAudioData ");
#ifdef MEGAPHONE_CONFIG_STATUS_ON
do
{
... ... @@ -350,6 +350,7 @@ static T_DjiReturnCode DjiTest_PlayTtsData(void)
T_DjiReturnCode returnCode;
USER_LOG_INFO("DjiTest_PlayTtsData");
JZSDK_LOG_INFO("DjiTest_PlayTtsData");
returnCode = DjiAircraftInfo_GetBaseInfo(&aircraftInfoBaseInfo);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
... ... @@ -398,7 +399,7 @@ static T_DjiReturnCode DjiTest_PlayTtsData(void)
#ifdef MEGAPHONE_CONFIG_STATUS_ON
//增加一个标志位,确认播放完成
while (Megaphone_GetMegaphoneStatus() == 0x20) //如果仍然在播放opus录音
while (Megaphone_GetMegaphoneStatus() == 0x20) //如果仍然在播放tts
{
delayMs(100);
}
... ... @@ -645,7 +646,7 @@ static T_DjiReturnCode ReceiveTtsData(E_DjiWidgetTransmitDataEvent event,
T_DjiReturnCode returnCode;
tts_Or_audio_flag = 1;
JZSDK_LOG_INFO("TTS接收");
JZSDK_LOG_INFO("TTS接收 :%d size:%d", event, size);
if (event == DJI_WIDGET_TRANSMIT_DATA_EVENT_START) {
USER_LOG_INFO("Create tts file.");
... ... @@ -703,7 +704,9 @@ static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
int RealTime_PlayMode_Switch = Get_Opus_PlayMode();
tts_Or_audio_flag = 2;
JZSDK_LOG_INFO("audio接收");
//JZSDK_LOG_INFO("audio接收");
JZSDK_LOG_INFO("AUDIO接收 :%d size:%d", event, size);
if(RealTime_PlayMode_Switch == 0)
{
... ... @@ -844,7 +847,7 @@ static T_DjiReturnCode ReceiveAudioData(E_DjiWidgetTransmitDataEvent event,
}
}
JZSDK_LOG_INFO("audio接受完毕");
//JZSDK_LOG_INFO("audio接受完毕");
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -872,29 +875,29 @@ static void *DjiTest_WidgetSpeakerTask(void *arg)
}
if (s_speakerState.state == DJI_WIDGET_SPEAKER_STATE_PLAYING) {
//如果处于回放模式
if (s_speakerState.playMode == DJI_WIDGET_SPEAKER_PLAY_MODE_LOOP_PLAYBACK)
{
if (s_speakerState.workMode == DJI_WIDGET_SPEAKER_WORK_MODE_VOICE) {
USER_LOG_DEBUG("Waiting opus decoder finished...");
while (s_isDecodeFinished == false) {
osalHandler->TaskSleepMs(1);
}
djiReturnCode = DjiTest_PlayAudioData();
if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Play audio data failed, error: 0x%08llX.", djiReturnCode);
}
} else {
djiReturnCode = DjiTest_PlayTtsData();
if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Play tts data failed, error: 0x%08llX.", djiReturnCode);
}
}
osalHandler->TaskSleepMs(1000);
}
//单放模式
else {
////如果处于回放模式
//if (s_speakerState.playMode == DJI_WIDGET_SPEAKER_PLAY_MODE_LOOP_PLAYBACK)
//{
// if (s_speakerState.workMode == DJI_WIDGET_SPEAKER_WORK_MODE_VOICE) {
// USER_LOG_DEBUG("Waiting opus decoder finished...");
// while (s_isDecodeFinished == false) {
// osalHandler->TaskSleepMs(1);
// }
// djiReturnCode = DjiTest_PlayAudioData();
// if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
// USER_LOG_ERROR("Play audio data failed, error: 0x%08llX.", djiReturnCode);
// }
// } else {
// djiReturnCode = DjiTest_PlayTtsData();
// if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
// USER_LOG_ERROR("Play tts data failed, error: 0x%08llX.", djiReturnCode);
// }
// }
// osalHandler->TaskSleepMs(1000);
//}
//
////单放模式
//else {
//如果工作模式为语音
if (s_speakerState.workMode == DJI_WIDGET_SPEAKER_WORK_MODE_VOICE)
{
... ... @@ -920,16 +923,16 @@ static void *DjiTest_WidgetSpeakerTask(void *arg)
USER_LOG_ERROR("lock mutex error: 0x%08llX.", djiReturnCode);
}
if (s_speakerState.playMode == DJI_WIDGET_SPEAKER_PLAY_MODE_SINGLE_PLAY)
{
//if (s_speakerState.playMode == DJI_WIDGET_SPEAKER_PLAY_MODE_SINGLE_PLAY)
//{
s_speakerState.state = DJI_WIDGET_SPEAKER_STATE_IDEL;
}
//}
djiReturnCode = osalHandler->MutexUnlock(s_speakerMutex);
if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("unlock mutex error: 0x%08llX.", djiReturnCode);
}
}
//}
}
}
}
... ... @@ -948,7 +951,7 @@ T_JZsdkReturnCode Speaker_Set_SpeakerState_state(int value)
s_speakerState.state = value;
}
//循环模式
//循环模式90
T_JZsdkReturnCode Speaker_Set_SpeakerPlaymode(int value)
{
s_speakerState.playMode = value;
... ... @@ -957,6 +960,7 @@ T_JZsdkReturnCode Speaker_Set_SpeakerPlaymode(int value)
//音量
T_JZsdkReturnCode Speaker_Set_SpeakerVolume(int value)
{
//JZSDK_LOG_DEBUG("set speaker_volume :%d ",value);
s_speakerState.volume = value;
}
... ...
# cmake 最低版本要求 第三行名字不能动
cmake_minimum_required(VERSION 2.8)
project(JZ_H150A)
project(JZ_T40S)
#set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++")
#"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。
... ...
/**
/**
********************************************************************
* @file hal_uart.h
* @brief This is the header file for "hal_uart.c", defining the structure and
... ... @@ -51,8 +51,8 @@ extern "C" {
//User can config dev based on there environmental conditions
#define LINUX_UART_DEV1 UART_DEV1_NUM
#define LINUX_UART_DEV2 "/dev/ttyACM0"
#define USB_UART_CONNECTED_TO_UAV_VID (0x2CA3)
#define USB_UART_CONNECTED_TO_UAV_PID (0xF002)
#define USB_UART_CONNECTED_TO_UAV_VID (0x10c4)
#define USB_UART_CONNECTED_TO_UAV_PID (0xea60)
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
... ...