作者 ookk303

预设任务更新

正在显示 39 个修改的文件 包含 551 行增加126 行删除
... ... @@ -111,7 +111,10 @@
"jzsdk_framecomparsion_6aframe.h": "c",
"jzsdk_uart.h": "c",
"audiomange.h": "c",
"pcmaudiofile.h": "c"
"pcmaudiofile.h": "c",
"megaphone_playback.h": "c",
"audiomange_param.h": "c",
"jzsdk_platform.h": "c"
},
"Codegeex.GenerationPreference": "automatic",
"C_Cpp.dimInactiveRegions": false
... ...
# 编译链的配置
#1、编译链与设备类型的选择
set(DEVICE_NAME JZ_H1T)
set(DEVICE_NAME JZ_H10T)
#上一行为禁止修改行
message("**************************JZSDK构建编译开始***************************\n")
... ...
... ... @@ -56,6 +56,8 @@ typedef void *T_JZsdkMutexHandle;
typedef void *T_JZsdkSemaHandle;
//文件权柄
typedef void *T_JZsdkFileHandle;
//目录权柄
typedef void *T_JZsdkDirHandle;
/* Exported types ------------------------------------------------------------*/
... ...
... ... @@ -166,7 +166,7 @@ T_JZsdkReturnCode JZsdk_Osal_FileClose(T_JZsdkFileHandle fileObj)
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示写入成功,
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示写入失败
* *******************************/
T_JZsdkReturnCode JZsdk_Osal_FileWrite(T_JZsdkFileHandle fileObj, const U8_t *buf, U32_t len, U32_t *realLen)
T_JZsdkReturnCode JZsdk_Osal_FileWrite_U8(T_JZsdkFileHandle fileObj, const U8_t *buf, U32_t len, U32_t *realLen)
{
int32_t ret;
... ... @@ -192,7 +192,7 @@ T_JZsdkReturnCode JZsdk_Osal_FileWrite(T_JZsdkFileHandle fileObj, const U8_t *bu
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示读取成功,
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示读取失败
* *******************************/
T_JZsdkReturnCode JZsdk_Osal_FileRead(T_JZsdkFileHandle fileObj, U8_t *buf, U32_t len, U32_t *realLen)
T_JZsdkReturnCode JZsdk_Osal_FileRead_U8(T_JZsdkFileHandle fileObj, U8_t *buf, U32_t len, U32_t *realLen)
{
int32_t ret;
... ... @@ -680,4 +680,81 @@ T_JZsdkReturnCode JZsdk_Sync()
{
sync();
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_Osal_DirOpen(const char *filePath, T_JZsdkDirHandle *dirObj)
{
if (filePath == NULL) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
*dirObj = opendir(filePath);
if (*dirObj == NULL) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_Osal_DirClose(T_JZsdkDirHandle dirObj)
{
int32_t ret;
if (dirObj == NULL) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
ret = closedir((DIR *) dirObj);
if (ret < 0) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_Osal_DirRead(T_JZsdkDirHandle dirObj, T_JZsdkFileInfo *fileInfo)
{
struct dirent *dirent;
if (dirObj == NULL || fileInfo == NULL) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
dirent = readdir((DIR *) dirObj);
if (!dirent) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (dirent->d_type == DT_DIR) {
fileInfo->isDir = true;
} else {
fileInfo->isDir = false;
}
strcpy(fileInfo->path, dirent->d_name);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_Osal_Unlink(const char *filePath)
{
int32_t ret;
if (filePath == NULL) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
if (filePath[strlen(filePath) - 1] == '/') {
ret = rmdir(filePath);
if (ret < 0) {
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
} else {
ret = unlink(filePath);
if (ret < 0) {
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
... ... @@ -22,6 +22,59 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/*
用途:用于读取文件内容。
权限:只允许读取文件,不允许写入或修改文件内容。
文件存在性:如果文件不存在,打开操作会失败,并返回一个错误。
文件指针位置:文件打开后,文件指针位于文件的开头。
*/
#define FS_ONLY_READ "rb"
/*
用途:用于读取和写入文件内容。
权限:允许读取和写入文件内容。
文件存在性:如果文件不存在,打开操作会失败,并返回一个错误。
文件指针位置:文件打开后,文件指针位于文件的开头。
注意事项:在写入文件时,会覆盖文件中对应位置的内容,但不会删除文件的其他内容。
*/
#define FS_READ_AND_WRITE "r+b"
/*
用途:用于写入文件内容。
权限:只允许写入文件内容,不允许读取。
文件存在性:如果文件存在,其内容会被清空;如果文件不存在,会创建一个新文件。
文件指针位置:文件打开后,文件指针位于文件的开头,准备写入新内容。
注意事项:使用w模式打开文件时,会丢失文件中的原有内容。
*/
#define FS_ONLT_WRITE "wb"
/*
用途:用于读取和写入文件内容,但会先清空文件。
权限:允许读取和写入文件内容。
文件存在性:如果文件存在,其内容会被清空;如果文件不存在,会创建一个新文件。
文件指针位置:文件打开后,文件指针位于文件的开头,准备写入新内容。
注意事项:使用w+模式打开文件时,会丢失文件中的原有内容。但在写入新内容后,仍然可以读取文件内容。
*/
#define FS_READ_AND_WRITE_CLEAR "w+b"
/*
用途:用于在文件末尾追加内容。
权限:只允许写入文件内容,不允许读取。
文件存在性:如果文件存在,写入操作会追加到文件末尾;如果文件不存在,会创建一个新文件。
文件指针位置:文件打开后,文件指针位于文件末尾,准备追加新内容。
*/
#define FS_APPEND "ab"
/*
用途:用于读取和写入文件内容,但写入操作会追加到文件末尾。
权限:允许读取和写入文件内容。
文件存在性:如果文件存在,写入操作会追加到文件末尾;如果文件不存在,会创建一个新文件。
文件指针位置:文件打开后,文件指针位于文件末尾,但可以通过fseek等函数移动到文件的其他位置进行读取或写入。
*/
#define FS_READ_AND_APPEND "a+b"
/* Exported types ------------------------------------------------------------*/
... ... @@ -47,12 +100,18 @@ T_JZsdkReturnCode JZsdk_Osal_Rename(const char *oldFilePath, const char *newFile
T_JZsdkReturnCode JZsdk_Osal_FileOpen(const char *fileName, const char *fileMode, T_JZsdkFileHandle *fileObj);
T_JZsdkReturnCode JZsdk_Osal_FileClose(T_JZsdkFileHandle fileObj);
T_JZsdkReturnCode JZsdk_Osal_FileWrite(T_JZsdkFileHandle fileObj, const U8_t *buf, U32_t len, U32_t *realLen);
T_JZsdkReturnCode JZsdk_Osal_FileRead(T_JZsdkFileHandle fileObj, U8_t *buf, U32_t len, U32_t *realLen);
T_JZsdkReturnCode JZsdk_Osal_FileWrite_U8(T_JZsdkFileHandle fileObj, const U8_t *buf, U32_t len, U32_t *realLen);
T_JZsdkReturnCode JZsdk_Osal_FileRead_U8(T_JZsdkFileHandle fileObj, U8_t *buf, U32_t len, U32_t *realLen);
T_JZsdkReturnCode JZsdk_Osal_FileSeek(T_JZsdkFileHandle fileObj, U32_t offset);
T_JZsdkReturnCode JZsdk_Osal_FileSync(T_JZsdkFileHandle fileObj);
T_JZsdkReturnCode JZsdk_Osal_DirOpen(const char *filePath, T_JZsdkDirHandle *dirObj);
T_JZsdkReturnCode JZsdk_Osal_DirClose(T_JZsdkDirHandle dirObj);
T_JZsdkReturnCode JZsdk_Osal_DirRead(T_JZsdkDirHandle dirObj, T_JZsdkFileInfo *fileInfo);
T_JZsdkReturnCode JZsdk_Osal_Unlink(const char *filePath);
#ifdef __cplusplus
}
#endif
... ...
... ... @@ -4,7 +4,8 @@
static T_JZsdkOsalHandler* g_osalHandler = NULL;
static T_JZsdkOsalHandler *g_osalHandler = NULL;
static T_JZsdkFSHandler *g_FsHandler = NULL;
static T_JZsdkReturnCode JZsdk_Platform_RegOsalHandler(const T_JZsdkOsalHandler *osalHandler)
{
... ... @@ -23,6 +24,25 @@ T_JZsdkOsalHandler *JZsdk_Platform_GetOsalHandler(void)
return g_osalHandler; // 返回已注册的 OSAL 处理器
}
static T_JZsdkReturnCode JZsdk_RegFsHandler(const T_JZsdkFSHandler *FsHandler)
{
g_FsHandler = malloc(sizeof(T_JZsdkFSHandler));
if (g_FsHandler == NULL) {
return JZ_ERROR_SYSTEM_MODULE_CODE_MEMORY_ALLOC_FAILED; // 处理内存分配失败的情况
}
memcpy(g_FsHandler, FsHandler, sizeof(T_JZsdkFSHandler));
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkFSHandler *JZsdk_GetFsHandler(void)
{
return g_FsHandler; // 返回已注册的 FS 处理器
}
T_JZsdkReturnCode JZsdk_OsalInit()
{
T_JZsdkOsalHandler osalHandler = {
... ... @@ -45,7 +65,27 @@ T_JZsdkReturnCode JZsdk_OsalInit()
.GetRandomNum = JZsdk_Osal_GetRandomNum,
};
T_JZsdkFSHandler fileSystemHandler = {
.FileOpen = JZsdk_Osal_FileOpen,
.FileClose = JZsdk_Osal_FileClose,
.FileWrite_U8 = JZsdk_Osal_FileWrite_U8,
.FileRead_U8 = JZsdk_Osal_FileRead_U8,
.FileSync = JZsdk_Osal_FileSync,
.FileSeek = JZsdk_Osal_FileSeek,
.DirOpen = JZsdk_Osal_DirOpen,
.DirClose = JZsdk_Osal_DirClose,
.DirRead = JZsdk_Osal_DirRead,
.Mkdir = JZsdk_Osal_Mkdir,
.Unlink = JZsdk_Osal_Unlink,
.Rename = JZsdk_Osal_Rename,
.Stat = JZsdk_Osal_Stat,
};
JZsdk_Platform_RegOsalHandler(&osalHandler);
printf("JZsdk Osal handler registered\n");
JZsdk_RegFsHandler(&fileSystemHandler);
printf("JZsdk File system handler registered\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
... ... @@ -73,6 +73,40 @@ typedef struct {
} T_JZsdkOsalHandler;
/****************
*
* filesysterm 文件系统权柄
*
*
* ******************/
typedef struct {
T_JZsdkReturnCode (*FileOpen)(const char *fileName, const char *fileMode, T_JZsdkFileHandle *fileObj);
T_JZsdkReturnCode (*FileClose)(T_JZsdkFileHandle fileObj);
T_JZsdkReturnCode (*FileWrite_U8)(T_JZsdkFileHandle fileObj, const U8_t *buf, U32_t len, U32_t *realLen);
T_JZsdkReturnCode (*FileRead_U8)(T_JZsdkFileHandle fileObj, U8_t *buf, U32_t len, U32_t *realLen);
T_JZsdkReturnCode (*FileSeek)(T_JZsdkFileHandle fileObj, U32_t offset);
T_JZsdkReturnCode (*FileSync)(T_JZsdkFileHandle fileObj);
T_JZsdkReturnCode (*DirOpen)(const char *filePath, T_JZsdkDirHandle *dirObj);
T_JZsdkReturnCode (*DirClose)(T_JZsdkDirHandle dirObj);
T_JZsdkReturnCode (*DirRead)(T_JZsdkDirHandle dirObj, T_JZsdkFileInfo *fileInfo);
T_JZsdkReturnCode (*Mkdir)(const char *filePath);
T_JZsdkReturnCode (*Unlink)(const char *filePath);
T_JZsdkReturnCode (*Rename)(const char *oldFilePath, const char *newFilePath);
T_JZsdkReturnCode (*Stat)(const char *filePath, T_JZsdkFileInfo *fileInfo);
} T_JZsdkFSHandler;
/* Exported macro ------------------------------------------------------------*/
... ... @@ -83,6 +117,7 @@ typedef struct {
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_OsalInit();
T_JZsdkOsalHandler *JZsdk_Platform_GetOsalHandler(void);
T_JZsdkFSHandler *JZsdk_GetFsHandler(void);
#ifdef __cplusplus
... ...
... ... @@ -21,6 +21,7 @@
#include "MediaProc/MediaProc.h"
#include "UI_control/WidegMgmt/JZsdk_Widget.h"
#include "DeviceConfig/DeviceConfig.h"
#include "CommonMod/CommonMod.h"
#include "JZsdk_Hal.h"
... ... @@ -210,7 +211,7 @@ T_JZsdkReturnCode Main_APP_Psdk()
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
JZsdk_HalPort_Init(UART_4G, value);
//喊话器初始化
Megaphone_Init();
... ... @@ -229,7 +230,7 @@ T_JZsdkReturnCode Main_APP_Psdk()
{
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
JZsdk_HalPort_Init(UART_4G, value);
}
//喊话器初始化
... ... @@ -263,7 +264,7 @@ T_JZsdkReturnCode Main_APP_Psdk()
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
JZsdk_HalPort_Init(UART_4G, value);
//喊话器初始化
Megaphone_Init();
... ... @@ -672,7 +673,7 @@ int Main_TestAPP()
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//JZ_FLAGCODE_GET为返回工作值,其他值为设置
... ...
... ... @@ -77,7 +77,7 @@ T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mo
int insCode = 0; //指令码
//获取短选项
static char *opt_storage = "t:f:";
static char *opt_storage = "t:f:d:b";
//解析参数
while (1)
... ...
... ... @@ -7,19 +7,19 @@
#define VERSION_CHOOSE_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h"
//1~10行 除了D可以修改版本选择 禁止动任何东西
#define DEVICE_VERSION JZ_H1T
#define DEVICE_VERSION JZ_H10T
//禁止修改行 选择是串口程序 还是 psdk程序
#define APP_VERSION APP_UART
#define APP_VERSION APP_PSDK
//禁止修改行 板子型号
#define PLATFORM_VERSION PLATFORM_V3S
//禁止修改行 串口连接程序的软件版本号
#define MAJOR_VERSION 0x00
#define MINOR_VERSION 0x00
#define MODIFY_VERSION 0x02
#define DEBUG_VERSION 0x13
#define MAJOR_VERSION 0x01
#define MINOR_VERSION 0x03
#define MODIFY_VERSION 0x10
#define DEBUG_VERSION 0x00
//禁止修改行 滤波方式
#define FILTERING_TYPE HIGH_PASS_FILTERING
... ...
... ... @@ -82,6 +82,11 @@ T_JZsdkReturnCode JZsdk_Hal_Init()
* *********************/
int JZsdk_HalPort_UseFlag(int PortName)
{
if(g_HalInfo == NULL)
{
return JZ_FLAGCODE_OFF;
}
return g_HalInfo->HalPort[PortName].UseFlag;
}
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#define PRESET_TASK_FALG_PATH "/root/preset_task_flag"
static U8_t g_PrsetTask_Flag = JZ_FLAGCODE_OFF; //预设任务的开启标志位
static U8_t g_PrsetTask_FinishFlag = JZ_FLAGCODE_OFF; //预设任务执行步骤
/*******************
*
* 创建一个预设任务
*
*
* ***************/
T_JZsdkReturnCode PrsetTask_CreatePrsetTask()
{
T_JZsdkReturnCode ret;
#ifdef MEGAPHONE_CONFIG_STATUS_ON
JZSDK_LOG_INFO("喊话器配置已已打开,创建一个喊话器预设任务");
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*******************
*
* 开启关闭预设任务
*
* ***************/
T_JZsdkReturnCode PrsetTask_SetPrsetTaskFlag(U8_t flag)
{
T_JZsdkReturnCode ret;
int realLen;
T_JZsdkFSHandler *FSHandler = JZsdk_Platform_GetFSHandler();
T_JZsdkFileHandle FileHandle;
ret = FSHandler->FileOpen(PRESET_TASK_FALG_PATH, FS_READ_AND_WRITE_CLEAR, &FileHandle);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("预设任务标志位文件打开失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
ret = FSHandler->FileWrite_U8(FileHandle, &flag, 1, &realLen);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("预设任务标志位写入失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
ret = FSHandler->FileClose(FileHandle);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("预设任务标志位文件关闭失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//将开启关闭放入
g_PrsetTask_Flag = flag;
if ()
{
/* code */
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode PrsetTask_Init()
{
T_JZsdkReturnCode ret;
int realLen;
T_JZsdkOsalHandler *OsalHandler = JZsdk_Platform_GetOsalHandler();
T_JZsdkFSHandler *FSHandler = JZsdk_Platform_GetFSHandler();
//1、读取本地的预设任务标志位
T_JZsdkFileHandle FileHandle;
ret = FSHandler->FileOpen(PRESET_TASK_FALG_PATH, FS_ONLY_READ, &FileHandle);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("预设任务标志位获取失败,没有预设的任务");
ret = FSHandler->FileOpen(PRESET_TASK_FALG_PATH, FS_READ_AND_WRITE_CLEAR, &FileHandle);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("预设任务标志位文件创建失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
ret = FSHandler->FileWrite_U8(FileHandle, &g_PrsetTask_Flag, 1, &realLen);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("预设任务标志位写入失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
g_PrsetTask_Flag = JZ_FLAGCODE_OFF;
return ret;
}
//2、读取标志位
ret = FSHandler->FileRead_U8(FileHandle, &g_PrsetTask_Flag, 1, &realLen);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("预设任务标志位读取失败");
g_PrsetTask_Flag = JZ_FLAGCODE_OFF;
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//3、关闭文件
ret = FSHandler->FileClose(FileHandle);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("预设任务标志位文件关闭失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return ret;
}
\ No newline at end of file
... ...
... ... @@ -852,7 +852,7 @@ static void *MixedVideo_Thread(void *args)
*
*
* ********************/
static JZC1_MixedVideo_Init()
static T_JZsdkReturnCode JZC1_MixedVideo_Init()
{
g_MixedIrc_Buffer = (unsigned char *)malloc(JZ_ALIGN(FIRST_WIDTH, 16)*JZ_ALIGN(FIRST_HEIGHT, 16)*3/2);
g_MixedOpt_Buffer = (unsigned char *)malloc(JZ_ALIGN(SECOND_WIDTH, 16)*JZ_ALIGN(SECOND_HEIGHT, 16)*3/2);
... ...
... ... @@ -838,12 +838,14 @@ static T_JZsdkReturnCode Gimbal_Init_IndependentControl()
{
g_Gimbal_Mode = JZ_MODULE_CONTROL_WAY_INDEPENDENT;
//舵机初始化
Gimal_MotorInit();
//云台微调初始化
MotorFineTuning_Init(&g_MotorFineTuningPitch, &g_MotorFineTuningYaw, &g_MotorFineTuningRoll);
//云台角度初始化
Gimbal_Flush_Pitch();
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
... ... @@ -8,6 +8,7 @@
#include "JZsdk_TaskManagement/TaskManagement.h"
#include "Gimbal_SpecialUart/Gimbal_SpecialUart.h"
#include "../Gimbal_Param.h"
#include "Gimbal/Gimbal.h"
#include "Hal_Send/HalSend.h"
#include "JZsdk_uart/JZsdk_Uart.h"
... ... @@ -211,51 +212,69 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range)
//因为PWM写的时候是按90度写的,所以分母是900,不是设定的600
int base_offset = g_Gimbal_Pitch_BaseOffset;
//先通过角度 得出目前的PWM值
int angle = Gimbal_Get_PitchRealPitchAngle();
//在最大的角度弄的
if (Range == 0xFF)
{
//先得出目前pwm值
int angle_PWM = 820 + base_offset + (angle * (120)/(MAX_PITCH - MIN_PITCH)); //820是0度
//通过最大值的计算方式 得出新的offset值
//g_Gimbal_Pitch_BaseOffset = angle_PWM - ((MAX_PITCH*195)/(MAX_PITCH - MIN_PITCH)) - base_offset;
g_Gimbal_Pitch_BaseOffset = angle_PWM - 820 - ((MAX_PITCH*120)/(MAX_PITCH - MIN_PITCH)) - base_offset;
//下限600,上限830
if (g_Gimbal_Pitch_BaseOffset <= - 100)
{
g_Gimbal_Pitch_BaseOffset = - 100;
}
else if (g_Gimbal_Pitch_BaseOffset >= 20)
{
g_Gimbal_Pitch_BaseOffset = 20;
}
g_Gimbal_Pitch_BaseOffset++;
}
//在最小的角度弄的
else if (Range == 0x00)
{
//先通过角度 得出目前的PWM值
int angle = Gimbal_Get_PitchRealPitchAngle();
int angle_PWM = 820 + base_offset + (angle * (120)/(900)); //820是0度
g_Gimbal_Pitch_BaseOffset--;
}
//通过最小值的计算方式 得出offset值
g_Gimbal_Pitch_BaseOffset = angle_PWM - 820 - ((MAX_PITCH*120)/(MAX_PITCH - MIN_PITCH)) - base_offset;
//下限600,上限830
if (g_Gimbal_Pitch_BaseOffset <= - 100)
{
g_Gimbal_Pitch_BaseOffset = - 100;
}
else if (g_Gimbal_Pitch_BaseOffset >= 20)
{
g_Gimbal_Pitch_BaseOffset = 20;
}
}
// //因为PWM写的时候是按90度写的,所以分母是900,不是设定的600
// int base_offset = g_Gimbal_Pitch_BaseOffset;
// //先通过角度 得出目前的PWM值
// int angle = Gimbal_Get_PitchRealPitchAngle();
// //在最大的角度弄的
// if (Range == 0xFF)
// {
// //先得出目前pwm值
// int angle_PWM = 820 + base_offset + (angle * (120)/(MAX_PITCH - MIN_PITCH)); //820是0度
// //通过最大值的计算方式 得出新的offset值
// //g_Gimbal_Pitch_BaseOffset = angle_PWM - ((MAX_PITCH*195)/(MAX_PITCH - MIN_PITCH)) - base_offset;
// g_Gimbal_Pitch_BaseOffset = angle_PWM - 820 - ((MAX_PITCH*120)/(MAX_PITCH - MIN_PITCH)) - base_offset;
// //下限600,上限830
// if (g_Gimbal_Pitch_BaseOffset <= - 100)
// {
// g_Gimbal_Pitch_BaseOffset = - 100;
// }
// else if (g_Gimbal_Pitch_BaseOffset >= 20)
// {
// g_Gimbal_Pitch_BaseOffset = 20;
// }
// }
// //在最小的角度弄的
// else if (Range == 0x00)
// {
// //先通过角度 得出目前的PWM值
// int angle = Gimbal_Get_PitchRealPitchAngle();
// int angle_PWM = 820 + base_offset + (angle * (120)/(900)); //820是0度
// //通过最小值的计算方式 得出offset值
// g_Gimbal_Pitch_BaseOffset = angle_PWM - 820 - ((MAX_PITCH*120)/(MAX_PITCH - MIN_PITCH)) - base_offset;
// //下限600,上限830
// if (g_Gimbal_Pitch_BaseOffset <= - 100)
// {
// g_Gimbal_Pitch_BaseOffset = - 100;
// }
// else if (g_Gimbal_Pitch_BaseOffset >= 20)
// {
// g_Gimbal_Pitch_BaseOffset = 20;
// }
// }
JZSDK_LOG_INFO("设置pitch的offset值:%d",g_Gimbal_Pitch_BaseOffset);
... ... @@ -292,10 +311,10 @@ static T_JZsdkReturnCode Gimbal_DataDeal_Read_PitchBaseOffset(int *offset)
{
FILE *fp = NULL;
fp = fopen(PITCH_OFFSET_FILE_PATH, "rb+");
fp = fopen(PITCH_OFFSET_FILE_PATH, "r+b");
if (fp == NULL)
{
fp = fopen(PITCH_OFFSET_FILE_PATH, "wb+");
fp = fopen(PITCH_OFFSET_FILE_PATH, "w+b");
if (fp == NULL)
{
*offset = 0;
... ... @@ -319,9 +338,8 @@ static T_JZsdkReturnCode Gimbal_DataDeal_Read_PitchBaseOffset(int *offset)
}
else
{
JZSDK_LOG_ERROR("Pitch BaseOffset=%d",*offset);
*offset = 0;
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
JZSDK_LOG_INFO("Pitch BaseOffset=%d",*offset);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
... ... @@ -337,7 +355,7 @@ static T_JZsdkReturnCode Gimbal_DataDeal_Write_PitchBaseOffset(int offset)
{
FILE *fp = NULL;
fp = fopen(PITCH_OFFSET_FILE_PATH, "wb+");
fp = fopen(PITCH_OFFSET_FILE_PATH, "w+b");
if (fp == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
... ... @@ -353,6 +371,8 @@ static T_JZsdkReturnCode Gimbal_DataDeal_Write_PitchBaseOffset(int offset)
JZSDK_LOG_DEBUG("Pitch BaseOffset=%d\n",offset);
}
fflush(fp);
fclose(fp);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
... ...
... ... @@ -156,7 +156,7 @@ int V3s_PWM_contrl(int PWM_num)
(*pwm_base_map) &= ~((uint32_t)1 << 19); //先将第4位置0 ---> disable
(*pwm_base_map) |= (uint32_t)1 << 19; //将第4位置1 ---> enable pwm1
printf("V3s_Pwm_control:%d\n",PWM_num);
//printf("V3s_Pwm_control:%d\n",PWM_num);
return 0;
}
... ...
... ... @@ -25,7 +25,7 @@
#include "Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.h"
#include "Megaphone/opus/Megaphone_Opus.h"
#include "Megaphone/PcmAudio/PcmAudioFile.h"
#include "Megaphone/Megaphone.h"
int MegPlayStatusUnChange_flag = JZ_FLAGCODE_OFF;
static MegaphonePlayStatus g_Megaphone_Play_Status = AUDIO_PLAY_STATUS_IDLE;
... ... @@ -200,6 +200,7 @@ static T_JZsdkReturnCode Megaphone_Play(struct MegaphoneInfo *IndexInfo, enum Me
//opus播放
ret = OpusFile_PlayFixedFile();
}
break;
case AUDIO_PLAY_STATUS_PCM_LIST:
{
... ... @@ -208,6 +209,7 @@ static T_JZsdkReturnCode Megaphone_Play(struct MegaphoneInfo *IndexInfo, enum Me
//pcm播放
ret = PcmAudioPlay_Play(IndexInfo->str, IndexInfo->str_len);
}
break;
default:
break;
... ...
... ... @@ -7,6 +7,7 @@
#include "JZsdkLib.h"
#include "Megaphone/AudioMange/AudioMange.h"
#include "Megaphone/PcmAudio/PcmAudioFile.h"
#define PCM_DIR "/root/sdcard/pcm"
... ...
/**
********************************************************************
* @file OpusFile.h
* OpusFile.c OpusFileSave.c 的头文件
* @file PcmAudioFile.h
* PcmAudioFile.c PcmAudioPlay.c 的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef OPUS_FILE_H
#define OPUS_FILE_H
#ifndef PCM_AUDIO_FILE_H
#define PCM_AUDIO_FILE_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
... ...
... ... @@ -4,10 +4,12 @@
#include <pthread.h>
#include <dirent.h>
#include <sys/stat.h>
#include <math.h>
#include "JZsdkLib.h"
#include "Megaphone/PcmAudio/PcmAudioFile.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#define PCM_DIR "/root/sdcard/pcm"
static int g_opus_sampleRate = 16000; //解码采样率
... ... @@ -29,7 +31,10 @@ static T_JZsdkReturnCode PcmPlay_Interface(t_PcmParam *PcmParam)
double total_duration = 0;
int last_printed_second = -1; // 上次打印的秒数,初始化为-1表示还没有打印过
FILE *Pcm_fp = fopen("%s/%s", "rb", PCM_DIR, PcmParam->FileName);
unsigned char PcmPath[JZSDK_FILE_PATH_SIZE_MAX];
snprintf(PcmPath, JZSDK_FILE_PATH_SIZE_MAX, "%s/%s", PCM_DIR, PcmParam->FileName);
FILE *Pcm_fp = fopen(PcmPath, "rb");
if (Pcm_fp == NULL)
{
JZSDK_LOG_ERROR("PcmPlay_Interface: fopen failed, file name = %s", PcmParam->FileName);
... ...
... ... @@ -234,7 +234,7 @@ T_JZsdkReturnCode OpusFile_SaveOpusFileEnd(int CheckFlag, unsigned char *CheckCo
if (g_OpusSaveMode != JZ_FLAGCODE_OFF)
{
//将opus解码,并存储到指定目录
ret = OpusFile_DecodeOpusAndSave(g_OpusSaveMode ,g_OpusSaveMode, opus_SaveFile);
ret = OpusFile_DecodeOpusAndSave(g_OpusSaveMode ,OPUS_TEMP_SAVE_DIR, opus_SaveFile);
}
// if (g_OpusSaveMode != JZ_FLAGCODE_OFF)
... ...
... ... @@ -19,13 +19,11 @@
#include "widget/test_widget_speaker.h"
#include "./Dji_Control/DJI_VideoDeal.h"
extern int Firstsong_flag ;
#elif APP_VERSION == APP_UART || APP_VERSION == APP_TEST
int Get_Opus_PlayMode()
{
return JZ_FLAGCODE_OFF;
}
int Firstsong_flag ;
#endif
#define AUTO_CONTROL 0x02
... ... @@ -221,7 +219,6 @@ static T_JZsdkReturnCode UI_control_WidgetSet(int type, int value)
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Reply_PlayStatus_end()
{
UI_control_WidgetSet(PSDK_UI_WIDGET_PLAYSTATUS, 1);
Firstsong_flag = 0;
}
... ...
... ... @@ -36,6 +36,7 @@
#include "Psdk_UI_io.h"
#include "BaseConfig.h"
#include "UI_control/UI_control.h"
/* Private constants ---------------------------------------------------------*/
#define PAYLOAD_CAMERA_EMU_TASK_FREQ (100)
... ... @@ -962,15 +963,7 @@ static T_DjiReturnCode DjiTest_CameraRotationGimbal(T_TestCameraGimbalRotationAr
return returnCode;
}
if (aircraftBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 ||
aircraftBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_NONE) {
returnCode = DjiTest_GimbalRotate(gimbalRotationArgument.rotationMode, gimbalRotationArgument.rotationProperty,
gimbalRotationArgument.rotationValue);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("rotate gimbal error: 0x%08llX.", returnCode);
return returnCode;
}
} else if (aircraftBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_XPORT) {
if (aircraftBaseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_XPORT) {
returnCode = DjiXPort_RotateSync(gimbalRotationArgument.rotationMode, gimbalRotationArgument.rotationProperty,
gimbalRotationArgument.rotationValue);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
... ...
... ... @@ -74,6 +74,8 @@ static const T_DjiTestCameraTypeStr s_cameraTypeStrList[] = {
{DJI_CAMERA_TYPE_M3TD, "M3TD Camera"},
{DJI_CAMERA_TYPE_H30, "H30 Camera"},
{DJI_CAMERA_TYPE_H30T, "H30T Camera"},
{DJI_CAMERA_TYPE_M4T, "M4T Camera"},
{DJI_CAMERA_TYPE_M4E, "M4E Camera"},
};
static FILE *s_downloadMediaFile = NULL;
... ... @@ -846,12 +848,14 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_CAMERA_SHUTTER_SPEED: {
USER_LOG_INFO("--> Function a: Set camera shutter speed to 1/100 s");
DjiTest_WidgetLogAppend("--> Function a: Set camera shutter speed to 1/100 s");
if (cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_H20T ||
cameraType == DJI_CAMERA_TYPE_H20N || cameraType == DJI_CAMERA_TYPE_M30 ||
cameraType == DJI_CAMERA_TYPE_M30T || cameraType == DJI_CAMERA_TYPE_M3E ||
cameraType == DJI_CAMERA_TYPE_M3T || cameraType == DJI_CAMERA_TYPE_M3D ||
cameraType == DJI_CAMERA_TYPE_M3TD || cameraType == DJI_CAMERA_TYPE_H30 ||
cameraType == DJI_CAMERA_TYPE_H30T) {
if (DJI_CAMERA_TYPE_H20 == cameraType || DJI_CAMERA_TYPE_H20T == cameraType
|| DJI_CAMERA_TYPE_H20N == cameraType
|| DJI_CAMERA_TYPE_M30 == cameraType || DJI_CAMERA_TYPE_M30T == cameraType
|| DJI_CAMERA_TYPE_M3E == cameraType || DJI_CAMERA_TYPE_M3T == cameraType
|| DJI_CAMERA_TYPE_M3D == cameraType || DJI_CAMERA_TYPE_M3TD == cameraType
|| DJI_CAMERA_TYPE_M4T == cameraType || DJI_CAMERA_TYPE_M4E == cameraType
|| DJI_CAMERA_TYPE_H30 == cameraType || DJI_CAMERA_TYPE_H30T == cameraType
) {
USER_LOG_INFO("Set mounted position %d camera's exposure mode to manual mode.",
mountPosition);
returnCode = DjiTest_CameraManagerSetExposureMode(mountPosition,
... ... @@ -887,12 +891,14 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
case E_DJI_TEST_CAMERA_MANAGER_SAMPLE_SELECT_SET_CAMERA_APERTURE: {
USER_LOG_INFO("--> Function b: Set camera aperture to 400(F/4)");
DjiTest_WidgetLogAppend("--> Function b: Set camera aperture to 400(F/4)");
if (cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_H20N
|| cameraType == DJI_CAMERA_TYPE_H20T || cameraType == DJI_CAMERA_TYPE_M30
|| cameraType == DJI_CAMERA_TYPE_M30T || cameraType == DJI_CAMERA_TYPE_M3E
|| cameraType == DJI_CAMERA_TYPE_M3T || cameraType == DJI_CAMERA_TYPE_M3D
|| cameraType == DJI_CAMERA_TYPE_M3TD || cameraType == DJI_CAMERA_TYPE_H30
|| cameraType == DJI_CAMERA_TYPE_H30T) {
if (DJI_CAMERA_TYPE_H20 == cameraType || DJI_CAMERA_TYPE_H20T == cameraType
|| DJI_CAMERA_TYPE_H20N == cameraType
|| DJI_CAMERA_TYPE_M30 == cameraType || DJI_CAMERA_TYPE_M30T == cameraType
|| DJI_CAMERA_TYPE_M3E == cameraType || DJI_CAMERA_TYPE_M3T == cameraType
|| DJI_CAMERA_TYPE_M3D == cameraType || DJI_CAMERA_TYPE_M3TD == cameraType
|| DJI_CAMERA_TYPE_M4T == cameraType || DJI_CAMERA_TYPE_M4E == cameraType
|| DJI_CAMERA_TYPE_H30 == cameraType || DJI_CAMERA_TYPE_H30T == cameraType
) {
USER_LOG_INFO("Set mounted position %d camera's exposure mode to manual mode.",
mountPosition);
returnCode = DjiTest_CameraManagerSetExposureMode(mountPosition,
... ... @@ -1185,11 +1191,14 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
E_DjiCameraManagerNightSceneMode nightSceneMode;
T_DjiCameraManagerRangeList nightSceneModeRange;
if (cameraType == DJI_CAMERA_TYPE_XT2 || cameraType == DJI_CAMERA_TYPE_XTS ||
cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_P1 ||
cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_L2 ||
cameraType == DJI_CAMERA_TYPE_M3E || cameraType == DJI_CAMERA_TYPE_M3T ||
cameraType == DJI_CAMERA_TYPE_M3D || cameraType == DJI_CAMERA_TYPE_M3TD) {
if (DJI_CAMERA_TYPE_XT2 == cameraType || DJI_CAMERA_TYPE_XTS == cameraType
|| DJI_CAMERA_TYPE_H20 == cameraType
|| DJI_CAMERA_TYPE_P1 == cameraType
|| DJI_CAMERA_TYPE_L1 == cameraType || DJI_CAMERA_TYPE_L2 == cameraType
|| DJI_CAMERA_TYPE_M3E == cameraType || DJI_CAMERA_TYPE_M3T == cameraType
|| DJI_CAMERA_TYPE_M3D == cameraType || DJI_CAMERA_TYPE_M3TD == cameraType
|| DJI_CAMERA_TYPE_M4T == cameraType || DJI_CAMERA_TYPE_M4E == cameraType
) {
USER_LOG_INFO("Camera type %s does not support night scene mode!",
s_cameraTypeStrList[DjiTest_CameraManagerGetCameraTypeIndex(cameraType)].cameraTypeStr);
goto exitCameraModule;
... ... @@ -1923,7 +1932,8 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_P1 ||
cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_M30 ||
cameraType == DJI_CAMERA_TYPE_M3E || cameraType == DJI_CAMERA_TYPE_M3D ||
cameraType == DJI_CAMERA_TYPE_L2 || cameraType == DJI_CAMERA_TYPE_H30) {
cameraType == DJI_CAMERA_TYPE_L2 || cameraType == DJI_CAMERA_TYPE_H30 ||
cameraType == DJI_CAMERA_TYPE_M4T) {
USER_LOG_WARN("Camera type %s don't support FFC function.",
s_cameraTypeStrList[DjiTest_CameraManagerGetCameraTypeIndex(cameraType)].cameraTypeStr);
goto exitCameraModule;
... ... @@ -1969,7 +1979,8 @@ T_DjiReturnCode DjiTest_CameraManagerRunSample(E_DjiMountPosition mountPosition,
cameraType == DJI_CAMERA_TYPE_H20 || cameraType == DJI_CAMERA_TYPE_P1 ||
cameraType == DJI_CAMERA_TYPE_L1 || cameraType == DJI_CAMERA_TYPE_M30 ||
cameraType == DJI_CAMERA_TYPE_M3E || cameraType == DJI_CAMERA_TYPE_M3D ||
cameraType == DJI_CAMERA_TYPE_L2 || cameraType == DJI_CAMERA_TYPE_H30) {
cameraType == DJI_CAMERA_TYPE_L2 || cameraType == DJI_CAMERA_TYPE_H30 ||
cameraType == DJI_CAMERA_TYPE_M4T) {
USER_LOG_WARN("Camera type %s don't support infrared function.",
s_cameraTypeStrList[DjiTest_CameraManagerGetCameraTypeIndex(cameraType)].cameraTypeStr);
goto exitCameraModule;
... ...
... ... @@ -95,8 +95,10 @@ T_DjiReturnCode DjiTest_DataTransmissionStartService(void)
return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30 ||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30T) {
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30 ||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30T ||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3D ||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD) {
channelAddress = DJI_CHANNEL_ADDRESS_CLOUD_API;
djiStat = DjiLowSpeedDataChannel_RegRecvDataCallback(channelAddress, ReceiveDataFromCloud);
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
... ... @@ -208,8 +210,10 @@ static void *UserDataTransmission_Task(void *arg)
USER_LOG_ERROR("get send to mobile channel state error.");
}
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30 ||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30T) {
if (s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30 ||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M30T ||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3D ||
s_aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD) {
channelAddress = DJI_CHANNEL_ADDRESS_CLOUD_API;
djiStat = DjiLowSpeedDataChannel_SendData(channelAddress, dataToBeSent, sizeof(dataToBeSent));
if (djiStat != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
... ...
... ... @@ -459,7 +459,7 @@ static void *Subscription_GimbalAngels_task(void *arg)
//printf("消息订阅联动\n");
JZsdk_Psdk_Ui_io_Gimbal_PitchAngleControlMode(NowGimbalPitch);
LastGimbalPitch = NowGimbalPitch;
}
}
}
}
... ...
... ... @@ -899,8 +899,6 @@ T_DjiReturnCode DjiTest_TriggerFtsEventCallback(void)
USER_LOG_WARN("Note: This is an empty implementation, and the FTS signal needs to be triggered by the PWM signal.");
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR;
}
void DjiTest_FlightControlPassiveTriggerFtsSample(void)
... ... @@ -1304,10 +1302,11 @@ bool DjiTest_FlightControlGoHomeAndConfirmLanding(void)
DjiTest_FlightControlGetValueOfFlightStatus() == DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_IN_AIR) {
T_DjiFcSubscriptionHeightFusion heightFusion = DjiTest_FlightControlGetValueOfHeightFusion();
s_osalHandler->TaskSleepMs(1000);
if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3E ||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3T ||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3D ||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD) {
if (DJI_AIRCRAFT_TYPE_M3E == aircraftInfoBaseInfo.aircraftType || DJI_AIRCRAFT_TYPE_M3T == aircraftInfoBaseInfo.aircraftType
|| DJI_AIRCRAFT_TYPE_M3D == aircraftInfoBaseInfo.aircraftType || DJI_AIRCRAFT_TYPE_M3TD == aircraftInfoBaseInfo.aircraftType
|| DJI_AIRCRAFT_TYPE_M4T == aircraftInfoBaseInfo.aircraftType
|| DJI_AIRCRAFT_TYPE_M4E == aircraftInfoBaseInfo.aircraftType
) {
if ((dji_f64_t) 0.45 < heightFusion && heightFusion < (dji_f64_t) 0.55) {
break;
}
... ...
... ... @@ -140,8 +140,11 @@ T_DjiReturnCode DjiTest_GimbalManagerRunSample(E_DjiMountPosition mountPosition,
rotation = s_rotationActionList[i].rotation;
if (aircraftSeries == DJI_AIRCRAFT_SERIES_M3 || aircraftSeries == DJI_AIRCRAFT_SERIES_M30
|| aircraftSeries == DJI_AIRCRAFT_SERIES_M3D) {
if (DJI_AIRCRAFT_SERIES_M30 == aircraftSeries
|| DJI_AIRCRAFT_SERIES_M3 == aircraftSeries
|| DJI_AIRCRAFT_SERIES_M3D == aircraftSeries
|| DJI_AIRCRAFT_SERIES_M4 == aircraftSeries
) {
if (s_rotationActionList[i].rotation.rotationMode == DJI_GIMBAL_ROTATION_MODE_ABSOLUTE_ANGLE) {
T_DjiFcSubscriptionGimbalAngles gimbalAngles = {0};
T_DjiDataTimestamp timestamp = {0};
... ...
... ... @@ -51,11 +51,14 @@
static const char *oldReplaceAlarmIdStr = "%alarmid";
static const char *oldReplaceIndexStr = "%index";
static const char *oldReplaceComponentIndexStr = "%component_index";
static bool isHmsManagerInit = false;
static T_DjiHmsFileBinaryArray s_EnHmsTextConfigFileBinaryArrayList[] = {
{hms_text_config_json_fileName, hms_text_config_json_fileSize, hms_text_config_json_fileBinaryArray},
};
static uint8_t *s_hmsJsonData = NULL;
static E_DjiMobileAppLanguage s_hmsLanguage = DJI_MOBILE_APP_LANGUAGE_ENGLISH;
static bool s_isHmsConfigFileDirPathConfigured = false;
static char s_hmsConfigFileDirPath[DJI_FILE_PATH_SIZE_MAX] = {0};
/* Private functions declaration ---------------------------------------------*/
static T_DjiReturnCode DjiTest_HmsManagerInit(void);
... ... @@ -132,7 +135,11 @@ T_DjiReturnCode DjiTest_HmsCustomizationStartService(void)
return returnCode;
}
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/en", curFileDirPath);
if (s_isHmsConfigFileDirPathConfigured == true) {
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/en", s_hmsConfigFileDirPath);
} else {
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/en", curFileDirPath);
}
//set default hms text config path
returnCode = DjiHmsCustomization_RegDefaultHmsTextConfigByDirPath(tempPath);
... ... @@ -150,7 +157,12 @@ T_DjiReturnCode DjiTest_HmsCustomizationStartService(void)
}
//set hms text config for Chinese language
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/cn", curFileDirPath);
if (s_isHmsConfigFileDirPathConfigured == true) {
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/cn", s_hmsConfigFileDirPath);
} else {
snprintf(tempPath, HMS_DIR_PATH_LEN_MAX, "%shms_text/cn", curFileDirPath);
}
returnCode = DjiHmsCustomization_RegHmsTextConfigByDirPath(DJI_MOBILE_APP_LANGUAGE_CHINESE,
tempPath);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
... ... @@ -174,11 +186,22 @@ T_DjiReturnCode DjiTest_HmsCustomizationStartService(void)
#if DJI_CUSTOM_HMS_CODE_INJECT_ON
DjiHmsCustomization_InjectHmsErrorCode(0x1E020000, DJI_HMS_ERROR_LEVEL_FATAL);
DjiHmsCustomization_InjectHmsErrorCode(0x1E020001, DJI_HMS_ERROR_LEVEL_CRITICAL);
DjiHmsCustomization_InjectHmsErrorCode(0x1E020002, DJI_HMS_ERROR_LEVEL_WARN);
DjiHmsCustomization_InjectHmsErrorCode(0x1E020003, DJI_HMS_ERROR_LEVEL_HINT);
#endif
return returnCode;
}
T_DjiReturnCode DjiTest_HmsCustomizationSetConfigFilePath(const char *path)
{
memset(s_hmsConfigFileDirPath, 0, sizeof(s_hmsConfigFileDirPath));
memcpy(s_hmsConfigFileDirPath, path, USER_UTIL_MIN(strlen(path), sizeof(s_hmsConfigFileDirPath) - 1));
s_isHmsConfigFileDirPathConfigured = true;
return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/* Private functions definition-----------------------------------------------*/
static T_DjiReturnCode DjiTest_HmsManagerInit(void)
{
... ... @@ -199,13 +222,13 @@ static T_DjiReturnCode DjiTest_HmsManagerInit(void)
returnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
DJI_DATA_SUBSCRIPTION_TOPIC_10_HZ,
NULL);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("HMS sample subscribe topic flight status error, error code:0x%08llX", returnCode);
return returnCode;
}
#ifdef SYSTEM_ARCH_LINUX
returnCode = DjiUserUtil_GetCurrentFileDirPath(__FILE__, HMS_DIR_PATH_LEN_MAX, curFileDirPath);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Get file current path error, stat = 0x%08llX", returnCode);
... ... @@ -230,6 +253,8 @@ static T_DjiReturnCode DjiTest_HmsManagerInit(void)
UtilFile_GetFileDataByPath(tempFileDirPath, 0, fileSize, s_hmsJsonData, &readRealSize);
#endif
isHmsManagerInit = true;
return DjiHmsManager_Init();
}
... ... @@ -249,6 +274,8 @@ static T_DjiReturnCode DjiTest_HmsManagerDeInit(void)
osalHandler->Free(s_hmsJsonData);
#endif
isHmsManagerInit = false;
return DjiHmsManager_DeInit();
}
... ... @@ -258,6 +285,10 @@ static T_DjiFcSubscriptionFlightStatus DjiTest_GetValueOfFlightStatus(void)
T_DjiFcSubscriptionFlightStatus flightStatus;
T_DjiDataTimestamp flightStatusTimestamp = {0};
if (isHmsManagerInit == false) {
return DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_ON_GROUND;
}
returnCode = DjiFcSubscription_GetLatestValueOfTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
(uint8_t *) &flightStatus,
sizeof(T_DjiFcSubscriptionFlightStatus),
... ...
... ... @@ -41,6 +41,7 @@ extern "C" {
/* Exported functions --------------------------------------------------------*/
T_DjiReturnCode DjiTest_HmsManagerRunSample(E_DjiMobileAppLanguage language);
T_DjiReturnCode DjiTest_HmsCustomizationStartService(void);
T_DjiReturnCode DjiTest_HmsCustomizationSetConfigFilePath(const char *path);
#ifdef __cplusplus
}
... ...
... ... @@ -277,8 +277,10 @@ T_DjiReturnCode DjiTest_LiveviewRunSample(E_DjiMountPosition mountPosition)
USER_LOG_INFO("Fpv stream is saved to file: %s", s_fpvCameraStreamFilePath);
USER_LOG_INFO("Payload%d stream is saved to file: %s\r\n", mountPosition, s_payloadCameraStreamFilePath);
if (aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3T ||
aircraftInfoBaseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M3TD) {
if (DJI_AIRCRAFT_TYPE_M3T == aircraftInfoBaseInfo.aircraftType
|| DJI_AIRCRAFT_TYPE_M3TD == aircraftInfoBaseInfo.aircraftType
|| DJI_AIRCRAFT_TYPE_M4T == aircraftInfoBaseInfo.aircraftType
) {
USER_LOG_INFO("--> Start h264 stream of the fpv and selected payload\r\n");
localTime = localtime(&currentTime);
... ...
... ... @@ -180,7 +180,7 @@ REWAIT:
}
sendDataCount++;
memset(sendBuf, sendDataCount, TEST_MOP_CHANNEL_NORMAL_TRANSFOR_SEND_BUFFER);
memset(sendBuf, 'A' - 1 + (sendDataCount % 26), TEST_MOP_CHANNEL_NORMAL_TRANSFOR_SEND_BUFFER);
returnCode = DjiMopChannel_SendData(s_testMopChannelNormalOutHandle, sendBuf,
TEST_MOP_CHANNEL_NORMAL_TRANSFOR_SEND_BUFFER, &realLen);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
... ...
... ... @@ -89,9 +89,9 @@ T_DjiReturnCode DjiTest_PowerManagementStartService(void)
return returnCode;
}
if (((baseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M300_RTK || baseInfo.aircraftType == DJI_AIRCRAFT_TYPE_M350_RTK) &&
(baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 || baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_XPORT)) ||
baseInfo.aircraftType == DJI_AIRCRAFT_TYPE_FC30) {
if (baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_SKYPORT_V2 ||
baseInfo.djiAdapterType == DJI_SDK_ADAPTER_TYPE_XPORT ||
baseInfo.aircraftType == DJI_AIRCRAFT_TYPE_FC30) {
// apply high power
if (s_applyHighPowerHandler.pinInit == NULL) {
USER_LOG_ERROR("apply high power pin init interface is NULL error");
... ...
... ... @@ -71,6 +71,7 @@ typedef struct {
uint8_t usbBulk2InterfaceNum;
uint8_t usbBulk2EndpointIn;
uint8_t usbBulk2EndpointOut;
} usbBulkConfig;
} T_DjiUserLinkConfig;
... ...
... ... @@ -88,7 +88,7 @@ T_DjiReturnCode DjiTest_WaypointV3RunSample(void)
/*! Attention: suggest use the exported kmz file by DJI pilot. If use this test file, you need set the longitude as
* 113.94255, latitude as 22.57765 on DJI Assistant 2 simulator */
snprintf(tempPath, DJI_TEST_WAYPOINT_V3_KMZ_FILE_PATH_LEN_MAX, "%s/waypoint_file/waypoint_v3_test_file.kmz",
curFileDirPath);
curFileDirPath);
kmzFile = fopen(tempPath, "r");
if (kmzFile == NULL) {
... ...
... ... @@ -44,7 +44,7 @@
#include "UI_control/WidegMgmt/JZsdk_Widget.h"
#include "UI_control/UI_control.h"
#include "JZsdkLib.h"
#include "MediaProc/MediaProc.h"
#include "DeviceInfo/DeviceInfo.h"
... ... @@ -254,7 +254,7 @@ T_DjiReturnCode DjiTest_WidgetStartService(void)
if (JZsdk_check_file_exists("/root/ShakedownTest") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_INFO("开启调试模式");
if(JZsdk_delete_file("/root/ShakedownTest") != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
if(JZsdk_Osal_delete("/root/ShakedownTest") != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("关闭调试模式失败");
}
... ...
... ... @@ -461,8 +461,8 @@ static void *DjiTest_WidgetInteractionTask(void *arg)
USER_LOG_INFO("--------------------------------------------------------------------------------------------->");
DjiTest_WidgetLogAppend("-> Sample Start");
if (s_aircraftInfoBaseInfo.mountPosition == DJI_MOUNT_POSITION_EXTENSION_PORT
|| DJI_MOUNT_POSITION_EXTENSION_LITE_PORT == s_aircraftInfoBaseInfo.mountPosition) {
if (s_aircraftInfoBaseInfo.mountPositionType == DJI_MOUNT_POSITION_TYPE_EXTENSION_PORT ||
s_aircraftInfoBaseInfo.mountPositionType == DJI_MOUNT_POSITION_TYPE_EXTENSION_LITE_PORT) {
switch (s_extensionPortSampleIndex) {
case E_DJI_SAMPLE_INDEX_WAYPOINT_V2:
if (s_isallowRunFlightControlSample == true) {
... ...
# cmake 最低版本要求 第三行名字不能动
cmake_minimum_required(VERSION 2.8)
project(JZ_C1)
project(JZ_H10T)
set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++")
#"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。
... ...
... ... @@ -429,6 +429,10 @@ int main(int argc, char *argv[])
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("data subscription sample init error\n");
}
else
{
USER_LOG_INFO("DjiTest_FcSubscriptionStartService初始化");
}
#endif
#ifdef CONFIG_MODULE_SAMPLE_LIVEVIEW_ON
... ...