02.29 优化speex库和实时喊话,并能正常使用了,同时优化了UI的接口,修改了控件
避免了某个全局变量被越界。
正在显示
24 个修改的文件
包含
894 行增加
和
688 行删除
| @@ -463,7 +463,7 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_T40S") | @@ -463,7 +463,7 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_T40S") | ||
| 463 | set(AUDIODEAL_MODULE VERSION_SWITCH_ON) | 463 | set(AUDIODEAL_MODULE VERSION_SWITCH_ON) |
| 464 | 464 | ||
| 465 | # 添加speex音频处理模块 | 465 | # 添加speex音频处理模块 |
| 466 | - # set(SPEEX_MODULE VERSION_SWITCH_ON) | 466 | + set(SPEEX_MODULE VERSION_SWITCH_ON) |
| 467 | 467 | ||
| 468 | # 添加喊话器模块 | 468 | # 添加喊话器模块 |
| 469 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | 469 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) |
| 1 | -/* 头文件 ------------------------------------------------------------------*/ | 1 | +/* 头文件 ------------------------------------------------------------------*/ |
| 2 | #include "JZsdk_logger.h" | 2 | #include "JZsdk_logger.h" |
| 3 | #include "JZsdkLib.h" | 3 | #include "JZsdkLib.h" |
| 4 | #include <stdarg.h> | 4 | #include <stdarg.h> |
| @@ -5,10 +5,8 @@ | @@ -5,10 +5,8 @@ | ||
| 5 | #include <unistd.h> | 5 | #include <unistd.h> |
| 6 | #include <time.h> | 6 | #include <time.h> |
| 7 | 7 | ||
| 8 | -#define JZSDK_LOG_PATH "/root/sdcard/JZLOG/" //sd卡存放路径 | ||
| 9 | -#define JZSDK_LOG_INDEX_PATH "/root/JZLOG/" //sd卡存放序号文件路径 | 8 | +#define JZSDK_LOG_PATH "/root/JZLOG/" //sd卡存放路径 |
| 10 | #define JZSDK_LOG_INDEX_FILE_NAME "/root/JZLOG/thelast" //sd卡存放序号文件路径 | 9 | #define JZSDK_LOG_INDEX_FILE_NAME "/root/JZLOG/thelast" //sd卡存放序号文件路径 |
| 11 | -#define JZSDK_LOG_SD_INDEX_FILE_NAME "/root/sdcard/JZLOG/thelast" //sd卡存放序号文件路径 | ||
| 12 | 10 | ||
| 13 | #define JZ_LOG_FOLDER_NAME_MAX_SIZE (32) | 11 | #define JZ_LOG_FOLDER_NAME_MAX_SIZE (32) |
| 14 | #define JZ_LOG_MAX_COUNT (10) | 12 | #define JZ_LOG_MAX_COUNT (10) |
| @@ -35,16 +33,9 @@ static T_JZsdkReturnCode createJZLOGFolder() | @@ -35,16 +33,9 @@ static T_JZsdkReturnCode createJZLOGFolder() | ||
| 35 | JZsdk_Osal_Mkdir(JZSDK_LOG_PATH); | 33 | JZsdk_Osal_Mkdir(JZSDK_LOG_PATH); |
| 36 | } | 34 | } |
| 37 | 35 | ||
| 38 | - if(JZsdk_check_directory_exists_posix(JZSDK_LOG_INDEX_PATH) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 39 | - { | ||
| 40 | - JZsdk_Osal_Mkdir(JZSDK_LOG_INDEX_PATH); | ||
| 41 | - } | ||
| 42 | - | ||
| 43 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 36 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 44 | } | 37 | } |
| 45 | 38 | ||
| 46 | - | ||
| 47 | - | ||
| 48 | static T_JZsdkReturnCode JzUser_PrintConsole(const JZ_U8 *data, JZ_U16 dataLen) | 39 | static T_JZsdkReturnCode JzUser_PrintConsole(const JZ_U8 *data, JZ_U16 dataLen) |
| 49 | { | 40 | { |
| 50 | dataLen = dataLen; | 41 | dataLen = dataLen; |
| @@ -62,17 +53,16 @@ static T_JZsdkReturnCode JzUser_LocalWrite(const JZ_U8* data, JZ_U16 dataLen) | @@ -62,17 +53,16 @@ static T_JZsdkReturnCode JzUser_LocalWrite(const JZ_U8* data, JZ_U16 dataLen) | ||
| 62 | return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | 53 | return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; |
| 63 | 54 | ||
| 64 | realLen = fwrite(data, 1, dataLen, logFile); | 55 | realLen = fwrite(data, 1, dataLen, logFile); |
| 65 | - fflush(logFile); | ||
| 66 | - if (realLen != dataLen) | ||
| 67 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 68 | - | ||
| 69 | - //这里后续考虑加入保存fileno | ||
| 70 | - //if (fflush(logFile) != 0) | 56 | + //fflush(logFile); |
| 57 | + //if (realLen != dataLen) | ||
| 71 | // return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 58 | // return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 72 | 59 | ||
| 73 | - //if (fsync(fileno(logFile)) != 0) | ||
| 74 | - // return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 60 | + //这里后续考虑加入保存fileno |
| 61 | + if (fflush(logFile) != 0) | ||
| 62 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 75 | 63 | ||
| 64 | + if (fsync(fileno(logFile)) != 0) | ||
| 65 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 76 | 66 | ||
| 77 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 67 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 78 | } | 68 | } |
| @@ -88,22 +78,13 @@ static T_JZsdkReturnCode JzUser_LocalWriteFsInit(const JZ_U8 *path) | @@ -88,22 +78,13 @@ static T_JZsdkReturnCode JzUser_LocalWriteFsInit(const JZ_U8 *path) | ||
| 88 | uint16_t currentLogFileIndex; | 78 | uint16_t currentLogFileIndex; |
| 89 | uint8_t ret; | 79 | uint8_t ret; |
| 90 | 80 | ||
| 91 | - | ||
| 92 | if (localTime == NULL) | 81 | if (localTime == NULL) |
| 93 | { | 82 | { |
| 94 | printf("Get local time error.\r\n"); | 83 | printf("Get local time error.\r\n"); |
| 95 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 84 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 96 | } | 85 | } |
| 97 | 86 | ||
| 98 | - //1、检查sd卡的计数文件是否存在, 如果不存在,则移除系统的计数文件 | ||
| 99 | - if (JZsdk_check_file_exists(JZSDK_LOG_SD_INDEX_FILE_NAME) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 100 | - { | ||
| 101 | - memset(systemCmd, 0, sizeof(systemCmd)); | ||
| 102 | - sprintf(systemCmd, "rm -f %s", JZSDK_LOG_INDEX_FILE_NAME); | ||
| 103 | - ret = system(systemCmd); | ||
| 104 | - } | ||
| 105 | - | ||
| 106 | - //2、打开计数文件,获取当前日志文件序号,并更新日志文件序号 | 87 | + //打开计数文件,获取当前日志文件序号,并更新日志文件序号 |
| 107 | logFileCnt = fopen(JZSDK_LOG_INDEX_FILE_NAME, "rb+"); | 88 | logFileCnt = fopen(JZSDK_LOG_INDEX_FILE_NAME, "rb+"); |
| 108 | if (logFileCnt == NULL) | 89 | if (logFileCnt == NULL) |
| 109 | { | 90 | { |
| @@ -147,22 +128,6 @@ static T_JZsdkReturnCode JzUser_LocalWriteFsInit(const JZ_U8 *path) | @@ -147,22 +128,6 @@ static T_JZsdkReturnCode JzUser_LocalWriteFsInit(const JZ_U8 *path) | ||
| 147 | 128 | ||
| 148 | fclose(logFileCnt); | 129 | fclose(logFileCnt); |
| 149 | 130 | ||
| 150 | - ////移除sd卡的计数文件 | ||
| 151 | - //memset(systemCmd, 0, sizeof(systemCmd)); | ||
| 152 | - //sprintf(systemCmd, "rm -f %sthelast", JZSDK_LOG_PATH); | ||
| 153 | - //ret = system(systemCmd); | ||
| 154 | - //if (ret != 0) { | ||
| 155 | - // JZSDK_LOG_ERROR("Remove file error, ret:%d.\r\n", ret); | ||
| 156 | - //} | ||
| 157 | - | ||
| 158 | - //复制日志计数文件到sd卡 | ||
| 159 | - memset(systemCmd, 0, sizeof(systemCmd)); | ||
| 160 | - sprintf(systemCmd, "cp %s %s/thelast", JZSDK_LOG_INDEX_FILE_NAME, JZSDK_LOG_PATH); | ||
| 161 | - ret = system(systemCmd); | ||
| 162 | - if (ret != 0) { | ||
| 163 | - JZSDK_LOG_ERROR("Copy file error, ret:%d.\r\n", ret); | ||
| 164 | - } | ||
| 165 | - | ||
| 166 | //开始打开log文件 | 131 | //开始打开log文件 |
| 167 | sprintf(filePath, "%s_%04d_%04d%02d%02d_%02d-%02d-%02d.log", path, currentLogFileIndex, | 132 | sprintf(filePath, "%s_%04d_%04d%02d%02d_%02d-%02d-%02d.log", path, currentLogFileIndex, |
| 168 | localTime->tm_year + 1900, localTime->tm_mon + 1, localTime->tm_mday, | 133 | localTime->tm_year + 1900, localTime->tm_mon + 1, localTime->tm_mday, |
| @@ -174,16 +139,16 @@ static T_JZsdkReturnCode JzUser_LocalWriteFsInit(const JZ_U8 *path) | @@ -174,16 +139,16 @@ static T_JZsdkReturnCode JzUser_LocalWriteFsInit(const JZ_U8 *path) | ||
| 174 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 139 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 175 | } | 140 | } |
| 176 | 141 | ||
| 177 | - if (logFileIndex >= JZ_LOG_MAX_COUNT) | ||
| 178 | - { | ||
| 179 | - //把多余的日志删除 | ||
| 180 | - sprintf(systemCmd, "rm -rf %s_%04d*.log", path, currentLogFileIndex - JZ_LOG_MAX_COUNT); | ||
| 181 | - ret = system(systemCmd); | ||
| 182 | - if (ret != 0) { | ||
| 183 | - printf("Remove file error, ret:%d.\r\n", ret); | ||
| 184 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 185 | - } | ||
| 186 | - } | 142 | + //if (logFileIndex >= JZ_LOG_MAX_COUNT) |
| 143 | + //{ | ||
| 144 | + // //把多余的日志删除 | ||
| 145 | + // sprintf(systemCmd, "rm -rf %s_%04d*.log", path, currentLogFileIndex - JZ_LOG_MAX_COUNT); | ||
| 146 | + // ret = system(systemCmd); | ||
| 147 | + // if (ret != 0) { | ||
| 148 | + // printf("Remove file error, ret:%d.\r\n", ret); | ||
| 149 | + // return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 150 | + // } | ||
| 151 | + //} | ||
| 187 | 152 | ||
| 188 | //往日志中写入utf8识别符 | 153 | //往日志中写入utf8识别符 |
| 189 | fputc(0xEF, logFile); | 154 | fputc(0xEF, logFile); |
| @@ -16,7 +16,7 @@ | @@ -16,7 +16,7 @@ | ||
| 16 | #include "Hal_Send/HalSend.h" | 16 | #include "Hal_Send/HalSend.h" |
| 17 | #include "SideLaser/SideLaser.h" | 17 | #include "SideLaser/SideLaser.h" |
| 18 | 18 | ||
| 19 | -#include "UI_control/Psdk_ui_value_menu.h" | 19 | +#include "UI_control/Psdk_UI_io.h" |
| 20 | #include "UI_control/UI_control.h" | 20 | #include "UI_control/UI_control.h" |
| 21 | 21 | ||
| 22 | #include "../../ParamterParsing.h" | 22 | #include "../../ParamterParsing.h" |
| @@ -23,7 +23,7 @@ | @@ -23,7 +23,7 @@ | ||
| 23 | #define MODIFY_VERSION_TEN_POSITION 1 | 23 | #define MODIFY_VERSION_TEN_POSITION 1 |
| 24 | #define MODIFY_VERSION_ONE_POSITION 5 | 24 | #define MODIFY_VERSION_ONE_POSITION 5 |
| 25 | #define DEBUG_VERSION_TEN_POSITION 0 | 25 | #define DEBUG_VERSION_TEN_POSITION 0 |
| 26 | -#define DEBUG_VERSION_ONE_POSITION 4 | 26 | +#define DEBUG_VERSION_ONE_POSITION 6 |
| 27 | 27 | ||
| 28 | #define FIRMWARE_ORIGIN DOMESTIC_VERSION | 28 | #define FIRMWARE_ORIGIN DOMESTIC_VERSION |
| 29 | 29 |
| 1 | -#include <stdio.h> | 1 | +#include <stdio.h> |
| 2 | #include <pthread.h> | 2 | #include <pthread.h> |
| 3 | #include <alsa/asoundlib.h> | 3 | #include <alsa/asoundlib.h> |
| 4 | #include <stdlib.h> | 4 | #include <stdlib.h> |
| @@ -189,6 +189,42 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput_RecordSteam(int In_Bitrate, unsigned ch | @@ -189,6 +189,42 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput_RecordSteam(int In_Bitrate, unsigned ch | ||
| 189 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 189 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 190 | } | 190 | } |
| 191 | 191 | ||
| 192 | + | ||
| 193 | +/************* | ||
| 194 | + * | ||
| 195 | + * 实时语音语音类型的pcm数据导入接口 char | ||
| 196 | + * | ||
| 197 | + * 区别 | ||
| 198 | + * a 使用语音专用的滤波 | ||
| 199 | + * b 需要进行回音消除 | ||
| 200 | + * | ||
| 201 | + * | ||
| 202 | + * **********************/ | ||
| 203 | +T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam_byChar(int In_Bitrate, unsigned char* buffer, int bytesRead) | ||
| 204 | +{ | ||
| 205 | + if (AudioDeakInfo_index == NULL) | ||
| 206 | + { | ||
| 207 | + JZSDK_LOG_ERROR("音频处理器未注册"); | ||
| 208 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + while (Audiodeal_status != JZ_FLAGCODE_ON) | ||
| 212 | + { | ||
| 213 | + delayMs(1); | ||
| 214 | + } | ||
| 215 | + | ||
| 216 | + int DateType = 0x02; | ||
| 217 | + | ||
| 218 | + //1、打开音频库的处理标志位,该标志可以重复打开,只有强制关闭音频时,需要关闭该标志 | ||
| 219 | + AudioDeakInfo_index->AudioDeal_ResampleAndFilter_Execute_Flag = JZ_FLAGCODE_ON; | ||
| 220 | + | ||
| 221 | + | ||
| 222 | + //默认数据pcm接入口都是 单声道,16位 | ||
| 223 | + PCM_PooL_Interface_PcmData(AudioDeakInfo_index, In_Bitrate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16, buffer, bytesRead, DateType); | ||
| 224 | + | ||
| 225 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 226 | +} | ||
| 227 | + | ||
| 192 | /************* | 228 | /************* |
| 193 | * | 229 | * |
| 194 | * 实时语音语音类型的pcm数据导入接口 | 230 | * 实时语音语音类型的pcm数据导入接口 |
| @@ -197,8 +233,10 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput_RecordSteam(int In_Bitrate, unsigned ch | @@ -197,8 +233,10 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput_RecordSteam(int In_Bitrate, unsigned ch | ||
| 197 | * a 使用语音专用的滤波 | 233 | * a 使用语音专用的滤波 |
| 198 | * b 需要进行回音消除 | 234 | * b 需要进行回音消除 |
| 199 | * | 235 | * |
| 236 | + * 正常16000的opus解出来的framesize是640长度的short | ||
| 237 | + * | ||
| 200 | * **********************/ | 238 | * **********************/ |
| 201 | -T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam(int In_Bitrate, unsigned char *buffer, int bytesRead) | 239 | +T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam(int In_Bitrate, short *buffer, int frame_size) |
| 202 | { | 240 | { |
| 203 | if (AudioDeakInfo_index == NULL) | 241 | if (AudioDeakInfo_index == NULL) |
| 204 | { | 242 | { |
| @@ -221,29 +259,23 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam(int In_Bitrate, unsigned | @@ -221,29 +259,23 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam(int In_Bitrate, unsigned | ||
| 221 | 259 | ||
| 222 | #ifdef SPEEX_STATUS_ON | 260 | #ifdef SPEEX_STATUS_ON |
| 223 | 261 | ||
| 224 | - short TempPcm[bytesRead / 2]; | ||
| 225 | - short OutPcm[bytesRead / 2]; | ||
| 226 | - for (int i = 0; i < bytesRead / 2; i++) | ||
| 227 | - { | ||
| 228 | - TempPcm[i] = (buffer[2*i] & 0xFF) | (((short)buffer[2*i + 1]) << 8); | ||
| 229 | - } | ||
| 230 | - | ||
| 231 | - //送去回音消除 | ||
| 232 | - T_JZsdkReturnCode ret = Speex_DealData(TempPcm, OutPcm, bytesRead / 2); | ||
| 233 | - // if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 234 | - // { | ||
| 235 | - // //将输出的pcm还原回u8型到数据缓冲区 | ||
| 236 | - // for (int i = 0; i < bytesRead / 2; i++) | ||
| 237 | - // { | ||
| 238 | - // buffer[2*i] = (OutPcm[i] & 0xFF); | ||
| 239 | - // buffer[2*i + 1] = ((OutPcm[i] >> 8) & 0xFF); | ||
| 240 | - // } | ||
| 241 | - // } | 262 | + //回音消除+噪声抑制 |
| 263 | + Speex_ProcessMic(buffer, buffer); | ||
| 242 | 264 | ||
| 243 | #endif | 265 | #endif |
| 244 | 266 | ||
| 267 | + unsigned char pcm_buffer[640 * 2]; | ||
| 268 | + int pcm_bytes = 640 * 2; | ||
| 269 | + | ||
| 270 | + //把short类型的数据转换为char型输入到播放器 | ||
| 271 | + for (int i = 0; i < 640; i++) | ||
| 272 | + { | ||
| 273 | + pcm_buffer[2 * i] = buffer[i] & 0xFF; | ||
| 274 | + pcm_buffer[2 * i + 1] = (buffer[i] >> 8) & 0xFF; | ||
| 275 | + } | ||
| 276 | + | ||
| 245 | //默认数据pcm接入口都是 单声道,16位 | 277 | //默认数据pcm接入口都是 单声道,16位 |
| 246 | - PCM_PooL_Interface_PcmData(AudioDeakInfo_index, In_Bitrate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16, buffer, bytesRead, DateType); | 278 | + PCM_PooL_Interface_PcmData(AudioDeakInfo_index, In_Bitrate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16, pcm_buffer, pcm_bytes, DateType); |
| 247 | 279 | ||
| 248 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 280 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 249 | } | 281 | } |
| 1 | -/** | 1 | +/** |
| 2 | ******************************************************************** | 2 | ******************************************************************** |
| 3 | * @file AudioDeal.h | 3 | * @file AudioDeal.h |
| 4 | * AudioDeal的头文件 | 4 | * AudioDeal的头文件 |
| @@ -103,7 +103,8 @@ T_JZsdkReturnCode AudioDeal_Init(); | @@ -103,7 +103,8 @@ T_JZsdkReturnCode AudioDeal_Init(); | ||
| 103 | 103 | ||
| 104 | T_JZsdkReturnCode AudioDeal_PcmDataInput_TextSteam(int In_Bitrate, unsigned char *buffer, int bytesRead); | 104 | T_JZsdkReturnCode AudioDeal_PcmDataInput_TextSteam(int In_Bitrate, unsigned char *buffer, int bytesRead); |
| 105 | T_JZsdkReturnCode AudioDeal_PcmDataInput_RecordSteam(int In_Bitrate, unsigned char *buffer, int bytesRead); | 105 | T_JZsdkReturnCode AudioDeal_PcmDataInput_RecordSteam(int In_Bitrate, unsigned char *buffer, int bytesRead); |
| 106 | -T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam(int In_Bitrate, unsigned char *buffer, int bytesRead); | 106 | +T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam(int In_Bitrate, short* buffer, int frame_size); |
| 107 | +T_JZsdkReturnCode AudioDeal_PcmDataInput_RealTimeSteam_byChar(int In_Bitrate, unsigned char* buffer, int bytesRead); | ||
| 107 | 108 | ||
| 108 | T_JZsdkReturnCode AudioDeal_EchoCancellation_Init(int SampleRate); | 109 | T_JZsdkReturnCode AudioDeal_EchoCancellation_Init(int SampleRate); |
| 109 | 110 |
| 1 | -#include "JZsdkLib.h" | 1 | +#include "JZsdkLib.h" |
| 2 | #include "version_choose.h" | 2 | #include "version_choose.h" |
| 3 | 3 | ||
| 4 | -//main函数参数一是原始pcm文件名,参数二是去噪后的pcm文件名 | ||
| 5 | - | ||
| 6 | - | ||
| 7 | #ifdef SPEEX_STATUS_ON | 4 | #ifdef SPEEX_STATUS_ON |
| 8 | 5 | ||
| 9 | #include <stdio.h> | 6 | #include <stdio.h> |
| 10 | #include <string.h> | 7 | #include <string.h> |
| 11 | -#include "speex/speex_echo.h" // Speex 回声消除头文件 | ||
| 12 | -#include "speex/speex_preprocess.h" // Speex 预处理头文件 | ||
| 13 | - | ||
| 14 | -/* | ||
| 15 | -graph LR | ||
| 16 | - | ||
| 17 | -A[原始语音信号] --> B[预处理] | ||
| 18 | -B --> C[语言检测] | ||
| 19 | -C -->|英语| D[英语参数配置] | ||
| 20 | -C -->|汉语| E[汉语参数配置] | ||
| 21 | -C -->|法语| F[法语参数配置] | ||
| 22 | -D --> G[Speex编码器] | ||
| 23 | -E --> H[Speex编码器] | ||
| 24 | -F --> I[Speex编码器] | ||
| 25 | -G --> J[输出编码数据] | ||
| 26 | -H --> J | ||
| 27 | -I --> J | ||
| 28 | -*/ | ||
| 29 | - | ||
| 30 | -#define TAIL_TIME 500 //回声尾长,单位毫秒 | ||
| 31 | - | ||
| 32 | -typedef struct JZ_SpeexInfo{ | ||
| 33 | - | ||
| 34 | - //处理的音频样本长度, 一般对应10~20ms的音频数据,太小会增加计算开销,太大会增加处理延迟 | ||
| 35 | - int DealSampleLen; | ||
| 36 | - | ||
| 37 | - /* | ||
| 38 | - 回声尾长 表示需要消除的回声持续时间(以样本数计) 建议值对应100-500毫秒的音频数据 | ||
| 39 | - 对于8kHz采样率:800-4000个样本 | ||
| 40 | - 对于16kHz采样率:1600-8000个样本 | ||
| 41 | - */ | ||
| 42 | - int TailLen; | ||
| 43 | - | ||
| 44 | - //音频采样率 | 8 | +#include "speex/speex_echo.h" |
| 9 | +#include "speex/speex_preprocess.h" | ||
| 10 | + | ||
| 11 | +// ========== 可配置参数 ========== | ||
| 12 | +#define TAIL_MS 300 // 回声尾长(毫秒) | ||
| 13 | +#define FRAME_SAMPLES 640 // 每帧样本数 640个short | ||
| 14 | +#define SAMPLE_RATE 16000 // 采样率 | ||
| 15 | +#define PLAYBACK_DELAY_FRAMES 1 // 播放延迟(帧数),1 表示用上一帧作为参考 | ||
| 16 | +// ================================= | ||
| 17 | + | ||
| 18 | +typedef struct JZ_SpeexInfo { | ||
| 45 | int SampleRate; | 19 | int SampleRate; |
| 20 | + int FrameSize; | ||
| 21 | + int TailLen; // 回声尾长(样本数) | ||
| 22 | + int PlaybackDelaySamples; // 播放延迟(样本数) | ||
| 46 | 23 | ||
| 47 | - // Speex回声消除状态 | ||
| 48 | - SpeexEchoState *EchoState; | 24 | + SpeexEchoState* EchoState; |
| 25 | + SpeexPreprocessState* PreprocessState; | ||
| 49 | 26 | ||
| 50 | - // Speex预处理状态 | ||
| 51 | - SpeexPreprocessState *PreprocessState; | 27 | + // 环形缓冲区,存储历史输出帧(即播放过的数据) |
| 28 | + short* HistoryBuffer; | ||
| 29 | + int HistorySize; // 缓冲区总长度(样本数) | ||
| 30 | + int WritePos; // 下一个写入位置 | ||
| 31 | + int TotalWritten; // 累计写入样本数(用于判断缓冲区是否足够) | ||
| 52 | 32 | ||
| 53 | - // 存储回声消除的样本 | ||
| 54 | - short *EchoBuf; | ||
| 55 | - int EchoBufLen; | 33 | + SpeexPreprocessState* DenoiseOnlyState; |
| 34 | + int DenoiseOnlyFlag; // 是否启用独立降噪模式 | ||
| 56 | 35 | ||
| 57 | - //标志位 | ||
| 58 | int Flag; | 36 | int Flag; |
| 37 | +} JZ_SpeexInfo; | ||
| 38 | + | ||
| 39 | +static JZ_SpeexInfo g_SpeexInfo = { 0 }; | ||
| 40 | + | ||
| 41 | +// 初始化历史缓冲区 | ||
| 42 | +static int InitHistoryBuffer(int size_samples) { | ||
| 43 | + if (g_SpeexInfo.HistoryBuffer) { | ||
| 44 | + free(g_SpeexInfo.HistoryBuffer); | ||
| 45 | + g_SpeexInfo.HistoryBuffer = NULL; | ||
| 46 | + } | ||
| 47 | + g_SpeexInfo.HistoryBuffer = (short*)malloc(size_samples * sizeof(short)); | ||
| 48 | + if (!g_SpeexInfo.HistoryBuffer) return -1; | ||
| 49 | + memset(g_SpeexInfo.HistoryBuffer, 0, size_samples * sizeof(short)); | ||
| 50 | + g_SpeexInfo.HistorySize = size_samples; | ||
| 51 | + g_SpeexInfo.WritePos = 0; | ||
| 52 | + g_SpeexInfo.TotalWritten = 0; | ||
| 53 | + return 0; | ||
| 54 | +} | ||
| 55 | + | ||
| 56 | +// 写入一帧到历史缓冲区(播放过的帧) | ||
| 57 | +static void WriteHistoryFrame(short* frame) { | ||
| 58 | + int fs = g_SpeexInfo.FrameSize; | ||
| 59 | + int hist_size = g_SpeexInfo.HistorySize; | ||
| 60 | + int write_pos = g_SpeexInfo.WritePos; | ||
| 61 | + | ||
| 62 | + if (write_pos + fs <= hist_size) { | ||
| 63 | + memcpy(g_SpeexInfo.HistoryBuffer + write_pos, frame, fs * sizeof(short)); | ||
| 64 | + } | ||
| 65 | + else { | ||
| 66 | + int first_part = hist_size - write_pos; | ||
| 67 | + memcpy(g_SpeexInfo.HistoryBuffer + write_pos, frame, first_part * sizeof(short)); | ||
| 68 | + memcpy(g_SpeexInfo.HistoryBuffer, frame + first_part, (fs - first_part) * sizeof(short)); | ||
| 69 | + } | ||
| 70 | + g_SpeexInfo.WritePos = (write_pos + fs) % hist_size; | ||
| 71 | + g_SpeexInfo.TotalWritten += fs; | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +// 从历史缓冲区读取参考帧(对齐到当前麦克风时间) | ||
| 75 | +static int ReadRefFrame(short* out_ref) { | ||
| 76 | + int fs = g_SpeexInfo.FrameSize; | ||
| 77 | + int hist_size = g_SpeexInfo.HistorySize; | ||
| 78 | + int write_pos = g_SpeexInfo.WritePos; | ||
| 79 | + int delay_samples = g_SpeexInfo.PlaybackDelaySamples; | ||
| 80 | + | ||
| 81 | + int read_pos = write_pos - delay_samples - fs; | ||
| 82 | + if (read_pos < 0) read_pos += hist_size; | ||
| 59 | 83 | ||
| 60 | -}JZ_SpeexInfo; | 84 | + if (g_SpeexInfo.TotalWritten < delay_samples + fs) { |
| 85 | + return -1; | ||
| 86 | + } | ||
| 61 | 87 | ||
| 62 | -static JZ_SpeexInfo g_SpeexInfo = {0}; | 88 | + if (read_pos + fs <= hist_size) { |
| 89 | + memcpy(out_ref, g_SpeexInfo.HistoryBuffer + read_pos, fs * sizeof(short)); | ||
| 90 | + } | ||
| 91 | + else { | ||
| 92 | + int first_part = hist_size - read_pos; | ||
| 93 | + memcpy(out_ref, g_SpeexInfo.HistoryBuffer + read_pos, first_part * sizeof(short)); | ||
| 94 | + memcpy(out_ref + first_part, g_SpeexInfo.HistoryBuffer, (fs - first_part) * sizeof(short)); | ||
| 95 | + } | ||
| 96 | + return 0; | ||
| 97 | +} | ||
| 63 | 98 | ||
| 64 | T_JZsdkReturnCode Speex_Deinit() | 99 | T_JZsdkReturnCode Speex_Deinit() |
| 65 | { | 100 | { |
| 66 | if (g_SpeexInfo.Flag == JZ_FLAGCODE_ON) | 101 | if (g_SpeexInfo.Flag == JZ_FLAGCODE_ON) |
| 67 | { | 102 | { |
| 68 | - speex_echo_state_destroy(g_SpeexInfo.EchoState); // 释放回声消除状态 | ||
| 69 | - speex_preprocess_state_destroy(g_SpeexInfo.PreprocessState); // 释放预处理状态 | 103 | + if (g_SpeexInfo.EchoState) |
| 104 | + { | ||
| 105 | + speex_echo_state_destroy(g_SpeexInfo.EchoState); | ||
| 106 | + g_SpeexInfo.EchoState = NULL; | ||
| 107 | + } | ||
| 70 | 108 | ||
| 71 | - memset(&(g_SpeexInfo.EchoBuf), 0, sizeof(g_SpeexInfo.EchoBuf)); | ||
| 72 | - g_SpeexInfo.EchoBufLen = 0; | 109 | + if (g_SpeexInfo.PreprocessState) |
| 110 | + { | ||
| 111 | + speex_preprocess_state_destroy(g_SpeexInfo.PreprocessState); | ||
| 112 | + g_SpeexInfo.PreprocessState = NULL; | ||
| 113 | + } | ||
| 73 | 114 | ||
| 74 | - if (g_SpeexInfo.EchoBuf != NULL) | 115 | + if (g_SpeexInfo.HistoryBuffer) |
| 75 | { | 116 | { |
| 76 | - free(g_SpeexInfo.EchoBuf); | ||
| 77 | - g_SpeexInfo.EchoBuf = NULL; | 117 | + free(g_SpeexInfo.HistoryBuffer); |
| 118 | + g_SpeexInfo.HistoryBuffer = NULL; | ||
| 78 | } | 119 | } |
| 79 | 120 | ||
| 121 | + memset(&g_SpeexInfo, 0, sizeof(g_SpeexInfo)); | ||
| 80 | g_SpeexInfo.Flag = JZ_FLAGCODE_OFF; | 122 | g_SpeexInfo.Flag = JZ_FLAGCODE_OFF; |
| 81 | } | 123 | } |
| 82 | 124 | ||
| 83 | - JZSDK_LOG_DEBUG("Speex_Deinit success\n"); | 125 | + //降噪注销 |
| 126 | + if (g_SpeexInfo.DenoiseOnlyState) | ||
| 127 | + { | ||
| 128 | + speex_preprocess_state_destroy(g_SpeexInfo.DenoiseOnlyState); | ||
| 129 | + g_SpeexInfo.DenoiseOnlyState = NULL; | ||
| 130 | + } | ||
| 84 | 131 | ||
| 132 | + JZSDK_LOG_DEBUG("Speex_Deinit success\n"); | ||
| 85 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 133 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 86 | } | 134 | } |
| 87 | 135 | ||
| 88 | -T_JZsdkReturnCode Speex_Init(int SampleRate) | 136 | +// 初始化 |
| 137 | +// sample_rate: 采样率(如 16000) | ||
| 138 | +T_JZsdkReturnCode Speex_Init(int sample_rate) | ||
| 89 | { | 139 | { |
| 90 | - //检查speex的参数 | ||
| 91 | if (g_SpeexInfo.Flag == JZ_FLAGCODE_ON) | 140 | if (g_SpeexInfo.Flag == JZ_FLAGCODE_ON) |
| 92 | { | 141 | { |
| 93 | Speex_Deinit(); | 142 | Speex_Deinit(); |
| 94 | } | 143 | } |
| 95 | 144 | ||
| 96 | - g_SpeexInfo.SampleRate = SampleRate; | 145 | + int frame_samples = FRAME_SAMPLES; |
| 146 | + int playback_delay_frames = PLAYBACK_DELAY_FRAMES; | ||
| 97 | 147 | ||
| 98 | - //计算长度 | ||
| 99 | - g_SpeexInfo.TailLen = SampleRate * TAIL_TIME / 1000 ; //可以×1.2作为余量 | ||
| 100 | - g_SpeexInfo.DealSampleLen = 640; //16000 * time / 1000 //目前是因为程序写死了80 后面可以改 | 148 | + g_SpeexInfo.SampleRate = sample_rate; |
| 149 | + g_SpeexInfo.FrameSize = frame_samples; | ||
| 150 | + g_SpeexInfo.TailLen = sample_rate * TAIL_MS / 1000; | ||
| 151 | + g_SpeexInfo.PlaybackDelaySamples = playback_delay_frames * frame_samples; | ||
| 101 | 152 | ||
| 102 | - // 初始化回声消除状态 | ||
| 103 | - g_SpeexInfo.EchoState = speex_echo_state_init(g_SpeexInfo.DealSampleLen, g_SpeexInfo.TailLen); | ||
| 104 | - g_SpeexInfo.PreprocessState = speex_preprocess_state_init(g_SpeexInfo.DealSampleLen, g_SpeexInfo.SampleRate); // 初始化预处理状态 | 153 | + int hist_size = g_SpeexInfo.TailLen + g_SpeexInfo.PlaybackDelaySamples + frame_samples * 2; |
| 105 | 154 | ||
| 106 | - //设置采样率 | ||
| 107 | - speex_echo_ctl(g_SpeexInfo.EchoState, SPEEX_ECHO_SET_SAMPLING_RATE, &(g_SpeexInfo.SampleRate)); | 155 | + g_SpeexInfo.EchoState = speex_echo_state_init(frame_samples, g_SpeexInfo.TailLen); |
| 156 | + if (!g_SpeexInfo.EchoState) { | ||
| 157 | + JZSDK_LOG_DEBUG("Speex_Init: speex_echo_state_init failed\n"); | ||
| 158 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 159 | + } | ||
| 160 | + speex_echo_ctl(g_SpeexInfo.EchoState, SPEEX_ECHO_SET_SAMPLING_RATE, &sample_rate); | ||
| 161 | + | ||
| 162 | + g_SpeexInfo.PreprocessState = speex_preprocess_state_init(frame_samples, sample_rate); | ||
| 163 | + if (!g_SpeexInfo.PreprocessState) | ||
| 164 | + { | ||
| 165 | + speex_echo_state_destroy(g_SpeexInfo.EchoState); | ||
| 166 | + JZSDK_LOG_DEBUG("Speex_Init: speex_preprocess_state_init failed\n"); | ||
| 167 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 168 | + } | ||
| 108 | 169 | ||
| 109 | - //将预处理状态与回声消除状态关联 | ||
| 110 | speex_preprocess_ctl(g_SpeexInfo.PreprocessState, SPEEX_PREPROCESS_SET_ECHO_STATE, g_SpeexInfo.EchoState); | 170 | speex_preprocess_ctl(g_SpeexInfo.PreprocessState, SPEEX_PREPROCESS_SET_ECHO_STATE, g_SpeexInfo.EchoState); |
| 111 | 171 | ||
| 112 | - //注册预处理数据数组 | ||
| 113 | - g_SpeexInfo.EchoBuf = (short *)malloc(g_SpeexInfo.TailLen * sizeof(short)); | 172 | + if (InitHistoryBuffer(hist_size) != 0) { |
| 173 | + speex_echo_state_destroy(g_SpeexInfo.EchoState); | ||
| 174 | + speex_preprocess_state_destroy(g_SpeexInfo.PreprocessState); | ||
| 175 | + JZSDK_LOG_DEBUG("Speex_Init: history buffer allocation failed\n"); | ||
| 176 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 177 | + } | ||
| 114 | 178 | ||
| 115 | g_SpeexInfo.Flag = JZ_FLAGCODE_ON; | 179 | g_SpeexInfo.Flag = JZ_FLAGCODE_ON; |
| 180 | + JZSDK_LOG_DEBUG("Speex_Init success: sr=%d, fs=%d, tail=%d, delay=%d samples, hist=%d\n", | ||
| 181 | + sample_rate, frame_samples, g_SpeexInfo.TailLen, | ||
| 182 | + g_SpeexInfo.PlaybackDelaySamples, hist_size); | ||
| 183 | + | ||
| 184 | + | ||
| 185 | + | ||
| 116 | 186 | ||
| 117 | - JZSDK_LOG_DEBUG("Speex_Init success\n"); | 187 | + /*********************************** |
| 188 | + | ||
| 189 | + 降噪配置 | ||
| 190 | + | ||
| 191 | + | ||
| 192 | + *************************************/ | ||
| 193 | + g_SpeexInfo.DenoiseOnlyState = speex_preprocess_state_init(FRAME_SAMPLES, sample_rate); | ||
| 194 | + if (!g_SpeexInfo.DenoiseOnlyState) { | ||
| 195 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + // 在 Speex_Init 中,创建 DenoiseOnlyState 后添加: | ||
| 199 | + int vad = 0; | ||
| 200 | + speex_preprocess_ctl(g_SpeexInfo.DenoiseOnlyState, SPEEX_PREPROCESS_SET_VAD, &vad); | ||
| 201 | + int agc = 0; | ||
| 202 | + speex_preprocess_ctl(g_SpeexInfo.DenoiseOnlyState, SPEEX_PREPROCESS_SET_AGC, &agc); | ||
| 203 | + int denoise = 1; // 保持开启 | ||
| 204 | + speex_preprocess_ctl(g_SpeexInfo.DenoiseOnlyState, SPEEX_PREPROCESS_SET_DENOISE, &denoise); | ||
| 205 | + // 可选:关闭降噪的自动增益补偿 | ||
| 206 | + int noise_suppress = 0; // 或者尝试 1,2... | ||
| 207 | + speex_preprocess_ctl(g_SpeexInfo.DenoiseOnlyState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &noise_suppress); | ||
| 118 | 208 | ||
| 119 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 209 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 120 | } | 210 | } |
| 121 | 211 | ||
| 122 | -T_JZsdkReturnCode Speex_DealData(short *InData, short *OutData, int frame_size) | 212 | + |
| 213 | +// 独立降噪处理(char* 版本,原地处理) | ||
| 214 | +T_JZsdkReturnCode Speex_DenoiseOnly_Process(short* mic, short* out) | ||
| 123 | { | 215 | { |
| 124 | - if (g_SpeexInfo.Flag == JZ_FLAGCODE_OFF) | 216 | + if (!g_SpeexInfo.DenoiseOnlyState) |
| 125 | { | 217 | { |
| 218 | + if (out != mic) memcpy(out, mic, FRAME_SAMPLES * sizeof(short)); | ||
| 126 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 219 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 127 | } | 220 | } |
| 128 | 221 | ||
| 129 | - //填充回声消除的样本 | ||
| 130 | - if (g_SpeexInfo.EchoBufLen < g_SpeexInfo.TailLen) | ||
| 131 | - { | ||
| 132 | - memcpy(&(g_SpeexInfo.EchoBuf[g_SpeexInfo.EchoBufLen]), InData, frame_size * sizeof(short)); | ||
| 133 | - g_SpeexInfo.EchoBufLen += frame_size; | ||
| 134 | - } | ||
| 135 | - //如果里面有完整数据 | ||
| 136 | - else if (g_SpeexInfo.EchoBufLen == g_SpeexInfo.DealSampleLen) | ||
| 137 | - { | ||
| 138 | - //对数据进行位移 | ||
| 139 | - memmove(g_SpeexInfo.EchoBuf, &(g_SpeexInfo.EchoBuf[frame_size]), (g_SpeexInfo.EchoBufLen - frame_size) * sizeof(short)); | 222 | + if (out != mic) memcpy(out, mic, FRAME_SAMPLES * sizeof(short)); |
| 140 | 223 | ||
| 141 | - //将新的数据填充到回声消除的样本中 | ||
| 142 | - memcpy(&(g_SpeexInfo.EchoBuf[g_SpeexInfo.EchoBufLen - frame_size]), InData, frame_size * sizeof(short)); | ||
| 143 | - } | ||
| 144 | - //如果里面的数据超了 | ||
| 145 | - else if (g_SpeexInfo.EchoBufLen > g_SpeexInfo.TailLen) | 224 | + speex_preprocess_run(g_SpeexInfo.DenoiseOnlyState, out); |
| 225 | + | ||
| 226 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 227 | +} | ||
| 228 | + | ||
| 229 | +// 处理麦克风数据(char* 版本) | ||
| 230 | +// mic: 麦克风采集的原始 PCM 字节流(长度 = frame_samples * sizeof(short) = 640 字节) | ||
| 231 | +// out: 处理后的干净 PCM 字节流(长度相同,可与 mic 共用内存) | ||
| 232 | +// 注意:out 同时会被保存到历史缓冲区,作为下一帧的参考信号(播放数据) | ||
| 233 | +T_JZsdkReturnCode Speex_ProcessMic(short* mic, short* out) | ||
| 234 | +{ | ||
| 235 | + if (g_SpeexInfo.Flag == JZ_FLAGCODE_OFF) | ||
| 146 | { | 236 | { |
| 147 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 237 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 148 | } | 238 | } |
| 149 | 239 | ||
| 150 | - //如果没有填充完回声数组 | ||
| 151 | - if (g_SpeexInfo.EchoBufLen < g_SpeexInfo.TailLen) | 240 | + short ref_frame[FRAME_SAMPLES]; // 用于存放参考帧 |
| 241 | + if (ReadRefFrame(ref_frame) != 0) | ||
| 152 | { | 242 | { |
| 153 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 243 | + // 历史数据不足,直接拷贝输出 |
| 244 | + if (out != mic) memcpy(out, mic, g_SpeexInfo.FrameSize * sizeof(short)); | ||
| 245 | + WriteHistoryFrame(out); | ||
| 246 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 154 | } | 247 | } |
| 155 | 248 | ||
| 156 | - // // 执行回声消除 | ||
| 157 | - // speex_echo_cancellation(g_SpeexInfo.EchoState, InData, g_SpeexInfo.EchoBuf, OutData); | 249 | + // 执行回声消除 |
| 250 | + speex_echo_cancellation(g_SpeexInfo.EchoState, mic, ref_frame, out); | ||
| 251 | + | ||
| 252 | + // 执行后处理(噪声抑制等) | ||
| 253 | + speex_preprocess_run(g_SpeexInfo.PreprocessState, out); | ||
| 158 | 254 | ||
| 159 | - // // 执行预处理(如噪声抑制等) | ||
| 160 | - // speex_preprocess_run(g_SpeexInfo.PreprocessState, OutData); | 255 | + // 将处理后的帧写入历史缓冲区(因为它即将被播放) |
| 256 | + WriteHistoryFrame(out); | ||
| 161 | 257 | ||
| 162 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 258 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 163 | } | 259 | } |
| 1 | -/** | 1 | +/** |
| 2 | ******************************************************************** | 2 | ******************************************************************** |
| 3 | * @file speex.h | 3 | * @file speex.h |
| 4 | * speex的头文件 | 4 | * speex的头文件 |
| @@ -24,7 +24,8 @@ extern "C" { | @@ -24,7 +24,8 @@ extern "C" { | ||
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | /* Exported functions --------------------------------------------------------*/ | 26 | /* Exported functions --------------------------------------------------------*/ |
| 27 | -T_JZsdkReturnCode Speex_DealData(short *InData, short *OutData, int frame_size); | 27 | +T_JZsdkReturnCode Speex_ProcessMic(short* mic, short* out); |
| 28 | +T_JZsdkReturnCode Speex_DenoiseOnly_Process(short* mic, short* out); | ||
| 28 | T_JZsdkReturnCode Speex_Init(int SampleRate); | 29 | T_JZsdkReturnCode Speex_Init(int SampleRate); |
| 29 | 30 | ||
| 30 | #ifdef __cplusplus | 31 | #ifdef __cplusplus |
| @@ -216,6 +216,7 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len | @@ -216,6 +216,7 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len | ||
| 216 | frame_size = WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE; | 216 | frame_size = WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE; |
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | +#if 0 | ||
| 219 | //转换 | 220 | //转换 |
| 220 | opus_int16 TempPcm[WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS]; | 221 | opus_int16 TempPcm[WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS]; |
| 221 | 222 | ||
| @@ -223,14 +224,16 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len | @@ -223,14 +224,16 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len | ||
| 223 | { | 224 | { |
| 224 | TempPcm[i] = out[i] & 0xFF | (out[i] >> 8) << 8; | 225 | TempPcm[i] = out[i] & 0xFF | (out[i] >> 8) << 8; |
| 225 | 226 | ||
| 226 | -#if SPECIAL_VERSION == SPECIAL_DAOTONG | ||
| 227 | - TempPcm[i] = PcmNoiseReduction(TempPcm[i]); | ||
| 228 | -#endif | ||
| 229 | pcm_bytes[2 * i] = TempPcm[i] & 0xFF; | 227 | pcm_bytes[2 * i] = TempPcm[i] & 0xFF; |
| 230 | pcm_bytes[2 * i + 1] = (TempPcm[i] >> 8) & 0xFF; | 228 | pcm_bytes[2 * i + 1] = (TempPcm[i] >> 8) & 0xFF; |
| 231 | } | 229 | } |
| 232 | 230 | ||
| 233 | - AudioDeal_PcmDataInput_RealTimeSteam(RealTimeDecodeRate, pcm_bytes, frame_size*2); | 231 | + AudioDeal_PcmDataInput_RealTimeSteam_byChar(RealTimeDecodeRate, pcm_bytes, frame_size * 2); |
| 232 | +#else | ||
| 233 | + AudioDeal_PcmDataInput_RealTimeSteam(RealTimeDecodeRate, (short*)out, frame_size); | ||
| 234 | + | ||
| 235 | +#endif | ||
| 236 | + | ||
| 234 | 237 | ||
| 235 | if (decodeErrorFlag == JZ_FLAGCODE_ON) | 238 | if (decodeErrorFlag == JZ_FLAGCODE_ON) |
| 236 | { | 239 | { |
| 1 | -#include "JZsdkLib.h" | ||
| 2 | -#include "UI_control/Psdk_ui_value_menu.h" | 1 | +#include "JZsdkLib.h" |
| 2 | +#include "UI_control/Psdk_UI/jzsdk_to_psdk_ui.h" | ||
| 3 | #include "UI_control/UI_control.h" | 3 | #include "UI_control/UI_control.h" |
| 4 | 4 | ||
| 5 | #include "version_choose.h" | 5 | #include "version_choose.h" |
| @@ -13,6 +13,22 @@ | @@ -13,6 +13,22 @@ | ||
| 13 | #include "SideLaser/SideLaser.h" | 13 | #include "SideLaser/SideLaser.h" |
| 14 | #endif | 14 | #endif |
| 15 | 15 | ||
| 16 | +/*********************************************************************** | ||
| 17 | + | ||
| 18 | + 文件说明, pskd_api.c 用于存放psdkapi | ||
| 19 | + | ||
| 20 | + 这里的api有两个功能 | ||
| 21 | + | ||
| 22 | + wheather_control 关闭时 | ||
| 23 | + | ||
| 24 | + 这里的api仅用于去修改psdk里ui的值 | ||
| 25 | + | ||
| 26 | + wheather_control 开启时 | ||
| 27 | + | ||
| 28 | + 不仅用于修改ui值,还会将控制命令给到ui_api | ||
| 29 | + | ||
| 30 | +**************************************************************************/ | ||
| 31 | + | ||
| 16 | //警灯颜色 | 32 | //警灯颜色 |
| 17 | static int FirstWarningLight = 1; | 33 | static int FirstWarningLight = 1; |
| 18 | static int SecondWarningLight = 3; | 34 | static int SecondWarningLight = 3; |
| @@ -75,6 +91,7 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(int wheather_contr | @@ -75,6 +91,7 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(int wheather_contr | ||
| 75 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 91 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 76 | } | 92 | } |
| 77 | 93 | ||
| 94 | + //设置到psdkui | ||
| 78 | JZsdk_PsdkUi_value_set(JZSDK_WIDGET_PLAYANDSTOP, value); | 95 | JZsdk_PsdkUi_value_set(JZSDK_WIDGET_PLAYANDSTOP, value); |
| 79 | 96 | ||
| 80 | if(wheather_control == JZ_FLAGCODE_ON) | 97 | if(wheather_control == JZ_FLAGCODE_ON) |
| @@ -109,22 +126,19 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_StopPlayAudio() | @@ -109,22 +126,19 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_StopPlayAudio() | ||
| 109 | return ret; | 126 | return ret; |
| 110 | } | 127 | } |
| 111 | 128 | ||
| 112 | -// T_JZsdkReturnCode JZsdk_Psdk_UI_io_SetVolume(int wheather_control, int value) | ||
| 113 | -// { | ||
| 114 | -// //后续需要优化掉 | ||
| 115 | -// widget_volume = value; | ||
| 116 | - | 129 | +//T_JZsdkReturnCode JZsdk_Psdk_UI_io_SetVolume(int wheather_control, int value) |
| 130 | +//{ | ||
| 117 | // //控件变化 | 131 | // //控件变化 |
| 118 | // JZsdk_PsdkUi_value_set(JZSDK_WIDGET_VOLUME, value); | 132 | // JZsdk_PsdkUi_value_set(JZSDK_WIDGET_VOLUME, value); |
| 119 | - | 133 | +// |
| 120 | // //将音量控制值发送到UIcontrol 用于控制设备 | 134 | // //将音量控制值发送到UIcontrol 用于控制设备 |
| 121 | // if(wheather_control == JZ_FLAGCODE_ON) | 135 | // if(wheather_control == JZ_FLAGCODE_ON) |
| 122 | // { | 136 | // { |
| 123 | // UIcontrol_SetVolume(DEVICE_PSDK, value, JZ_FLAGCODE_ON); | 137 | // UIcontrol_SetVolume(DEVICE_PSDK, value, JZ_FLAGCODE_ON); |
| 124 | // } | 138 | // } |
| 125 | - | 139 | +// |
| 126 | // return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 140 | // return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 127 | -// } | 141 | +//} |
| 128 | 142 | ||
| 129 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_speed(int wheather_control, int speed) | 143 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_speed(int wheather_control, int speed) |
| 130 | { | 144 | { |
Module/UI_control/Psdk_UI/Psdk_ui_to_jzsdk.c
0 → 100644
| 1 | +#include "JZsdkLib.h" | ||
| 2 | + | ||
| 3 | +#include "Psdk_ui_to_jzsdk.h" | ||
| 4 | +#include "./WidegMgmt/JZsdk_Widget.h" | ||
| 5 | +#include "./jzsdk_to_psdk_ui.h" | ||
| 6 | +#include "Psdk_UI_io.h" | ||
| 7 | +#include "BaseConfig.h" | ||
| 8 | + | ||
| 9 | +#define AUTO_CONTROL 0x02 | ||
| 10 | + | ||
| 11 | + | ||
| 12 | +/* | ||
| 13 | +* 功率限制 | ||
| 14 | +* | ||
| 15 | +* flag == 1 , 输入的为音量 | ||
| 16 | +*/ | ||
| 17 | + | ||
| 18 | +static T_JZsdkReturnCode Psdk_ui_to_jzsdk_PowerLimit(int flag, int value) | ||
| 19 | +{ | ||
| 20 | + if (flag == 0) | ||
| 21 | + { | ||
| 22 | + | ||
| 23 | + } | ||
| 24 | + //输入的value为音量 | ||
| 25 | + else if(flag == 1) | ||
| 26 | + { | ||
| 27 | + //这几台设备有 音量和亮度的限制 | ||
| 28 | + if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30) | ||
| 29 | + { | ||
| 30 | + //获取当前设备的亮度 | ||
| 31 | + int lumen = 0; | ||
| 32 | + | ||
| 33 | + if (value + lumen > 150) | ||
| 34 | + { | ||
| 35 | + JZsdk_Psdk_UI_io_Set_SearchLightLumen(AUTO_CONTROL, 150 - value); | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +//psdk控制上一曲 | ||
| 42 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_LastSong() | ||
| 43 | +{ | ||
| 44 | + //发送上一曲命令进队列 | ||
| 45 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_LASTSONG, 0); | ||
| 46 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +//psdk控制下一曲 | ||
| 50 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_NextSong() | ||
| 51 | +{ | ||
| 52 | + //发送下一曲命令进队列 | ||
| 53 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_NEXTSONG, 0); | ||
| 54 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +/* | ||
| 58 | + psdk控制播放/暂停 | ||
| 59 | + | ||
| 60 | +*/ | ||
| 61 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_PlayOrPause(int value) | ||
| 62 | +{ | ||
| 63 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PLAYANDSTOP, value); | ||
| 64 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 65 | +} | ||
| 66 | + | ||
| 67 | + | ||
| 68 | +/* | ||
| 69 | + psdk控制音量 | ||
| 70 | + value 0~100 | ||
| 71 | +*/ | ||
| 72 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_Volume(int value, int PowerLimitFlag) | ||
| 73 | +{ | ||
| 74 | + if (PowerLimitFlag == JZ_FLAGCODE_ON) | ||
| 75 | + { | ||
| 76 | + | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_VOLUME, value); | ||
| 80 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +/* | ||
| 84 | + psdk控制tts文本速度, 档位模式 | ||
| 85 | + value 0 1 2 3 | ||
| 86 | + 对应 0.5速 一倍速 1.5倍数 2倍数 | ||
| 87 | + | ||
| 88 | +*/ | ||
| 89 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_TTS_Speed_ByGear(int value) | ||
| 90 | +{ | ||
| 91 | + int speed = value; | ||
| 92 | + | ||
| 93 | + //将档位模式转换为实际速度 | ||
| 94 | + JZsdk_PsdkUi_value_get(JZSDK_WIDGET_TTS_SPEED, &speed); | ||
| 95 | + | ||
| 96 | + //推送到队列 | ||
| 97 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TTS_SPEED, speed); | ||
| 98 | + | ||
| 99 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 100 | +} | ||
| 101 | + | ||
| 102 | + | ||
| 103 | +/* | ||
| 104 | + psdk控制tts文本速度, 数值模式 | ||
| 105 | + value 0~100 | ||
| 106 | +*/ | ||
| 107 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_TTS_Speed(int value) | ||
| 108 | +{ | ||
| 109 | + //推送到队列 | ||
| 110 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TTS_SPEED, value); | ||
| 111 | + | ||
| 112 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 113 | +} | ||
| 114 | + | ||
| 115 | +/* | ||
| 116 | + psdk控制tts文本音色, 档位模式 | ||
| 117 | + value 无固定 | ||
| 118 | +*/ | ||
| 119 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_TTS_Tone_ByGear(int value) | ||
| 120 | +{ | ||
| 121 | + int tone = value; | ||
| 122 | + | ||
| 123 | + //将档位模式转换为实际音色 | ||
| 124 | + JZsdk_PsdkUi_value_get(JZSDK_WIDGET_TTS_TONE, &tone); | ||
| 125 | + | ||
| 126 | + //推送到队列 | ||
| 127 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TTS_TONE, tone); | ||
| 128 | + | ||
| 129 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 130 | +} | ||
| 131 | + | ||
| 132 | +/* | ||
| 133 | + psdk控制tts文本追加音色,档位模式 | ||
| 134 | + value 无固定 | ||
| 135 | +*/ | ||
| 136 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_TTS_Tone_Add_ByGear(int value) | ||
| 137 | +{ | ||
| 138 | + int tone = value; | ||
| 139 | + | ||
| 140 | + JZsdk_Psdk_UI_io_AppendTone(1,value); | ||
| 141 | + | ||
| 142 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 143 | +} | ||
| 144 | + | ||
| 145 | +/* | ||
| 146 | + psdk控制 喊话器播放循环 | ||
| 147 | + value 0关闭 1开启 | ||
| 148 | +*/ | ||
| 149 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_Loop(int value) | ||
| 150 | +{ | ||
| 151 | + JZsdk_Psdk_UI_io_SetAudioPlayLoop(1, value); | ||
| 152 | + | ||
| 153 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 154 | +} | ||
| 155 | + | ||
| 156 | +/* | ||
| 157 | + psdk控制 探照灯亮度 | ||
| 158 | + value 0~100 | ||
| 159 | +*/ | ||
| 160 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_SearchLight_Lumen(int value) | ||
| 161 | +{ | ||
| 162 | + JZsdk_Psdk_UI_io_Set_SearchLightLumen(1,value); | ||
| 163 | + | ||
| 164 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 165 | +} | ||
| 166 | + | ||
| 167 | +/* | ||
| 168 | + psdk控制 探照灯模式 | ||
| 169 | + 0 关灯 1 爆闪 2 常亮 | ||
| 170 | + | ||
| 171 | +*/ | ||
| 172 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_SearchLight_Mode(int value) | ||
| 173 | +{ | ||
| 174 | + JZsdk_Psdk_UI_io_Set_SearchLightMode(1, value); | ||
| 175 | + | ||
| 176 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 177 | +} | ||
| 178 | + | ||
| 179 | +/* | ||
| 180 | + psdk控制 探照灯爆闪频率 | ||
| 181 | + value 0~100 | ||
| 182 | +*/ | ||
| 183 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_SearchLight_Freq(int value) | ||
| 184 | +{ | ||
| 185 | + JZsdk_Psdk_UI_io_Set_SearchLightFrequency(1,value); | ||
| 186 | + | ||
| 187 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 188 | +} | ||
| 189 | + | ||
| 190 | +/* | ||
| 191 | + psdk控制 激光模式 档位模式 | ||
| 192 | + value 不定 | ||
| 193 | +*/ | ||
| 194 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Laser_Mode_ByGear(int value) | ||
| 195 | +{ | ||
| 196 | + int mode = value; | ||
| 197 | + | ||
| 198 | + //将档位模式转换为实际模式 | ||
| 199 | + JZsdk_PsdkUi_value_get(JZSDK_WIDGET_SIDE_LASER_MODE, &mode); | ||
| 200 | + | ||
| 201 | + //推送到队列 | ||
| 202 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_MODE, mode); | ||
| 203 | + | ||
| 204 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 205 | +} | ||
| 206 | + | ||
| 207 | +/* | ||
| 208 | + psdk控制 激光亮度 | ||
| 209 | + value 0~100 | ||
| 210 | +*/ | ||
| 211 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Laser_Lumen(int value) | ||
| 212 | +{ | ||
| 213 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_LUMEN, value); | ||
| 214 | + | ||
| 215 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 216 | +} | ||
| 217 | + | ||
| 218 | +/* | ||
| 219 | + psdk控制 激光颜色 | ||
| 220 | +*/ | ||
| 221 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Laser_Color(int value) | ||
| 222 | +{ | ||
| 223 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_COLOR, value); | ||
| 224 | + | ||
| 225 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 226 | +} | ||
| 227 | + | ||
| 228 | +/* | ||
| 229 | + psdk控制 警灯模式 档位模式 | ||
| 230 | + value 不定 | ||
| 231 | +*/ | ||
| 232 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_WarnLight_Mode_ByGear(int value) | ||
| 233 | +{ | ||
| 234 | + int mode = value; | ||
| 235 | + | ||
| 236 | + JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_MODE, &mode); | ||
| 237 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_MODE, mode); | ||
| 238 | + | ||
| 239 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 240 | +} | ||
| 241 | + | ||
| 242 | +/* | ||
| 243 | + psdk控制 警灯颜色1 档位模式 | ||
| 244 | + value 不定 | ||
| 245 | +*/ | ||
| 246 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_WarnLight_Color1_ByGear(int value) | ||
| 247 | +{ | ||
| 248 | + int color = value; | ||
| 249 | + | ||
| 250 | + JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_COLOR_1, &color); | ||
| 251 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_COLOR_1,color); | ||
| 252 | + | ||
| 253 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 254 | +} | ||
| 255 | + | ||
| 256 | +/* | ||
| 257 | + psdk控制 警灯颜色2 档位模式 | ||
| 258 | + value 不定 | ||
| 259 | +*/ | ||
| 260 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_WarnLight_Color2_ByGear(int value) | ||
| 261 | +{ | ||
| 262 | + int color = value; | ||
| 263 | + | ||
| 264 | + JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_COLOR_2, &color); | ||
| 265 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_COLOR_2,color); | ||
| 266 | + | ||
| 267 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 268 | +} | ||
| 269 | + | ||
| 270 | +/* | ||
| 271 | + psdk | ||
| 272 | + 滑动条控制云台 | ||
| 273 | + value 0~100 | ||
| 274 | +*/ | ||
| 275 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_PitchAngle_BySlider(int value) | ||
| 276 | +{ | ||
| 277 | + JZsdk_Psdk_Ui_io_Gimbal_PitchScaleMode(value); | ||
| 278 | + | ||
| 279 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 280 | +} | ||
| 281 | + | ||
| 282 | +/* | ||
| 283 | + psdk | ||
| 284 | + 云台微调 单次输入值变化模式 | ||
| 285 | + | ||
| 286 | +*/ | ||
| 287 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_AdjustmentPitch_ByVariation(int value) | ||
| 288 | +{ | ||
| 289 | + | ||
| 290 | + JZsdk_Psdk_UI_io_Set_AdjustmentGimbalPitchAngle(value); | ||
| 291 | + | ||
| 292 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 293 | +} | ||
| 294 | + | ||
| 295 | +/* | ||
| 296 | + psdk | ||
| 297 | + 对外供电开关 | ||
| 298 | + 0关 1开 | ||
| 299 | +*/ | ||
| 300 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_PowerSupply(int value) | ||
| 301 | +{ | ||
| 302 | + int power; | ||
| 303 | + if(value == 0) | ||
| 304 | + { | ||
| 305 | + power = JZ_FLAGCODE_OFF; | ||
| 306 | + } | ||
| 307 | + else | ||
| 308 | + { | ||
| 309 | + power = JZ_FLAGCODE_ON; | ||
| 310 | + } | ||
| 311 | + | ||
| 312 | + JZsdk_Psdk_UI_io_Set_OutputPowerStatus(1 ,power); | ||
| 313 | + | ||
| 314 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 315 | +} | ||
| 316 | + | ||
| 317 | +/* | ||
| 318 | + psdk 开机预设任务添加 | ||
| 319 | + value 0 关 1开 | ||
| 320 | +*/ | ||
| 321 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_PrsetTask(int value) | ||
| 322 | +{ | ||
| 323 | + int task; | ||
| 324 | + if(value == 0) | ||
| 325 | + { | ||
| 326 | + task = JZ_FLAGCODE_OFF; | ||
| 327 | + } | ||
| 328 | + else | ||
| 329 | + { | ||
| 330 | + task = JZ_FLAGCODE_ON; | ||
| 331 | + } | ||
| 332 | + | ||
| 333 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PRSET_TASK, task); | ||
| 334 | + | ||
| 335 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 336 | +} | ||
| 337 | + | ||
| 338 | +/* | ||
| 339 | + psdk 单边云台补偿值 | ||
| 340 | + | ||
| 341 | + value1 修改的云台 value2 修改值 | ||
| 342 | +*/ | ||
| 343 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_GimbalCompensation_ByVariation(int value1, int value2) | ||
| 344 | +{ | ||
| 345 | + JZSDK_WidgetMgMT_ConrtrolInputTask(value1, value2); | ||
| 346 | + | ||
| 347 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 348 | +} | ||
| 349 | + | ||
| 350 | +/* | ||
| 351 | + 设置picth云台的最大最小值 | ||
| 352 | + value 0 最大值 value 1 最小值 | ||
| 353 | + | ||
| 354 | +*/ | ||
| 355 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_PitchAngle_ByMaxMin(int value) | ||
| 356 | +{ | ||
| 357 | + if (value == 0) | ||
| 358 | + { | ||
| 359 | + JZsdk_Psdk_UI_io_Set_MAXGimbalRangen(); | ||
| 360 | + } | ||
| 361 | + else if (value == 1) | ||
| 362 | + { | ||
| 363 | + JZsdk_Psdk_UI_io_Set_MINGimbalRangen(); | ||
| 364 | + } | ||
| 365 | + | ||
| 366 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 367 | +} |
Module/UI_control/Psdk_UI/Psdk_ui_to_jzsdk.h
0 → 100644
| 1 | +/** | ||
| 2 | + ******************************************************************** | ||
| 3 | + * @file Psdk_ui_to_jzsdk.h | ||
| 4 | + * Psdk_ui_to_jzsdk.h的头文件 | ||
| 5 | + * | ||
| 6 | + ********************************************************************* | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
| 10 | +#ifndef PSDK_UI_TO_JZSDK_H | ||
| 11 | +#define PSDK_UI_TO_JZSDK_H | ||
| 12 | + | ||
| 13 | +/* Includes ------------------------------------------------------------------*/ | ||
| 14 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
| 15 | + | ||
| 16 | +#ifdef __cplusplus | ||
| 17 | +extern "C" { | ||
| 18 | +#endif | ||
| 19 | + | ||
| 20 | +/* Exported constants --------------------------------------------------------*/ | ||
| 21 | + | ||
| 22 | +/* 常亮定义*/ | ||
| 23 | + | ||
| 24 | +/* Exported types ------------------------------------------------------------*/ | ||
| 25 | + | ||
| 26 | +/* Exported functions --------------------------------------------------------*/ | ||
| 27 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_LastSong(); | ||
| 28 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_NextSong(); | ||
| 29 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_PlayOrPause(int value); | ||
| 30 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_Volume(int value, int PowerLimitFlag); | ||
| 31 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_TTS_Speed_ByGear(int value); | ||
| 32 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_TTS_Speed(int value); | ||
| 33 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_TTS_Tone_ByGear(int value); | ||
| 34 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_TTS_Tone_Add_ByGear(int value); | ||
| 35 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Megphone_Loop(int value); | ||
| 36 | + | ||
| 37 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_SearchLight_Lumen(int value); | ||
| 38 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_SearchLight_Mode(int value); | ||
| 39 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_SearchLight_Freq(int value); | ||
| 40 | + | ||
| 41 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Laser_Mode_ByGear(int value); | ||
| 42 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Laser_Lumen(int value); | ||
| 43 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_Laser_Color(int value); | ||
| 44 | + | ||
| 45 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_WarnLight_Mode_ByGear(int value); | ||
| 46 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_WarnLight_Color1_ByGear(int value); | ||
| 47 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_WarnLight_Color2_ByGear(int value); | ||
| 48 | + | ||
| 49 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_PitchAngle_BySlider(int value); | ||
| 50 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_AdjustmentPitch_ByVariation(int value); | ||
| 51 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_PowerSupply(int value); | ||
| 52 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_PrsetTask(int value); | ||
| 53 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_GimbalCompensation_ByVariation(int value1, int value2); | ||
| 54 | +T_JZsdkReturnCode Psdk_ui_to_jzsdk_PitchAngle_ByMaxMin(int value); | ||
| 55 | + | ||
| 56 | +#ifdef __cplusplus | ||
| 57 | +} | ||
| 58 | +#endif | ||
| 59 | + | ||
| 60 | +#endif |
| 1 | -#include "Psdk_ui_value_menu.h" | 1 | +#include "UI_control/Psdk_UI_io.h" |
| 2 | #include "JZsdkLib.h" | 2 | #include "JZsdkLib.h" |
| 3 | #include "DeviceInfo/DeviceInfo.h" | 3 | #include "DeviceInfo/DeviceInfo.h" |
| 4 | 4 | ||
| 5 | #include "version_choose.h" | 5 | #include "version_choose.h" |
| 6 | -#include "JZsdkLib.h" | ||
| 7 | #include "ExtensionAPI/JZsdk_ExpansionApi.h" | 6 | #include "ExtensionAPI/JZsdk_ExpansionApi.h" |
| 8 | 7 | ||
| 9 | //当x < min时,返回min;当x > max时,返回max;否则返回x | 8 | //当x < min时,返回min;当x > max时,返回max;否则返回x |
| @@ -314,7 +313,7 @@ static T_JZsdkReturnCode JZsdk_UI_DJIpsdk_Widget_set(JZsdk_Widget_Control index, | @@ -314,7 +313,7 @@ static T_JZsdkReturnCode JZsdk_UI_DJIpsdk_Widget_set(JZsdk_Widget_Control index, | ||
| 314 | 313 | ||
| 315 | case JZSDK_WIDGET_WARNLIGHT_COLOR_2: | 314 | case JZSDK_WIDGET_WARNLIGHT_COLOR_2: |
| 316 | { | 315 | { |
| 317 | - temp = UI_control_value_to_SecondaryWidgetValue(JZSDK_WIDGET_WARNLIGHT_COLOR_1, value); | 316 | + temp = UI_control_value_to_SecondaryWidgetValue(JZSDK_WIDGET_WARNLIGHT_COLOR_2, value); |
| 318 | UI_control_WidgetArraySet(18, index); | 317 | UI_control_WidgetArraySet(18, index); |
| 319 | } | 318 | } |
| 320 | break; | 319 | break; |
| @@ -393,6 +392,7 @@ T_JZsdkReturnCode JZsdk_PsdkUi_value_get(JZsdk_Widget_Control index, int *value) | @@ -393,6 +392,7 @@ T_JZsdkReturnCode JZsdk_PsdkUi_value_get(JZsdk_Widget_Control index, int *value) | ||
| 393 | #if DEVICE_VERSION == JZ_T40 || DEVICE_VERSION == JZ_T40S | 392 | #if DEVICE_VERSION == JZ_T40 || DEVICE_VERSION == JZ_T40S |
| 394 | 393 | ||
| 395 | int type = JZsdk_GetDeviceType(); | 394 | int type = JZsdk_GetDeviceType(); |
| 395 | + | ||
| 396 | if (type == 0 || type == 1) | 396 | if (type == 0 || type == 1) |
| 397 | { | 397 | { |
| 398 | temp = IN_RANGE_OR_ZERO(temp, 0, (ARRAY_SIZE(WarnColor_RedBule) - 1)); | 398 | temp = IN_RANGE_OR_ZERO(temp, 0, (ARRAY_SIZE(WarnColor_RedBule) - 1)); |
| 1 | -/** | 1 | +/** |
| 2 | ******************************************************************** | 2 | ******************************************************************** |
| 3 | - * @file Psdk_ui_change.h | ||
| 4 | - * Psdk_ui_change的头文件 | 3 | + * @file jzsdk_to_psdk_ui.h |
| 4 | + * jzsdk_to_psdk_ui.h的头文件 | ||
| 5 | * | 5 | * |
| 6 | ********************************************************************* | 6 | ********************************************************************* |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | 9 | /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ |
| 10 | -#ifndef PSDK_UI_CHANGE_H | ||
| 11 | -#define PSDK_UI_CHANGE_H | 10 | +#ifndef JZSDK_TO_PSDK_UI_H |
| 11 | +#define JZSDK_TO_PSDK_UI_H | ||
| 12 | 12 | ||
| 13 | /* Includes ------------------------------------------------------------------*/ | 13 | /* Includes ------------------------------------------------------------------*/ |
| 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
| @@ -461,284 +461,6 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_SetVolume(int wheather_control, int value) | @@ -461,284 +461,6 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_SetVolume(int wheather_control, int value) | ||
| 461 | } | 461 | } |
| 462 | } | 462 | } |
| 463 | 463 | ||
| 464 | -// //psdk 变量获取tts语速 | ||
| 465 | -// int JZsdk_Psdk_UI_io_GetTTSSpeed_ByValue(int value) | ||
| 466 | -// { | ||
| 467 | -// switch (value) | ||
| 468 | -// { | ||
| 469 | -// case 0: | ||
| 470 | -// return 25; | ||
| 471 | -// break; | ||
| 472 | -// case 1: | ||
| 473 | -// return 50; | ||
| 474 | -// break; | ||
| 475 | -// case 2: | ||
| 476 | -// return 75; | ||
| 477 | -// break; | ||
| 478 | -// case 3: | ||
| 479 | -// return 100; | ||
| 480 | -// break; | ||
| 481 | -// default: | ||
| 482 | -// break; | ||
| 483 | -// } | ||
| 484 | -// } | ||
| 485 | - | ||
| 486 | -// // psdkTTS语速 0-100 25 50 75 100 | ||
| 487 | -// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_speed(int wheather_control, int speed) | ||
| 488 | -// { | ||
| 489 | -// T_JZsdkReturnCode ret; | ||
| 490 | -// int value; | ||
| 491 | - | ||
| 492 | -// if (speed >=0 && speed <=25 ) | ||
| 493 | -// { | ||
| 494 | -// value = 0; | ||
| 495 | -// } | ||
| 496 | -// else if (speed > 25 && speed <= 50) | ||
| 497 | -// { | ||
| 498 | -// value = 1; | ||
| 499 | -// } | ||
| 500 | -// else if (speed > 50 && speed <= 75) | ||
| 501 | -// { | ||
| 502 | -// value = 2; | ||
| 503 | -// } | ||
| 504 | -// else if (speed > 75 && speed <= 100) | ||
| 505 | -// { | ||
| 506 | -// value = 3; | ||
| 507 | -// } | ||
| 508 | - | ||
| 509 | -// // 调整控件 | ||
| 510 | -// UI_control_WidgetSet(PSDK_UI_WIDGET_SPEED, value); | ||
| 511 | - | ||
| 512 | -// // 如果有进行控制,不只是改控件 | ||
| 513 | -// if (wheather_control == 1) | ||
| 514 | -// { | ||
| 515 | -// ret = UIcontrol_Set_TTS_speed(DEVICE_PSDK, speed); | ||
| 516 | -// return ret; | ||
| 517 | -// } | ||
| 518 | -// } | ||
| 519 | - | ||
| 520 | - | ||
| 521 | -// //psdk 变量获取tts音色 | ||
| 522 | -// int JZsdk_Psdk_UI_io_GetTTSTone_ByValue(int value) | ||
| 523 | -// { | ||
| 524 | -// E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo(); | ||
| 525 | -// if (LanguageInfo == LANGUAGE_INFO_CHINESE) | ||
| 526 | -// { | ||
| 527 | -// switch (value) | ||
| 528 | -// { | ||
| 529 | -// case 0: | ||
| 530 | -// return 0x01; | ||
| 531 | -// break; | ||
| 532 | -// case 1: | ||
| 533 | -// return 0x02; | ||
| 534 | -// break; | ||
| 535 | -// case 2: | ||
| 536 | -// return 0x11; | ||
| 537 | -// break; | ||
| 538 | -// case 3: | ||
| 539 | -// return 0x12; | ||
| 540 | -// break; | ||
| 541 | -// case 4: | ||
| 542 | -// return 0x31; | ||
| 543 | -// break; | ||
| 544 | -// case 5: | ||
| 545 | -// return 0x32; | ||
| 546 | -// break; | ||
| 547 | -// case 6: | ||
| 548 | -// return 0x33; | ||
| 549 | -// break; | ||
| 550 | -// case 7: | ||
| 551 | -// return 0x34; | ||
| 552 | -// break; | ||
| 553 | -// case 8: | ||
| 554 | -// return 0x35; | ||
| 555 | -// break; | ||
| 556 | -// case 9: | ||
| 557 | -// return 0x36; | ||
| 558 | -// break; | ||
| 559 | -// default: | ||
| 560 | -// return 0x01; | ||
| 561 | -// break; | ||
| 562 | -// } | ||
| 563 | - | ||
| 564 | -// } | ||
| 565 | - | ||
| 566 | -// else | ||
| 567 | -// { | ||
| 568 | -// switch (value) | ||
| 569 | -// { | ||
| 570 | -// case 0: | ||
| 571 | -// return 0x11; | ||
| 572 | -// break; | ||
| 573 | -// case 1: | ||
| 574 | -// return 0x12; | ||
| 575 | -// break; | ||
| 576 | -// case 2: | ||
| 577 | -// return 0x01; | ||
| 578 | -// break; | ||
| 579 | -// case 3: | ||
| 580 | -// return 0x02; | ||
| 581 | -// break; | ||
| 582 | -// case 4: | ||
| 583 | -// return 0x41; | ||
| 584 | -// break; | ||
| 585 | -// case 5: | ||
| 586 | -// return 0x42; | ||
| 587 | -// break; | ||
| 588 | -// case 6: | ||
| 589 | -// return 0x43; | ||
| 590 | -// break; | ||
| 591 | -// case 7: | ||
| 592 | -// return 0x44; | ||
| 593 | -// break; | ||
| 594 | -// case 8: | ||
| 595 | -// return 0x45; | ||
| 596 | -// break; | ||
| 597 | -// case 9: | ||
| 598 | -// return 0x46; | ||
| 599 | -// break; | ||
| 600 | -// case 10: | ||
| 601 | -// return 0x47; | ||
| 602 | -// break; | ||
| 603 | -// case 11: | ||
| 604 | -// return 0x48; | ||
| 605 | -// break; | ||
| 606 | - | ||
| 607 | -// default: | ||
| 608 | -// return 0x11; | ||
| 609 | -// break; | ||
| 610 | -// } | ||
| 611 | -// } | ||
| 612 | - | ||
| 613 | -// } | ||
| 614 | - | ||
| 615 | -// // psdkTTS音色 10个音色 | ||
| 616 | -// // 要分国内版和海外版 | ||
| 617 | -// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_TTS_tone(int wheather_control, int tone) | ||
| 618 | -// { | ||
| 619 | - | ||
| 620 | -// T_JZsdkReturnCode ret; | ||
| 621 | -// int value; | ||
| 622 | -// E_LanguageInfo LanguageInfo = LanguageInfo_Get_LanguageInfo(); | ||
| 623 | -// if (LanguageInfo == LANGUAGE_INFO_CHINESE) | ||
| 624 | -// { | ||
| 625 | -// switch (tone) | ||
| 626 | -// { | ||
| 627 | -// case 0x01: | ||
| 628 | -// value = 0; | ||
| 629 | -// break; | ||
| 630 | - | ||
| 631 | -// case 0x02: | ||
| 632 | -// value = 1; | ||
| 633 | -// break; | ||
| 634 | - | ||
| 635 | -// case 0x11: | ||
| 636 | -// value = 2; | ||
| 637 | -// break; | ||
| 638 | - | ||
| 639 | -// case 0x12: | ||
| 640 | -// value = 3; | ||
| 641 | -// break; | ||
| 642 | - | ||
| 643 | -// case 0x31: | ||
| 644 | -// value = 4; | ||
| 645 | -// break; | ||
| 646 | - | ||
| 647 | -// case 0x32: | ||
| 648 | -// value = 5; | ||
| 649 | -// break; | ||
| 650 | - | ||
| 651 | -// case 0x33: | ||
| 652 | -// value = 6; | ||
| 653 | -// break; | ||
| 654 | - | ||
| 655 | -// case 0x34: | ||
| 656 | -// value = 7; | ||
| 657 | -// break; | ||
| 658 | - | ||
| 659 | -// case 0x35: | ||
| 660 | -// value = 8; | ||
| 661 | -// break; | ||
| 662 | - | ||
| 663 | -// case 0x36: | ||
| 664 | -// value = 9; | ||
| 665 | -// break; | ||
| 666 | - | ||
| 667 | -// default: | ||
| 668 | -// printf("无效的tts设置\n"); | ||
| 669 | -// return JZ_ERRORCODE_TTS_INVALID_TONE; | ||
| 670 | -// break; | ||
| 671 | -// } | ||
| 672 | -// } | ||
| 673 | -// else { | ||
| 674 | -// switch (tone) | ||
| 675 | -// { | ||
| 676 | -// case 0x01: | ||
| 677 | -// value = 2; | ||
| 678 | -// break; | ||
| 679 | - | ||
| 680 | -// case 0x02: | ||
| 681 | -// value = 3; | ||
| 682 | -// break; | ||
| 683 | - | ||
| 684 | -// case 0x11: | ||
| 685 | -// value = 0; | ||
| 686 | -// break; | ||
| 687 | - | ||
| 688 | -// case 0x12: | ||
| 689 | -// value = 1; | ||
| 690 | -// break; | ||
| 691 | - | ||
| 692 | -// case 0x41://俄 russian ru | ||
| 693 | -// value = 4; | ||
| 694 | -// break; | ||
| 695 | - | ||
| 696 | -// case 0x42://法 french fr-fr | ||
| 697 | -// value = 5; | ||
| 698 | -// break; | ||
| 699 | - | ||
| 700 | -// case 0x43://德 german de | ||
| 701 | -// value = 6; | ||
| 702 | -// break; | ||
| 703 | - | ||
| 704 | -// case 0x44://韩 ko | ||
| 705 | -// value = 7; | ||
| 706 | -// break; | ||
| 707 | - | ||
| 708 | -// case 0x45://意大利 italian it | ||
| 709 | -// value = 8; | ||
| 710 | -// break; | ||
| 711 | - | ||
| 712 | -// case 0x46://波兰 polish pl | ||
| 713 | -// value = 9; | ||
| 714 | -// break; | ||
| 715 | - | ||
| 716 | -// case 0x47://西班牙 spanish es | ||
| 717 | -// value = 10; | ||
| 718 | -// break; | ||
| 719 | - | ||
| 720 | -// case 0x48://葡萄牙 portugal pt-pt | ||
| 721 | -// value = 11; | ||
| 722 | -// break; | ||
| 723 | - | ||
| 724 | -// default: | ||
| 725 | -// printf("无效的tts设置\n"); | ||
| 726 | -// return JZ_ERRORCODE_TTS_INVALID_TONE; | ||
| 727 | -// break; | ||
| 728 | -// } | ||
| 729 | -// } | ||
| 730 | -// // 将控件界面的播放开关 转化为关闭 | ||
| 731 | -// ret = UI_control_WidgetSet(PSDK_UI_WIDGET_TONE, value); | ||
| 732 | - | ||
| 733 | -// // 如果有进行控制,不只是改控件 | ||
| 734 | -// if (wheather_control == 1) | ||
| 735 | -// { | ||
| 736 | -// return UIcontrol_Set_TTS_tone(DEVICE_PSDK,tone); | ||
| 737 | -// } | ||
| 738 | - | ||
| 739 | -// return ret; | ||
| 740 | -// } | ||
| 741 | - | ||
| 742 | // psdk追加音色 0 1 2 | 464 | // psdk追加音色 0 1 2 |
| 743 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_AppendTone(int wheather_control, int value) | 465 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_AppendTone(int wheather_control, int value) |
| 744 | { | 466 | { |
| @@ -1025,69 +747,7 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_SearchLightLumen(int wheather_control,int | @@ -1025,69 +747,7 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_SearchLightLumen(int wheather_control,int | ||
| 1025 | return ret; | 747 | return ret; |
| 1026 | } | 748 | } |
| 1027 | 749 | ||
| 1028 | -// //警灯模式 0 关 1交替快闪 2交替满闪 3交替齐闪 | ||
| 1029 | -// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightMode(int wheather_control, int value) | ||
| 1030 | -// { | ||
| 1031 | -// T_JZsdkReturnCode ret; | ||
| 1032 | - | ||
| 1033 | -// //控件值 0 关闭 1快闪 2 满闪 3齐闪 | ||
| 1034 | - | ||
| 1035 | -// int mode = 0; | ||
| 1036 | -// int Switch = 0; | ||
| 1037 | -// if (value >= 1) | ||
| 1038 | -// { | ||
| 1039 | -// mode = value - 1; | ||
| 1040 | -// Switch = 1; | ||
| 1041 | -// } | ||
| 1042 | -// else | ||
| 1043 | -// { | ||
| 1044 | -// Switch = 0; | ||
| 1045 | -// mode = 0; | ||
| 1046 | -// } | ||
| 1047 | - | ||
| 1048 | -// ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_MODE, value); | ||
| 1049 | - | ||
| 1050 | -// if (wheather_control == JZ_FLAGCODE_ON) | ||
| 1051 | -// { | ||
| 1052 | -// ret = UIcontrol_Set_WarningLight_ModeControl(DEVICE_PSDK, Switch, mode); | ||
| 1053 | -// } | ||
| 1054 | - | ||
| 1055 | -// return ret; | ||
| 1056 | -// } | ||
| 1057 | - | ||
| 1058 | -// //警灯颜色1 | ||
| 1059 | -// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(int wheather_control, int value) | ||
| 1060 | -// { | ||
| 1061 | -// T_JZsdkReturnCode ret; | ||
| 1062 | - | ||
| 1063 | -// ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_FIRSTCOLOR, (value-1)); | ||
| 1064 | - | ||
| 1065 | -// FirstWarningLight = value; | ||
| 1066 | 750 | ||
| 1067 | -// if (wheather_control == JZ_FLAGCODE_ON) | ||
| 1068 | -// { | ||
| 1069 | -// ret = UIcontrol_Set_WarningLight_Color(DEVICE_PSDK, FirstWarningLight, SecondWarningLight); | ||
| 1070 | -// } | ||
| 1071 | - | ||
| 1072 | -// return ret; | ||
| 1073 | -// } | ||
| 1074 | - | ||
| 1075 | -// //警灯颜色2 | ||
| 1076 | -// T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(int wheather_control, int value) | ||
| 1077 | -// { | ||
| 1078 | -// T_JZsdkReturnCode ret; | ||
| 1079 | - | ||
| 1080 | -// ret = UI_control_WidgetSet(PSDK_UI_WIDGET_WARNINGLIGHT_SECONDCOLOR, (value-1)); | ||
| 1081 | - | ||
| 1082 | -// SecondWarningLight = value; | ||
| 1083 | - | ||
| 1084 | -// if (wheather_control == JZ_FLAGCODE_ON) | ||
| 1085 | -// { | ||
| 1086 | -// ret = UIcontrol_Set_WarningLight_Color(DEVICE_PSDK, FirstWarningLight, SecondWarningLight); | ||
| 1087 | -// } | ||
| 1088 | - | ||
| 1089 | -// return ret; | ||
| 1090 | -// } | ||
| 1091 | 751 | ||
| 1092 | // 设置云台最大值 | 752 | // 设置云台最大值 |
| 1093 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_MAXGimbalRangen() | 753 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_MAXGimbalRangen() |
| @@ -1472,7 +1472,7 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i | @@ -1472,7 +1472,7 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i | ||
| 1472 | T_JZsdkReturnCode ret = WarnLight_Set_Color(value1, value2); | 1472 | T_JZsdkReturnCode ret = WarnLight_Set_Color(value1, value2); |
| 1473 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 1473 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
| 1474 | { | 1474 | { |
| 1475 | - printf("%s:%s\n",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret)); | 1475 | + JZSDK_LOG_ERROR("%s:%s",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret)); |
| 1476 | return ret; | 1476 | return ret; |
| 1477 | } | 1477 | } |
| 1478 | 1478 | ||
| @@ -1501,8 +1501,8 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i | @@ -1501,8 +1501,8 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i | ||
| 1501 | //如果psdk接口已经使用 | 1501 | //如果psdk接口已经使用 |
| 1502 | if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK ) | 1502 | if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK ) |
| 1503 | { | 1503 | { |
| 1504 | - JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(JZ_FLAGCODE_OFF, value1); | ||
| 1505 | - JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(JZ_FLAGCODE_OFF, value2); | 1504 | + JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(JZ_FLAGCODE_OFF, LightAttribute.Color1); |
| 1505 | + JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(JZ_FLAGCODE_OFF, LightAttribute.Color2); | ||
| 1506 | } | 1506 | } |
| 1507 | 1507 | ||
| 1508 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1508 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1 | -/** | 1 | +/** |
| 2 | ******************************************************************** | 2 | ******************************************************************** |
| 3 | * @file UI_control.h | 3 | * @file UI_control.h |
| 4 | - * UI_control的头文件 | 4 | + * UI_control的头文件 |
| 5 | * | 5 | * |
| 6 | ********************************************************************* | 6 | ********************************************************************* |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | - /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | 9 | + /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ |
| 10 | #ifndef JZSDK_UI_CONTROL_H | 10 | #ifndef JZSDK_UI_CONTROL_H |
| 11 | #define JZSDK_UI_CONTROL_H | 11 | #define JZSDK_UI_CONTROL_H |
| 12 | 12 | ||
| 13 | /* Includes ------------------------------------------------------------------*/ | 13 | /* Includes ------------------------------------------------------------------*/ |
| 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
| 15 | -#include "UI_control/Psdk_ui_value_menu.h" | 15 | +#include "UI_control/Psdk_UI_io.h" |
| 16 | #include "UI_control/UI_Api.h" | 16 | #include "UI_control/UI_Api.h" |
| 17 | 17 | ||
| 18 | #ifdef __cplusplus | 18 | #ifdef __cplusplus |
| @@ -20,18 +20,18 @@ extern "C" { | @@ -20,18 +20,18 @@ extern "C" { | ||
| 20 | #endif | 20 | #endif |
| 21 | 21 | ||
| 22 | /* Exported constants --------------------------------------------------------*/ | 22 | /* Exported constants --------------------------------------------------------*/ |
| 23 | -/* 常亮定义*/ | 23 | +/* 常亮定义*/ |
| 24 | 24 | ||
| 25 | /******************** | 25 | /******************** |
| 26 | * | 26 | * |
| 27 | - * 完整路径 假设 | 27 | + * 完整路径 假设 |
| 28 | * /root/Configs/DJI_widget_file/cn/widget_file/cn_big_screen | 28 | * /root/Configs/DJI_widget_file/cn/widget_file/cn_big_screen |
| 29 | * /root/Configs/DJI_widget_file/en/widget_file/cn_big_screen | 29 | * /root/Configs/DJI_widget_file/en/widget_file/cn_big_screen |
| 30 | * /root/Configs/DJI_widget_file/debug/widget_file/cn_big_screen | 30 | * /root/Configs/DJI_widget_file/debug/widget_file/cn_big_screen |
| 31 | * | 31 | * |
| 32 | - * 其中 /root/Configs/DJI_widget_file 是对应的psdk给出的路径 | ||
| 33 | - * cn en debug 是对应的语言 | ||
| 34 | - * widget_file/cn_big_screen 是对应的文件,也有psdk给出 | 32 | + * 其中 /root/Configs/DJI_widget_file 是对应的psdk给出的路径 |
| 33 | + * cn en debug 是对应的语言 | ||
| 34 | + * widget_file/cn_big_screen 是对应的文件,也有psdk给出 | ||
| 35 | * | 35 | * |
| 36 | * **************/ | 36 | * **************/ |
| 37 | typedef struct T_JZsdkUIJson | 37 | typedef struct T_JZsdkUIJson |
| @@ -48,6 +48,10 @@ static int WidgetMgMT_Control_WorkFuntion(int Inscode, int value) | @@ -48,6 +48,10 @@ static int WidgetMgMT_Control_WorkFuntion(int Inscode, int value) | ||
| 48 | JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(JZ_FLAGCODE_ON, value); | 48 | JZsdk_Psdk_UI_io_Audio_PauseAndPlayContinue(JZ_FLAGCODE_ON, value); |
| 49 | break; | 49 | break; |
| 50 | 50 | ||
| 51 | + case JZSDK_WIDGET_VOLUME: | ||
| 52 | + JZsdk_Psdk_UI_io_SetVolume(1,value); | ||
| 53 | + break; | ||
| 54 | + | ||
| 51 | case JZSDK_WIDGET_TTS_SPEED: | 55 | case JZSDK_WIDGET_TTS_SPEED: |
| 52 | JZsdk_Psdk_UI_io_Set_TTS_speed(JZ_FLAGCODE_ON,value); | 56 | JZsdk_Psdk_UI_io_Set_TTS_speed(JZ_FLAGCODE_ON,value); |
| 53 | break; | 57 | break; |
| @@ -89,7 +89,7 @@ T_JZsdkReturnCode WarnLight_Flush_StatusAndMode() | @@ -89,7 +89,7 @@ T_JZsdkReturnCode WarnLight_Flush_StatusAndMode() | ||
| 89 | //设置警灯颜色 | 89 | //设置警灯颜色 |
| 90 | T_JZsdkReturnCode WarnLight_Set_Color(int Color1, int Color2) | 90 | T_JZsdkReturnCode WarnLight_Set_Color(int Color1, int Color2) |
| 91 | { | 91 | { |
| 92 | - JZSDK_LOG_DEBUG("设置0x%x:警灯颜色 Color1:0x%x, color:0x%x",DEVICE_VERSION, Color1, Color2); | 92 | + JZSDK_LOG_INFO("设置0x%x:警灯颜色 Color1:0x%x, color:0x%x",DEVICE_VERSION, Color1, Color2); |
| 93 | 93 | ||
| 94 | T_JZsdkOsalHandler *osalHandle = JZsdk_Platform_GetOsalHandler(); | 94 | T_JZsdkOsalHandler *osalHandle = JZsdk_Platform_GetOsalHandler(); |
| 95 | if (osalHandle == NULL) | 95 | if (osalHandle == NULL) |
| @@ -44,6 +44,7 @@ | @@ -44,6 +44,7 @@ | ||
| 44 | 44 | ||
| 45 | #include "UI_control/WidegMgmt/JZsdk_Widget.h" | 45 | #include "UI_control/WidegMgmt/JZsdk_Widget.h" |
| 46 | #include "UI_control/UI_control.h" | 46 | #include "UI_control/UI_control.h" |
| 47 | +#include "Psdk_UI/Psdk_ui_to_jzsdk.h" | ||
| 47 | #include "JZsdkLib.h" | 48 | #include "JZsdkLib.h" |
| 48 | 49 | ||
| 49 | #ifdef GIMBAL_STATUS_ON | 50 | #ifdef GIMBAL_STATUS_ON |
| @@ -613,64 +614,74 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -613,64 +614,74 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 613 | switch(index){ | 614 | switch(index){ |
| 614 | //喊话器部分 | 615 | //喊话器部分 |
| 615 | case 0://上一曲 | 616 | case 0://上一曲 |
| 617 | + { | ||
| 616 | if(value==1) | 618 | if(value==1) |
| 617 | { | 619 | { |
| 618 | - //JZsdk_Psdk_UI_io_LastSong(1); | ||
| 619 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_LASTSONG, 0); | 620 | + Psdk_ui_to_jzsdk_Megphone_LastSong(); |
| 620 | } | 621 | } |
| 621 | break; | 622 | break; |
| 623 | + } | ||
| 622 | case 1://下一曲 | 624 | case 1://下一曲 |
| 623 | { | 625 | { |
| 624 | if(value==1) | 626 | if(value==1) |
| 625 | { | 627 | { |
| 626 | - | ||
| 627 | - //JZsdk_Psdk_UI_io_NextSong(1); | ||
| 628 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_NEXTSONG, 0); | 628 | + Psdk_ui_to_jzsdk_Megphone_NextSong(); |
| 629 | } | 629 | } |
| 630 | break; | 630 | break; |
| 631 | } | 631 | } |
| 632 | case 2: // 播放\暂停 value为1 是三角控件 暂停 所以要去取反 | 632 | case 2: // 播放\暂停 value为1 是三角控件 暂停 所以要去取反 |
| 633 | { | 633 | { |
| 634 | value = !value; | 634 | value = !value; |
| 635 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PLAYANDSTOP, value); | ||
| 636 | - | 635 | + Psdk_ui_to_jzsdk_Megphone_PlayOrPause(value); |
| 637 | break; | 636 | break; |
| 638 | } | 637 | } |
| 639 | 638 | ||
| 640 | case 3://内显示音量 scale | 639 | case 3://内显示音量 scale |
| 641 | { | 640 | { |
| 642 | - delayMs(100);//避免拉滑动条设置太多次 | 641 | + //避免拉滑动条设置太多次 |
| 642 | + delayMs(100); | ||
| 643 | + | ||
| 644 | + //部分dji设备存在亮度和音量功率限制 | ||
| 643 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(1, value); | 645 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(1, value); |
| 644 | - JZsdk_Psdk_UI_io_SetVolume(1,value); | 646 | + |
| 647 | + //设置音量 | ||
| 648 | + Psdk_ui_to_jzsdk_Megphone_Volume(value, JZ_FLAGCODE_ON); | ||
| 645 | break; | 649 | break; |
| 646 | } | 650 | } |
| 647 | case 4://外显示音量 scale | 651 | case 4://外显示音量 scale |
| 648 | { | 652 | { |
| 649 | - delayMs(100);//避免拉滑动条设置太多次 | 653 | + //避免拉滑动条设置太多次 |
| 654 | + delayMs(100); | ||
| 655 | + | ||
| 656 | + //部分dji设备存在亮度和音量功率限制 | ||
| 650 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(1, value); | 657 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(1, value); |
| 651 | - JZsdk_Psdk_UI_io_SetVolume(1,value); | 658 | + |
| 659 | + //设置音量 | ||
| 660 | + Psdk_ui_to_jzsdk_Megphone_Volume(value, JZ_FLAGCODE_ON); | ||
| 652 | break; | 661 | break; |
| 653 | } | 662 | } |
| 654 | case 5://TTS语速 list | 663 | case 5://TTS语速 list |
| 655 | { | 664 | { |
| 656 | - int speed = value; | ||
| 657 | - JZsdk_PsdkUi_value_get(JZSDK_WIDGET_TTS_SPEED, &speed); | ||
| 658 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TTS_SPEED, speed); | 665 | + Psdk_ui_to_jzsdk_Megphone_TTS_Speed_ByGear(value); |
| 659 | break; | 666 | break; |
| 660 | } | 667 | } |
| 661 | case 6://TTS音色 list | 668 | case 6://TTS音色 list |
| 662 | { | 669 | { |
| 663 | - int tone = value; | ||
| 664 | - JZsdk_PsdkUi_value_get(JZSDK_WIDGET_TTS_TONE, &tone); | ||
| 665 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_TTS_TONE, tone); | 670 | + Psdk_ui_to_jzsdk_Megphone_TTS_Tone_ByGear(value); |
| 666 | break; | 671 | break; |
| 667 | } | 672 | } |
| 668 | case 7://TTS追加音色 list | 673 | case 7://TTS追加音色 list |
| 669 | - JZsdk_Psdk_UI_io_AppendTone(1,value); | 674 | + { |
| 675 | + Psdk_ui_to_jzsdk_Megphone_TTS_Tone_Add_ByGear(value); | ||
| 670 | break; | 676 | break; |
| 677 | + } | ||
| 678 | + | ||
| 671 | case 8: //switch 循环 循环是1 | 679 | case 8: //switch 循环 循环是1 |
| 672 | - JZsdk_Psdk_UI_io_SetAudioPlayLoop(1, value); | 680 | + { |
| 681 | + Psdk_ui_to_jzsdk_Megphone_Loop(value); | ||
| 673 | break; | 682 | break; |
| 683 | + } | ||
| 684 | + | ||
| 674 | case 9: //喊话模式切换 | 685 | case 9: //喊话模式切换 |
| 675 | { | 686 | { |
| 676 | //切换前关闭所有实时喊话 | 687 | //切换前关闭所有实时喊话 |
| @@ -703,23 +714,37 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -703,23 +714,37 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 703 | 714 | ||
| 704 | break; | 715 | break; |
| 705 | } | 716 | } |
| 717 | + | ||
| 706 | //探照灯部分 | 718 | //探照灯部分 |
| 707 | case 10://探照灯 内显示亮度 | 719 | case 10://探照灯 内显示亮度 |
| 708 | { | 720 | { |
| 709 | - delayMs(50);//避免拉滑动条设置太多次 | 721 | + //避免拉滑动条设置太多次 |
| 722 | + delayMs(150); | ||
| 723 | + | ||
| 724 | + //部分dji设备存在亮度和音量功率限制 | ||
| 710 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(0, value); | 725 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(0, value); |
| 711 | - JZsdk_Psdk_UI_io_Set_SearchLightLumen(1,value); | 726 | + |
| 727 | + //设置亮度 | ||
| 728 | + Psdk_ui_to_jzsdk_SearchLight_Lumen(value); | ||
| 729 | + | ||
| 712 | break; | 730 | break; |
| 713 | } | 731 | } |
| 714 | case 11://探照灯 外显示亮度 | 732 | case 11://探照灯 外显示亮度 |
| 715 | { | 733 | { |
| 716 | - delayMs(50);//避免拉滑动条设置太多次 | 734 | + //避免拉滑动条设置太多次 |
| 735 | + delayMs(150); | ||
| 736 | + | ||
| 737 | + //部分dji设备存在亮度和音量功率限制 | ||
| 717 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(0, value); | 738 | JZsdk_Psdk_UI_io_LumenAndVolume_PowerLimitation(0, value); |
| 718 | - JZsdk_Psdk_UI_io_Set_SearchLightLumen(1,value); | 739 | + |
| 740 | + //设置亮度 | ||
| 741 | + Psdk_ui_to_jzsdk_SearchLight_Lumen(value); | ||
| 742 | + | ||
| 719 | break; | 743 | break; |
| 720 | } | 744 | } |
| 721 | case 12: //探照灯模式 | 745 | case 12: //探照灯模式 |
| 722 | { | 746 | { |
| 747 | + //部分飞机存在降落时强制关灯 | ||
| 723 | int mode = value; | 748 | int mode = value; |
| 724 | JZsdk_PlaneInfo PlaneInfo; | 749 | JZsdk_PlaneInfo PlaneInfo; |
| 725 | JZsdk_PlaneInfo_Get(&PlaneInfo); | 750 | JZsdk_PlaneInfo_Get(&PlaneInfo); |
| @@ -728,7 +753,9 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -728,7 +753,9 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 728 | mode = 0; | 753 | mode = 0; |
| 729 | } | 754 | } |
| 730 | 755 | ||
| 731 | - JZsdk_Psdk_UI_io_Set_SearchLightMode(1, mode); | 756 | + //设置模式 |
| 757 | + Psdk_ui_to_jzsdk_SearchLight_Mode(mode); | ||
| 758 | + | ||
| 732 | break; | 759 | break; |
| 733 | } | 760 | } |
| 734 | 761 | ||
| @@ -739,29 +766,25 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -739,29 +766,25 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 739 | } | 766 | } |
| 740 | case 14://探照灯 爆闪频率 | 767 | case 14://探照灯 爆闪频率 |
| 741 | { | 768 | { |
| 742 | - JZsdk_Psdk_UI_io_Set_SearchLightFrequency(1,value); | 769 | + Psdk_ui_to_jzsdk_SearchLight_Freq(value); |
| 743 | break; | 770 | break; |
| 744 | } | 771 | } |
| 745 | //侧面激光部分 | 772 | //侧面激光部分 |
| 746 | case 15://激光开关 | 773 | case 15://激光开关 |
| 747 | { | 774 | { |
| 748 | - int mode = value; | ||
| 749 | - JZsdk_PsdkUi_value_get(JZSDK_WIDGET_SIDE_LASER_MODE, &mode); | ||
| 750 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_MODE, mode); | 775 | + Psdk_ui_to_jzsdk_Laser_Mode_ByGear(value); |
| 751 | break; | 776 | break; |
| 752 | } | 777 | } |
| 753 | 778 | ||
| 754 | case 30://激光亮度 | 779 | case 30://激光亮度 |
| 755 | { | 780 | { |
| 756 | - int lumen = value; | ||
| 757 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_LUMEN, lumen); | 781 | + Psdk_ui_to_jzsdk_Laser_Lumen(value); |
| 758 | break; | 782 | break; |
| 759 | } | 783 | } |
| 760 | 784 | ||
| 761 | case 31://激光颜色 | 785 | case 31://激光颜色 |
| 762 | { | 786 | { |
| 763 | - int color = value; | ||
| 764 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SIDE_LASER_COLOR, color); | 787 | + Psdk_ui_to_jzsdk_Laser_Color(value); |
| 765 | break; | 788 | break; |
| 766 | } | 789 | } |
| 767 | //警灯部分 | 790 | //警灯部分 |
| @@ -769,6 +792,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -769,6 +792,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 769 | { | 792 | { |
| 770 | int mode = value; | 793 | int mode = value; |
| 771 | 794 | ||
| 795 | + //部分飞机存在降落时强制关灯 | ||
| 772 | JZsdk_PlaneInfo PlaneInfo; | 796 | JZsdk_PlaneInfo PlaneInfo; |
| 773 | JZsdk_PlaneInfo_Get(&PlaneInfo); | 797 | JZsdk_PlaneInfo_Get(&PlaneInfo); |
| 774 | if (PlaneInfo.LandingStatus == JZ_FLAGCODE_ON) | 798 | if (PlaneInfo.LandingStatus == JZ_FLAGCODE_ON) |
| @@ -776,22 +800,18 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -776,22 +800,18 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 776 | mode = 0; | 800 | mode = 0; |
| 777 | } | 801 | } |
| 778 | 802 | ||
| 779 | - JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_MODE, &mode); | ||
| 780 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_MODE, mode); | 803 | + Psdk_ui_to_jzsdk_WarnLight_Mode_ByGear(mode); |
| 804 | + | ||
| 781 | break; | 805 | break; |
| 782 | } | 806 | } |
| 783 | case 17://警灯颜色1 | 807 | case 17://警灯颜色1 |
| 784 | { | 808 | { |
| 785 | - int color = value; | ||
| 786 | - JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_COLOR_1, &color); | ||
| 787 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_COLOR_1,color); | 809 | + Psdk_ui_to_jzsdk_WarnLight_Color1_ByGear(value); |
| 788 | break; | 810 | break; |
| 789 | } | 811 | } |
| 790 | case 18://警灯颜色2 | 812 | case 18://警灯颜色2 |
| 791 | { | 813 | { |
| 792 | - int color = value; | ||
| 793 | - JZsdk_PsdkUi_value_get(JZSDK_WIDGET_WARNLIGHT_COLOR_1, &color); | ||
| 794 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_WARNLIGHT_COLOR_2,color); | 814 | + Psdk_ui_to_jzsdk_WarnLight_Color2_ByGear(value); |
| 795 | break; | 815 | break; |
| 796 | } | 816 | } |
| 797 | //云台部分 | 817 | //云台部分 |
| @@ -799,7 +819,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -799,7 +819,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 799 | { | 819 | { |
| 800 | if (Get_Gimbal_linkage() == JZ_FLAGCODE_OFF) | 820 | if (Get_Gimbal_linkage() == JZ_FLAGCODE_OFF) |
| 801 | { | 821 | { |
| 802 | - JZsdk_Psdk_Ui_io_Gimbal_PitchScaleMode(value); | 822 | + Psdk_ui_to_jzsdk_PitchAngle_BySlider(value); |
| 803 | } | 823 | } |
| 804 | break; | 824 | break; |
| 805 | } | 825 | } |
| @@ -807,7 +827,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -807,7 +827,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 807 | { | 827 | { |
| 808 | if (Get_Gimbal_linkage() == JZ_FLAGCODE_OFF) | 828 | if (Get_Gimbal_linkage() == JZ_FLAGCODE_OFF) |
| 809 | { | 829 | { |
| 810 | - JZsdk_Psdk_Ui_io_Gimbal_PitchScaleMode(value); | 830 | + Psdk_ui_to_jzsdk_PitchAngle_BySlider(value); |
| 811 | } | 831 | } |
| 812 | break; | 832 | break; |
| 813 | } | 833 | } |
| @@ -820,7 +840,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -820,7 +840,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 820 | { | 840 | { |
| 821 | if(value == 1) | 841 | if(value == 1) |
| 822 | { | 842 | { |
| 823 | - JZsdk_Psdk_UI_io_Set_AdjustmentGimbalPitchAngle(5); | 843 | + Psdk_ui_to_jzsdk_AdjustmentPitch_ByVariation(5); |
| 824 | } | 844 | } |
| 825 | 845 | ||
| 826 | break; | 846 | break; |
| @@ -829,7 +849,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -829,7 +849,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 829 | { | 849 | { |
| 830 | if(value == 1) | 850 | if(value == 1) |
| 831 | { | 851 | { |
| 832 | - JZsdk_Psdk_UI_io_Set_AdjustmentGimbalPitchAngle(-5); | 852 | + Psdk_ui_to_jzsdk_AdjustmentPitch_ByVariation(-5); |
| 833 | } | 853 | } |
| 834 | break; | 854 | break; |
| 835 | } | 855 | } |
| @@ -857,22 +877,13 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -857,22 +877,13 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 857 | } | 877 | } |
| 858 | case 25://对外供电开关 | 878 | case 25://对外供电开关 |
| 859 | { | 879 | { |
| 860 | - JZsdk_Psdk_UI_io_Set_OutputPowerStatus(1 ,value); | 880 | + Psdk_ui_to_jzsdk_PowerSupply(value); |
| 861 | break; | 881 | break; |
| 862 | } | 882 | } |
| 863 | 883 | ||
| 864 | case 26://开机预设任务 | 884 | case 26://开机预设任务 |
| 865 | { | 885 | { |
| 866 | - JZSDK_LOG_INFO("设置开机预设任务:%d", value); | ||
| 867 | - if (value == 1) | ||
| 868 | - { | ||
| 869 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PRSET_TASK, JZ_FLAGCODE_ON); | ||
| 870 | - } | ||
| 871 | - else if (value == 0) | ||
| 872 | - { | ||
| 873 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PRSET_TASK, JZ_FLAGCODE_OFF); | ||
| 874 | - } | ||
| 875 | - | 886 | + Psdk_ui_to_jzsdk_PrsetTask(value); |
| 876 | break; | 887 | break; |
| 877 | } | 888 | } |
| 878 | 889 | ||
| @@ -886,19 +897,19 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -886,19 +897,19 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 886 | { | 897 | { |
| 887 | if (Temp_GimbalCompensation_Flag == 0) | 898 | if (Temp_GimbalCompensation_Flag == 0) |
| 888 | { | 899 | { |
| 889 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_GIMBAL_SINGLE_COMPENSATION_LEFT, +5); | 900 | + Psdk_ui_to_jzsdk_GimbalCompensation_ByVariation(JZSDK_WIDGET_GIMBAL_SINGLE_COMPENSATION_LEFT, +5); |
| 890 | } | 901 | } |
| 891 | else if (Temp_GimbalCompensation_Flag == 1) | 902 | else if (Temp_GimbalCompensation_Flag == 1) |
| 892 | { | 903 | { |
| 893 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_GIMBAL_SINGLE_COMPENSATION_LEFT, -5); | 904 | + Psdk_ui_to_jzsdk_GimbalCompensation_ByVariation(JZSDK_WIDGET_GIMBAL_SINGLE_COMPENSATION_LEFT, -5); |
| 894 | } | 905 | } |
| 895 | else if (Temp_GimbalCompensation_Flag == 2) | 906 | else if (Temp_GimbalCompensation_Flag == 2) |
| 896 | { | 907 | { |
| 897 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_GIMBAL_SINGLE_COMPENSATION_RIGHT, +5); | 908 | + Psdk_ui_to_jzsdk_GimbalCompensation_ByVariation(JZSDK_WIDGET_GIMBAL_SINGLE_COMPENSATION_RIGHT, +5); |
| 898 | } | 909 | } |
| 899 | else if (Temp_GimbalCompensation_Flag == 3) | 910 | else if (Temp_GimbalCompensation_Flag == 3) |
| 900 | { | 911 | { |
| 901 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_GIMBAL_SINGLE_COMPENSATION_RIGHT, -5); | 912 | + Psdk_ui_to_jzsdk_GimbalCompensation_ByVariation(JZSDK_WIDGET_GIMBAL_SINGLE_COMPENSATION_RIGHT, -5); |
| 902 | } | 913 | } |
| 903 | break; | 914 | break; |
| 904 | } | 915 | } |
| @@ -908,7 +919,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -908,7 +919,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 908 | { | 919 | { |
| 909 | if(value==1 && num_flag == 3) | 920 | if(value==1 && num_flag == 3) |
| 910 | { | 921 | { |
| 911 | - JZsdk_Psdk_UI_io_Set_MAXGimbalRangen(); | 922 | + Psdk_ui_to_jzsdk_PitchAngle_ByMaxMin(0); |
| 912 | } | 923 | } |
| 913 | break; | 924 | break; |
| 914 | } | 925 | } |
| @@ -916,7 +927,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -916,7 +927,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 916 | { | 927 | { |
| 917 | if(value==1 && num_flag == 3) | 928 | if(value==1 && num_flag == 3) |
| 918 | { | 929 | { |
| 919 | - JZsdk_Psdk_UI_io_Set_MINGimbalRangen(); | 930 | + Psdk_ui_to_jzsdk_PitchAngle_ByMaxMin(1); |
| 920 | } | 931 | } |
| 921 | break; | 932 | break; |
| 922 | } | 933 | } |
| @@ -927,8 +938,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -927,8 +938,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 927 | 938 | ||
| 928 | case 42://设置云台补偿 | 939 | case 42://设置云台补偿 |
| 929 | { | 940 | { |
| 930 | - JZSDK_LOG_INFO("设置云台补充:%d", Temp_GimbalCompensation_Flag); | ||
| 931 | - Temp_GimbalCalibration_Flag = value; | 941 | + JZSDK_LOG_INFO("设置云台补充:%d", s_widgetValueList[42]); |
| 932 | break; | 942 | break; |
| 933 | } | 943 | } |
| 934 | 944 | ||
| @@ -937,6 +947,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -937,6 +947,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 937 | if (value == 1) | 947 | if (value == 1) |
| 938 | { | 948 | { |
| 939 | int direction; | 949 | int direction; |
| 950 | + int Temp_GimbalCalibration_Flag = s_widgetValueList[42]; | ||
| 940 | if (Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX | 951 | if (Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX |
| 941 | || Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MIN | 952 | || Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MIN |
| 942 | || Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_ZERO | 953 | || Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_ZERO |
| @@ -961,6 +972,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -961,6 +972,7 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 961 | if (value == 1) | 972 | if (value == 1) |
| 962 | { | 973 | { |
| 963 | int direction; | 974 | int direction; |
| 975 | + int Temp_GimbalCalibration_Flag = s_widgetValueList[42]; | ||
| 964 | if (Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX | 976 | if (Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX |
| 965 | || Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MIN | 977 | || Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MIN |
| 966 | || Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_ZERO | 978 | || Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_ZERO |
| @@ -979,8 +991,13 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -979,8 +991,13 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 979 | break; | 991 | break; |
| 980 | } | 992 | } |
| 981 | 993 | ||
| 982 | - case 45://设置云台补偿 | 994 | + case 45://设置云台校准 |
| 983 | { | 995 | { |
| 996 | + if (value == 1) | ||
| 997 | + { | ||
| 998 | + int Temp_GimbalCalibration_Flag = s_widgetValueList[42]; | ||
| 999 | + JZSDK_LOG_INFO("设置云台校准:%d", Temp_GimbalCalibration_Flag); | ||
| 1000 | + | ||
| 984 | if (Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX) | 1001 | if (Temp_GimbalCalibration_Flag == JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX) |
| 985 | { | 1002 | { |
| 986 | Gimbal_Set_GimbalSingleCalibration(JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX); | 1003 | Gimbal_Set_GimbalSingleCalibration(JZ_GIMBAL_SINGLE_CALIBRATION_MODE_LEFT_MAX); |
| @@ -1021,6 +1038,8 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -1021,6 +1038,8 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
| 1021 | { | 1038 | { |
| 1022 | Gimbal_Set_DebugPitch(0, JZ_FLAGCODE_ON, 1); | 1039 | Gimbal_Set_DebugPitch(0, JZ_FLAGCODE_ON, 1); |
| 1023 | } | 1040 | } |
| 1041 | + } | ||
| 1042 | + | ||
| 1024 | break; | 1043 | break; |
| 1025 | } | 1044 | } |
| 1026 | 1045 |
| 1 | -/** | 1 | + /** |
| 2 | ******************************************************************** | 2 | ******************************************************************** |
| 3 | * @file test_widget_speaker.c | 3 | * @file test_widget_speaker.c |
| 4 | * @brief | 4 | * @brief |
| @@ -874,30 +874,9 @@ static void *DjiTest_WidgetSpeakerTask(void *arg) | @@ -874,30 +874,9 @@ static void *DjiTest_WidgetSpeakerTask(void *arg) | ||
| 874 | continue; | 874 | continue; |
| 875 | } | 875 | } |
| 876 | 876 | ||
| 877 | - if (s_speakerState.state == DJI_WIDGET_SPEAKER_STATE_PLAYING) { | ||
| 878 | - ////如果处于回放模式 | ||
| 879 | - //if (s_speakerState.playMode == DJI_WIDGET_SPEAKER_PLAY_MODE_LOOP_PLAYBACK) | ||
| 880 | - //{ | ||
| 881 | - // if (s_speakerState.workMode == DJI_WIDGET_SPEAKER_WORK_MODE_VOICE) { | ||
| 882 | - // USER_LOG_DEBUG("Waiting opus decoder finished..."); | ||
| 883 | - // while (s_isDecodeFinished == false) { | ||
| 884 | - // osalHandler->TaskSleepMs(1); | ||
| 885 | - // } | ||
| 886 | - // djiReturnCode = DjiTest_PlayAudioData(); | ||
| 887 | - // if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { | ||
| 888 | - // USER_LOG_ERROR("Play audio data failed, error: 0x%08llX.", djiReturnCode); | ||
| 889 | - // } | ||
| 890 | - // } else { | ||
| 891 | - // djiReturnCode = DjiTest_PlayTtsData(); | ||
| 892 | - // if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { | ||
| 893 | - // USER_LOG_ERROR("Play tts data failed, error: 0x%08llX.", djiReturnCode); | ||
| 894 | - // } | ||
| 895 | - // } | ||
| 896 | - // osalHandler->TaskSleepMs(1000); | ||
| 897 | - //} | ||
| 898 | - // | ||
| 899 | - ////单放模式 | ||
| 900 | - //else { | 877 | + //注意,以下播放的函数都会执行到播完再释放。 |
| 878 | + if (s_speakerState.state == DJI_WIDGET_SPEAKER_STATE_PLAYING) | ||
| 879 | + { | ||
| 901 | //如果工作模式为语音 | 880 | //如果工作模式为语音 |
| 902 | if (s_speakerState.workMode == DJI_WIDGET_SPEAKER_WORK_MODE_VOICE) | 881 | if (s_speakerState.workMode == DJI_WIDGET_SPEAKER_WORK_MODE_VOICE) |
| 903 | { | 882 | { |
| @@ -923,16 +902,12 @@ static void *DjiTest_WidgetSpeakerTask(void *arg) | @@ -923,16 +902,12 @@ static void *DjiTest_WidgetSpeakerTask(void *arg) | ||
| 923 | USER_LOG_ERROR("lock mutex error: 0x%08llX.", djiReturnCode); | 902 | USER_LOG_ERROR("lock mutex error: 0x%08llX.", djiReturnCode); |
| 924 | } | 903 | } |
| 925 | 904 | ||
| 926 | - //if (s_speakerState.playMode == DJI_WIDGET_SPEAKER_PLAY_MODE_SINGLE_PLAY) | ||
| 927 | - //{ | ||
| 928 | s_speakerState.state = DJI_WIDGET_SPEAKER_STATE_IDEL; | 905 | s_speakerState.state = DJI_WIDGET_SPEAKER_STATE_IDEL; |
| 929 | - //} | ||
| 930 | 906 | ||
| 931 | djiReturnCode = osalHandler->MutexUnlock(s_speakerMutex); | 907 | djiReturnCode = osalHandler->MutexUnlock(s_speakerMutex); |
| 932 | if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { | 908 | if (djiReturnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { |
| 933 | USER_LOG_ERROR("unlock mutex error: 0x%08llX.", djiReturnCode); | 909 | USER_LOG_ERROR("unlock mutex error: 0x%08llX.", djiReturnCode); |
| 934 | } | 910 | } |
| 935 | - //} | ||
| 936 | } | 911 | } |
| 937 | } | 912 | } |
| 938 | } | 913 | } |
| @@ -75,10 +75,8 @@ | @@ -75,10 +75,8 @@ | ||
| 75 | #endif | 75 | #endif |
| 76 | 76 | ||
| 77 | /* Private constants ---------------------------------------------------------*/ | 77 | /* Private constants ---------------------------------------------------------*/ |
| 78 | -#define DJI_LOG_PATH "/root/sdcard/Logs/" | ||
| 79 | #define DJI_LOG_INDEX_FILE_NAME "/root/Logs/latest" | 78 | #define DJI_LOG_INDEX_FILE_NAME "/root/Logs/latest" |
| 80 | -#define DJI_LOG_SD_INDEX_FILE_NAME "/root/sdcard/Logs/latest" | ||
| 81 | -#define DJI_LOG_FOLDER_NAME "Logs" | 79 | +#define DJI_LOG_FOLDER_NAME "/root/Logs/" |
| 82 | #define DJI_LOG_PATH_MAX_SIZE (128) | 80 | #define DJI_LOG_PATH_MAX_SIZE (128) |
| 83 | #define DJI_LOG_FOLDER_NAME_MAX_SIZE (32) | 81 | #define DJI_LOG_FOLDER_NAME_MAX_SIZE (32) |
| 84 | #define DJI_LOG_MAX_COUNT (10) | 82 | #define DJI_LOG_MAX_COUNT (10) |
| @@ -762,7 +760,7 @@ static T_DjiReturnCode DjiUser_PrepareSystemEnvironment(void) | @@ -762,7 +760,7 @@ static T_DjiReturnCode DjiUser_PrepareSystemEnvironment(void) | ||
| 762 | return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR; | 760 | return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR; |
| 763 | } | 761 | } |
| 764 | 762 | ||
| 765 | - if (DjiUser_LocalWriteFsInit(DJI_LOG_PATH) != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { | 763 | + if (DjiUser_LocalWriteFsInit(DJI_LOG_FOLDER_NAME) != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) { |
| 766 | printf("file system init error"); | 764 | printf("file system init error"); |
| 767 | //return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; | 765 | //return DJI_ERROR_SYSTEM_MODULE_CODE_UNKNOWN; |
| 768 | } | 766 | } |
| @@ -1028,23 +1026,6 @@ static T_DjiReturnCode DjiUser_LocalWriteFsInit(const char *path) | @@ -1028,23 +1026,6 @@ static T_DjiReturnCode DjiUser_LocalWriteFsInit(const char *path) | ||
| 1028 | } | 1026 | } |
| 1029 | } | 1027 | } |
| 1030 | 1028 | ||
| 1031 | - //检查sd卡的日志文件夹 | ||
| 1032 | - if (access(DJI_LOG_PATH, F_OK) != 0) { | ||
| 1033 | - memset(folderName, 0, sizeof(folderName)); | ||
| 1034 | - sprintf(folderName, "mkdir %s", DJI_LOG_PATH); | ||
| 1035 | - ret = system(folderName); | ||
| 1036 | - if (ret != 0) { | ||
| 1037 | - return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR; | ||
| 1038 | - } | ||
| 1039 | - } | ||
| 1040 | - | ||
| 1041 | - //检查sd卡的内序号文件是否存在 | ||
| 1042 | - if (access(DJI_LOG_SD_INDEX_FILE_NAME, F_OK) == 0) { | ||
| 1043 | - memset(folderName, 0, sizeof(folderName)); | ||
| 1044 | - sprintf(folderName, "rm %s", DJI_LOG_INDEX_FILE_NAME); | ||
| 1045 | - ret = system(folderName); | ||
| 1046 | - } | ||
| 1047 | - | ||
| 1048 | s_djiLogFileCnt = fopen(DJI_LOG_INDEX_FILE_NAME, "rb+"); | 1029 | s_djiLogFileCnt = fopen(DJI_LOG_INDEX_FILE_NAME, "rb+"); |
| 1049 | if (s_djiLogFileCnt == NULL) { | 1030 | if (s_djiLogFileCnt == NULL) { |
| 1050 | s_djiLogFileCnt = fopen(DJI_LOG_INDEX_FILE_NAME, "wb+"); | 1031 | s_djiLogFileCnt = fopen(DJI_LOG_INDEX_FILE_NAME, "wb+"); |
| @@ -1082,16 +1063,6 @@ static T_DjiReturnCode DjiUser_LocalWriteFsInit(const char *path) | @@ -1082,16 +1063,6 @@ static T_DjiReturnCode DjiUser_LocalWriteFsInit(const char *path) | ||
| 1082 | 1063 | ||
| 1083 | fclose(s_djiLogFileCnt); | 1064 | fclose(s_djiLogFileCnt); |
| 1084 | 1065 | ||
| 1085 | - //将sd卡的索引值文件删除 | ||
| 1086 | - memset(systemCmd, 0, sizeof(systemCmd)); | ||
| 1087 | - sprintf(systemCmd, "rm %s", DJI_LOG_SD_INDEX_FILE_NAME); | ||
| 1088 | - ret = system(systemCmd); | ||
| 1089 | - | ||
| 1090 | - //将索引值复制到sd卡 | ||
| 1091 | - memset(systemCmd, 0, sizeof(systemCmd)); | ||
| 1092 | - sprintf(systemCmd, "cp %s %s", DJI_LOG_INDEX_FILE_NAME, DJI_LOG_SD_INDEX_FILE_NAME); | ||
| 1093 | - ret = system(systemCmd); | ||
| 1094 | - | ||
| 1095 | //filePath : /root/sdcard/Logs/_%04d_%04d%02d%02d_%02d-%02d-%02d.log | 1066 | //filePath : /root/sdcard/Logs/_%04d_%04d%02d%02d_%02d-%02d-%02d.log |
| 1096 | sprintf(filePath, "%s_%04d_%04d%02d%02d_%02d-%02d-%02d.log", path, currentLogFileIndex, | 1067 | sprintf(filePath, "%s_%04d_%04d%02d%02d_%02d-%02d-%02d.log", path, currentLogFileIndex, |
| 1097 | localTime->tm_year + 1900, localTime->tm_mon + 1, localTime->tm_mday, | 1068 | localTime->tm_year + 1900, localTime->tm_mon + 1, localTime->tm_mday, |
| @@ -1103,17 +1074,17 @@ static T_DjiReturnCode DjiUser_LocalWriteFsInit(const char *path) | @@ -1103,17 +1074,17 @@ static T_DjiReturnCode DjiUser_LocalWriteFsInit(const char *path) | ||
| 1103 | return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR; | 1074 | return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR; |
| 1104 | } | 1075 | } |
| 1105 | 1076 | ||
| 1106 | - if (logFileIndex >= DJI_LOG_MAX_COUNT) { | ||
| 1107 | - sprintf(systemCmd, "rm -rf %s_%04d*.log", path, currentLogFileIndex - DJI_LOG_MAX_COUNT); | ||
| 1108 | - ret = system(systemCmd); | ||
| 1109 | - if (ret != 0) { | ||
| 1110 | - printf("Remove file error, ret:%d.\r\n", ret); | ||
| 1111 | - return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR; | ||
| 1112 | - } | ||
| 1113 | - } | 1077 | + //if (logFileIndex >= DJI_LOG_MAX_COUNT) { |
| 1078 | + // sprintf(systemCmd, "rm -rf %s_%04d*.log", path, currentLogFileIndex - DJI_LOG_MAX_COUNT); | ||
| 1079 | + // ret = system(systemCmd); | ||
| 1080 | + // if (ret != 0) { | ||
| 1081 | + // printf("Remove file error, ret:%d.\r\n", ret); | ||
| 1082 | + // return DJI_ERROR_SYSTEM_MODULE_CODE_SYSTEM_ERROR; | ||
| 1083 | + // } | ||
| 1084 | + //} | ||
| 1114 | 1085 | ||
| 1115 | - sprintf(systemCmd, "ln -sfrv %s "DJI_LOG_FOLDER_NAME"/latest.log", filePath); | ||
| 1116 | - system(systemCmd); | 1086 | + //sprintf(systemCmd, "ln -sfrv %s "DJI_LOG_FOLDER_NAME"/latest.log", filePath); |
| 1087 | + //system(systemCmd); | ||
| 1117 | 1088 | ||
| 1118 | g_DJI_LoginitFlag = JZ_FLAGCODE_ON; | 1089 | g_DJI_LoginitFlag = JZ_FLAGCODE_ON; |
| 1119 | 1090 |
sh_file/JzLog_config.sh
0 → 100644
| 1 | +#!/bin/sh | ||
| 2 | +# 开机日志归档脚本 | ||
| 3 | +# 执行时机:必须在 USB Gadget 启动之前 | ||
| 4 | + | ||
| 5 | +LOG_SYS="/root/JZLOG" | ||
| 6 | +LOG_SDCARD="/root/sdcard/JZLOG" | ||
| 7 | + | ||
| 8 | +# 1. 创建目录 | ||
| 9 | +mkdir -p "$LOG_SYS" "$LOG_SDCARD" | ||
| 10 | + | ||
| 11 | +# 2. 同步 thelast 文件 | ||
| 12 | +if [ -f "$LOG_SDCARD/thelast" ]; then | ||
| 13 | + cp -f "$LOG_SYS/thelast" "$LOG_SDCARD/thelast" | ||
| 14 | +else | ||
| 15 | + rm -f "$LOG_SYS/thelast" | ||
| 16 | +fi | ||
| 17 | + | ||
| 18 | +# 3. 移动所有 .log 文件 | ||
| 19 | +# 使用 find 避免 "argument list too long" | ||
| 20 | +find "$LOG_SYS" -maxdepth 1 -type f -name "*.log" -print0 | while IFS= read -r -d '' file; do | ||
| 21 | + mv "$file" "$LOG_SDCARD/" | ||
| 22 | +done | ||
| 23 | + | ||
| 24 | +# 4. 数量控制:超过20份则删除最早的(按文件名中的序号) | ||
| 25 | +cd "$LOG_SDCARD" || exit 1 | ||
| 26 | +files=( *.log ) | ||
| 27 | +count=${#files[@]} | ||
| 28 | +if [ $count -gt 20 ]; then | ||
| 29 | + # 提取序号并排序(假设文件名格式固定为 _数字_...) | ||
| 30 | + sorted=$(printf '%s\n' "${files[@]}" | sed -n 's/^_\([0-9]*\)_.*/\1 \0/p' | sort -n | cut -d' ' -f2) | ||
| 31 | + if [ -n "$sorted" ]; then | ||
| 32 | + delete=$((count - 20)) | ||
| 33 | + echo "$sorted" | head -n "$delete" | xargs rm -f | ||
| 34 | + else | ||
| 35 | + # 如果无法解析序号,退而按修改时间删除最老的 | ||
| 36 | + ls -t *.log | tail -n +21 | xargs rm -f | ||
| 37 | + fi | ||
| 38 | +fi |
-
请 注册 或 登录 后发表评论