正在显示
91 个修改的文件
包含
2503 行增加
和
1174 行删除
| @@ -2,6 +2,17 @@ | @@ -2,6 +2,17 @@ | ||
| 2 | "files.associations": { | 2 | "files.associations": { |
| 3 | "typeinfo": "c", | 3 | "typeinfo": "c", |
| 4 | "jzsdk_code.h": "c", | 4 | "jzsdk_code.h": "c", |
| 5 | - "jzsdk_getframetemplate.h": "c" | 5 | + "jzsdk_getframetemplate.h": "c", |
| 6 | + "uart_config.h": "c", | ||
| 7 | + "version_choose.h": "c", | ||
| 8 | + "msp_cmn.h": "c", | ||
| 9 | + "qtts.h": "c", | ||
| 10 | + "msp_errors.h": "c", | ||
| 11 | + "jzsdklib.h": "c", | ||
| 12 | + "megaphone_inputandoutput.h": "c", | ||
| 13 | + "tts_sample.h": "c", | ||
| 14 | + "cn_tts.h": "c", | ||
| 15 | + "intl_tts.h": "c", | ||
| 16 | + "megaphone_music.h": "c" | ||
| 6 | } | 17 | } |
| 7 | } | 18 | } |
| @@ -21,7 +21,11 @@ set(CMAKE_CXX_COMPILER "/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g+ | @@ -21,7 +21,11 @@ set(CMAKE_CXX_COMPILER "/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g+ | ||
| 21 | # 工程名 JZ_UART_APP | 21 | # 工程名 JZ_UART_APP |
| 22 | project(JZ_UART_APP) | 22 | project(JZ_UART_APP) |
| 23 | # 设置滤波方式 24行不能被改动,因为会被sh修改滤波方式 | 23 | # 设置滤波方式 24行不能被改动,因为会被sh修改滤波方式 |
| 24 | -set(filtering_type directed_stopband_filtering) | 24 | +set(filtering_type high_pass_filtering) |
| 25 | + | ||
| 26 | +# 海外版本 27行不能改动 | ||
| 27 | +set(firewarm_origin OVERSEAS_VERSION) | ||
| 28 | + | ||
| 25 | 29 | ||
| 26 | # 指定源文件 | 30 | # 指定源文件 |
| 27 | file(GLOB_RECURSE APPLICATION_SRC application/*.c) | 31 | file(GLOB_RECURSE APPLICATION_SRC application/*.c) |
| @@ -72,6 +76,15 @@ else() | @@ -72,6 +76,15 @@ else() | ||
| 72 | message(FATAL_ERROR "Invalid filtering type") | 76 | message(FATAL_ERROR "Invalid filtering type") |
| 73 | endif() | 77 | endif() |
| 74 | 78 | ||
| 79 | +if(${firewarm_origin} STREQUAL "OVERSEAS_VERSION") | ||
| 80 | + message("\n固件版本为海外版\n") | ||
| 81 | + target_link_libraries(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/ModuleLib/TTS/intl_tts/libportaudio.so.2) | ||
| 82 | + target_link_libraries(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/ModuleLib/TTS/intl_tts/libTTS_Player.so) | ||
| 83 | + | ||
| 84 | +else() | ||
| 85 | + message("\n固件版本为国内版\n") | ||
| 86 | +endif() | ||
| 87 | + | ||
| 75 | target_link_libraries(${PROJECT_NAME} | 88 | target_link_libraries(${PROJECT_NAME} |
| 76 | 89 | ||
| 77 | ${CMAKE_CURRENT_LIST_DIR}/ModuleLib/TTS/libmsc.so | 90 | ${CMAKE_CURRENT_LIST_DIR}/ModuleLib/TTS/libmsc.so |
| @@ -113,6 +113,8 @@ typedef enum { | @@ -113,6 +113,8 @@ typedef enum { | ||
| 113 | JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL = 0x10000F00, //警示灯模式控制 | 113 | JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL = 0x10000F00, //警示灯模式控制 |
| 114 | JZ_INSCODE_5AFRAME_WARNINGLIGHT_COLOUR = 0x10000F10, //警示灯颜色控制 | 114 | JZ_INSCODE_5AFRAME_WARNINGLIGHT_COLOUR = 0x10000F10, //警示灯颜色控制 |
| 115 | 115 | ||
| 116 | + JZ_INSCODE_5AFRAME_OUTPUTPOWER_CONTROL = 0x10001000, //对外供电开关 | ||
| 117 | + JZ_INSCODE_5AFRAME_CHECKSTATUS_OUTPUTPOWER = 0x10001001, //对外供电查询 | ||
| 116 | 118 | ||
| 117 | //5B类帧 | 119 | //5B类帧 |
| 118 | JZ_INSCODE_5BFRAME_FRAME = 0x10004000, //发送帧 | 120 | JZ_INSCODE_5BFRAME_FRAME = 0x10004000, //发送帧 |
| @@ -157,6 +159,8 @@ typedef enum { | @@ -157,6 +159,8 @@ typedef enum { | ||
| 157 | JZ_INSCODE_5BFRAME_HARDWAREVERSION = 0x10004801, //发送硬件版本号 | 159 | JZ_INSCODE_5BFRAME_HARDWAREVERSION = 0x10004801, //发送硬件版本号 |
| 158 | JZ_INSCODE_5BFRAME_CHECKSTATUS_SERIALNUMBER = 0x10004802, //回复序列号 | 160 | JZ_INSCODE_5BFRAME_CHECKSTATUS_SERIALNUMBER = 0x10004802, //回复序列号 |
| 159 | 161 | ||
| 162 | + JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER = 0x10004900, //对外供电查询 | ||
| 163 | + | ||
| 160 | //6A类 | 164 | //6A类 |
| 161 | JZ_INSCODE_6AFRAME_FRAME = 0x10008000, //发送帧 | 165 | JZ_INSCODE_6AFRAME_FRAME = 0x10008000, //发送帧 |
| 162 | 166 |
| @@ -301,6 +301,27 @@ static int Comparison_5AFRAME_FirstLevelCode_0x59(char *getdata) | @@ -301,6 +301,27 @@ static int Comparison_5AFRAME_FirstLevelCode_0x59(char *getdata) | ||
| 301 | } | 301 | } |
| 302 | } | 302 | } |
| 303 | 303 | ||
| 304 | +//一级功能码,硬件引脚控制 | ||
| 305 | +static int Comparison_5AFRAME_FirstLevelCode_0x5A(char *getdata) | ||
| 306 | +{ | ||
| 307 | + //二级功能位 | ||
| 308 | + switch (getdata[8]) | ||
| 309 | + { | ||
| 310 | + //对外供电开关 | ||
| 311 | + case 0x01: | ||
| 312 | + return JZ_INSCODE_5AFRAME_OUTPUTPOWER_CONTROL; | ||
| 313 | + break; | ||
| 314 | + | ||
| 315 | + //对外供电查询 | ||
| 316 | + case 0x02: | ||
| 317 | + return JZ_INSCODE_5AFRAME_CHECKSTATUS_OUTPUTPOWER; | ||
| 318 | + break; | ||
| 319 | + | ||
| 320 | + default: | ||
| 321 | + return JZ_ERROR_SYSTEM_FRAME_ERROR; | ||
| 322 | + break; | ||
| 323 | + } | ||
| 324 | +} | ||
| 304 | 325 | ||
| 305 | //一级功能码 激光控制 | 326 | //一级功能码 激光控制 |
| 306 | static int Comparison_5AFRAME_FirstLevelCode_0x60(char *getdata) | 327 | static int Comparison_5AFRAME_FirstLevelCode_0x60(char *getdata) |
| @@ -586,6 +607,11 @@ int JZsdk_5AFrameComparsion(char *getdata, int len) | @@ -586,6 +607,11 @@ int JZsdk_5AFrameComparsion(char *getdata, int len) | ||
| 586 | return Comparison_5AFRAME_FirstLevelCode_0x59(getdata); | 607 | return Comparison_5AFRAME_FirstLevelCode_0x59(getdata); |
| 587 | break; | 608 | break; |
| 588 | 609 | ||
| 610 | + //一级功能码,硬件引脚控制 | ||
| 611 | + case 0x5A: | ||
| 612 | + return Comparison_5AFRAME_FirstLevelCode_0x5A(getdata); | ||
| 613 | + break; | ||
| 614 | + | ||
| 589 | //一级功能码 激光控制 | 615 | //一级功能码 激光控制 |
| 590 | case 0x60: | 616 | case 0x60: |
| 591 | return Comparison_5AFRAME_FirstLevelCode_0x60(getdata); | 617 | return Comparison_5AFRAME_FirstLevelCode_0x60(getdata); |
| @@ -124,6 +124,23 @@ static int Comparison_5BFRAME_FirstLevelCode_0x58(char *getdata) | @@ -124,6 +124,23 @@ static int Comparison_5BFRAME_FirstLevelCode_0x58(char *getdata) | ||
| 124 | } | 124 | } |
| 125 | } | 125 | } |
| 126 | 126 | ||
| 127 | +//一级功能码是硬件引脚控制 | ||
| 128 | +static int Comparison_5BFRAME_FirstLevelCode_0x5A(char *getdata) | ||
| 129 | +{ | ||
| 130 | + //二级功能位 | ||
| 131 | + switch (getdata[8]) | ||
| 132 | + { | ||
| 133 | + //回复对供电开关状态返回 | ||
| 134 | + case 0x02: | ||
| 135 | + return JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER; | ||
| 136 | + break; | ||
| 137 | + | ||
| 138 | + default: | ||
| 139 | + return JZ_ERROR_SYSTEM_FRAME_ERROR; | ||
| 140 | + break; | ||
| 141 | + } | ||
| 142 | +} | ||
| 143 | + | ||
| 127 | //一级功能码是激光 | 144 | //一级功能码是激光 |
| 128 | static int Comparison_5BFRAME_FirstLevelCode_0x60(char *getdata) | 145 | static int Comparison_5BFRAME_FirstLevelCode_0x60(char *getdata) |
| 129 | { | 146 | { |
| @@ -320,6 +337,10 @@ int JZsdk_5BFrameComparsion(char *getdata, int len) | @@ -320,6 +337,10 @@ int JZsdk_5BFrameComparsion(char *getdata, int len) | ||
| 320 | return Comparison_5BFRAME_FirstLevelCode_0x58(getdata); | 337 | return Comparison_5BFRAME_FirstLevelCode_0x58(getdata); |
| 321 | break; | 338 | break; |
| 322 | 339 | ||
| 340 | + case 0x5A: | ||
| 341 | + return Comparison_5BFRAME_FirstLevelCode_0x5A(getdata); | ||
| 342 | + break; | ||
| 343 | + | ||
| 323 | case 0x60: | 344 | case 0x60: |
| 324 | return Comparison_5BFRAME_FirstLevelCode_0x60(getdata); | 345 | return Comparison_5BFRAME_FirstLevelCode_0x60(getdata); |
| 325 | break; | 346 | break; |
| @@ -44,6 +44,30 @@ static int Comparison_6AFRAME_FirstLevelCode_0x69(char *getdata) | @@ -44,6 +44,30 @@ static int Comparison_6AFRAME_FirstLevelCode_0x69(char *getdata) | ||
| 44 | } | 44 | } |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | + | ||
| 48 | + | ||
| 49 | +//一级功能码是私有协议 | ||
| 50 | +static int Comparison_6AFRAME_FirstLevelCode_0x6F(char *getdata) | ||
| 51 | +{ | ||
| 52 | + //二级功能位 | ||
| 53 | + switch (getdata[8]) | ||
| 54 | + { | ||
| 55 | + //设置当前为云台零值 | ||
| 56 | + case 0x50: | ||
| 57 | + return JZ_INSCODE_6AFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME; | ||
| 58 | + break; | ||
| 59 | + | ||
| 60 | + //设置当前为云台零值 | ||
| 61 | + case 0x51: | ||
| 62 | + return JZ_INSCODE_6AFRAME_CHECKSTATUS_GIMBAL_LINKAGE; | ||
| 63 | + break; | ||
| 64 | + | ||
| 65 | + default: | ||
| 66 | + return JZ_ERROR_SYSTEM_FRAME_ERROR; | ||
| 67 | + break; | ||
| 68 | + } | ||
| 69 | +} | ||
| 70 | + | ||
| 47 | /****************************************************************** | 71 | /****************************************************************** |
| 48 | 72 | ||
| 49 | 回复帧对比 | 73 | 回复帧对比 |
| @@ -69,6 +93,10 @@ int JZsdk_6AFrameComparsion(char *getdata, int len) | @@ -69,6 +93,10 @@ int JZsdk_6AFrameComparsion(char *getdata, int len) | ||
| 69 | return Comparison_6AFRAME_FirstLevelCode_0x69(getdata); | 93 | return Comparison_6AFRAME_FirstLevelCode_0x69(getdata); |
| 70 | break; | 94 | break; |
| 71 | 95 | ||
| 96 | + case 0x6F: | ||
| 97 | + return Comparison_6AFRAME_FirstLevelCode_0x6F(getdata); | ||
| 98 | + break; | ||
| 99 | + | ||
| 72 | 100 | ||
| 73 | default: | 101 | default: |
| 74 | return JZ_ERROR_SYSTEM_FRAME_ERROR; | 102 | return JZ_ERROR_SYSTEM_FRAME_ERROR; |
| @@ -98,6 +98,14 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | @@ -98,6 +98,14 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | ||
| 98 | } | 98 | } |
| 99 | break; | 99 | break; |
| 100 | 100 | ||
| 101 | + case JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL: | ||
| 102 | + { | ||
| 103 | + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x54 ,0x00 ,0x00 ,0x00 ,0x23}; | ||
| 104 | + memcpy(str, sendbuf, 13); | ||
| 105 | + *str_len = 13; | ||
| 106 | + } | ||
| 107 | + break; | ||
| 108 | + | ||
| 101 | case JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS: | 109 | case JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS: |
| 102 | { | 110 | { |
| 103 | char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x55 ,0x00 ,0x00 ,0x00 ,0x23}; | 111 | char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x55 ,0x00 ,0x00 ,0x00 ,0x23}; |
| @@ -112,6 +120,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | @@ -112,6 +120,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | ||
| 112 | memcpy(str, sendbuf, 13); | 120 | memcpy(str, sendbuf, 13); |
| 113 | *str_len = 13; | 121 | *str_len = 13; |
| 114 | } | 122 | } |
| 123 | + break; | ||
| 115 | 124 | ||
| 116 | case JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER: | 125 | case JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER: |
| 117 | { | 126 | { |
| @@ -119,6 +128,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | @@ -119,6 +128,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | ||
| 119 | memcpy(str, sendbuf, 13); | 128 | memcpy(str, sendbuf, 13); |
| 120 | *str_len = 13; | 129 | *str_len = 13; |
| 121 | } | 130 | } |
| 131 | + break; | ||
| 122 | 132 | ||
| 123 | case JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL_FINETUNING: | 133 | case JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL_FINETUNING: |
| 124 | { | 134 | { |
| @@ -126,7 +136,6 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | @@ -126,7 +136,6 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | ||
| 126 | memcpy(str, sendbuf, 13); | 136 | memcpy(str, sendbuf, 13); |
| 127 | *str_len = 13; | 137 | *str_len = 13; |
| 128 | } | 138 | } |
| 129 | - | ||
| 130 | break; | 139 | break; |
| 131 | /******************************************************************************************************************************************************** | 140 | /******************************************************************************************************************************************************** |
| 132 | * | 141 | * |
| @@ -100,8 +100,8 @@ T_JZsdkReturnCode JZsdk_LoggerInit() | @@ -100,8 +100,8 @@ T_JZsdkReturnCode JZsdk_LoggerInit() | ||
| 100 | char timeString[80]; | 100 | char timeString[80]; |
| 101 | time(¤t_time); | 101 | time(¤t_time); |
| 102 | info = localtime(¤t_time); | 102 | info = localtime(¤t_time); |
| 103 | - strftime(timeString, sizeof(timeString), "%Y-%m-%d-%H-%M-%S", info); | ||
| 104 | - snprintf(LogFileName, sizeof(LogFileName), "/root/sdcard/JZLOG/%d-%s", LogNum, timeString); | 103 | + strftime(timeString, sizeof(timeString), "%Y%m%d_%H-%M-%S", info); |
| 104 | + snprintf(LogFileName, sizeof(LogFileName), "/root/sdcard/JZLOG/%d_%s", LogNum, timeString); | ||
| 105 | 105 | ||
| 106 | printf("LogFileName:%s\n",LogFileName); | 106 | printf("LogFileName:%s\n",LogFileName); |
| 107 | 107 | ||
| @@ -139,6 +139,8 @@ T_JZsdkReturnCode writeToLogFile(const char *data) | @@ -139,6 +139,8 @@ T_JZsdkReturnCode writeToLogFile(const char *data) | ||
| 139 | if (logFile == NULL) { | 139 | if (logFile == NULL) { |
| 140 | // 文件打开失败,输出错误消息 | 140 | // 文件打开失败,输出错误消息 |
| 141 | printf("Failed to open file: %s", LogFileName); | 141 | printf("Failed to open file: %s", LogFileName); |
| 142 | + pthread_mutex_unlock(&LogWriteMutex); | ||
| 143 | + | ||
| 142 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 144 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 143 | } | 145 | } |
| 144 | 146 | ||
| @@ -170,15 +172,14 @@ void JZsdk_UserLogOutput(E_JZsdkConsoleLogLevel level, const char *fmt, ...) | @@ -170,15 +172,14 @@ void JZsdk_UserLogOutput(E_JZsdkConsoleLogLevel level, const char *fmt, ...) | ||
| 170 | default: | 172 | default: |
| 171 | break; | 173 | break; |
| 172 | } | 174 | } |
| 173 | - | ||
| 174 | // 使用可变参数处理传入的格式化字符串和可变参数 | 175 | // 使用可变参数处理传入的格式化字符串和可变参数 |
| 175 | va_list args; | 176 | va_list args; |
| 176 | va_start(args, fmt); | 177 | va_start(args, fmt); |
| 177 | 178 | ||
| 178 | - // 格式化日志消息 | 179 | + //格式化日志消息 |
| 179 | char logMessage[512]; | 180 | char logMessage[512]; |
| 180 | memset(logMessage, 0, sizeof(logMessage)); | 181 | memset(logMessage, 0, sizeof(logMessage)); |
| 181 | - vsprintf(logMessage, fmt, args); | 182 | + vsnprintf(logMessage, sizeof(logMessage), fmt, args); |
| 182 | 183 | ||
| 183 | va_end(args); | 184 | va_end(args); |
| 184 | 185 | ||
| @@ -190,12 +191,12 @@ void JZsdk_UserLogOutput(E_JZsdkConsoleLogLevel level, const char *fmt, ...) | @@ -190,12 +191,12 @@ void JZsdk_UserLogOutput(E_JZsdkConsoleLogLevel level, const char *fmt, ...) | ||
| 190 | double elapsed = seconds + microseconds*1e-6; | 191 | double elapsed = seconds + microseconds*1e-6; |
| 191 | 192 | ||
| 192 | // 执行具体的日志输出操作 | 193 | // 执行具体的日志输出操作 |
| 193 | - char finalLogMessage[512]; | ||
| 194 | - snprintf(finalLogMessage, 512, "[%s][%.4f]%s\n", JZSDK_LOGGER_CONSOLE_LOG_LEVEL, elapsed, logMessage); | 194 | + char finalLogMessage[612]; |
| 195 | + memset(finalLogMessage, 0, sizeof(finalLogMessage)); | ||
| 196 | + snprintf(finalLogMessage, 612, "[%s][%.4f]%s\n", JZSDK_LOGGER_CONSOLE_LOG_LEVEL, elapsed, logMessage); | ||
| 195 | 197 | ||
| 196 | printf("%s",finalLogMessage); | 198 | printf("%s",finalLogMessage); |
| 197 | 199 | ||
| 198 | - | ||
| 199 | //写入日志 | 200 | //写入日志 |
| 200 | writeToLogFile(finalLogMessage); | 201 | writeToLogFile(finalLogMessage); |
| 201 | } | 202 | } |
| @@ -178,6 +178,16 @@ int JZsdk_Uart_Send_SetGimbalPitch(int Uartport,int angle) | @@ -178,6 +178,16 @@ int JZsdk_Uart_Send_SetGimbalPitch(int Uartport,int angle) | ||
| 178 | 178 | ||
| 179 | /************* | 179 | /************* |
| 180 | * | 180 | * |
| 181 | + * 查询云台角度 | ||
| 182 | + * | ||
| 183 | + * **************/ | ||
| 184 | +int JZsdk_Uart_Send_CheckStatus_GimbalAngle(int Uartport ,int FrameSequence) | ||
| 185 | +{ | ||
| 186 | + JZsdk_Uart_SendDeal_CheckStatus_GimbalAngle(Uartport, FrameSequence); | ||
| 187 | +} | ||
| 188 | + | ||
| 189 | +/************* | ||
| 190 | + * | ||
| 181 | * 设置云台俯仰角度微调 | 191 | * 设置云台俯仰角度微调 |
| 182 | * | 192 | * |
| 183 | * **************/ | 193 | * **************/ |
| @@ -43,6 +43,7 @@ int JZsdk_Uart_Send_GimbalFineTuningPitch(int Uartport,int FrameSequence, int Pi | @@ -43,6 +43,7 @@ int JZsdk_Uart_Send_GimbalFineTuningPitch(int Uartport,int FrameSequence, int Pi | ||
| 43 | int JZsdk_Uart_Send_Set_GimbalLinkageControl(int Uartport,int FrameSequence, int value); | 43 | int JZsdk_Uart_Send_Set_GimbalLinkageControl(int Uartport,int FrameSequence, int value); |
| 44 | int JZsdk_Uart_Send_CheckStatus_GimbalLinkage(int Uartport,int FrameSequence); | 44 | int JZsdk_Uart_Send_CheckStatus_GimbalLinkage(int Uartport,int FrameSequence); |
| 45 | int JZsdk_Uart_Send_GimbalLinkageControl(int Uartport,int FrameSequence, int value); | 45 | int JZsdk_Uart_Send_GimbalLinkageControl(int Uartport,int FrameSequence, int value); |
| 46 | +int JZsdk_Uart_Send_CheckStatus_GimbalAngle(int Uartport ,int FrameSequence); | ||
| 46 | 47 | ||
| 47 | int JZsdk_Uart_Send_SearchLight_SetFrequency(int Uartport,int Frequency); | 48 | int JZsdk_Uart_Send_SearchLight_SetFrequency(int Uartport,int Frequency); |
| 48 | int JZsdk_Uart_Send_SearchLight_Control(int Uartport,int mode); | 49 | int JZsdk_Uart_Send_SearchLight_Control(int Uartport,int mode); |
| @@ -127,16 +127,9 @@ int JZsdk_Uart_CheckStatus_play() | @@ -127,16 +127,9 @@ int JZsdk_Uart_CheckStatus_play() | ||
| 127 | * | 127 | * |
| 128 | * | 128 | * |
| 129 | **********/ | 129 | **********/ |
| 130 | -int JZsdk_Uart_CheckStatus_gimbal() | 130 | +int JZsdk_Uart_CheckStatus_gimbal(int *PitchAngle, int *YawAngle) |
| 131 | { | 131 | { |
| 132 | - int AngleType = 1; | ||
| 133 | - | ||
| 134 | - if (AngleType == 1) | ||
| 135 | - { | ||
| 136 | - return Gimbal_Get_PitchAngle(); | ||
| 137 | - } | ||
| 138 | - | ||
| 139 | - | 132 | + UIcontrol_CheckStatus_GimbalAngle(PitchAngle, YawAngle); |
| 140 | } | 133 | } |
| 141 | /********* | 134 | /********* |
| 142 | * | 135 | * |
| @@ -800,7 +793,7 @@ T_JZsdkReturnCode JZsdl_Uart_RecvDeal_ObtainWaringlight_Status(int DeviceName, i | @@ -800,7 +793,7 @@ T_JZsdkReturnCode JZsdl_Uart_RecvDeal_ObtainWaringlight_Status(int DeviceName, i | ||
| 800 | **********/ | 793 | **********/ |
| 801 | T_JZsdkReturnCode JZsdl_Uart_RecvDeal_ObtainWaringlight_Color(int DeviceName, int color1, int color2) | 794 | T_JZsdkReturnCode JZsdl_Uart_RecvDeal_ObtainWaringlight_Color(int DeviceName, int color1, int color2) |
| 802 | { | 795 | { |
| 803 | - UIcontrol_Set_SearchLightLumen(DeviceName, color1, color2); | 796 | + UIcontrol_ObtainWarningLight_Color(DeviceName, color1, color2); |
| 804 | } | 797 | } |
| 805 | 798 | ||
| 806 | /********* | 799 | /********* |
| @@ -51,7 +51,7 @@ T_JZsdkReturnCode JZsdk_Uart_audio_NextSong(int DeviceName); | @@ -51,7 +51,7 @@ T_JZsdkReturnCode JZsdk_Uart_audio_NextSong(int DeviceName); | ||
| 51 | 51 | ||
| 52 | int JZsdk_Uart_CheckStatus_volume(); | 52 | int JZsdk_Uart_CheckStatus_volume(); |
| 53 | int JZsdk_Uart_CheckStatus_play(); | 53 | int JZsdk_Uart_CheckStatus_play(); |
| 54 | -int JZsdk_Uart_CheckStatus_gimbal(); | 54 | +int JZsdk_Uart_CheckStatus_gimbal(int *PitchAngle, int *YawAngle); |
| 55 | int JZsdk_Uart_CheckStatus_PlayFileName(char *music_name, int *music_name_len); | 55 | int JZsdk_Uart_CheckStatus_PlayFileName(char *music_name, int *music_name_len); |
| 56 | int JZsdk_Uart_CheckStatus_SoftwareVersion(char *majorVersion, char *minorVersion, char *modifyVersion, char *debugVersion); | 56 | int JZsdk_Uart_CheckStatus_SoftwareVersion(char *majorVersion, char *minorVersion, char *modifyVersion, char *debugVersion); |
| 57 | int JZsdk_Uart_CheckStatus_LoopPlay(); | 57 | int JZsdk_Uart_CheckStatus_LoopPlay(); |
| @@ -12,7 +12,7 @@ | @@ -12,7 +12,7 @@ | ||
| 12 | 12 | ||
| 13 | int UART_4G_Receive_mode = 0; | 13 | int UART_4G_Receive_mode = 0; |
| 14 | 14 | ||
| 15 | -static char TTS_Recv_buffer[3009]; //TTS接收数据缓冲区 1000中文 + 3个字中文的防溢出区 | 15 | +static char TTS_Recv_buffer[1009]; //TTS接收数据缓冲区 1000中文 + 3个字中文的防溢出区 |
| 16 | static int TTS_Recv_buffer_length = 0; | 16 | static int TTS_Recv_buffer_length = 0; |
| 17 | 17 | ||
| 18 | int JZsdk_Uart_RecvDeal_Set_UART_4G_Receive_mode(int value); | 18 | int JZsdk_Uart_RecvDeal_Set_UART_4G_Receive_mode(int value); |
| @@ -509,13 +509,16 @@ static int Uart_4G_RecvDeal_CheckStatus_gimbal(char *getbuf) | @@ -509,13 +509,16 @@ static int Uart_4G_RecvDeal_CheckStatus_gimbal(char *getbuf) | ||
| 509 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 509 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 510 | 510 | ||
| 511 | //1、获取本地云台值 | 511 | //1、获取本地云台值 |
| 512 | - int angle = JZsdk_Uart_CheckStatus_gimbal(); | 512 | + int PitchAngle; |
| 513 | + int YawAngle; | ||
| 514 | + | ||
| 515 | + JZsdk_Uart_CheckStatus_gimbal(&PitchAngle, &YawAngle); | ||
| 513 | 516 | ||
| 514 | //回复操作成功 | 517 | //回复操作成功 |
| 515 | //JZsdk_Uart_SendDeal_Reply_Sucesss(UART_4G, FrameSequence); | 518 | //JZsdk_Uart_SendDeal_Reply_Sucesss(UART_4G, FrameSequence); |
| 516 | 519 | ||
| 517 | //2、发送本地云台值 | 520 | //2、发送本地云台值 |
| 518 | - JZsdk_Uart_SendDeal_Reply_GimbalPitchAngle(UART_4G, angle); | 521 | + JZsdk_Uart_SendDeal_Reply_GimbalPitchAngle(UART_4G, PitchAngle); |
| 519 | } | 522 | } |
| 520 | /********* | 523 | /********* |
| 521 | * | 524 | * |
| @@ -783,7 +786,7 @@ static int Uart_4G_RecvDeal_Delete_VideoRecord() | @@ -783,7 +786,7 @@ static int Uart_4G_RecvDeal_Delete_VideoRecord() | ||
| 783 | **********/ | 786 | **********/ |
| 784 | static int Uart_4G_RecvDeal_TTS_SetTone(char *getbuf) | 787 | static int Uart_4G_RecvDeal_TTS_SetTone(char *getbuf) |
| 785 | { | 788 | { |
| 786 | - USER_LOG_INFO("删除录音操作\n"); | 789 | + USER_LOG_INFO("tts设置音色\n"); |
| 787 | //获取帧的序列号 | 790 | //获取帧的序列号 |
| 788 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 791 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 789 | 792 | ||
| @@ -856,7 +859,7 @@ static int Uart_4G_RecvDeal_TTS_Trans_start(char *getbuf) | @@ -856,7 +859,7 @@ static int Uart_4G_RecvDeal_TTS_Trans_start(char *getbuf) | ||
| 856 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 859 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 857 | 860 | ||
| 858 | //1、重置缓冲区 | 861 | //1、重置缓冲区 |
| 859 | - memset(TTS_Recv_buffer, '\0', 3009); | 862 | + memset(TTS_Recv_buffer, '\0', 1009); |
| 860 | 863 | ||
| 861 | //2、重置缓冲区长度 | 864 | //2、重置缓冲区长度 |
| 862 | TTS_Recv_buffer_length = 0; | 865 | TTS_Recv_buffer_length = 0; |
| @@ -876,11 +879,19 @@ static int Uart_4G_RecvDeal_TTS_Trans_start(char *getbuf) | @@ -876,11 +879,19 @@ static int Uart_4G_RecvDeal_TTS_Trans_start(char *getbuf) | ||
| 876 | static int Uart_4G_RecvDeal_TTS_Trans_transmission(char *getdata, int len) | 879 | static int Uart_4G_RecvDeal_TTS_Trans_transmission(char *getdata, int len) |
| 877 | { | 880 | { |
| 878 | USER_LOG_INFO("tts传输中"); | 881 | USER_LOG_INFO("tts传输中"); |
| 879 | - //1、将新的数据 放入缓冲区 | ||
| 880 | - memcpy(TTS_Recv_buffer+TTS_Recv_buffer_length, getdata, len); | ||
| 881 | 882 | ||
| 882 | - //2、记录已加载的长度 | ||
| 883 | - TTS_Recv_buffer_length = TTS_Recv_buffer_length + len; | 883 | + if (TTS_Recv_buffer_length+len < 1000) |
| 884 | + { | ||
| 885 | + //1、将新的数据 放入缓冲区 | ||
| 886 | + memcpy(TTS_Recv_buffer+TTS_Recv_buffer_length, getdata, len); | ||
| 887 | + | ||
| 888 | + //2、记录已加载的长度 | ||
| 889 | + TTS_Recv_buffer_length = TTS_Recv_buffer_length + len; | ||
| 890 | + } | ||
| 891 | + else | ||
| 892 | + { | ||
| 893 | + USER_LOG_ERROR("TTS字数超出1000字"); | ||
| 894 | + } | ||
| 884 | } | 895 | } |
| 885 | /********* | 896 | /********* |
| 886 | * | 897 | * |
| @@ -12,7 +12,7 @@ | @@ -12,7 +12,7 @@ | ||
| 12 | 12 | ||
| 13 | int UART_DEV1_Receive_mode = 0; | 13 | int UART_DEV1_Receive_mode = 0; |
| 14 | 14 | ||
| 15 | -static char TTS_Recv_buffer[3009]; //TTS接收数据缓冲区 1000中文 + 3个字中文的防溢出区 | 15 | +static char TTS_Recv_buffer[1009]; //TTS接收数据缓冲区 1000中文 + 3个字中文的防溢出区 |
| 16 | static int TTS_Recv_buffer_length = 0; | 16 | static int TTS_Recv_buffer_length = 0; |
| 17 | 17 | ||
| 18 | int JZsdk_Uart_RecvDeal_Set_UART_DEV1_Receive_mode(int value); | 18 | int JZsdk_Uart_RecvDeal_Set_UART_DEV1_Receive_mode(int value); |
| @@ -509,13 +509,13 @@ static int Uart_DEV1_RecvDeal_CheckStatus_gimbal(char *getbuf) | @@ -509,13 +509,13 @@ static int Uart_DEV1_RecvDeal_CheckStatus_gimbal(char *getbuf) | ||
| 509 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 509 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 510 | 510 | ||
| 511 | //1、获取本地云台值 | 511 | //1、获取本地云台值 |
| 512 | - int angle = JZsdk_Uart_CheckStatus_gimbal(); | 512 | + int PitchAngle; |
| 513 | + int YawAngle; | ||
| 513 | 514 | ||
| 514 | - //回复操作成功 | ||
| 515 | - //JZsdk_Uart_SendDeal_Reply_Sucesss(UART_DEV_1, FrameSequence); | 515 | + JZsdk_Uart_CheckStatus_gimbal(&PitchAngle, &YawAngle); |
| 516 | 516 | ||
| 517 | //2、发送本地云台值 | 517 | //2、发送本地云台值 |
| 518 | - JZsdk_Uart_SendDeal_Reply_GimbalPitchAngle(UART_DEV_1, angle); | 518 | + JZsdk_Uart_SendDeal_Reply_GimbalPitchAngle(UART_DEV_1, PitchAngle); |
| 519 | } | 519 | } |
| 520 | /********* | 520 | /********* |
| 521 | * | 521 | * |
| @@ -783,7 +783,7 @@ static int Uart_DEV1_RecvDeal_Delete_VideoRecord() | @@ -783,7 +783,7 @@ static int Uart_DEV1_RecvDeal_Delete_VideoRecord() | ||
| 783 | **********/ | 783 | **********/ |
| 784 | static int Uart_DEV1_RecvDeal_TTS_SetTone(char *getbuf) | 784 | static int Uart_DEV1_RecvDeal_TTS_SetTone(char *getbuf) |
| 785 | { | 785 | { |
| 786 | - USER_LOG_INFO("删除录音操作\n"); | 786 | + USER_LOG_INFO("tts设置音色\n"); |
| 787 | //获取帧的序列号 | 787 | //获取帧的序列号 |
| 788 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 788 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 789 | 789 | ||
| @@ -856,7 +856,7 @@ static int Uart_DEV1_RecvDeal_TTS_Trans_start(char *getbuf) | @@ -856,7 +856,7 @@ static int Uart_DEV1_RecvDeal_TTS_Trans_start(char *getbuf) | ||
| 856 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 856 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 857 | 857 | ||
| 858 | //1、重置缓冲区 | 858 | //1、重置缓冲区 |
| 859 | - memset(TTS_Recv_buffer, '\0', 3009); | 859 | + memset(TTS_Recv_buffer, 0, 1009); |
| 860 | 860 | ||
| 861 | //2、重置缓冲区长度 | 861 | //2、重置缓冲区长度 |
| 862 | TTS_Recv_buffer_length = 0; | 862 | TTS_Recv_buffer_length = 0; |
| @@ -876,12 +876,21 @@ static int Uart_DEV1_RecvDeal_TTS_Trans_start(char *getbuf) | @@ -876,12 +876,21 @@ static int Uart_DEV1_RecvDeal_TTS_Trans_start(char *getbuf) | ||
| 876 | static int Uart_DEV1_RecvDeal_TTS_Trans_transmission(char *getdata, int len) | 876 | static int Uart_DEV1_RecvDeal_TTS_Trans_transmission(char *getdata, int len) |
| 877 | { | 877 | { |
| 878 | USER_LOG_INFO("tts传输中"); | 878 | USER_LOG_INFO("tts传输中"); |
| 879 | - //1、将新的数据 放入缓冲区 | ||
| 880 | - memcpy(TTS_Recv_buffer+TTS_Recv_buffer_length, getdata, len); | ||
| 881 | 879 | ||
| 882 | - //2、记录已加载的长度 | ||
| 883 | - TTS_Recv_buffer_length = TTS_Recv_buffer_length + len; | 880 | + if (TTS_Recv_buffer_length+len < 1000) |
| 881 | + { | ||
| 882 | + //1、将新的数据 放入缓冲区 | ||
| 883 | + memcpy(TTS_Recv_buffer+TTS_Recv_buffer_length, getdata, len); | ||
| 884 | + | ||
| 885 | + //2、记录已加载的长度 | ||
| 886 | + TTS_Recv_buffer_length = TTS_Recv_buffer_length + len; | ||
| 887 | + } | ||
| 888 | + else | ||
| 889 | + { | ||
| 890 | + USER_LOG_ERROR("TTS字数超出1000字节"); | ||
| 891 | + } | ||
| 884 | } | 892 | } |
| 893 | + | ||
| 885 | /********* | 894 | /********* |
| 886 | * | 895 | * |
| 887 | * tts传输结束 | 896 | * tts传输结束 |
| @@ -894,6 +903,7 @@ static int Uart_DEV1_RecvDeal_TTS_Trans_stop(char *getbuf) | @@ -894,6 +903,7 @@ static int Uart_DEV1_RecvDeal_TTS_Trans_stop(char *getbuf) | ||
| 894 | //获取帧的序列号 | 903 | //获取帧的序列号 |
| 895 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 904 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 896 | 905 | ||
| 906 | + | ||
| 897 | //1、打印一次TTS文本 | 907 | //1、打印一次TTS文本 |
| 898 | USER_LOG_INFO("TTS播放%s",TTS_Recv_buffer); | 908 | USER_LOG_INFO("TTS播放%s",TTS_Recv_buffer); |
| 899 | 909 |
| @@ -12,7 +12,7 @@ | @@ -12,7 +12,7 @@ | ||
| 12 | 12 | ||
| 13 | int UART_DEV2_Receive_mode = 0; | 13 | int UART_DEV2_Receive_mode = 0; |
| 14 | 14 | ||
| 15 | -static char TTS_Recv_buffer[3009]; //TTS接收数据缓冲区 1000中文 + 3个字中文的防溢出区 | 15 | +static char TTS_Recv_buffer[1009]; //TTS接收数据缓冲区 1000中文 + 3个字中文的防溢出区 |
| 16 | static int TTS_Recv_buffer_length = 0; | 16 | static int TTS_Recv_buffer_length = 0; |
| 17 | 17 | ||
| 18 | int JZsdk_Uart_RecvDeal_Set_UART_DEV2_Receive_mode(int value); | 18 | int JZsdk_Uart_RecvDeal_Set_UART_DEV2_Receive_mode(int value); |
| @@ -509,13 +509,13 @@ static int Uart_DEV2_RecvDeal_CheckStatus_gimbal(char *getbuf) | @@ -509,13 +509,13 @@ static int Uart_DEV2_RecvDeal_CheckStatus_gimbal(char *getbuf) | ||
| 509 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 509 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 510 | 510 | ||
| 511 | //1、获取本地云台值 | 511 | //1、获取本地云台值 |
| 512 | - int angle = JZsdk_Uart_CheckStatus_gimbal(); | 512 | + int PitchAngle; |
| 513 | + int YawAngle; | ||
| 513 | 514 | ||
| 514 | - //回复操作成功 | ||
| 515 | - //JZsdk_Uart_SendDeal_Reply_Sucesss(UART_DEV_2, FrameSequence); | 515 | + JZsdk_Uart_CheckStatus_gimbal(&PitchAngle, &YawAngle); |
| 516 | 516 | ||
| 517 | //2、发送本地云台值 | 517 | //2、发送本地云台值 |
| 518 | - JZsdk_Uart_SendDeal_Reply_GimbalPitchAngle(UART_DEV_2, angle); | 518 | + JZsdk_Uart_SendDeal_Reply_GimbalPitchAngle(UART_DEV_2, PitchAngle); |
| 519 | } | 519 | } |
| 520 | /********* | 520 | /********* |
| 521 | * | 521 | * |
| @@ -783,7 +783,7 @@ static int Uart_DEV2_RecvDeal_Delete_VideoRecord() | @@ -783,7 +783,7 @@ static int Uart_DEV2_RecvDeal_Delete_VideoRecord() | ||
| 783 | **********/ | 783 | **********/ |
| 784 | static int Uart_DEV2_RecvDeal_TTS_SetTone(char *getbuf) | 784 | static int Uart_DEV2_RecvDeal_TTS_SetTone(char *getbuf) |
| 785 | { | 785 | { |
| 786 | - USER_LOG_INFO("删除录音操作\n"); | 786 | + USER_LOG_INFO("tts设置音色\n"); |
| 787 | //获取帧的序列号 | 787 | //获取帧的序列号 |
| 788 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 788 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 789 | 789 | ||
| @@ -856,7 +856,7 @@ static int Uart_DEV2_RecvDeal_TTS_Trans_start(char *getbuf) | @@ -856,7 +856,7 @@ static int Uart_DEV2_RecvDeal_TTS_Trans_start(char *getbuf) | ||
| 856 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 856 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 857 | 857 | ||
| 858 | //1、重置缓冲区 | 858 | //1、重置缓冲区 |
| 859 | - memset(TTS_Recv_buffer, '\0', 3009); | 859 | + memset(TTS_Recv_buffer, '\0', 1009); |
| 860 | 860 | ||
| 861 | //2、重置缓冲区长度 | 861 | //2、重置缓冲区长度 |
| 862 | TTS_Recv_buffer_length = 0; | 862 | TTS_Recv_buffer_length = 0; |
| @@ -876,11 +876,19 @@ static int Uart_DEV2_RecvDeal_TTS_Trans_start(char *getbuf) | @@ -876,11 +876,19 @@ static int Uart_DEV2_RecvDeal_TTS_Trans_start(char *getbuf) | ||
| 876 | static int Uart_DEV2_RecvDeal_TTS_Trans_transmission(char *getdata, int len) | 876 | static int Uart_DEV2_RecvDeal_TTS_Trans_transmission(char *getdata, int len) |
| 877 | { | 877 | { |
| 878 | USER_LOG_INFO("tts传输中"); | 878 | USER_LOG_INFO("tts传输中"); |
| 879 | - //1、将新的数据 放入缓冲区 | ||
| 880 | - memcpy(TTS_Recv_buffer+TTS_Recv_buffer_length, getdata, len); | ||
| 881 | 879 | ||
| 882 | - //2、记录已加载的长度 | ||
| 883 | - TTS_Recv_buffer_length = TTS_Recv_buffer_length + len; | 880 | + if (TTS_Recv_buffer_length+len < 1000) |
| 881 | + { | ||
| 882 | + //1、将新的数据 放入缓冲区 | ||
| 883 | + memcpy(TTS_Recv_buffer+TTS_Recv_buffer_length, getdata, len); | ||
| 884 | + | ||
| 885 | + //2、记录已加载的长度 | ||
| 886 | + TTS_Recv_buffer_length = TTS_Recv_buffer_length + len; | ||
| 887 | + } | ||
| 888 | + else | ||
| 889 | + { | ||
| 890 | + USER_LOG_ERROR("TTS字数超出1000字"); | ||
| 891 | + } | ||
| 884 | } | 892 | } |
| 885 | /********* | 893 | /********* |
| 886 | * | 894 | * |
| @@ -385,6 +385,23 @@ int JZsdk_Uart_SendDeal_Set_GimbalPitchAngle(int Uartport ,int angle) | @@ -385,6 +385,23 @@ int JZsdk_Uart_SendDeal_Set_GimbalPitchAngle(int Uartport ,int angle) | ||
| 385 | JZsdk_Uart_SendDeal_SendOreder(Uartport ,sendbuf, send_buf_len); | 385 | JZsdk_Uart_SendDeal_SendOreder(Uartport ,sendbuf, send_buf_len); |
| 386 | } | 386 | } |
| 387 | 387 | ||
| 388 | +//查询云台角度 | ||
| 389 | +int JZsdk_Uart_SendDeal_CheckStatus_GimbalAngle(int Uartport ,int FrameSequence) | ||
| 390 | +{ | ||
| 391 | + printf("发送查询云台角度帧\n"); | ||
| 392 | + char sendbuf[256]; | ||
| 393 | + int send_buf_len; | ||
| 394 | + | ||
| 395 | + //1、获取帧样板 | ||
| 396 | + JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL, sendbuf, &send_buf_len); | ||
| 397 | + | ||
| 398 | + //2、写入帧序列 | ||
| 399 | + sendbuf[6] = FrameSequence; | ||
| 400 | + | ||
| 401 | + //3、发送帧 | ||
| 402 | + JZsdk_Uart_SendDeal_SendOreder(Uartport ,sendbuf, send_buf_len); | ||
| 403 | +} | ||
| 404 | + | ||
| 388 | //微调云台pitch | 405 | //微调云台pitch |
| 389 | int JZsdk_Uart_SendDeal_Set_GimbalFineTuningPitch(int Uartport, int PitchFineTuning) | 406 | int JZsdk_Uart_SendDeal_Set_GimbalFineTuningPitch(int Uartport, int PitchFineTuning) |
| 390 | { | 407 | { |
| @@ -725,7 +742,7 @@ int JZsdk_Uart_SendDeal_CheckStatus_WarningLightStatus(int Uartport) | @@ -725,7 +742,7 @@ int JZsdk_Uart_SendDeal_CheckStatus_WarningLightStatus(int Uartport) | ||
| 725 | int send_buf_len; | 742 | int send_buf_len; |
| 726 | 743 | ||
| 727 | //1、获取帧样板 | 744 | //1、获取帧样板 |
| 728 | - JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE, sendbuf, &send_buf_len); | 745 | + JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS, sendbuf, &send_buf_len); |
| 729 | 746 | ||
| 730 | //2、发送帧 | 747 | //2、发送帧 |
| 731 | JZsdk_Uart_SendDeal_SendOreder(Uartport ,sendbuf, send_buf_len); | 748 | JZsdk_Uart_SendDeal_SendOreder(Uartport ,sendbuf, send_buf_len); |
| @@ -740,7 +757,7 @@ int JZsdk_Uart_SendDeal_CheckStatus_WarningLightColor(int Uartport) | @@ -740,7 +757,7 @@ int JZsdk_Uart_SendDeal_CheckStatus_WarningLightColor(int Uartport) | ||
| 740 | int send_buf_len; | 757 | int send_buf_len; |
| 741 | 758 | ||
| 742 | //1、获取帧样板 | 759 | //1、获取帧样板 |
| 743 | - JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE, sendbuf, &send_buf_len); | 760 | + JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR, sendbuf, &send_buf_len); |
| 744 | 761 | ||
| 745 | //2、发送帧 | 762 | //2、发送帧 |
| 746 | JZsdk_Uart_SendDeal_SendOreder(Uartport ,sendbuf, send_buf_len); | 763 | JZsdk_Uart_SendDeal_SendOreder(Uartport ,sendbuf, send_buf_len); |
| @@ -46,6 +46,7 @@ int JZsdk_Uart_SendDeal_CheckStatus_GimbalFineTuningPitch(int Uartport, int Fram | @@ -46,6 +46,7 @@ int JZsdk_Uart_SendDeal_CheckStatus_GimbalFineTuningPitch(int Uartport, int Fram | ||
| 46 | int JZsdk_Uart_SendDeal_Set_GimbalLinkageControl(int Uartport,int FrameSequence, int value); | 46 | int JZsdk_Uart_SendDeal_Set_GimbalLinkageControl(int Uartport,int FrameSequence, int value); |
| 47 | int JZsdk_Uart_SendDeal_CheckStatus_GimbalLinkage(int Uartport,int FrameSequence); | 47 | int JZsdk_Uart_SendDeal_CheckStatus_GimbalLinkage(int Uartport,int FrameSequence); |
| 48 | int JZsdk_Uart_SendDeal_GimbalLinkageControl(int Uartport,int FrameSequence,int value); | 48 | int JZsdk_Uart_SendDeal_GimbalLinkageControl(int Uartport,int FrameSequence,int value); |
| 49 | +int JZsdk_Uart_SendDeal_CheckStatus_GimbalAngle(int Uartport ,int FrameSequence); | ||
| 49 | 50 | ||
| 50 | 51 | ||
| 51 | int JZsdk_Uart_SendDeal_Reply_SoftVersion(int Uartport ,char majorVersion, char minorVersion, char modifyVersion, char debugVersion); | 52 | int JZsdk_Uart_SendDeal_Reply_SoftVersion(int Uartport ,char majorVersion, char minorVersion, char modifyVersion, char debugVersion); |
| @@ -11,11 +11,24 @@ | @@ -11,11 +11,24 @@ | ||
| 11 | #include "JZsdk_Uart_Recv/JZsdk_Uart_RecvDeal.h" | 11 | #include "JZsdk_Uart_Recv/JZsdk_Uart_RecvDeal.h" |
| 12 | #include "JZsdkLib.h" | 12 | #include "JZsdkLib.h" |
| 13 | 13 | ||
| 14 | +//串口参数结构体 | ||
| 15 | +typedef struct | ||
| 16 | +{ | ||
| 17 | + int UartFd; //串口识别符 | ||
| 18 | + char Message[1024]; //传递的字符串 | ||
| 19 | + int MessageLength; //字符串的长度 | ||
| 20 | + pthread_mutex_t mutex; // 互斥锁 | ||
| 21 | + pthread_cond_t cond; // 条件变量 | ||
| 22 | +}s_SerialArgs; | ||
| 23 | + | ||
| 14 | static int Uart_4G_fd; | 24 | static int Uart_4G_fd; |
| 15 | static int Uart_DEV1_fd; | 25 | static int Uart_DEV1_fd; |
| 16 | static int Uart_DEV2_fd; | 26 | static int Uart_DEV2_fd; |
| 17 | 27 | ||
| 18 | static void *UartDeal_rece(void *arg); | 28 | static void *UartDeal_rece(void *arg); |
| 29 | +static void* UartDeal_deal(void *arg); | ||
| 30 | +static int UartDeal_Recv_interface(int Uart_fd, unsigned char *getbuf, int getbufLen); | ||
| 31 | + | ||
| 19 | 32 | ||
| 20 | /********************* | 33 | /********************* |
| 21 | * | 34 | * |
| @@ -24,7 +37,7 @@ static void *UartDeal_rece(void *arg); | @@ -24,7 +37,7 @@ static void *UartDeal_rece(void *arg); | ||
| 24 | * *****************/ | 37 | * *****************/ |
| 25 | /****************************************************************** | 38 | /****************************************************************** |
| 26 | 39 | ||
| 27 | - 创建串口接收线程 | 40 | + 初始化串口接收和处理 |
| 28 | 41 | ||
| 29 | ******************************************************************/ | 42 | ******************************************************************/ |
| 30 | int JZsdk_Uart_UartDeal_Receive(int Uart_fd, int Uart_Dev_name) | 43 | int JZsdk_Uart_UartDeal_Receive(int Uart_fd, int Uart_Dev_name) |
| @@ -49,168 +62,337 @@ int JZsdk_Uart_UartDeal_Receive(int Uart_fd, int Uart_Dev_name) | @@ -49,168 +62,337 @@ int JZsdk_Uart_UartDeal_Receive(int Uart_fd, int Uart_Dev_name) | ||
| 49 | Uart_4G_fd = Uart_fd; | 62 | Uart_4G_fd = Uart_fd; |
| 50 | } | 63 | } |
| 51 | 64 | ||
| 52 | - int* uart_fd_ptr = malloc(sizeof(int)); // 动态分配内存来存储 Uart_fd 变量 | ||
| 53 | - *uart_fd_ptr = Uart_fd; | 65 | + s_SerialArgs* parameter = (s_SerialArgs*)malloc(sizeof(s_SerialArgs)); |
| 66 | + parameter->UartFd = Uart_fd; | ||
| 67 | + parameter->MessageLength = 0; | ||
| 68 | + memset(parameter->Message, 0, sizeof(parameter->Message)); | ||
| 69 | + pthread_mutex_init(¶meter->mutex, NULL); | ||
| 70 | + pthread_cond_init(¶meter->cond, NULL); | ||
| 71 | + | ||
| 72 | + // 创建串口数据接收线程 | ||
| 73 | + pthread_t receiveThread; | ||
| 74 | + pthread_t SerialDealThread; | ||
| 75 | + pthread_attr_t task_attribute1; //线程属性 | ||
| 76 | + pthread_attr_t task_attribute2; //线程属性 | ||
| 77 | + pthread_attr_setdetachstate(&task_attribute1, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
| 78 | + pthread_attr_setdetachstate(&task_attribute2, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
| 79 | + | ||
| 80 | + pthread_attr_init(&task_attribute1); | ||
| 81 | + pthread_attr_init(&task_attribute2); | ||
| 82 | + | ||
| 83 | + | ||
| 84 | + if (pthread_create(&receiveThread, &task_attribute1, UartDeal_rece, parameter) != 0) | ||
| 85 | + { | ||
| 86 | + USER_LOG_ERROR("Failed to create receive thread"); | ||
| 87 | + return 1; | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + // 创建串口数据处理线程 | ||
| 91 | + if (pthread_create(&SerialDealThread, &task_attribute2, UartDeal_deal, parameter) != 0) | ||
| 92 | + { | ||
| 93 | + USER_LOG_ERROR("Failed to create receive thread"); | ||
| 94 | + return 1; | ||
| 95 | + } | ||
| 54 | 96 | ||
| 55 | - ret = pthread_create(&Uart_rece_task,&task_attribute,UartDeal_rece,uart_fd_ptr); //串口接收线程 | ||
| 56 | - if(ret != 0) | ||
| 57 | - { | ||
| 58 | - printf("创建串口%x 接收线程失败!\n",Uart_Dev_name); | ||
| 59 | - free(uart_fd_ptr); | ||
| 60 | - } | ||
| 61 | - else{ | ||
| 62 | - printf("创建串口%x 接收线程成功!\n",Uart_Dev_name); | ||
| 63 | - } | ||
| 64 | } | 97 | } |
| 65 | - | ||
| 66 | -static int UartDeal_Recv_interface(int Uart_fd, unsigned char *getbuf, int len) | 98 | +/*** |
| 99 | + * | ||
| 100 | + * 串口接收线程 | ||
| 101 | + * | ||
| 102 | + * ***/ | ||
| 103 | +static void *UartDeal_rece(void *arg) | ||
| 67 | { | 104 | { |
| 68 | - int i = 0; | ||
| 69 | - int Frame_len = 0; | ||
| 70 | 105 | ||
| 71 | - if (Uart_fd == Uart_DEV1_fd) | ||
| 72 | - { | ||
| 73 | - USER_LOG_INFO("串口-设备1号,接受到数据len: %d", len); | ||
| 74 | - printf("getbuf: %s\n", getbuf); | ||
| 75 | - for (int i = 0; i < len; i++) | ||
| 76 | - { | ||
| 77 | - printf("%x ",getbuf[i]); | ||
| 78 | - } | ||
| 79 | - printf("\n"); | 106 | + s_SerialArgs *args = (s_SerialArgs*)arg; |
| 80 | 107 | ||
| 81 | - do | ||
| 82 | - { | ||
| 83 | - if ( (getbuf[i] == 0x5A && getbuf[i+1] == 0x5A &&getbuf[i+2] == 0x77) || (getbuf[i] == 0x5B && getbuf[i+1] == 0x5B &&getbuf[i+2] == 0x77) | ||
| 84 | - || (getbuf[i] == 0x6A && getbuf[i+1] == 0x6A &&getbuf[i+2] == 0x77) || (getbuf[i] == 0x6B && getbuf[i+1] == 0x6B &&getbuf[i+2] == 0x77)) | ||
| 85 | - { | ||
| 86 | - Frame_len = (getbuf[3] << 8) + getbuf[4]; | ||
| 87 | - JZsdk_Uart_RecvDeal_CharmDeal_Uart_DEV1(&getbuf[i], Frame_len); | ||
| 88 | - | ||
| 89 | - i = i+Frame_len; | ||
| 90 | - len = len - Frame_len; | ||
| 91 | - Frame_len = 0; | ||
| 92 | - } | ||
| 93 | - else | ||
| 94 | - { | ||
| 95 | - JZsdk_Uart_RecvDeal_CharmDeal_Uart_DEV1(&getbuf[i], len); | ||
| 96 | - len = 0; | ||
| 97 | - } | 108 | + fd_set fs_read; |
| 109 | + static int ResidualLength = 0; //未处理数据长度 | ||
| 98 | 110 | ||
| 99 | - } | ||
| 100 | - while (len >= 12); | ||
| 101 | - } | ||
| 102 | - else if (Uart_fd == Uart_DEV2_fd) | ||
| 103 | - { | ||
| 104 | - USER_LOG_INFO("串口-设备2号,接受到数据len: %d ", len); | ||
| 105 | - printf("getbuf: %s\n", getbuf); | ||
| 106 | - for (int i = 0; i < len; i++) | ||
| 107 | - { | ||
| 108 | - printf("%x ",getbuf[i]); | ||
| 109 | - } | ||
| 110 | - printf("\n"); | 111 | + int Uart_fd = args->UartFd; |
| 111 | 112 | ||
| 112 | - do | ||
| 113 | - { | ||
| 114 | - if ( (getbuf[i] == 0x5A && getbuf[i+1] == 0x5A &&getbuf[i+2] == 0x77) || (getbuf[i] == 0x5B && getbuf[i+1] == 0x5B &&getbuf[i+2] == 0x77) | ||
| 115 | - || (getbuf[i] == 0x6A && getbuf[i+1] == 0x6A &&getbuf[i+2] == 0x77) || (getbuf[i] == 0x6B && getbuf[i+1] == 0x6B &&getbuf[i+2] == 0x77)) | ||
| 116 | - { | ||
| 117 | - Frame_len = (getbuf[3] << 8) + getbuf[4]; | ||
| 118 | - JZsdk_Uart_RecvDeal_CharmDeal_Uart_DEV2(&getbuf[i], Frame_len); | ||
| 119 | - | ||
| 120 | - i = i+Frame_len; | ||
| 121 | - len = len - Frame_len; | ||
| 122 | - Frame_len = 0; | ||
| 123 | - } | ||
| 124 | - else | ||
| 125 | - { | ||
| 126 | - JZsdk_Uart_RecvDeal_CharmDeal_Uart_DEV2(&getbuf[i], len); | ||
| 127 | - len = 0; | ||
| 128 | - } | 113 | + FD_ZERO(&fs_read); |
| 114 | + FD_SET(Uart_fd, &fs_read); | ||
| 129 | 115 | ||
| 130 | - } | ||
| 131 | - while (len >= 12); | ||
| 132 | - } | ||
| 133 | - else if (Uart_fd == Uart_4G_fd) | ||
| 134 | - { | ||
| 135 | - USER_LOG_INFO("串口-设备4G,接受到数据len: %d ", len); | ||
| 136 | - printf("getbuf: %s\n", getbuf); | ||
| 137 | - for (int i = 0; i < len; i++) | ||
| 138 | - { | ||
| 139 | - printf("%x ",getbuf[i]); | ||
| 140 | - } | ||
| 141 | - printf("\n"); | 116 | + memset(args->Message,0,sizeof(args->Message)); //清空接收数组 |
| 142 | 117 | ||
| 143 | - do | ||
| 144 | - { | ||
| 145 | - if ( (getbuf[i] == 0x5A && getbuf[i+1] == 0x5A &&getbuf[i+2] == 0x77) || (getbuf[i] == 0x5B && getbuf[i+1] == 0x5B &&getbuf[i+2] == 0x77) | ||
| 146 | - || (getbuf[i] == 0x6A && getbuf[i+1] == 0x6A &&getbuf[i+2] == 0x77) || (getbuf[i] == 0x6B && getbuf[i+1] == 0x6B &&getbuf[i+2] == 0x77)) | ||
| 147 | - { | ||
| 148 | - Frame_len = (getbuf[3] << 8) + getbuf[4]; | ||
| 149 | - JZsdk_Uart_RecvDeal_CharmDeal_Uart_4G(&getbuf[i], Frame_len); | ||
| 150 | - | ||
| 151 | - i = i+Frame_len; | ||
| 152 | - len = len - Frame_len; | ||
| 153 | - Frame_len = 0; | ||
| 154 | - } | ||
| 155 | - else | ||
| 156 | - { | ||
| 157 | - JZsdk_Uart_RecvDeal_CharmDeal_Uart_4G(&getbuf[i], len); | ||
| 158 | - len = 0; | ||
| 159 | - } | 118 | + while (1) |
| 119 | + { | ||
| 160 | 120 | ||
| 161 | - } | ||
| 162 | - while (len >= 12); | ||
| 163 | - } | 121 | + //检查fs_read套节字是否有数据 |
| 122 | + select(Uart_fd+1, &fs_read, NULL, NULL, NULL); | ||
| 123 | + delayMs(3); //加多了可能导致实时播放难恢复,以及声音间隔 3ms32字节 会向上约1个3ms opus一帧80字节 | ||
| 124 | + | ||
| 125 | + if (FD_ISSET(Uart_fd, &fs_read)) | ||
| 126 | + { | ||
| 127 | + | ||
| 128 | + // 如果有数据就加锁 | ||
| 129 | + pthread_mutex_lock(&args->mutex); | ||
| 130 | + | ||
| 131 | + //1、读取串口内容 ret 接收长度 getbuf 获取的字符 | ||
| 132 | + ResidualLength = args->MessageLength; | ||
| 133 | + args->MessageLength = read(Uart_fd ,&(args->Message[args->MessageLength]), ( sizeof(args->Message) - ResidualLength) ) + ResidualLength; | ||
| 134 | + | ||
| 135 | + // 通知线程 | ||
| 136 | + pthread_cond_signal(&args->cond); | ||
| 137 | + pthread_mutex_unlock(&args->mutex); // 解锁 | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + } | ||
| 164 | } | 141 | } |
| 165 | 142 | ||
| 166 | -static void *UartDeal_rece(void *arg) | 143 | +/*** |
| 144 | + * | ||
| 145 | + * 串口处理线程 | ||
| 146 | + * | ||
| 147 | + * ***/ | ||
| 148 | +// 串口数据处理线程函数 | ||
| 149 | +static void* UartDeal_deal(void* arg) | ||
| 167 | { | 150 | { |
| 151 | + s_SerialArgs *args = (s_SerialArgs*)arg; | ||
| 168 | 152 | ||
| 169 | - unsigned char getbuf[1024]; | 153 | + static int ResidualLength = 0; //未处理数据长度 |
| 170 | 154 | ||
| 171 | - int ret = 0; | ||
| 172 | - fd_set fs_read; | ||
| 173 | - struct timeval tv_timeout; | 155 | + while (1) |
| 156 | + { | ||
| 174 | 157 | ||
| 175 | - int Uart_fd = *(int*) arg; | 158 | + // 加锁 |
| 159 | + pthread_mutex_lock(&args->mutex); | ||
| 176 | 160 | ||
| 177 | - //FD_ZERO 将指定的文件描述符集清空,在对文件描述符集合进行设置前,必须对其进行初始化 | ||
| 178 | - //如果不清空,由于在系统分配内存空间后,通常并不作清空处理,所以结果是不可知的。 | ||
| 179 | - FD_ZERO(&fs_read); | 161 | + //等候接收线程的通知 |
| 162 | + pthread_cond_wait(&args->cond, &args->mutex); | ||
| 180 | 163 | ||
| 181 | - //FD_SET 用于在文件描述符集合中增加一个新的文件描述符。 | ||
| 182 | - FD_SET(Uart_fd, &fs_read); | 164 | + while (args->MessageLength > 0) |
| 165 | + { | ||
| 166 | + | ||
| 167 | + //处理数据 | ||
| 168 | + ResidualLength = UartDeal_Recv_interface(args->UartFd, args->Message, args->MessageLength); | ||
| 169 | + | ||
| 170 | + memcpy(args->Message, &(args->Message[args->MessageLength-ResidualLength]), ResidualLength); | ||
| 171 | + memset(&(args->Message[ResidualLength]), 0, (sizeof(args->Message) - ResidualLength)); | ||
| 172 | + args->MessageLength = ResidualLength; | ||
| 183 | 173 | ||
| 184 | - //115200 / char 8 位 = 14400 个char数据 | ||
| 185 | - tv_timeout.tv_sec = 6000;//(10*20/115200+2); | ||
| 186 | - tv_timeout.tv_usec = 0; | 174 | + } |
| 187 | 175 | ||
| 188 | - //2、正常接收 | ||
| 189 | - while(1) | 176 | + pthread_mutex_unlock(&args->mutex); // 解锁 |
| 177 | + } | ||
| 178 | +} | ||
| 179 | + | ||
| 180 | +/* | ||
| 181 | + | ||
| 182 | + 数据排出函数 | ||
| 183 | + | ||
| 184 | +*/ | ||
| 185 | +static int UartDeal_Recv_Ouput(int Uart_fd, unsigned char *getbuf, int ReadLen) | ||
| 186 | +{ | ||
| 187 | + if (Uart_fd == Uart_DEV1_fd) | ||
| 190 | { | 188 | { |
| 191 | - //检查fs_read套节字是否有数据 | ||
| 192 | - select(Uart_fd+1, &fs_read, NULL, NULL, &tv_timeout); | ||
| 193 | - delayMs(10); | 189 | + JZsdk_Uart_RecvDeal_CharmDeal_Uart_DEV1(getbuf, ReadLen); |
| 190 | + } | ||
| 191 | + else if (Uart_fd == Uart_DEV2_fd) | ||
| 192 | + { | ||
| 193 | + JZsdk_Uart_RecvDeal_CharmDeal_Uart_DEV2(getbuf, ReadLen); | ||
| 194 | + } | ||
| 195 | + else if (Uart_fd == Uart_4G_fd) | ||
| 196 | + { | ||
| 197 | + JZsdk_Uart_RecvDeal_CharmDeal_Uart_4G(getbuf, ReadLen); | ||
| 198 | + } | ||
| 199 | + else | ||
| 200 | + { | ||
| 201 | + USER_LOG_ERROR("接收到的数据不是从正常串口来的"); | ||
| 202 | + return 0; | ||
| 203 | + } | ||
| 204 | +} | ||
| 194 | 205 | ||
| 195 | - //FD_ISSET 用于测试指定的文件描述符是否在该集合中。 | ||
| 196 | - //Uart_fd 是否在fsread中 | ||
| 197 | - if (FD_ISSET(Uart_fd, &fs_read)) | ||
| 198 | - { | ||
| 199 | - //1、读取串口内容 ret 接收长度 getbuf 获取的字符 | ||
| 200 | - memset(getbuf,0,sizeof(getbuf)); //清空接收数组 | ||
| 201 | - ret = read(Uart_fd,getbuf,sizeof(getbuf)); | 206 | +/* |
| 207 | + | ||
| 208 | + 处理数据接口,返回没有处理的数据长度 | ||
| 209 | + | ||
| 210 | +*/ | ||
| 211 | +static int UartDeal_Recv_interface(int Uart_fd, unsigned char *getbuf, int getbufLen) | ||
| 212 | +{ | ||
| 213 | + if (Uart_fd == Uart_DEV1_fd) | ||
| 214 | + { | ||
| 215 | + USER_LOG_INFO("串口-设备1号,接受到数据len: %d", getbufLen); | ||
| 216 | + } | ||
| 217 | + else if (Uart_fd == Uart_DEV2_fd) | ||
| 218 | + { | ||
| 219 | + USER_LOG_INFO("串口-设备2号,接受到数据len: %d ", getbufLen); | ||
| 220 | + } | ||
| 221 | + else if (Uart_fd == Uart_4G_fd) | ||
| 222 | + { | ||
| 223 | + USER_LOG_INFO("串口-设备4G,接受到数据len: %d ", getbufLen); | ||
| 224 | + } | ||
| 225 | + else | ||
| 226 | + { | ||
| 227 | + USER_LOG_ERROR("接收到的数据不是从正常串口来的"); | ||
| 228 | + return 0; | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + //是否要打印内容 | ||
| 232 | + // printf("getbuf: %s\n", getbuf); | ||
| 233 | + // for (int i = 0; i < len; i++) | ||
| 234 | + // { | ||
| 235 | + // printf("%x ",getbuf[i]); | ||
| 236 | + // } | ||
| 237 | + // printf("\n"); | ||
| 202 | 238 | ||
| 203 | - USER_LOG_INFO("RecvLen:%d\n",ret); | 239 | + int HaveReadLen = 0; //已读长度 |
| 240 | + int HaveDealLen = 0; //已处理长度 | ||
| 241 | + int FrameFlag = 0; //帧标志 | ||
| 242 | + int FrameLen = 0; | ||
| 204 | 243 | ||
| 205 | - //UartDeal_Recv_interface(Uart_fd, getbuf, ret); | 244 | + //检索出帧数据 |
| 206 | 245 | ||
| 246 | + //遍历数据找帧头,直到数据的倒数第4位,如果这里有帧,帧存在帧头3位+数据长度两位 | ||
| 247 | + for (HaveReadLen = 0; HaveReadLen < getbufLen - 4; HaveReadLen++) | ||
| 248 | + { | ||
| 249 | + //1、如果找到 5A 5B 6A 6B 判断是否是帧 | ||
| 250 | + switch (getbuf[HaveReadLen]) | ||
| 251 | + { | ||
| 252 | + case 0x5A: | ||
| 253 | + if (getbuf[HaveReadLen+1] == 0x5A || getbuf[HaveReadLen+2] == 0x77) | ||
| 254 | + { | ||
| 255 | + FrameFlag = 0x5A; | ||
| 256 | + } | ||
| 257 | + break; | ||
| 258 | + | ||
| 259 | + case 0x5B: | ||
| 260 | + if (getbuf[HaveReadLen+1] == 0x5B || getbuf[HaveReadLen+2] == 0x77) | ||
| 261 | + { | ||
| 262 | + FrameFlag = 0x5B; | ||
| 263 | + } | ||
| 264 | + break; | ||
| 265 | + | ||
| 266 | + case 0x6A: | ||
| 267 | + if (getbuf[HaveReadLen+1] == 0x6A || getbuf[HaveReadLen+2] == 0x77) | ||
| 268 | + { | ||
| 269 | + FrameFlag = 0x6A; | ||
| 270 | + } | ||
| 271 | + break; | ||
| 272 | + | ||
| 273 | + case 0x6B: | ||
| 274 | + if (getbuf[HaveReadLen+1] == 0x6B || getbuf[HaveReadLen+2] == 0x77) | ||
| 275 | + { | ||
| 276 | + FrameFlag = 0x6B; | ||
| 277 | + } | ||
| 278 | + break; | ||
| 279 | + | ||
| 280 | + default: | ||
| 281 | + break; | ||
| 207 | } | 282 | } |
| 283 | + | ||
| 284 | + //2、如果没有帧头,直接continue | ||
| 285 | + if (FrameFlag == 0) | ||
| 286 | + { | ||
| 287 | + continue; | ||
| 288 | + } | ||
| 289 | + | ||
| 290 | + //3、如果有帧头,则先判断前面有没有多余的数据残留,并将其排出到处理线程 | ||
| 291 | + if ( (HaveReadLen - HaveDealLen) > 0) | ||
| 292 | + { | ||
| 293 | + UartDeal_Recv_Ouput(Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen)); | ||
| 294 | + HaveDealLen = HaveReadLen; | ||
| 295 | + } | ||
| 296 | + | ||
| 297 | + //4、检查帧长度是否超过数组剩余内容 | ||
| 298 | + FrameLen = (getbuf[3] << 8) + getbuf[4]; | ||
| 299 | + if (FrameLen > (getbufLen - HaveReadLen)) | ||
| 300 | + { | ||
| 301 | + //直接跳出for循环 | ||
| 302 | + break; | ||
| 303 | + } | ||
| 304 | + | ||
| 305 | + //5、以上检查都没问题,则正常输出帧 | ||
| 306 | + UartDeal_Recv_Ouput(Uart_fd, &getbuf[HaveReadLen], FrameLen); | ||
| 307 | + HaveReadLen = HaveReadLen + FrameLen; | ||
| 308 | + FrameLen = 0; | ||
| 309 | + HaveDealLen = HaveReadLen; | ||
| 310 | + FrameFlag = 0; | ||
| 208 | } | 311 | } |
| 209 | 312 | ||
| 210 | - free(arg); | 313 | + //如果没有数据残留了 |
| 314 | + if (HaveDealLen >= getbufLen) | ||
| 315 | + { | ||
| 316 | + //printf("HaveReadLen:%d HaveDealLen%d getbufLen:%d\n",HaveReadLen,HaveDealLen,getbufLen); | ||
| 317 | + return 0; | ||
| 318 | + } | ||
| 319 | + | ||
| 320 | + //如果是有帧头的情况跳出的,说明是帧被切了,需要返回帧长度给接收线程 | ||
| 321 | + if (FrameFlag != 0) | ||
| 322 | + { | ||
| 323 | + //1、判断帧的长度会不会不合理,帧的长度最大为文件名帧,其长度为9+2+128 | ||
| 324 | + if (FrameLen > (9+2+128) ) | ||
| 325 | + { | ||
| 326 | + //将其排出不返回 | ||
| 327 | + UartDeal_Recv_Ouput(Uart_fd, &getbuf[HaveReadLen], (getbufLen-HaveReadLen)); | ||
| 328 | + HaveDealLen = HaveReadLen; | ||
| 329 | + return 0; | ||
| 330 | + } | ||
| 331 | + | ||
| 332 | + //2、如果合理,则返回剩余长度 | ||
| 333 | + return (getbufLen-HaveDealLen); | ||
| 334 | + } | ||
| 335 | + | ||
| 336 | + //如果是没有帧头的情况下跳出的 | ||
| 337 | + //1、先检查 未经检查最后 最后4 3位 | ||
| 338 | + for ( ; HaveReadLen < getbufLen - 2; HaveReadLen++) | ||
| 339 | + { | ||
| 340 | + if ( (getbuf[HaveReadLen] == 0x5A && getbuf[HaveReadLen+1] == 0x5A &&getbuf[HaveReadLen+2] == 0x77) || | ||
| 341 | + (getbuf[HaveReadLen] == 0x5B && getbuf[HaveReadLen+1] == 0x5B &&getbuf[HaveReadLen+2] == 0x77) || | ||
| 342 | + (getbuf[HaveReadLen] == 0x6A && getbuf[HaveReadLen+1] == 0x6A &&getbuf[HaveReadLen+2] == 0x77) || | ||
| 343 | + (getbuf[HaveReadLen] == 0x6B && getbuf[HaveReadLen+1] == 0x6B &&getbuf[HaveReadLen+2] == 0x77) ) | ||
| 344 | + { | ||
| 345 | + if ( (HaveReadLen - HaveDealLen) > 0) | ||
| 346 | + { | ||
| 347 | + UartDeal_Recv_Ouput(Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen)); | ||
| 348 | + HaveDealLen = HaveReadLen; | ||
| 349 | + } | ||
| 350 | + | ||
| 351 | + return (getbufLen-HaveDealLen); | ||
| 352 | + } | ||
| 353 | + } | ||
| 211 | 354 | ||
| 355 | + //2、检查最后两位 | ||
| 356 | + if ( (getbuf[HaveReadLen] == 0x5A && getbuf[HaveReadLen+1] == 0x5A ) || | ||
| 357 | + (getbuf[HaveReadLen] == 0x5B && getbuf[HaveReadLen+1] == 0x5B ) || | ||
| 358 | + (getbuf[HaveReadLen] == 0x6A && getbuf[HaveReadLen+1] == 0x6A ) || | ||
| 359 | + (getbuf[HaveReadLen] == 0x6B && getbuf[HaveReadLen+1] == 0x6B ) ) | ||
| 360 | + { | ||
| 361 | + if ( (HaveReadLen - HaveDealLen) > 0) | ||
| 362 | + { | ||
| 363 | + UartDeal_Recv_Ouput(Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen)); | ||
| 364 | + HaveDealLen = HaveReadLen; | ||
| 365 | + } | ||
| 366 | + | ||
| 367 | + return (getbufLen-HaveDealLen); | ||
| 368 | + } | ||
| 369 | + HaveReadLen++; | ||
| 370 | + | ||
| 371 | + //1、检查最后一位 | ||
| 372 | + if ( getbuf[HaveReadLen] == 0x5A || | ||
| 373 | + getbuf[HaveReadLen] == 0x5B || | ||
| 374 | + getbuf[HaveReadLen] == 0x6A || | ||
| 375 | + getbuf[HaveReadLen] == 0x6B ) | ||
| 376 | + { | ||
| 377 | + if ( (HaveReadLen - HaveDealLen) > 0) | ||
| 378 | + { | ||
| 379 | + UartDeal_Recv_Ouput(Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen)); | ||
| 380 | + HaveDealLen = HaveReadLen; | ||
| 381 | + } | ||
| 382 | + | ||
| 383 | + return (getbufLen-HaveDealLen); | ||
| 384 | + } | ||
| 385 | + HaveReadLen++; | ||
| 386 | + | ||
| 387 | + //都检查完了,还是没有帧头在里面, 将剩余的所有数据排出 | ||
| 388 | + UartDeal_Recv_Ouput(Uart_fd, &getbuf[HaveDealLen], (HaveReadLen - HaveDealLen)); | ||
| 389 | + | ||
| 390 | + //printf("HaveReadLen:%d HaveDealLen%d getbufLen:%d\n",HaveReadLen,HaveDealLen,getbufLen); | ||
| 391 | + | ||
| 392 | + return 0; | ||
| 212 | } | 393 | } |
| 213 | 394 | ||
| 395 | + | ||
| 214 | /**************** | 396 | /**************** |
| 215 | * | 397 | * |
| 216 | * | 398 | * |
| @@ -221,16 +403,19 @@ int JZsdk_Uart_UartSend(int UartPort ,unsigned char *send, int num) | @@ -221,16 +403,19 @@ int JZsdk_Uart_UartSend(int UartPort ,unsigned char *send, int num) | ||
| 221 | { | 403 | { |
| 222 | if (UartPort == UART_4G) | 404 | if (UartPort == UART_4G) |
| 223 | { | 405 | { |
| 406 | + printf("向4G设备发送\n"); | ||
| 224 | write(Uart_4G_fd,send, num); | 407 | write(Uart_4G_fd,send, num); |
| 225 | return 0; | 408 | return 0; |
| 226 | } | 409 | } |
| 227 | else if (UartPort == UART_DEV_1) | 410 | else if (UartPort == UART_DEV_1) |
| 228 | - { | 411 | + { |
| 412 | + printf("向串口1号设备发送\n"); | ||
| 229 | write(Uart_DEV1_fd,send, num); | 413 | write(Uart_DEV1_fd,send, num); |
| 230 | return 0; | 414 | return 0; |
| 231 | } | 415 | } |
| 232 | else if (UartPort == UART_DEV_2) | 416 | else if (UartPort == UART_DEV_2) |
| 233 | { | 417 | { |
| 418 | + printf("向串口2号设备发送\n"); | ||
| 234 | write(Uart_DEV2_fd,send, num); | 419 | write(Uart_DEV2_fd,send, num); |
| 235 | return 0; | 420 | return 0; |
| 236 | } | 421 | } |
| @@ -50,7 +50,6 @@ int UartConnection_UartEnabled(char *UartDev, int BitRate) | @@ -50,7 +50,6 @@ int UartConnection_UartEnabled(char *UartDev, int BitRate) | ||
| 50 | //3、设置比特率 | 50 | //3、设置比特率 |
| 51 | switch (BitRate) | 51 | switch (BitRate) |
| 52 | { | 52 | { |
| 53 | - case 115200: | ||
| 54 | case 115200: | 53 | case 115200: |
| 55 | cfsetispeed(&options, B115200); | 54 | cfsetispeed(&options, B115200); |
| 56 | cfsetospeed(&options, B115200); | 55 | cfsetospeed(&options, B115200); |
| @@ -67,29 +67,7 @@ static void *Gimbal_H3_H10_Motor_control(void *arg) | @@ -67,29 +67,7 @@ static void *Gimbal_H3_H10_Motor_control(void *arg) | ||
| 67 | angle = angle + H3_H10_motor_precise_adjustment_pitch; | 67 | angle = angle + H3_H10_motor_precise_adjustment_pitch; |
| 68 | 68 | ||
| 69 | //每43.5对饮20度 | 69 | //每43.5对饮20度 |
| 70 | -//0~-60 | ||
| 71 | - int num=200; | ||
| 72 | - if(angle>=0) | ||
| 73 | - { | ||
| 74 | - angle=0; | ||
| 75 | - } | ||
| 76 | - else if(angle<=-600) | ||
| 77 | - { | ||
| 78 | - angle=-600; | ||
| 79 | - } | ||
| 80 | -//0~-80 | ||
| 81 | - // int num=200; | ||
| 82 | - // if(angle>=0) | ||
| 83 | - // { | ||
| 84 | - // angle=0; | ||
| 85 | - // } | ||
| 86 | - // else if(angle<=-800) | ||
| 87 | - // { | ||
| 88 | - // angle=-800; | ||
| 89 | - // } | ||
| 90 | - | ||
| 91 | - //num = 200 -angle*130/900; | ||
| 92 | - num = 200 -angle*195/900; | 70 | + int num = 200 -angle*195/900; |
| 93 | 71 | ||
| 94 | pwmWrite(MOTOR,num); | 72 | pwmWrite(MOTOR,num); |
| 95 | 73 |
| @@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
| 15 | 15 | ||
| 16 | //角度记录 | 16 | //角度记录 |
| 17 | static int Gimbal_PitchAngle = 0; | 17 | static int Gimbal_PitchAngle = 0; |
| 18 | +static int Gimbal_YawAngle = 0; | ||
| 18 | 19 | ||
| 19 | static int Gimbal_PitchFineTuning = 0; | 20 | static int Gimbal_PitchFineTuning = 0; |
| 20 | static int Gimbal_YawFineTuning = 0; | 21 | static int Gimbal_YawFineTuning = 0; |
| @@ -358,6 +359,35 @@ T_JZsdkReturnCode Gimbal_Obtain_GimbalLinkage(int GimbalLinkage) | @@ -358,6 +359,35 @@ T_JZsdkReturnCode Gimbal_Obtain_GimbalLinkage(int GimbalLinkage) | ||
| 358 | } | 359 | } |
| 359 | } | 360 | } |
| 360 | 361 | ||
| 362 | + | ||
| 363 | +//获取探警灯状态 | ||
| 364 | +T_JZsdkReturnCode Gimbal_Get_Angle(int *PitchAngle, int *YawAngle) | ||
| 365 | +{ | ||
| 366 | + *PitchAngle = Gimbal_PitchAngle; | ||
| 367 | + *YawAngle = Gimbal_YawAngle; | ||
| 368 | + | ||
| 369 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 370 | +} | ||
| 371 | + | ||
| 372 | +/********* | ||
| 373 | + * | ||
| 374 | + * 查询云台角度 | ||
| 375 | + * | ||
| 376 | +**********/ | ||
| 377 | +T_JZsdkReturnCode Gimbal_CheckStatus_Angle(int *PitchAngle, int *YawAngle) | ||
| 378 | +{ | ||
| 379 | + //1、刷新查询角度 | ||
| 380 | + if (DEVICE_VERSION == JZ_H1T) | ||
| 381 | + { | ||
| 382 | + Gimbal_V3S_H1T_CheckStatus_GimbalAngle(); | ||
| 383 | + } | ||
| 384 | + | ||
| 385 | + //2、获取一次本地云台角度 | ||
| 386 | + Gimbal_Get_Angle(PitchAngle, YawAngle); | ||
| 387 | + | ||
| 388 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 389 | +} | ||
| 390 | + | ||
| 361 | int Gimbal_Get_PitchAngle() | 391 | int Gimbal_Get_PitchAngle() |
| 362 | { | 392 | { |
| 363 | return Gimbal_PitchAngle; | 393 | return Gimbal_PitchAngle; |
| @@ -36,6 +36,7 @@ T_JZsdkReturnCode Gimbal_Get_PitchFineTuning(); | @@ -36,6 +36,7 @@ T_JZsdkReturnCode Gimbal_Get_PitchFineTuning(); | ||
| 36 | T_JZsdkReturnCode Gimbal_Set_GimbalLinkageControl(int value); | 36 | T_JZsdkReturnCode Gimbal_Set_GimbalLinkageControl(int value); |
| 37 | T_JZsdkReturnCode Gimbal_CheckStatus_GimbalLinkage(int *value); | 37 | T_JZsdkReturnCode Gimbal_CheckStatus_GimbalLinkage(int *value); |
| 38 | T_JZsdkReturnCode Gimbal_Obtain_GimbalLinkage(int GimbalLinkage); | 38 | T_JZsdkReturnCode Gimbal_Obtain_GimbalLinkage(int GimbalLinkage); |
| 39 | +T_JZsdkReturnCode Gimbal_CheckStatus_Angle(int *PitchAngle, int *YawAngle); | ||
| 39 | 40 | ||
| 40 | #ifdef __cplusplus | 41 | #ifdef __cplusplus |
| 41 | } | 42 | } |
| @@ -117,4 +117,10 @@ int Gimbal_V3S_H1T_Set_GimbalLinkageControl(int value) | @@ -117,4 +117,10 @@ int Gimbal_V3S_H1T_Set_GimbalLinkageControl(int value) | ||
| 117 | int Gimbal_V3S_H1T_CheckStatus_GimbalLinkage() | 117 | int Gimbal_V3S_H1T_CheckStatus_GimbalLinkage() |
| 118 | { | 118 | { |
| 119 | JZsdk_Uart_Send_CheckStatus_GimbalLinkage(UART_DEV_1, 0); | 119 | JZsdk_Uart_Send_CheckStatus_GimbalLinkage(UART_DEV_1, 0); |
| 120 | +} | ||
| 121 | + | ||
| 122 | +//查询云台值 | ||
| 123 | +int Gimbal_V3S_H1T_CheckStatus_GimbalAngle() | ||
| 124 | +{ | ||
| 125 | + JZsdk_Uart_Send_CheckStatus_GimbalAngle(UART_DEV_1, 0); | ||
| 120 | } | 126 | } |
| @@ -28,6 +28,7 @@ int Gimbal_V3S_H1T_set_PitchFineTuning(int PitchFineTuning); | @@ -28,6 +28,7 @@ int Gimbal_V3S_H1T_set_PitchFineTuning(int PitchFineTuning); | ||
| 28 | int Gimbal_V3S_H1T_CheckStatus_GimbalFineTuning(); | 28 | int Gimbal_V3S_H1T_CheckStatus_GimbalFineTuning(); |
| 29 | int Gimbal_V3S_H1T_Set_GimbalLinkageControl(int value); | 29 | int Gimbal_V3S_H1T_Set_GimbalLinkageControl(int value); |
| 30 | int Gimbal_V3S_H1T_CheckStatus_GimbalLinkage(); | 30 | int Gimbal_V3S_H1T_CheckStatus_GimbalLinkage(); |
| 31 | +int Gimbal_V3S_H1T_CheckStatus_GimbalAngle(); | ||
| 31 | 32 | ||
| 32 | 33 | ||
| 33 | 34 |
| @@ -32,9 +32,9 @@ T_JZsdkReturnCode Lighting_CheckStatus_SearchLightLightAttribute(int *ValueFrequ | @@ -32,9 +32,9 @@ T_JZsdkReturnCode Lighting_CheckStatus_SearchLightLightAttribute(int *ValueFrequ | ||
| 32 | { | 32 | { |
| 33 | SearchLight_V3S_H1T_CheckStatus_LightAttribute(); | 33 | SearchLight_V3S_H1T_CheckStatus_LightAttribute(); |
| 34 | } | 34 | } |
| 35 | - | ||
| 36 | - | ||
| 37 | 35 | ||
| 36 | + | ||
| 37 | + | ||
| 38 | //2、获取一次本地灯光属性 | 38 | //2、获取一次本地灯光属性 |
| 39 | Lighting_Get_SearchLightMode(ValueMode); | 39 | Lighting_Get_SearchLightMode(ValueMode); |
| 40 | Lighting_Get_SearchLightLumen(ValueLeftLumen, ValueRightLumen); | 40 | Lighting_Get_SearchLightLumen(ValueLeftLumen, ValueRightLumen); |
| @@ -121,7 +121,7 @@ T_JZsdkReturnCode Lighting_Set_SearchLightLumen(int LeftLumen, int RightLumen) | @@ -121,7 +121,7 @@ T_JZsdkReturnCode Lighting_Set_SearchLightLumen(int LeftLumen, int RightLumen) | ||
| 121 | //收到并修改探照灯的灯光亮度(中继修改) | 121 | //收到并修改探照灯的灯光亮度(中继修改) |
| 122 | T_JZsdkReturnCode Lighting_Obtain_SearchLightLumen(int LeftLumen, int RightLumen) | 122 | T_JZsdkReturnCode Lighting_Obtain_SearchLightLumen(int LeftLumen, int RightLumen) |
| 123 | { | 123 | { |
| 124 | - printf("%x探照灯灯光亮度改变 左灯%d 右灯%d\n",DEVICE_VERSION, LeftLumen, RightLumen); | 124 | + printf("接收到%x探照灯灯光亮度 左灯%d 右灯%d\n",DEVICE_VERSION, LeftLumen, RightLumen); |
| 125 | 125 | ||
| 126 | SearchLight_RightLumen = RightLumen; | 126 | SearchLight_RightLumen = RightLumen; |
| 127 | SearchLight_LeftLumen = LeftLumen; | 127 | SearchLight_LeftLumen = LeftLumen; |
| @@ -314,7 +314,7 @@ T_JZsdkReturnCode Lighting_Set_WarningLight_Color(int color1, int color2) | @@ -314,7 +314,7 @@ T_JZsdkReturnCode Lighting_Set_WarningLight_Color(int color1, int color2) | ||
| 314 | //收到并修改警灯颜色 | 314 | //收到并修改警灯颜色 |
| 315 | T_JZsdkReturnCode Lighting_Obtain_WarningLight_Color(int color1, int color2) | 315 | T_JZsdkReturnCode Lighting_Obtain_WarningLight_Color(int color1, int color2) |
| 316 | { | 316 | { |
| 317 | - printf("%x警灯颜色改变 颜色1%d 颜色2%d\n",DEVICE_VERSION, color1 ,color2); | 317 | + printf("%x警灯颜色改变 颜色1:%d 颜色2:%d\n",DEVICE_VERSION, color1 ,color2); |
| 318 | 318 | ||
| 319 | WarningLight_Color1 = color1; | 319 | WarningLight_Color1 = color1; |
| 320 | WarningLight_Color2 = color2; | 320 | WarningLight_Color2 = color2; |
| @@ -54,9 +54,11 @@ int AudioFile_SaveAudioFileTrans(char *SaveData, int size) | @@ -54,9 +54,11 @@ int AudioFile_SaveAudioFileTrans(char *SaveData, int size) | ||
| 54 | { | 54 | { |
| 55 | printf("写入audio文件失败 %d\n", writelen); | 55 | printf("写入audio文件失败 %d\n", writelen); |
| 56 | } | 56 | } |
| 57 | + | ||
| 58 | + fflush(g_AudioFile_SaveAudioFile_NameFp); | ||
| 57 | } | 59 | } |
| 58 | 60 | ||
| 59 | - g_AudioFile_SaveAudioFile_len = g_AudioFile_SaveAudioFile_len +size; | 61 | + g_AudioFile_SaveAudioFile_len = g_AudioFile_SaveAudioFile_len +writelen; |
| 60 | } | 62 | } |
| 61 | //传输结束 | 63 | //传输结束 |
| 62 | int AudioFile_SaveAudioFileStop() | 64 | int AudioFile_SaveAudioFileStop() |
| @@ -69,6 +71,7 @@ int AudioFile_SaveAudioFileStop() | @@ -69,6 +71,7 @@ int AudioFile_SaveAudioFileStop() | ||
| 69 | } | 71 | } |
| 70 | 72 | ||
| 71 | //1、关闭存储的文件 | 73 | //1、关闭存储的文件 |
| 74 | + fflush(g_AudioFile_SaveAudioFile_NameFp); | ||
| 72 | fclose(g_AudioFile_SaveAudioFile_NameFp); | 75 | fclose(g_AudioFile_SaveAudioFile_NameFp); |
| 73 | g_AudioFile_SaveAudioFile_len = 0; //置零长度 | 76 | g_AudioFile_SaveAudioFile_len = 0; //置零长度 |
| 74 | 77 |
| @@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
| 3 | 3 | ||
| 4 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 4 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
| 5 | 5 | ||
| 6 | -#include "TTS/tts_sample.h" | 6 | +#include "TTS/cn_tts/cn_tts.h" |
| 7 | #include "Music/Megaphone_Music.h" | 7 | #include "Music/Megaphone_Music.h" |
| 8 | #include "TTS/Megaphone_TTS.h" | 8 | #include "TTS/Megaphone_TTS.h" |
| 9 | 9 | ||
| @@ -33,15 +33,28 @@ | @@ -33,15 +33,28 @@ | ||
| 33 | * ****************/ | 33 | * ****************/ |
| 34 | int Megaphone_Init() | 34 | int Megaphone_Init() |
| 35 | { | 35 | { |
| 36 | - //讯飞初始化 | ||
| 37 | - login_tts(); | 36 | + //TTS初始化 |
| 37 | + TTS_Init(); | ||
| 38 | 38 | ||
| 39 | //音乐功能初始化(滤波与调节音量) | 39 | //音乐功能初始化(滤波与调节音量) |
| 40 | music_init(); | 40 | music_init(); |
| 41 | 41 | ||
| 42 | + | ||
| 43 | +#if FIRMWARE_ORIGIN == DOMESTIC_VERSION //国内版才有方言 | ||
| 44 | + | ||
| 42 | //播放喊话器启动中 | 45 | //播放喊话器启动中 |
| 43 | Megaphone_TTS_Play(strlen("喊话器直连模式启动中"),"喊话器直连模式启动中", 0); | 46 | Megaphone_TTS_Play(strlen("喊话器直连模式启动中"),"喊话器直连模式启动中", 0); |
| 44 | 47 | ||
| 48 | +#elif FIRMWARE_ORIGIN == OVERSEAS_VERSION //海外版才有其他国家的语音 | ||
| 49 | + | ||
| 50 | + //设置语音为英文 | ||
| 51 | + Megaphone_TTS_SetTone(0x11); | ||
| 52 | + | ||
| 53 | + //播放喊话器启动中 | ||
| 54 | + Megaphone_TTS_Play(strlen("The direct connection mode of the speaker is being activated"),"The direct connection mode of the speaker is being activated", 0); | ||
| 55 | + | ||
| 56 | +#endif | ||
| 57 | + | ||
| 45 | printf("喊话器初始化完毕\n"); | 58 | printf("喊话器初始化完毕\n"); |
| 46 | } | 59 | } |
| 47 | 60 |
| @@ -41,7 +41,9 @@ | @@ -41,7 +41,9 @@ | ||
| 41 | #define MAX_TTS_VOLUME 84 | 41 | #define MAX_TTS_VOLUME 84 |
| 42 | #elif DEVICE_VERSION == JZ_H10 | 42 | #elif DEVICE_VERSION == JZ_H10 |
| 43 | #define MAX_VOLUME (65) | 43 | #define MAX_VOLUME (65) |
| 44 | - #define MAX_TTS_VOLUME (70) | 44 | + #define MAX_TTS_VOLUME (70) //115 |
| 45 | + //#define MAX_VOLUME (80) | ||
| 46 | + //#define MAX_TTS_VOLUME (86) //119 | ||
| 45 | //#define MAX_VOLUME (95) | 47 | //#define MAX_VOLUME (95) |
| 46 | //#define MAX_TTS_VOLUME (95) | 48 | //#define MAX_TTS_VOLUME (95) |
| 47 | #elif DEVICE_VERSION == JZ_H10T | 49 | #elif DEVICE_VERSION == JZ_H10T |
| @@ -243,7 +245,7 @@ int Music_SendFrame_CheckMusicPlayStatus() | @@ -243,7 +245,7 @@ int Music_SendFrame_CheckMusicPlayStatus() | ||
| 243 | //向音频库发送播放音乐 | 245 | //向音频库发送播放音乐 |
| 244 | int Music_SendFrame_PlayMusic(char *music_name,int datasize)//播放指定音乐,music_name文件名 | 246 | int Music_SendFrame_PlayMusic(char *music_name,int datasize)//播放指定音乐,music_name文件名 |
| 245 | { | 247 | { |
| 246 | - uint8_t playdata[128]={0x5a,0x5a,0x77,0x00,0x00,0x01,0x00,0x52,0x02}; | 248 | + uint8_t playdata[128]={0x5a,0x5a,0x77,0x00,0x00,0x01,0x00,0x52,0x03}; |
| 247 | memcpy(&playdata[9],music_name,datasize); | 249 | memcpy(&playdata[9],music_name,datasize); |
| 248 | playdata[4]=(uint8_t)(11+datasize);//补全长度位 | 250 | playdata[4]=(uint8_t)(11+datasize);//补全长度位 |
| 249 | 251 | ||
| @@ -257,6 +259,15 @@ int Music_SendFrame_PlayMusic(char *music_name,int datasize)//播放指定音乐 | @@ -257,6 +259,15 @@ int Music_SendFrame_PlayMusic(char *music_name,int datasize)//播放指定音乐 | ||
| 257 | } | 259 | } |
| 258 | } | 260 | } |
| 259 | 261 | ||
| 262 | + //如果没有找到,判断是否是海外版的tts内容 | ||
| 263 | + int result = strcmp(music_name, "IntlTTS.wav"); | ||
| 264 | + if (result == 0) | ||
| 265 | + { | ||
| 266 | + printf("播放海外tts\n"); | ||
| 267 | + sendFrame(playdata,9+datasize); | ||
| 268 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 269 | + } | ||
| 270 | + | ||
| 260 | printf("播放错误%s,歌曲名无法在列表中找到\n",music_name); | 271 | printf("播放错误%s,歌曲名无法在列表中找到\n",music_name); |
| 261 | return JZ_ERRORCODE_MUSIC_NOT_FOUND_IN_LIST; | 272 | return JZ_ERRORCODE_MUSIC_NOT_FOUND_IN_LIST; |
| 262 | } | 273 | } |
Module/Megaphone/Music/RealTimeMP2/10.c
已删除
100644 → 0
| 1 | -// #include <stdio.h> | ||
| 2 | -// #include <pthread.h> | ||
| 3 | -// #include <errno.h> | ||
| 4 | -// #include <string.h> | ||
| 5 | -// #include <stdlib.h> | ||
| 6 | - | ||
| 7 | - | ||
| 8 | -// #include "JZsdkLib.h" | ||
| 9 | -// #include "Megaphone_InputAndOutput.h" | ||
| 10 | -// #include "../Megaphone_Music.h" | ||
| 11 | - | ||
| 12 | -// static int ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 13 | - | ||
| 14 | -// //解码播放部分 | ||
| 15 | -// static unsigned char Music_RealTimeMP2_PlayData_Loop[ (256 + 1) ][128];//解码缓存池 | ||
| 16 | -// static int Music_RealTimeMP2_PlayData_LoopHead = 0; //池数头 | ||
| 17 | -// static int Music_RealTimeMP2_PlayData_LoopEnd = 0; //池数尾 | ||
| 18 | -// static int Music_RealTimeMP2__PlayData_LoopReadFlag=0;//读取标志位0为停止,1为开始 | ||
| 19 | - | ||
| 20 | -// static int Music_RealTimeMP2_Play_init(); | ||
| 21 | -// static void *Music_RealTimeMP2_LoopPlay(void *arg); | ||
| 22 | -// static int Music_RealTimeMP2_ClearLoop(); | ||
| 23 | -// static void Music_RealTimeMP2_PlayLoop_HeadReset(); | ||
| 24 | - | ||
| 25 | -// //写入数据部分 | ||
| 26 | -// static unsigned char Music_RealTimeMP2_WriteData_Loop[(255 + 1)][128]; //实时mp2缓冲输入池 | ||
| 27 | -// static int Music_RealTimeMP2_WriteData_LoopHead = 0; //池数头 | ||
| 28 | -// static int Music_RealTimeMP2_WriteData_LoopEnd = 0; //池数尾 | ||
| 29 | -// static int Music_RealTimeMP2_WriteData_ResidueLenth; // 写入缓存池池子残余物长度 | ||
| 30 | -// static int Music_RealTimeMP2_WriteFlag=0;//读取标志位0为停止,1为开始 | ||
| 31 | - | ||
| 32 | -// pthread_mutex_t RealTimeMP2_WriteDataLock = PTHREAD_MUTEX_INITIALIZER; | ||
| 33 | -// pthread_cond_t RealTimeMP2_WriteCond = PTHREAD_COND_INITIALIZER; | ||
| 34 | - | ||
| 35 | -// static void *Music_RealTimeMP2_WriteData_Task(void *arg); | ||
| 36 | -// static int Music_RealTimeMP2_WriteDataClear(); | ||
| 37 | -// static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length); | ||
| 38 | -// static void Music_RealTimeMP2_WriteDataHeadReset(); | ||
| 39 | - | ||
| 40 | - | ||
| 41 | -// static int Music_RealTimeMP2_WriteData_init(); | ||
| 42 | - | ||
| 43 | - | ||
| 44 | - | ||
| 45 | -// T_JZsdkReturnCode Music_RealTimeMP2_start() | ||
| 46 | -// { | ||
| 47 | -// //1、开启实时mp2模式 | ||
| 48 | -// ReadTimeMP2_StatusFlag = JZ_FLAGCODE_ON; | ||
| 49 | - | ||
| 50 | -// //2、创建输入缓冲线程 | ||
| 51 | -// Music_RealTimeMP2_WriteData_init(); | ||
| 52 | - | ||
| 53 | -// //3、创建播放线程 | ||
| 54 | -// //Music_RealTimeMP2_Play_init(); | ||
| 55 | - | ||
| 56 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 57 | -// } | ||
| 58 | - | ||
| 59 | -// T_JZsdkReturnCode Music_RealTimeMP2_trans(unsigned char *getdata, int len) | ||
| 60 | -// { | ||
| 61 | - | ||
| 62 | -// Music_RealTimeMP2_WriteDataToLoop(getdata, len); | ||
| 63 | - | ||
| 64 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 65 | -// } | ||
| 66 | - | ||
| 67 | -// T_JZsdkReturnCode Music_RealTimeMP2_stop() | ||
| 68 | -// { | ||
| 69 | -// ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 70 | - | ||
| 71 | -// Music_RealTimeMP2__PlayData_LoopReadFlag = JZ_FLAGCODE_OFF; | ||
| 72 | - | ||
| 73 | -// Music_RealTimeMP2_WriteFlag = JZ_FLAGCODE_OFF; | ||
| 74 | - | ||
| 75 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 76 | -// } | ||
| 77 | - | ||
| 78 | - | ||
| 79 | -// /************************************************************************************************************************************************ | ||
| 80 | -// * | ||
| 81 | -// * 解码播放部分 | ||
| 82 | -// * | ||
| 83 | -// * | ||
| 84 | -// *************************************************************************************************************************************************/ | ||
| 85 | - | ||
| 86 | - | ||
| 87 | -// //解码opus并播放 | ||
| 88 | -// static int Music_RealTimeMP2_PlayData(unsigned char *data,int len) | ||
| 89 | -// { | ||
| 90 | -// unsigned char playFile[len + 9 + 2]; | ||
| 91 | - | ||
| 92 | -// printf("播放开始\n"); | ||
| 93 | - | ||
| 94 | - | ||
| 95 | -// //清空 | ||
| 96 | -// memset(playFile, 0, (len + 9 + 2)); | ||
| 97 | - | ||
| 98 | -// //帧头 | ||
| 99 | -// playFile[0] = 0x5a; | ||
| 100 | -// playFile[1] = 0x5a; | ||
| 101 | -// playFile[2] = 0x77; | ||
| 102 | -// playFile[7] = 0x51; | ||
| 103 | -// playFile[8] = 0x04; | ||
| 104 | - | ||
| 105 | -// //帧数据 | ||
| 106 | -// memcpy(&playFile[9],data,len); | ||
| 107 | -// len = len + 9 + 2; | ||
| 108 | - | ||
| 109 | -// //帧尾 | ||
| 110 | -// playFile[len - 1] = 0x00; | ||
| 111 | -// playFile[len] = 0x00; | ||
| 112 | - | ||
| 113 | -// Music_SendFrame_FramePlay(playFile,len); | ||
| 114 | - | ||
| 115 | -// printf("播放结束\n"); | ||
| 116 | - | ||
| 117 | -// return 0; | ||
| 118 | -// } | ||
| 119 | - | ||
| 120 | - | ||
| 121 | - | ||
| 122 | -// /************************************************************************************************************************************************ | ||
| 123 | -// * | ||
| 124 | -// * 写入缓冲池部分 | ||
| 125 | -// * | ||
| 126 | -// * | ||
| 127 | -// *************************************************************************************************************************************************/ | ||
| 128 | -// //写入数据部分初始化 | ||
| 129 | -// static int Music_RealTimeMP2_WriteData_init() | ||
| 130 | -// { | ||
| 131 | - | ||
| 132 | -// //清空写入数据池 | ||
| 133 | -// Music_RealTimeMP2_WriteDataClear(); | ||
| 134 | - | ||
| 135 | -// pthread_t WriteDataTask; | ||
| 136 | -// pthread_attr_t task_attribute; //线程属性 | ||
| 137 | -// pthread_attr_init(&task_attribute); //初始化线程属性 | ||
| 138 | -// pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
| 139 | -// int opus_Protection = pthread_create(&WriteDataTask,&task_attribute,Music_RealTimeMP2_WriteData_Task,NULL); //线程 | ||
| 140 | -// if(opus_Protection != 0) | ||
| 141 | -// { | ||
| 142 | -// printf("创建输入缓冲池线程线程失败!\n"); | ||
| 143 | -// ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 144 | -// return -2; | ||
| 145 | -// } | ||
| 146 | -// } | ||
| 147 | - | ||
| 148 | -// //输入缓冲池任务 | ||
| 149 | -// static void *Music_RealTimeMP2_WriteData_Task(void *arg) | ||
| 150 | -// { | ||
| 151 | - | ||
| 152 | -// int ret; | ||
| 153 | -// printf("MP2实施喊话,输入数据缓冲线程建立\n"); | ||
| 154 | -// Music_RealTimeMP2_WriteFlag = JZ_FLAGCODE_ON; | ||
| 155 | - | ||
| 156 | -// while(Music_RealTimeMP2_WriteFlag == JZ_FLAGCODE_ON) | ||
| 157 | -// { | ||
| 158 | -// pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 159 | - | ||
| 160 | -// // 等待写入数据 | ||
| 161 | -// while (Music_RealTimeMP2_WriteData_LoopHead == Music_RealTimeMP2_WriteData_LoopEnd) | ||
| 162 | -// { | ||
| 163 | -// pthread_cond_wait(&RealTimeMP2_WriteCond, &RealTimeMP2_WriteDataLock); | ||
| 164 | -// } | ||
| 165 | - | ||
| 166 | -// if(Music_RealTimeMP2_WriteData_LoopHead != Music_RealTimeMP2_WriteData_LoopEnd) | ||
| 167 | -// { | ||
| 168 | - | ||
| 169 | -// printf("缓冲线程写入中\n"); | ||
| 170 | - | ||
| 171 | -// //将输入缓冲池的数据放入播放缓冲池 | ||
| 172 | -// Music_RealTimeMP2_PlayData(Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopHead], 128); | ||
| 173 | -// printf("Music_RealTimeMP2_WriteData_LoopHead:%d\n",Music_RealTimeMP2_WriteData_LoopHead); | ||
| 174 | -// Music_RealTimeMP2_WriteData_LoopHead ++; | ||
| 175 | -// Music_RealTimeMP2_WriteDataHeadReset(); | ||
| 176 | - | ||
| 177 | -// } | ||
| 178 | - | ||
| 179 | -// pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 180 | - | ||
| 181 | -// } | ||
| 182 | -// } | ||
| 183 | - | ||
| 184 | -// //写入数据缓存池重置 | ||
| 185 | -// static int Music_RealTimeMP2_WriteDataClear() | ||
| 186 | -// { | ||
| 187 | -// Music_RealTimeMP2_WriteData_LoopHead=0; | ||
| 188 | -// Music_RealTimeMP2_WriteData_LoopEnd=0; | ||
| 189 | -// Music_RealTimeMP2_WriteData_ResidueLenth = 0; | ||
| 190 | -// } | ||
| 191 | - | ||
| 192 | - | ||
| 193 | -// // 写入池子头部到底了,重置池头 | ||
| 194 | -// static void Music_RealTimeMP2_WriteDataHeadReset() | ||
| 195 | -// { | ||
| 196 | -// if (Music_RealTimeMP2_WriteData_LoopHead >= 255) | ||
| 197 | -// { | ||
| 198 | -// Music_RealTimeMP2_WriteData_LoopHead = 0; | ||
| 199 | -// } | ||
| 200 | -// } | ||
| 201 | - | ||
| 202 | -// // 写入池子尾部到底了,重置池尾 | ||
| 203 | -// static void Music_RealTimeMP2_WriteDataEndReset() | ||
| 204 | -// { | ||
| 205 | -// if (Music_RealTimeMP2_WriteData_LoopEnd >= 255) | ||
| 206 | -// { | ||
| 207 | -// Music_RealTimeMP2_WriteData_LoopEnd = 0; | ||
| 208 | -// } | ||
| 209 | -// } | ||
| 210 | - | ||
| 211 | - | ||
| 212 | - | ||
| 213 | -// //写入数据进缓存池,以用于后续播放 | ||
| 214 | -// static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length) | ||
| 215 | -// { | ||
| 216 | - | ||
| 217 | -// int temp_lenth = 0; //临时长度 | ||
| 218 | - | ||
| 219 | -// //判断输入的数据长度是否正常 | ||
| 220 | -// if (length <= 0) | ||
| 221 | -// { | ||
| 222 | -// printf("输入进缓冲池的数据长度有误:%d\n",length); | ||
| 223 | -// return -1; | ||
| 224 | -// } | ||
| 225 | - | ||
| 226 | - | ||
| 227 | -// //写入处理 | ||
| 228 | -// //① 、检查池子当前组内有无剩余数据,如果池子当前组有剩 上次写入的语音数据, 接着往里面写入 | ||
| 229 | -// if (Music_RealTimeMP2_WriteData_ResidueLenth > 0) //如果残留物有长度 | ||
| 230 | -// { | ||
| 231 | -// pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 232 | - | ||
| 233 | -// //数据进池,每组128数据 | ||
| 234 | -// for( ; Music_RealTimeMP2_WriteData_ResidueLenth < 128 ; Music_RealTimeMP2_WriteData_ResidueLenth ++) | ||
| 235 | -// { | ||
| 236 | -// Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [Music_RealTimeMP2_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 237 | -// temp_lenth ++; | ||
| 238 | -// } | ||
| 239 | -// Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 240 | -// Music_RealTimeMP2_WriteData_ResidueLenth = 0; //残留物长度归0 | ||
| 241 | - | ||
| 242 | -// Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | ||
| 243 | - | ||
| 244 | -// pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 245 | -// pthread_cond_signal(&RealTimeMP2_WriteCond); // 发送信号通知播放线程可以开始播放 | ||
| 246 | - | ||
| 247 | -// } | ||
| 248 | - | ||
| 249 | -// //②、从新的组处理数据 | ||
| 250 | -// //待处理数据超过128长度时 | ||
| 251 | -// while( (length - temp_lenth) >= 128) | ||
| 252 | -// { | ||
| 253 | - | ||
| 254 | -// //数据进池,每组128数据 | ||
| 255 | -// //printf("往池子里的第%d号里写入数据\n",Music_RealTimeMP2_WriteData_LoopEnd); | ||
| 256 | - | ||
| 257 | -// pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 258 | - | ||
| 259 | -// for(int ucLen = 0 ; ucLen < 128 ; ucLen ++) | ||
| 260 | -// { | ||
| 261 | -// Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [ucLen] = buf [temp_lenth]; | ||
| 262 | -// temp_lenth ++; | ||
| 263 | -// } | ||
| 264 | - | ||
| 265 | -// printf("携入loopend:%d\n",Music_RealTimeMP2_WriteData_LoopEnd); | ||
| 266 | - | ||
| 267 | -// Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 268 | - | ||
| 269 | - | ||
| 270 | -// Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | ||
| 271 | - | ||
| 272 | -// pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 273 | -// pthread_cond_signal(&RealTimeMP2_WriteCond); // 发送信号通知播放线程可以开始播放 | ||
| 274 | - | ||
| 275 | -// } | ||
| 276 | - | ||
| 277 | -// //③、如果长度还有剩,把数据存到池子内的新组,并记录残留物长度 | ||
| 278 | -// if( (length - temp_lenth) > 0) | ||
| 279 | -// { | ||
| 280 | -// for ( ; temp_lenth < length ; Music_RealTimeMP2_WriteData_ResidueLenth++) | ||
| 281 | -// { | ||
| 282 | -// Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [Music_RealTimeMP2_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 283 | -// temp_lenth ++; | ||
| 284 | -// } | ||
| 285 | - | ||
| 286 | -// } | ||
| 287 | - | ||
| 288 | - | ||
| 289 | -// return 0; | ||
| 290 | -// } | ||
| 291 | - | ||
| 292 | - | ||
| 293 | -// /************************************************************************************************************************************************ | ||
| 294 | -// * | ||
| 295 | -// * 状态相关 | ||
| 296 | -// * | ||
| 297 | -// * | ||
| 298 | -// *************************************************************************************************************************************************/ | ||
| 299 | -// /******************** | ||
| 300 | -// * | ||
| 301 | -// * 获取实时MP2模式 | ||
| 302 | -// * | ||
| 303 | -// * **************/ | ||
| 304 | -// T_JZsdkReturnCode Music_RealTimeMP2_GetStatusFlag() | ||
| 305 | -// { | ||
| 306 | -// return ReadTimeMP2_StatusFlag; | ||
| 307 | -// } |
Module/Megaphone/Music/RealTimeMP2/10t.c
已删除
100644 → 0
| 1 | -// #include <stdio.h> | ||
| 2 | -// #include <pthread.h> | ||
| 3 | -// #include <errno.h> | ||
| 4 | -// #include <string.h> | ||
| 5 | -// #include <stdlib.h> | ||
| 6 | - | ||
| 7 | - | ||
| 8 | -// #include "JZsdkLib.h" | ||
| 9 | -// #include "Megaphone_InputAndOutput.h" | ||
| 10 | -// #include "../Megaphone_Music.h" | ||
| 11 | - | ||
| 12 | -// static int ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 13 | - | ||
| 14 | -// //解码播放部分 | ||
| 15 | -// static unsigned char Music_RealTimeMP2_PlayData_Loop[ (256 + 1) ][128];//解码缓存池 | ||
| 16 | -// static int Music_RealTimeMP2_PlayData_LoopHead = 0; //池数头 | ||
| 17 | -// static int Music_RealTimeMP2_PlayData_LoopEnd = 0; //池数尾 | ||
| 18 | -// static int Music_RealTimeMP2__PlayData_LoopReadFlag=0;//读取标志位0为停止,1为开始 | ||
| 19 | - | ||
| 20 | -// static int Music_RealTimeMP2_Play_init(); | ||
| 21 | -// static void *Music_RealTimeMP2_LoopPlay(void *arg); | ||
| 22 | -// static int Music_RealTimeMP2_ClearLoop(); | ||
| 23 | -// static void Music_RealTimeMP2_PlayLoop_HeadReset(); | ||
| 24 | - | ||
| 25 | -// //写入数据部分 | ||
| 26 | -// static unsigned char Music_RealTimeMP2_WriteData_Loop[(255 + 1)][128]; //实时mp2缓冲输入池 | ||
| 27 | -// static int Music_RealTimeMP2_WriteData_LoopHead = 0; //池数头 | ||
| 28 | -// static int Music_RealTimeMP2_WriteData_LoopEnd = 0; //池数尾 | ||
| 29 | -// static int Music_RealTimeMP2_WriteData_ResidueLenth; // 写入缓存池池子残余物长度 | ||
| 30 | -// static int Music_RealTimeMP2_WriteFlag=0;//读取标志位0为停止,1为开始 | ||
| 31 | - | ||
| 32 | -// pthread_mutex_t RealTimeMP2_WriteDataLock = PTHREAD_MUTEX_INITIALIZER; | ||
| 33 | -// pthread_cond_t RealTimeMP2_WriteCond = PTHREAD_COND_INITIALIZER; | ||
| 34 | - | ||
| 35 | -// static void *Music_RealTimeMP2_WriteData_Task(void *arg); | ||
| 36 | -// static int Music_RealTimeMP2_WriteDataClear(); | ||
| 37 | -// static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length); | ||
| 38 | -// static void Music_RealTimeMP2_WriteDataHeadReset(); | ||
| 39 | - | ||
| 40 | - | ||
| 41 | -// static int Music_RealTimeMP2_WriteData_init(); | ||
| 42 | - | ||
| 43 | - | ||
| 44 | - | ||
| 45 | -// T_JZsdkReturnCode Music_RealTimeMP2_start() | ||
| 46 | -// { | ||
| 47 | -// //1、开启实时mp2模式 | ||
| 48 | -// ReadTimeMP2_StatusFlag = JZ_FLAGCODE_ON; | ||
| 49 | - | ||
| 50 | -// //2、创建输入缓冲线程 | ||
| 51 | -// Music_RealTimeMP2_WriteData_init(); | ||
| 52 | - | ||
| 53 | -// //3、创建播放线程 | ||
| 54 | -// //Music_RealTimeMP2_Play_init(); | ||
| 55 | - | ||
| 56 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 57 | -// } | ||
| 58 | - | ||
| 59 | -// T_JZsdkReturnCode Music_RealTimeMP2_trans(unsigned char *getdata, int len) | ||
| 60 | -// { | ||
| 61 | - | ||
| 62 | -// Music_RealTimeMP2_WriteDataToLoop(getdata, len); | ||
| 63 | - | ||
| 64 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 65 | -// } | ||
| 66 | - | ||
| 67 | -// T_JZsdkReturnCode Music_RealTimeMP2_stop() | ||
| 68 | -// { | ||
| 69 | -// ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 70 | - | ||
| 71 | -// Music_RealTimeMP2__PlayData_LoopReadFlag = JZ_FLAGCODE_OFF; | ||
| 72 | - | ||
| 73 | -// Music_RealTimeMP2_WriteFlag = JZ_FLAGCODE_OFF; | ||
| 74 | - | ||
| 75 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 76 | -// } | ||
| 77 | - | ||
| 78 | - | ||
| 79 | -// /************************************************************************************************************************************************ | ||
| 80 | -// * | ||
| 81 | -// * 解码播放部分 | ||
| 82 | -// * | ||
| 83 | -// * | ||
| 84 | -// *************************************************************************************************************************************************/ | ||
| 85 | - | ||
| 86 | - | ||
| 87 | -// //解码opus并播放 | ||
| 88 | -// static int Music_RealTimeMP2_PlayData(unsigned char *data,int len) | ||
| 89 | -// { | ||
| 90 | -// unsigned char playFile[len + 9 + 2]; | ||
| 91 | - | ||
| 92 | -// printf("播放开始\n"); | ||
| 93 | - | ||
| 94 | - | ||
| 95 | -// //清空 | ||
| 96 | -// memset(playFile, 0, (len + 9 + 2)); | ||
| 97 | - | ||
| 98 | -// //帧头 | ||
| 99 | -// playFile[0] = 0x5a; | ||
| 100 | -// playFile[1] = 0x5a; | ||
| 101 | -// playFile[2] = 0x77; | ||
| 102 | -// playFile[7] = 0x51; | ||
| 103 | -// playFile[8] = 0x04; | ||
| 104 | - | ||
| 105 | -// //帧数据 | ||
| 106 | -// memcpy(&playFile[9],data,len); | ||
| 107 | -// len = len + 9 + 2; | ||
| 108 | - | ||
| 109 | -// //帧尾 | ||
| 110 | -// playFile[len - 1] = 0x00; | ||
| 111 | -// playFile[len] = 0x00; | ||
| 112 | - | ||
| 113 | -// Music_SendFrame_FramePlay(playFile,len); | ||
| 114 | - | ||
| 115 | -// printf("播放结束\n"); | ||
| 116 | - | ||
| 117 | -// return 0; | ||
| 118 | -// } | ||
| 119 | - | ||
| 120 | - | ||
| 121 | - | ||
| 122 | -// /************************************************************************************************************************************************ | ||
| 123 | -// * | ||
| 124 | -// * 写入缓冲池部分 | ||
| 125 | -// * | ||
| 126 | -// * | ||
| 127 | -// *************************************************************************************************************************************************/ | ||
| 128 | -// //写入数据部分初始化 | ||
| 129 | -// static int Music_RealTimeMP2_WriteData_init() | ||
| 130 | -// { | ||
| 131 | - | ||
| 132 | -// //清空写入数据池 | ||
| 133 | -// Music_RealTimeMP2_WriteDataClear(); | ||
| 134 | - | ||
| 135 | -// pthread_t WriteDataTask; | ||
| 136 | -// pthread_attr_t task_attribute; //线程属性 | ||
| 137 | -// pthread_attr_init(&task_attribute); //初始化线程属性 | ||
| 138 | -// pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
| 139 | -// int opus_Protection = pthread_create(&WriteDataTask,&task_attribute,Music_RealTimeMP2_WriteData_Task,NULL); //线程 | ||
| 140 | -// if(opus_Protection != 0) | ||
| 141 | -// { | ||
| 142 | -// printf("创建输入缓冲池线程线程失败!\n"); | ||
| 143 | -// ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 144 | -// return -2; | ||
| 145 | -// } | ||
| 146 | -// } | ||
| 147 | - | ||
| 148 | -// //输入缓冲池任务 | ||
| 149 | -// static void *Music_RealTimeMP2_WriteData_Task(void *arg) | ||
| 150 | -// { | ||
| 151 | - | ||
| 152 | -// int ret; | ||
| 153 | -// printf("MP2实施喊话,输入数据缓冲线程建立\n"); | ||
| 154 | -// Music_RealTimeMP2_WriteFlag = JZ_FLAGCODE_ON; | ||
| 155 | - | ||
| 156 | -// while(Music_RealTimeMP2_WriteFlag == JZ_FLAGCODE_ON) | ||
| 157 | -// { | ||
| 158 | -// pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 159 | - | ||
| 160 | - | ||
| 161 | - | ||
| 162 | -// if(Music_RealTimeMP2_WriteData_LoopHead != Music_RealTimeMP2_WriteData_LoopEnd) | ||
| 163 | -// { | ||
| 164 | - | ||
| 165 | - | ||
| 166 | -// printf("缓冲线程写入中\n"); | ||
| 167 | - | ||
| 168 | -// //将输入缓冲池的数据放入播放缓冲池 | ||
| 169 | -// Music_RealTimeMP2_PlayData(Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopHead], 128); | ||
| 170 | -// printf("Music_RealTimeMP2_WriteData_LoopHead:%d\n",Music_RealTimeMP2_WriteData_LoopHead); | ||
| 171 | -// Music_RealTimeMP2_WriteData_LoopHead ++; | ||
| 172 | -// Music_RealTimeMP2_WriteDataHeadReset(); | ||
| 173 | - | ||
| 174 | -// } | ||
| 175 | - | ||
| 176 | -// pthread_cond_signal(&RealTimeMP2_WriteCond); // 发送信号通知播放线程可以开始播放 | ||
| 177 | -// pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 178 | - | ||
| 179 | -// } | ||
| 180 | -// } | ||
| 181 | - | ||
| 182 | -// //写入数据缓存池重置 | ||
| 183 | -// static int Music_RealTimeMP2_WriteDataClear() | ||
| 184 | -// { | ||
| 185 | -// Music_RealTimeMP2_WriteData_LoopHead=0; | ||
| 186 | -// Music_RealTimeMP2_WriteData_LoopEnd=0; | ||
| 187 | -// Music_RealTimeMP2_WriteData_ResidueLenth = 0; | ||
| 188 | -// } | ||
| 189 | - | ||
| 190 | - | ||
| 191 | -// // 写入池子头部到底了,重置池头 | ||
| 192 | -// static void Music_RealTimeMP2_WriteDataHeadReset() | ||
| 193 | -// { | ||
| 194 | -// if (Music_RealTimeMP2_WriteData_LoopHead >= 255) | ||
| 195 | -// { | ||
| 196 | -// Music_RealTimeMP2_WriteData_LoopHead = 0; | ||
| 197 | -// } | ||
| 198 | -// } | ||
| 199 | - | ||
| 200 | -// // 写入池子尾部到底了,重置池尾 | ||
| 201 | -// static void Music_RealTimeMP2_WriteDataEndReset() | ||
| 202 | -// { | ||
| 203 | -// if (Music_RealTimeMP2_WriteData_LoopEnd >= 255) | ||
| 204 | -// { | ||
| 205 | -// Music_RealTimeMP2_WriteData_LoopEnd = 0; | ||
| 206 | -// } | ||
| 207 | -// } | ||
| 208 | - | ||
| 209 | - | ||
| 210 | - | ||
| 211 | -// //写入数据进缓存池,以用于后续播放 | ||
| 212 | -// static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length) | ||
| 213 | -// { | ||
| 214 | - | ||
| 215 | -// int temp_lenth = 0; //临时长度 | ||
| 216 | - | ||
| 217 | -// //判断输入的数据长度是否正常 | ||
| 218 | -// if (length <= 0) | ||
| 219 | -// { | ||
| 220 | -// printf("输入进缓冲池的数据长度有误:%d\n",length); | ||
| 221 | -// return -1; | ||
| 222 | -// } | ||
| 223 | - | ||
| 224 | - | ||
| 225 | -// //写入处理 | ||
| 226 | -// //① 、检查池子当前组内有无剩余数据,如果池子当前组有剩 上次写入的语音数据, 接着往里面写入 | ||
| 227 | -// if (Music_RealTimeMP2_WriteData_ResidueLenth > 0) //如果残留物有长度 | ||
| 228 | -// { | ||
| 229 | -// pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 230 | - | ||
| 231 | -// //数据进池,每组128数据 | ||
| 232 | -// for( ; Music_RealTimeMP2_WriteData_ResidueLenth < 128 ; Music_RealTimeMP2_WriteData_ResidueLenth ++) | ||
| 233 | -// { | ||
| 234 | -// Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [Music_RealTimeMP2_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 235 | -// temp_lenth ++; | ||
| 236 | -// } | ||
| 237 | -// Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 238 | -// Music_RealTimeMP2_WriteData_ResidueLenth = 0; //残留物长度归0 | ||
| 239 | - | ||
| 240 | -// Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | ||
| 241 | - | ||
| 242 | -// pthread_cond_wait(&RealTimeMP2_WriteCond, &RealTimeMP2_WriteDataLock); | ||
| 243 | -// pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 244 | - | ||
| 245 | -// } | ||
| 246 | - | ||
| 247 | -// //②、从新的组处理数据 | ||
| 248 | -// //待处理数据超过128长度时 | ||
| 249 | -// while( (length - temp_lenth) >= 128) | ||
| 250 | -// { | ||
| 251 | - | ||
| 252 | -// //数据进池,每组128数据 | ||
| 253 | -// //printf("往池子里的第%d号里写入数据\n",Music_RealTimeMP2_WriteData_LoopEnd); | ||
| 254 | - | ||
| 255 | -// pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 256 | - | ||
| 257 | -// for(int ucLen = 0 ; ucLen < 128 ; ucLen ++) | ||
| 258 | -// { | ||
| 259 | -// Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [ucLen] = buf [temp_lenth]; | ||
| 260 | -// temp_lenth ++; | ||
| 261 | -// } | ||
| 262 | - | ||
| 263 | -// printf("携入loopend:%d\n",Music_RealTimeMP2_WriteData_LoopEnd); | ||
| 264 | - | ||
| 265 | -// Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 266 | - | ||
| 267 | - | ||
| 268 | -// Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | ||
| 269 | - | ||
| 270 | -// pthread_cond_wait(&RealTimeMP2_WriteCond, &RealTimeMP2_WriteDataLock); | ||
| 271 | -// pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 272 | - | ||
| 273 | -// } | ||
| 274 | - | ||
| 275 | -// //③、如果长度还有剩,把数据存到池子内的新组,并记录残留物长度 | ||
| 276 | -// if( (length - temp_lenth) > 0) | ||
| 277 | -// { | ||
| 278 | -// for ( ; temp_lenth < length ; Music_RealTimeMP2_WriteData_ResidueLenth++) | ||
| 279 | -// { | ||
| 280 | -// Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [Music_RealTimeMP2_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 281 | -// temp_lenth ++; | ||
| 282 | -// } | ||
| 283 | - | ||
| 284 | -// } | ||
| 285 | - | ||
| 286 | - | ||
| 287 | -// return 0; | ||
| 288 | -// } | ||
| 289 | - | ||
| 290 | - | ||
| 291 | -// /************************************************************************************************************************************************ | ||
| 292 | -// * | ||
| 293 | -// * 状态相关 | ||
| 294 | -// * | ||
| 295 | -// * | ||
| 296 | -// *************************************************************************************************************************************************/ | ||
| 297 | -// /******************** | ||
| 298 | -// * | ||
| 299 | -// * 获取实时MP2模式 | ||
| 300 | -// * | ||
| 301 | -// * **************/ | ||
| 302 | -// T_JZsdkReturnCode Music_RealTimeMP2_GetStatusFlag() | ||
| 303 | -// { | ||
| 304 | -// return ReadTimeMP2_StatusFlag; | ||
| 305 | -// } |
| @@ -8,13 +8,22 @@ | @@ -8,13 +8,22 @@ | ||
| 8 | #include "JZsdkLib.h" | 8 | #include "JZsdkLib.h" |
| 9 | #include "Megaphone_InputAndOutput.h" | 9 | #include "Megaphone_InputAndOutput.h" |
| 10 | #include "../Megaphone_Music.h" | 10 | #include "../Megaphone_Music.h" |
| 11 | -#include "version_choose.h" | ||
| 12 | 11 | ||
| 13 | static int ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | 12 | static int ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; |
| 14 | 13 | ||
| 14 | +//解码播放部分 | ||
| 15 | +static unsigned char Music_RealTimeMP2_PlayData_Loop[ (256 + 1) ][128];//解码缓存池 | ||
| 16 | +static int Music_RealTimeMP2_PlayData_LoopHead = 0; //池数头 | ||
| 17 | +static int Music_RealTimeMP2_PlayData_LoopEnd = 0; //池数尾 | ||
| 18 | +static int Music_RealTimeMP2__PlayData_LoopReadFlag=0;//读取标志位0为停止,1为开始 | ||
| 19 | + | ||
| 20 | +static int Music_RealTimeMP2_Play_init(); | ||
| 21 | +static void *Music_RealTimeMP2_LoopPlay(void *arg); | ||
| 22 | +static int Music_RealTimeMP2_ClearLoop(); | ||
| 23 | +static void Music_RealTimeMP2_PlayLoop_HeadReset(); | ||
| 15 | 24 | ||
| 16 | //写入数据部分 | 25 | //写入数据部分 |
| 17 | -static unsigned char Music_RealTimeMP2_WriteData_Loop[(255 + 1)][128]; //实时mp2缓冲输入池 | 26 | +static unsigned char Music_RealTimeMP2_WriteData_Loop[(15 + 1)][128]; //实时mp2缓冲输入池 |
| 18 | static int Music_RealTimeMP2_WriteData_LoopHead = 0; //池数头 | 27 | static int Music_RealTimeMP2_WriteData_LoopHead = 0; //池数头 |
| 19 | static int Music_RealTimeMP2_WriteData_LoopEnd = 0; //池数尾 | 28 | static int Music_RealTimeMP2_WriteData_LoopEnd = 0; //池数尾 |
| 20 | static int Music_RealTimeMP2_WriteData_ResidueLenth; // 写入缓存池池子残余物长度 | 29 | static int Music_RealTimeMP2_WriteData_ResidueLenth; // 写入缓存池池子残余物长度 |
| @@ -22,7 +31,7 @@ static int Music_RealTimeMP2_WriteFlag=0;//霂餃0銝箏迫嚗1銝箏憪 | @@ -22,7 +31,7 @@ static int Music_RealTimeMP2_WriteFlag=0;//霂餃0銝箏迫嚗1銝箏憪 | ||
| 22 | 31 | ||
| 23 | pthread_mutex_t RealTimeMP2_WriteDataLock = PTHREAD_MUTEX_INITIALIZER; | 32 | pthread_mutex_t RealTimeMP2_WriteDataLock = PTHREAD_MUTEX_INITIALIZER; |
| 24 | pthread_cond_t RealTimeMP2_WriteCond = PTHREAD_COND_INITIALIZER; | 33 | pthread_cond_t RealTimeMP2_WriteCond = PTHREAD_COND_INITIALIZER; |
| 25 | - | 34 | +int RealTimeMP2_WriteDataFlag = 0; |
| 26 | static void *Music_RealTimeMP2_WriteData_Task(void *arg); | 35 | static void *Music_RealTimeMP2_WriteData_Task(void *arg); |
| 27 | static int Music_RealTimeMP2_WriteDataClear(); | 36 | static int Music_RealTimeMP2_WriteDataClear(); |
| 28 | static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length); | 37 | static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length); |
| @@ -42,7 +51,7 @@ T_JZsdkReturnCode Music_RealTimeMP2_start() | @@ -42,7 +51,7 @@ T_JZsdkReturnCode Music_RealTimeMP2_start() | ||
| 42 | Music_RealTimeMP2_WriteData_init(); | 51 | Music_RealTimeMP2_WriteData_init(); |
| 43 | 52 | ||
| 44 | //3、创建播放线程 | 53 | //3、创建播放线程 |
| 45 | - //Music_RealTimeMP2_Play_init(); | 54 | + Music_RealTimeMP2_Play_init(); |
| 46 | 55 | ||
| 47 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 56 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 48 | } | 57 | } |
| @@ -59,6 +68,8 @@ T_JZsdkReturnCode Music_RealTimeMP2_stop() | @@ -59,6 +68,8 @@ T_JZsdkReturnCode Music_RealTimeMP2_stop() | ||
| 59 | { | 68 | { |
| 60 | ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | 69 | ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; |
| 61 | 70 | ||
| 71 | + Music_RealTimeMP2__PlayData_LoopReadFlag = JZ_FLAGCODE_OFF; | ||
| 72 | + | ||
| 62 | Music_RealTimeMP2_WriteFlag = JZ_FLAGCODE_OFF; | 73 | Music_RealTimeMP2_WriteFlag = JZ_FLAGCODE_OFF; |
| 63 | 74 | ||
| 64 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 75 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| @@ -71,7 +82,24 @@ T_JZsdkReturnCode Music_RealTimeMP2_stop() | @@ -71,7 +82,24 @@ T_JZsdkReturnCode Music_RealTimeMP2_stop() | ||
| 71 | * | 82 | * |
| 72 | * | 83 | * |
| 73 | *************************************************************************************************************************************************/ | 84 | *************************************************************************************************************************************************/ |
| 85 | +static int Music_RealTimeMP2_Play_init() | ||
| 86 | +{ | ||
| 87 | + //清空播放数据缓冲区 | ||
| 88 | + Music_RealTimeMP2_ClearLoop(); | ||
| 74 | 89 | ||
| 90 | + //创建循环播放线程 | ||
| 91 | + pthread_t loop_play_task; | ||
| 92 | + pthread_attr_t task_attribute; //线程属性 | ||
| 93 | + pthread_attr_init(&task_attribute); //初始化线程属性 | ||
| 94 | + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
| 95 | + int opus_Protection = pthread_create(&loop_play_task,&task_attribute,Music_RealTimeMP2_LoopPlay,NULL); //线程 | ||
| 96 | + if(opus_Protection != 0) | ||
| 97 | + { | ||
| 98 | + printf("创建自动mp2播放线程失败!\n"); | ||
| 99 | + ReadTimeMP2_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 100 | + return -2; | ||
| 101 | + } | ||
| 102 | +} | ||
| 75 | 103 | ||
| 76 | //解码opus并播放 | 104 | //解码opus并播放 |
| 77 | static int Music_RealTimeMP2_PlayData(unsigned char *data,int len) | 105 | static int Music_RealTimeMP2_PlayData(unsigned char *data,int len) |
| @@ -108,6 +136,64 @@ static int Music_RealTimeMP2_PlayData(unsigned char *data,int len) | @@ -108,6 +136,64 @@ static int Music_RealTimeMP2_PlayData(unsigned char *data,int len) | ||
| 108 | 136 | ||
| 109 | 137 | ||
| 110 | 138 | ||
| 139 | +static void *Music_RealTimeMP2_LoopPlay(void *arg) | ||
| 140 | +{ | ||
| 141 | + Music_RealTimeMP2__PlayData_LoopReadFlag = JZ_FLAGCODE_ON; | ||
| 142 | + int ret; | ||
| 143 | + printf("实施喊话,数据播放线程建立\n"); | ||
| 144 | + | ||
| 145 | + //设立缓冲区域 | ||
| 146 | + int range = 0; | ||
| 147 | + while (range < 30) // 70 2s | ||
| 148 | + { | ||
| 149 | + range = (Music_RealTimeMP2_PlayData_LoopEnd-Music_RealTimeMP2_PlayData_LoopHead); | ||
| 150 | + if (range < 0) | ||
| 151 | + { | ||
| 152 | + range = range; | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + printf("开始播放函数\n"); | ||
| 157 | + | ||
| 158 | + while(Music_RealTimeMP2__PlayData_LoopReadFlag != JZ_FLAGCODE_OFF) | ||
| 159 | + { | ||
| 160 | + if(Music_RealTimeMP2_PlayData_LoopHead!=Music_RealTimeMP2_PlayData_LoopEnd) | ||
| 161 | + { | ||
| 162 | + printf("播放线程执行中\n"); | ||
| 163 | + | ||
| 164 | + ret = Music_RealTimeMP2_PlayData(Music_RealTimeMP2_PlayData_Loop[Music_RealTimeMP2_PlayData_LoopHead],128); | ||
| 165 | + Music_RealTimeMP2_PlayData_LoopHead++; | ||
| 166 | + Music_RealTimeMP2_PlayLoop_HeadReset(); //池满判断 | ||
| 167 | + } | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | +} | ||
| 171 | + | ||
| 172 | +// 池子头部到底了,重置池头 | ||
| 173 | +static void Music_RealTimeMP2_PlayLoop_HeadReset() | ||
| 174 | +{ | ||
| 175 | + if (Music_RealTimeMP2_PlayData_LoopHead >= 256) | ||
| 176 | + { | ||
| 177 | + Music_RealTimeMP2_PlayData_LoopHead = 0; | ||
| 178 | + } | ||
| 179 | +} | ||
| 180 | + | ||
| 181 | +/// 池子尾部到底了,重置池尾 | ||
| 182 | +static void Music_RealTimeMP2_PlayLoopEndReset() | ||
| 183 | +{ | ||
| 184 | + if (Music_RealTimeMP2_PlayData_LoopEnd >= 256) | ||
| 185 | + { | ||
| 186 | + Music_RealTimeMP2_PlayData_LoopEnd = 0; | ||
| 187 | + } | ||
| 188 | +} | ||
| 189 | + | ||
| 190 | +//清空缓存池 | ||
| 191 | +static int Music_RealTimeMP2_ClearLoop() | ||
| 192 | +{ | ||
| 193 | + Music_RealTimeMP2_PlayData_LoopHead=0; | ||
| 194 | + Music_RealTimeMP2_PlayData_LoopEnd=0; | ||
| 195 | +} | ||
| 196 | + | ||
| 111 | /************************************************************************************************************************************************ | 197 | /************************************************************************************************************************************************ |
| 112 | * | 198 | * |
| 113 | * 写入缓冲池部分 | 199 | * 写入缓冲池部分 |
| @@ -134,6 +220,17 @@ static int Music_RealTimeMP2_WriteData_init() | @@ -134,6 +220,17 @@ static int Music_RealTimeMP2_WriteData_init() | ||
| 134 | } | 220 | } |
| 135 | } | 221 | } |
| 136 | 222 | ||
| 223 | +//将输入缓冲池的数据放入播放缓冲池 | ||
| 224 | +static int Music_RealTimeMP2_Put_WriteData_In_PlayLoop() | ||
| 225 | +{ | ||
| 226 | + memcpy(Music_RealTimeMP2_PlayData_Loop[Music_RealTimeMP2_PlayData_LoopEnd], Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopHead],128); | ||
| 227 | + Music_RealTimeMP2_PlayData_LoopEnd ++; | ||
| 228 | + Music_RealTimeMP2_WriteData_LoopHead ++; | ||
| 229 | + | ||
| 230 | + Music_RealTimeMP2_PlayLoopEndReset(); | ||
| 231 | + Music_RealTimeMP2_WriteDataHeadReset(); | ||
| 232 | +} | ||
| 233 | + | ||
| 137 | //输入缓冲池任务 | 234 | //输入缓冲池任务 |
| 138 | static void *Music_RealTimeMP2_WriteData_Task(void *arg) | 235 | static void *Music_RealTimeMP2_WriteData_Task(void *arg) |
| 139 | { | 236 | { |
| @@ -141,58 +238,25 @@ static void *Music_RealTimeMP2_WriteData_Task(void *arg) | @@ -141,58 +238,25 @@ static void *Music_RealTimeMP2_WriteData_Task(void *arg) | ||
| 141 | int ret; | 238 | int ret; |
| 142 | printf("MP2实施喊话,输入数据缓冲线程建立\n"); | 239 | printf("MP2实施喊话,输入数据缓冲线程建立\n"); |
| 143 | Music_RealTimeMP2_WriteFlag = JZ_FLAGCODE_ON; | 240 | Music_RealTimeMP2_WriteFlag = JZ_FLAGCODE_ON; |
| 144 | - | ||
| 145 | -#if PLATFORM_VERSION == PLATFORM_H3 | ||
| 146 | - while(Music_RealTimeMP2_WriteFlag == JZ_FLAGCODE_ON) | ||
| 147 | - { | ||
| 148 | - pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 149 | - | ||
| 150 | - // 等待写入数据 | ||
| 151 | - while (Music_RealTimeMP2_WriteData_LoopHead == Music_RealTimeMP2_WriteData_LoopEnd) | ||
| 152 | - { | ||
| 153 | - pthread_cond_wait(&RealTimeMP2_WriteCond, &RealTimeMP2_WriteDataLock); | ||
| 154 | - } | ||
| 155 | - | ||
| 156 | - if(Music_RealTimeMP2_WriteData_LoopHead != Music_RealTimeMP2_WriteData_LoopEnd) | ||
| 157 | - { | ||
| 158 | - | ||
| 159 | - printf("缓冲线程写入中\n"); | ||
| 160 | 241 | ||
| 161 | - //将输入缓冲池的数据放入播放缓冲池 | ||
| 162 | - Music_RealTimeMP2_PlayData(Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopHead], 128); | ||
| 163 | - printf("Music_RealTimeMP2_WriteData_LoopHead:%d\n",Music_RealTimeMP2_WriteData_LoopHead); | ||
| 164 | - Music_RealTimeMP2_WriteData_LoopHead ++; | ||
| 165 | - Music_RealTimeMP2_WriteDataHeadReset(); | ||
| 166 | - | ||
| 167 | - } | ||
| 168 | - | ||
| 169 | - pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 170 | - | ||
| 171 | - } | ||
| 172 | -#elif PLATFORM_VERSION == PLATFORM_V3S | ||
| 173 | while(Music_RealTimeMP2_WriteFlag == JZ_FLAGCODE_ON) | 242 | while(Music_RealTimeMP2_WriteFlag == JZ_FLAGCODE_ON) |
| 174 | { | 243 | { |
| 175 | - pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | 244 | + pthread_mutex_lock(&RealTimeMP2_WriteDataLock); |
| 176 | 245 | ||
| 177 | - if(Music_RealTimeMP2_WriteData_LoopHead != Music_RealTimeMP2_WriteData_LoopEnd) | 246 | + |
| 247 | + if(Music_RealTimeMP2_WriteData_LoopHead!=Music_RealTimeMP2_WriteData_LoopEnd) | ||
| 178 | { | 248 | { |
| 179 | printf("缓冲线程写入中\n"); | 249 | printf("缓冲线程写入中\n"); |
| 180 | 250 | ||
| 181 | //将输入缓冲池的数据放入播放缓冲池 | 251 | //将输入缓冲池的数据放入播放缓冲池 |
| 182 | - Music_RealTimeMP2_PlayData(Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopHead], 128); | ||
| 183 | - printf("Music_RealTimeMP2_WriteData_LoopHead:%d\n",Music_RealTimeMP2_WriteData_LoopHead); | ||
| 184 | - Music_RealTimeMP2_WriteData_LoopHead ++; | ||
| 185 | - Music_RealTimeMP2_WriteDataHeadReset(); | 252 | + Music_RealTimeMP2_Put_WriteData_In_PlayLoop(); |
| 186 | } | 253 | } |
| 187 | 254 | ||
| 188 | - pthread_cond_signal(&RealTimeMP2_WriteCond); // 发送信号通知播放线程可以开始播放 | ||
| 189 | - pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 190 | - | 255 | + // 在写入数据后解锁 |
| 256 | + RealTimeMP2_WriteDataFlag = 1; | ||
| 257 | + pthread_cond_signal(&RealTimeMP2_WriteCond); | ||
| 258 | + pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); | ||
| 191 | } | 259 | } |
| 192 | -#else | ||
| 193 | - printf("mp2实时语音未能识别到正常的板子型号"); | ||
| 194 | -#endif | ||
| 195 | - | ||
| 196 | } | 260 | } |
| 197 | 261 | ||
| 198 | //写入数据缓存池重置 | 262 | //写入数据缓存池重置 |
| @@ -207,7 +271,7 @@ static int Music_RealTimeMP2_WriteDataClear() | @@ -207,7 +271,7 @@ static int Music_RealTimeMP2_WriteDataClear() | ||
| 207 | // 写入池子头部到底了,重置池头 | 271 | // 写入池子头部到底了,重置池头 |
| 208 | static void Music_RealTimeMP2_WriteDataHeadReset() | 272 | static void Music_RealTimeMP2_WriteDataHeadReset() |
| 209 | { | 273 | { |
| 210 | - if (Music_RealTimeMP2_WriteData_LoopHead >= 255) | 274 | + if (Music_RealTimeMP2_WriteData_LoopHead >= 15) |
| 211 | { | 275 | { |
| 212 | Music_RealTimeMP2_WriteData_LoopHead = 0; | 276 | Music_RealTimeMP2_WriteData_LoopHead = 0; |
| 213 | } | 277 | } |
| @@ -216,7 +280,7 @@ static void Music_RealTimeMP2_WriteDataHeadReset() | @@ -216,7 +280,7 @@ static void Music_RealTimeMP2_WriteDataHeadReset() | ||
| 216 | // 写入池子尾部到底了,重置池尾 | 280 | // 写入池子尾部到底了,重置池尾 |
| 217 | static void Music_RealTimeMP2_WriteDataEndReset() | 281 | static void Music_RealTimeMP2_WriteDataEndReset() |
| 218 | { | 282 | { |
| 219 | - if (Music_RealTimeMP2_WriteData_LoopEnd >= 255) | 283 | + if (Music_RealTimeMP2_WriteData_LoopEnd >= 15) |
| 220 | { | 284 | { |
| 221 | Music_RealTimeMP2_WriteData_LoopEnd = 0; | 285 | Music_RealTimeMP2_WriteData_LoopEnd = 0; |
| 222 | } | 286 | } |
| @@ -237,110 +301,81 @@ static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length) | @@ -237,110 +301,81 @@ static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length) | ||
| 237 | return -1; | 301 | return -1; |
| 238 | } | 302 | } |
| 239 | 303 | ||
| 240 | -#if PLATFORM_VERSION == PLATFORM_H3 | 304 | + |
| 241 | //写入处理 | 305 | //写入处理 |
| 242 | //① 、检查池子当前组内有无剩余数据,如果池子当前组有剩 上次写入的语音数据, 接着往里面写入 | 306 | //① 、检查池子当前组内有无剩余数据,如果池子当前组有剩 上次写入的语音数据, 接着往里面写入 |
| 243 | if (Music_RealTimeMP2_WriteData_ResidueLenth > 0) //如果残留物有长度 | 307 | if (Music_RealTimeMP2_WriteData_ResidueLenth > 0) //如果残留物有长度 |
| 244 | { | 308 | { |
| 245 | - pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 246 | 309 | ||
| 247 | - //数据进池,每组128数据 | ||
| 248 | - for( ; Music_RealTimeMP2_WriteData_ResidueLenth < 128 ; Music_RealTimeMP2_WriteData_ResidueLenth ++) | 310 | + if (Music_RealTimeMP2_WriteData_ResidueLenth + length < 128) |
| 249 | { | 311 | { |
| 250 | - Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [Music_RealTimeMP2_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 251 | - temp_lenth ++; | ||
| 252 | - } | ||
| 253 | - Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 254 | - Music_RealTimeMP2_WriteData_ResidueLenth = 0; //残留物长度归0 | ||
| 255 | - | ||
| 256 | - Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | 312 | + for ( ; temp_lenth < length ; Music_RealTimeMP2_WriteData_ResidueLenth++) |
| 313 | + { | ||
| 314 | + Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [Music_RealTimeMP2_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 315 | + temp_lenth ++; | ||
| 316 | + } | ||
| 257 | 317 | ||
| 258 | - pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 259 | - pthread_cond_signal(&RealTimeMP2_WriteCond); // 发送信号通知播放线程可以开始播放 | ||
| 260 | - | ||
| 261 | - } | ||
| 262 | - | ||
| 263 | - //②、从新的组处理数据 | ||
| 264 | - //待处理数据超过128长度时 | ||
| 265 | - while( (length - temp_lenth) >= 128) | ||
| 266 | - { | ||
| 267 | - | ||
| 268 | - //数据进池,每组128数据 | ||
| 269 | - //printf("往池子里的第%d号里写入数据\n",Music_RealTimeMP2_WriteData_LoopEnd); | ||
| 270 | - | ||
| 271 | - pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 272 | - | ||
| 273 | - for(int ucLen = 0 ; ucLen < 128 ; ucLen ++) | ||
| 274 | - { | ||
| 275 | - Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [ucLen] = buf [temp_lenth]; | ||
| 276 | - temp_lenth ++; | 318 | + return 0; |
| 277 | } | 319 | } |
| 278 | - | ||
| 279 | - printf("携入loopend:%d\n",Music_RealTimeMP2_WriteData_LoopEnd); | ||
| 280 | - | ||
| 281 | - Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 282 | - | ||
| 283 | - | ||
| 284 | - Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | ||
| 285 | - | ||
| 286 | - pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 287 | - pthread_cond_signal(&RealTimeMP2_WriteCond); // 发送信号通知播放线程可以开始播放 | ||
| 288 | - | ||
| 289 | - } | ||
| 290 | - | ||
| 291 | -#elif PLATFORM_VERSION == PLATFORM_V3S | ||
| 292 | - //写入处理 | ||
| 293 | - //① 、检查池子当前组内有无剩余数据,如果池子当前组有剩 上次写入的语音数据, 接着往里面写入 | ||
| 294 | - if (Music_RealTimeMP2_WriteData_ResidueLenth > 0) //如果残留物有长度 | ||
| 295 | - { | ||
| 296 | - pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 297 | - | ||
| 298 | - //数据进池,每组128数据 | ||
| 299 | - for( ; Music_RealTimeMP2_WriteData_ResidueLenth < 128 ; Music_RealTimeMP2_WriteData_ResidueLenth ++) | 320 | + else |
| 300 | { | 321 | { |
| 301 | - Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [Music_RealTimeMP2_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 302 | - temp_lenth ++; | 322 | + // 在写入解码前加锁 |
| 323 | + pthread_mutex_lock(&RealTimeMP2_WriteDataLock); | ||
| 324 | + | ||
| 325 | + while (RealTimeMP2_WriteDataFlag != 1) | ||
| 326 | + { | ||
| 327 | + pthread_cond_wait(&RealTimeMP2_WriteCond, &RealTimeMP2_WriteDataLock); | ||
| 328 | + } | ||
| 329 | + | ||
| 330 | + //数据进池,每组128数据 | ||
| 331 | + for( ; Music_RealTimeMP2_WriteData_ResidueLenth < 128 ; Music_RealTimeMP2_WriteData_ResidueLenth ++) | ||
| 332 | + { | ||
| 333 | + Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [Music_RealTimeMP2_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 334 | + temp_lenth ++; | ||
| 335 | + } | ||
| 336 | + Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 337 | + Music_RealTimeMP2_WriteData_ResidueLenth = 0; //残留物长度归0 | ||
| 338 | + | ||
| 339 | + Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | ||
| 340 | + | ||
| 341 | + // 在解码数据后解锁 | ||
| 342 | + RealTimeMP2_WriteDataFlag = 0; | ||
| 343 | + pthread_cond_signal(&RealTimeMP2_WriteCond); | ||
| 344 | + pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); | ||
| 303 | } | 345 | } |
| 304 | - Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 305 | - Music_RealTimeMP2_WriteData_ResidueLenth = 0; //残留物长度归0 | ||
| 306 | - | ||
| 307 | - Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | 346 | + } |
| 308 | 347 | ||
| 309 | - pthread_cond_wait(&RealTimeMP2_WriteCond, &RealTimeMP2_WriteDataLock); | ||
| 310 | - pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 311 | 348 | ||
| 312 | - } | ||
| 313 | 349 | ||
| 314 | //②、从新的组处理数据 | 350 | //②、从新的组处理数据 |
| 315 | //待处理数据超过128长度时 | 351 | //待处理数据超过128长度时 |
| 316 | while( (length - temp_lenth) >= 128) | 352 | while( (length - temp_lenth) >= 128) |
| 317 | { | 353 | { |
| 354 | + // 在写入解码前加锁 | ||
| 355 | + pthread_mutex_lock(&RealTimeMP2_WriteDataLock); | ||
| 318 | 356 | ||
| 357 | + while (RealTimeMP2_WriteDataFlag != 1) | ||
| 358 | + { | ||
| 359 | + pthread_cond_wait(&RealTimeMP2_WriteCond, &RealTimeMP2_WriteDataLock); | ||
| 360 | + } | ||
| 361 | + | ||
| 319 | //数据进池,每组128数据 | 362 | //数据进池,每组128数据 |
| 320 | //printf("往池子里的第%d号里写入数据\n",Music_RealTimeMP2_WriteData_LoopEnd); | 363 | //printf("往池子里的第%d号里写入数据\n",Music_RealTimeMP2_WriteData_LoopEnd); |
| 321 | - | ||
| 322 | - pthread_mutex_lock(&RealTimeMP2_WriteDataLock); // 获取互斥锁 | ||
| 323 | 364 | ||
| 324 | for(int ucLen = 0 ; ucLen < 128 ; ucLen ++) | 365 | for(int ucLen = 0 ; ucLen < 128 ; ucLen ++) |
| 325 | { | 366 | { |
| 326 | Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [ucLen] = buf [temp_lenth]; | 367 | Music_RealTimeMP2_WriteData_Loop[Music_RealTimeMP2_WriteData_LoopEnd] [ucLen] = buf [temp_lenth]; |
| 327 | temp_lenth ++; | 368 | temp_lenth ++; |
| 328 | } | 369 | } |
| 329 | - | ||
| 330 | - printf("携入loopend:%d\n",Music_RealTimeMP2_WriteData_LoopEnd); | ||
| 331 | - | 370 | + |
| 332 | Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 | 371 | Music_RealTimeMP2_WriteData_LoopEnd+=1; //池尾后移一组 |
| 333 | - | ||
| 334 | - | ||
| 335 | Music_RealTimeMP2_WriteDataEndReset(); //池满判断 | 372 | Music_RealTimeMP2_WriteDataEndReset(); //池满判断 |
| 336 | 373 | ||
| 337 | - pthread_cond_wait(&RealTimeMP2_WriteCond, &RealTimeMP2_WriteDataLock); | ||
| 338 | - pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); // 释放互斥锁 | ||
| 339 | - | 374 | + // 在解码数据后解锁 |
| 375 | + RealTimeMP2_WriteDataFlag = 0; | ||
| 376 | + pthread_cond_signal(&RealTimeMP2_WriteCond); | ||
| 377 | + pthread_mutex_unlock(&RealTimeMP2_WriteDataLock); | ||
| 340 | } | 378 | } |
| 341 | -#else | ||
| 342 | - printf("mp2实时语音传输未能识别到正常的板子型号"); | ||
| 343 | -#endif | ||
| 344 | 379 | ||
| 345 | //③、如果长度还有剩,把数据存到池子内的新组,并记录残留物长度 | 380 | //③、如果长度还有剩,把数据存到池子内的新组,并记录残留物长度 |
| 346 | if( (length - temp_lenth) > 0) | 381 | if( (length - temp_lenth) > 0) |
| @@ -353,6 +388,7 @@ static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length) | @@ -353,6 +388,7 @@ static int Music_RealTimeMP2_WriteDataToLoop(unsigned char *buf,int length) | ||
| 353 | 388 | ||
| 354 | } | 389 | } |
| 355 | 390 | ||
| 391 | + | ||
| 356 | return 0; | 392 | return 0; |
| 357 | } | 393 | } |
| 358 | 394 |
| 1 | +#ifndef JZTTS_H | ||
| 2 | +#define JZTTS_H | ||
| 3 | + | ||
| 4 | +#include <stdio.h> | ||
| 5 | + | ||
| 6 | +typedef enum | ||
| 7 | +{ | ||
| 8 | + NONE_ERROR=0, | ||
| 9 | + INIT_ERROR=-1, | ||
| 10 | + PLAY_ERROR=1, | ||
| 11 | + NOT_FOUND_ERROR=2 | ||
| 12 | +} JZTTS_CODE; | ||
| 13 | + | ||
| 14 | +typedef enum{ | ||
| 15 | + NOT_SPEC=0, | ||
| 16 | + MALE, | ||
| 17 | + FEMALE | ||
| 18 | +} GENDER; | ||
| 19 | + | ||
| 20 | +struct JZTTSVoice | ||
| 21 | +{ | ||
| 22 | + const char* name; | ||
| 23 | + const char *languages; | ||
| 24 | + GENDER gender; | ||
| 25 | +}; | ||
| 26 | + | ||
| 27 | +struct JZTTSParam | ||
| 28 | +{ | ||
| 29 | + unsigned char speed; //80-450 | ||
| 30 | + unsigned char pitch; //0-100 | ||
| 31 | + unsigned char wordGap; //0-100 | ||
| 32 | +}; | ||
| 33 | + | ||
| 34 | + | ||
| 35 | +JZTTS_CODE tts_init(const char* dict_path, const char* wav_save_path); | ||
| 36 | + | ||
| 37 | +JZTTS_CODE tts_setParam(struct JZTTSParam param); | ||
| 38 | + | ||
| 39 | +JZTTS_CODE tts_setVoice(struct JZTTSVoice voice); | ||
| 40 | + | ||
| 41 | +struct JZTTSVoice** tts_getVoiceList(); | ||
| 42 | + | ||
| 43 | +JZTTS_CODE tts_speak(const char* text, const char* wav_file_name); | ||
| 44 | + | ||
| 45 | + | ||
| 46 | +#endif |
Module/Megaphone/TTS/Intl_tts/Intl_tts.c
0 → 100644
| 1 | +#include "Intl_tts.h" | ||
| 2 | +#include "Intl_interface.h" | ||
| 3 | +#include "Megaphone_InputAndOutput.h" | ||
| 4 | +#include "version_choose.h" | ||
| 5 | +#include "JZsdkLib.h" | ||
| 6 | + | ||
| 7 | +#if FIRMWARE_ORIGIN == OVERSEAS_VERSION | ||
| 8 | + | ||
| 9 | +int espeak_init() | ||
| 10 | +{ | ||
| 11 | + char dict_path[]="/root";//设置资源库路径 | ||
| 12 | + char wav_save_path[]="/root/sdcard/record/";//设置生成音频路径 | ||
| 13 | + tts_init(dict_path,wav_save_path);//初始化 | ||
| 14 | + printf("espeak_init\n"); | ||
| 15 | + | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +int espeak_tts(int languages, int speed ,char *tts_words ,int len ) | ||
| 19 | +{ | ||
| 20 | + | ||
| 21 | + struct JZTTSParam ttsparam; | ||
| 22 | + struct JZTTSVoice ttsvoice;//音色语言选择 | ||
| 23 | + char systemCmdStr[]="rm /root/sdcard/record/IntlTTS.wav"; | ||
| 24 | + JZsdk_RunSystemCmd(systemCmdStr); | ||
| 25 | + switch(languages){ | ||
| 26 | + case 0x41://俄 russian ru | ||
| 27 | + ttsvoice.name="russian";//音色名称 | ||
| 28 | + ttsvoice.languages="ru";//使用语言字典 | ||
| 29 | + printf("russian\n"); | ||
| 30 | + break; | ||
| 31 | + | ||
| 32 | + case 0x42://法 french fr-fr | ||
| 33 | + ttsvoice.name="french";//音色名称 | ||
| 34 | + ttsvoice.languages="fr-fr";//使用语言字典 | ||
| 35 | + printf("french\n"); | ||
| 36 | + break; | ||
| 37 | + | ||
| 38 | + case 0x43://德 german de | ||
| 39 | + ttsvoice.name="german";//音色名称 | ||
| 40 | + ttsvoice.languages="de";//使用语言字典 | ||
| 41 | + printf("german\n"); | ||
| 42 | + break; | ||
| 43 | + | ||
| 44 | + case 0x44://韩 ko | ||
| 45 | + ttsvoice.name="russian";//音色名称 | ||
| 46 | + ttsvoice.languages="ru";//使用语言字典 | ||
| 47 | + printf("ko\n"); | ||
| 48 | + break; | ||
| 49 | + | ||
| 50 | + case 0x45://意大利 italian it | ||
| 51 | + ttsvoice.name="italian";//音色名称 | ||
| 52 | + ttsvoice.languages="it";//使用语言字典 | ||
| 53 | + printf("italian\n"); | ||
| 54 | + break; | ||
| 55 | + | ||
| 56 | + case 0x46://波兰 polish pl | ||
| 57 | + ttsvoice.name="polish";//音色名称 | ||
| 58 | + ttsvoice.languages="pl";//使用语言字典 | ||
| 59 | + printf("polish\n"); | ||
| 60 | + break; | ||
| 61 | + | ||
| 62 | + case 0x47://西班牙 spanish es | ||
| 63 | + ttsvoice.name="spanish";//音色名称 | ||
| 64 | + ttsvoice.languages="es";//使用语言字典 | ||
| 65 | + printf("spanish\n"); | ||
| 66 | + break; | ||
| 67 | + | ||
| 68 | + case 0x48://葡萄牙 portugal pt-pt | ||
| 69 | + ttsvoice.name="portugal";//音色名称 | ||
| 70 | + ttsvoice.languages="pt-pt";//使用语言字典 | ||
| 71 | + printf("portugal\n"); | ||
| 72 | + break; | ||
| 73 | + | ||
| 74 | + default: | ||
| 75 | + ttsvoice.name="russian";//音色名称 | ||
| 76 | + ttsvoice.languages="ru";//使用语言字典 | ||
| 77 | + printf("russian\n"); | ||
| 78 | + break; | ||
| 79 | + } | ||
| 80 | + tts_setVoice(ttsvoice);//设置音色语言 | ||
| 81 | + ttsparam.speed = speed/2; //设置语速 | ||
| 82 | + ttsparam.pitch=80;//设置语调 | ||
| 83 | + ttsparam.wordGap=0;//设置单词间隙 | ||
| 84 | + | ||
| 85 | + tts_setParam(ttsparam); | ||
| 86 | + char tts_filename[]="IntlTTS.wav"; | ||
| 87 | + | ||
| 88 | + //生成播放的文件 | ||
| 89 | + tts_speak(tts_words,tts_filename); | ||
| 90 | + | ||
| 91 | + Megaphone_PlayMusic(tts_filename,sizeof(tts_filename)); | ||
| 92 | + | ||
| 93 | + return 0; | ||
| 94 | +} | ||
| 95 | + | ||
| 96 | +#endif |
Module/Megaphone/TTS/Intl_tts/Intl_tts.h
0 → 100644
Module/Megaphone/TTS/Intl_tts/portaudio.h
0 → 100644
| 1 | +#ifndef PORTAUDIO_H | ||
| 2 | +#define PORTAUDIO_H | ||
| 3 | +/* | ||
| 4 | + * $Id$ | ||
| 5 | + * PortAudio Portable Real-Time Audio Library | ||
| 6 | + * PortAudio API Header File | ||
| 7 | + * Latest version available at: http://www.portaudio.com/ | ||
| 8 | + * | ||
| 9 | + * Copyright (c) 1999-2002 Ross Bencina and Phil Burk | ||
| 10 | + * | ||
| 11 | + * Permission is hereby granted, free of charge, to any person obtaining | ||
| 12 | + * a copy of this software and associated documentation files | ||
| 13 | + * (the "Software"), to deal in the Software without restriction, | ||
| 14 | + * including without limitation the rights to use, copy, modify, merge, | ||
| 15 | + * publish, distribute, sublicense, and/or sell copies of the Software, | ||
| 16 | + * and to permit persons to whom the Software is furnished to do so, | ||
| 17 | + * subject to the following conditions: | ||
| 18 | + * | ||
| 19 | + * The above copyright notice and this permission notice shall be | ||
| 20 | + * included in all copies or substantial portions of the Software. | ||
| 21 | + * | ||
| 22 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
| 23 | + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
| 24 | + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
| 25 | + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR | ||
| 26 | + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF | ||
| 27 | + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
| 28 | + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 29 | + */ | ||
| 30 | + | ||
| 31 | +/* | ||
| 32 | + * The text above constitutes the entire PortAudio license; however, | ||
| 33 | + * the PortAudio community also makes the following non-binding requests: | ||
| 34 | + * | ||
| 35 | + * Any person wishing to distribute modifications to the Software is | ||
| 36 | + * requested to send the modifications to the original developer so that | ||
| 37 | + * they can be incorporated into the canonical version. It is also | ||
| 38 | + * requested that these non-binding requests be included along with the | ||
| 39 | + * license above. | ||
| 40 | + */ | ||
| 41 | + | ||
| 42 | +/** @file | ||
| 43 | + @ingroup public_header | ||
| 44 | + @brief The portable PortAudio API. | ||
| 45 | +*/ | ||
| 46 | + | ||
| 47 | + | ||
| 48 | +#ifdef __cplusplus | ||
| 49 | +extern "C" | ||
| 50 | +{ | ||
| 51 | +#endif /* __cplusplus */ | ||
| 52 | + | ||
| 53 | +/** Retrieve the release number of the currently running PortAudio build. | ||
| 54 | + For example, for version "19.5.1" this will return 0x00130501. | ||
| 55 | + | ||
| 56 | + @see paMakeVersionNumber | ||
| 57 | +*/ | ||
| 58 | +int Pa_GetVersion( void ); | ||
| 59 | + | ||
| 60 | +/** Retrieve a textual description of the current PortAudio build, | ||
| 61 | + e.g. "PortAudio V19.5.0-devel, revision 1952M". | ||
| 62 | + The format of the text may change in the future. Do not try to parse the | ||
| 63 | + returned string. | ||
| 64 | + | ||
| 65 | + @deprecated As of 19.5.0, use Pa_GetVersionInfo()->versionText instead. | ||
| 66 | +*/ | ||
| 67 | +const char* Pa_GetVersionText( void ); | ||
| 68 | + | ||
| 69 | +/** | ||
| 70 | + Generate a packed integer version number in the same format used | ||
| 71 | + by Pa_GetVersion(). Use this to compare a specified version number with | ||
| 72 | + the currently running version. For example: | ||
| 73 | + | ||
| 74 | + @code | ||
| 75 | + if( Pa_GetVersion() < paMakeVersionNumber(19,5,1) ) {} | ||
| 76 | + @endcode | ||
| 77 | + | ||
| 78 | + @see Pa_GetVersion, Pa_GetVersionInfo | ||
| 79 | + @version Available as of 19.5.0. | ||
| 80 | +*/ | ||
| 81 | +#define paMakeVersionNumber(major, minor, subminor) \ | ||
| 82 | + (((major)&0xFF)<<16 | ((minor)&0xFF)<<8 | ((subminor)&0xFF)) | ||
| 83 | + | ||
| 84 | + | ||
| 85 | +/** | ||
| 86 | + A structure containing PortAudio API version information. | ||
| 87 | + @see Pa_GetVersionInfo, paMakeVersionNumber | ||
| 88 | + @version Available as of 19.5.0. | ||
| 89 | +*/ | ||
| 90 | +typedef struct PaVersionInfo { | ||
| 91 | + int versionMajor; | ||
| 92 | + int versionMinor; | ||
| 93 | + int versionSubMinor; | ||
| 94 | + /** | ||
| 95 | + This is currently the Git revision hash but may change in the future. | ||
| 96 | + The versionControlRevision is updated by running a script before compiling the library. | ||
| 97 | + If the update does not occur, this value may refer to an earlier revision. | ||
| 98 | + */ | ||
| 99 | + const char *versionControlRevision; | ||
| 100 | + /** Version as a string, for example "PortAudio V19.5.0-devel, revision 1952M" */ | ||
| 101 | + const char *versionText; | ||
| 102 | +} PaVersionInfo; | ||
| 103 | + | ||
| 104 | +/** Retrieve version information for the currently running PortAudio build. | ||
| 105 | + @return A pointer to an immutable PaVersionInfo structure. | ||
| 106 | + | ||
| 107 | + @note This function can be called at any time. It does not require PortAudio | ||
| 108 | + to be initialized. The structure pointed to is statically allocated. Do not | ||
| 109 | + attempt to free it or modify it. | ||
| 110 | + | ||
| 111 | + @see PaVersionInfo, paMakeVersionNumber | ||
| 112 | + @version Available as of 19.5.0. | ||
| 113 | +*/ | ||
| 114 | +const PaVersionInfo* Pa_GetVersionInfo( void ); | ||
| 115 | + | ||
| 116 | + | ||
| 117 | +/** Error codes returned by PortAudio functions. | ||
| 118 | + Note that with the exception of paNoError, all PaErrorCodes are negative. | ||
| 119 | +*/ | ||
| 120 | + | ||
| 121 | +typedef int PaError; | ||
| 122 | +typedef enum PaErrorCode | ||
| 123 | +{ | ||
| 124 | + paNoError = 0, | ||
| 125 | + | ||
| 126 | + paNotInitialized = -10000, | ||
| 127 | + paUnanticipatedHostError, | ||
| 128 | + paInvalidChannelCount, | ||
| 129 | + paInvalidSampleRate, | ||
| 130 | + paInvalidDevice, | ||
| 131 | + paInvalidFlag, | ||
| 132 | + paSampleFormatNotSupported, | ||
| 133 | + paBadIODeviceCombination, | ||
| 134 | + paInsufficientMemory, | ||
| 135 | + paBufferTooBig, | ||
| 136 | + paBufferTooSmall, | ||
| 137 | + paNullCallback, | ||
| 138 | + paBadStreamPtr, | ||
| 139 | + paTimedOut, | ||
| 140 | + paInternalError, | ||
| 141 | + paDeviceUnavailable, | ||
| 142 | + paIncompatibleHostApiSpecificStreamInfo, | ||
| 143 | + paStreamIsStopped, | ||
| 144 | + paStreamIsNotStopped, | ||
| 145 | + paInputOverflowed, | ||
| 146 | + paOutputUnderflowed, | ||
| 147 | + paHostApiNotFound, | ||
| 148 | + paInvalidHostApi, | ||
| 149 | + paCanNotReadFromACallbackStream, | ||
| 150 | + paCanNotWriteToACallbackStream, | ||
| 151 | + paCanNotReadFromAnOutputOnlyStream, | ||
| 152 | + paCanNotWriteToAnInputOnlyStream, | ||
| 153 | + paIncompatibleStreamHostApi, | ||
| 154 | + paBadBufferPtr | ||
| 155 | +} PaErrorCode; | ||
| 156 | + | ||
| 157 | + | ||
| 158 | +/** Translate the supplied PortAudio error code into a human readable | ||
| 159 | + message. | ||
| 160 | +*/ | ||
| 161 | +const char *Pa_GetErrorText( PaError errorCode ); | ||
| 162 | + | ||
| 163 | + | ||
| 164 | +/** Library initialization function - call this before using PortAudio. | ||
| 165 | + This function initializes internal data structures and prepares underlying | ||
| 166 | + host APIs for use. With the exception of Pa_GetVersion(), Pa_GetVersionText(), | ||
| 167 | + and Pa_GetErrorText(), this function MUST be called before using any other | ||
| 168 | + PortAudio API functions. | ||
| 169 | + | ||
| 170 | + If Pa_Initialize() is called multiple times, each successful | ||
| 171 | + call must be matched with a corresponding call to Pa_Terminate(). | ||
| 172 | + Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not | ||
| 173 | + required to be fully nested. | ||
| 174 | + | ||
| 175 | + Note that if Pa_Initialize() returns an error code, Pa_Terminate() should | ||
| 176 | + NOT be called. | ||
| 177 | + | ||
| 178 | + @return paNoError if successful, otherwise an error code indicating the cause | ||
| 179 | + of failure. | ||
| 180 | + | ||
| 181 | + @see Pa_Terminate | ||
| 182 | +*/ | ||
| 183 | +PaError Pa_Initialize( void ); | ||
| 184 | + | ||
| 185 | + | ||
| 186 | +/** Library termination function - call this when finished using PortAudio. | ||
| 187 | + This function deallocates all resources allocated by PortAudio since it was | ||
| 188 | + initialized by a call to Pa_Initialize(). In cases where Pa_Initialise() has | ||
| 189 | + been called multiple times, each call must be matched with a corresponding call | ||
| 190 | + to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically | ||
| 191 | + close any PortAudio streams that are still open. | ||
| 192 | + | ||
| 193 | + Pa_Terminate() MUST be called before exiting a program which uses PortAudio. | ||
| 194 | + Failure to do so may result in serious resource leaks, such as audio devices | ||
| 195 | + not being available until the next reboot. | ||
| 196 | + | ||
| 197 | + @return paNoError if successful, otherwise an error code indicating the cause | ||
| 198 | + of failure. | ||
| 199 | + | ||
| 200 | + @see Pa_Initialize | ||
| 201 | +*/ | ||
| 202 | +PaError Pa_Terminate( void ); | ||
| 203 | + | ||
| 204 | + | ||
| 205 | + | ||
| 206 | +/** The type used to refer to audio devices. Values of this type usually | ||
| 207 | + range from 0 to (Pa_GetDeviceCount()-1), and may also take on the PaNoDevice | ||
| 208 | + and paUseHostApiSpecificDeviceSpecification values. | ||
| 209 | + | ||
| 210 | + @see Pa_GetDeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification | ||
| 211 | +*/ | ||
| 212 | +typedef int PaDeviceIndex; | ||
| 213 | + | ||
| 214 | + | ||
| 215 | +/** A special PaDeviceIndex value indicating that no device is available, | ||
| 216 | + or should be used. | ||
| 217 | + | ||
| 218 | + @see PaDeviceIndex | ||
| 219 | +*/ | ||
| 220 | +#define paNoDevice ((PaDeviceIndex)-1) | ||
| 221 | + | ||
| 222 | + | ||
| 223 | +/** A special PaDeviceIndex value indicating that the device(s) to be used | ||
| 224 | + are specified in the host api specific stream info structure. | ||
| 225 | + | ||
| 226 | + @see PaDeviceIndex | ||
| 227 | +*/ | ||
| 228 | +#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2) | ||
| 229 | + | ||
| 230 | + | ||
| 231 | +/* Host API enumeration mechanism */ | ||
| 232 | + | ||
| 233 | +/** The type used to enumerate to host APIs at runtime. Values of this type | ||
| 234 | + range from 0 to (Pa_GetHostApiCount()-1). | ||
| 235 | + | ||
| 236 | + @see Pa_GetHostApiCount | ||
| 237 | +*/ | ||
| 238 | +typedef int PaHostApiIndex; | ||
| 239 | + | ||
| 240 | + | ||
| 241 | +/** Retrieve the number of available host APIs. Even if a host API is | ||
| 242 | + available it may have no devices available. | ||
| 243 | + | ||
| 244 | + @return A non-negative value indicating the number of available host APIs | ||
| 245 | + or, a PaErrorCode (which are always negative) if PortAudio is not initialized | ||
| 246 | + or an error is encountered. | ||
| 247 | + | ||
| 248 | + @see PaHostApiIndex | ||
| 249 | +*/ | ||
| 250 | +PaHostApiIndex Pa_GetHostApiCount( void ); | ||
| 251 | + | ||
| 252 | + | ||
| 253 | +/** Retrieve the index of the default host API. The default host API will be | ||
| 254 | + the lowest common denominator host API on the current platform and is | ||
| 255 | + unlikely to provide the best performance. | ||
| 256 | + | ||
| 257 | + @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1) | ||
| 258 | + indicating the default host API index or, a PaErrorCode (which are always | ||
| 259 | + negative) if PortAudio is not initialized or an error is encountered. | ||
| 260 | +*/ | ||
| 261 | +PaHostApiIndex Pa_GetDefaultHostApi( void ); | ||
| 262 | + | ||
| 263 | + | ||
| 264 | +/** Unchanging unique identifiers for each supported host API. This type | ||
| 265 | + is used in the PaHostApiInfo structure. The values are guaranteed to be | ||
| 266 | + unique and to never change, thus allowing code to be written that | ||
| 267 | + conditionally uses host API specific extensions. | ||
| 268 | + | ||
| 269 | + New type ids will be allocated when support for a host API reaches | ||
| 270 | + "public alpha" status, prior to that developers should use the | ||
| 271 | + paInDevelopment type id. | ||
| 272 | + | ||
| 273 | + @see PaHostApiInfo | ||
| 274 | +*/ | ||
| 275 | +typedef enum PaHostApiTypeId | ||
| 276 | +{ | ||
| 277 | + paInDevelopment=0, /* use while developing support for a new host API */ | ||
| 278 | + paDirectSound=1, | ||
| 279 | + paMME=2, | ||
| 280 | + paASIO=3, | ||
| 281 | + paSoundManager=4, | ||
| 282 | + paCoreAudio=5, | ||
| 283 | + paOSS=7, | ||
| 284 | + paALSA=8, | ||
| 285 | + paAL=9, | ||
| 286 | + paBeOS=10, | ||
| 287 | + paWDMKS=11, | ||
| 288 | + paJACK=12, | ||
| 289 | + paWASAPI=13, | ||
| 290 | + paAudioScienceHPI=14 | ||
| 291 | +} PaHostApiTypeId; | ||
| 292 | + | ||
| 293 | + | ||
| 294 | +/** A structure containing information about a particular host API. */ | ||
| 295 | + | ||
| 296 | +typedef struct PaHostApiInfo | ||
| 297 | +{ | ||
| 298 | + /** this is struct version 1 */ | ||
| 299 | + int structVersion; | ||
| 300 | + /** The well known unique identifier of this host API @see PaHostApiTypeId */ | ||
| 301 | + PaHostApiTypeId type; | ||
| 302 | + /** A textual description of the host API for display on user interfaces. */ | ||
| 303 | + const char *name; | ||
| 304 | + | ||
| 305 | + /** The number of devices belonging to this host API. This field may be | ||
| 306 | + used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate | ||
| 307 | + all devices for this host API. | ||
| 308 | + @see Pa_HostApiDeviceIndexToDeviceIndex | ||
| 309 | + */ | ||
| 310 | + int deviceCount; | ||
| 311 | + | ||
| 312 | + /** The default input device for this host API. The value will be a | ||
| 313 | + device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice | ||
| 314 | + if no default input device is available. | ||
| 315 | + */ | ||
| 316 | + PaDeviceIndex defaultInputDevice; | ||
| 317 | + | ||
| 318 | + /** The default output device for this host API. The value will be a | ||
| 319 | + device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice | ||
| 320 | + if no default output device is available. | ||
| 321 | + */ | ||
| 322 | + PaDeviceIndex defaultOutputDevice; | ||
| 323 | + | ||
| 324 | +} PaHostApiInfo; | ||
| 325 | + | ||
| 326 | + | ||
| 327 | +/** Retrieve a pointer to a structure containing information about a specific | ||
| 328 | + host Api. | ||
| 329 | + | ||
| 330 | + @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) | ||
| 331 | + | ||
| 332 | + @return A pointer to an immutable PaHostApiInfo structure describing | ||
| 333 | + a specific host API. If the hostApi parameter is out of range or an error | ||
| 334 | + is encountered, the function returns NULL. | ||
| 335 | + | ||
| 336 | + The returned structure is owned by the PortAudio implementation and must not | ||
| 337 | + be manipulated or freed. The pointer is only guaranteed to be valid between | ||
| 338 | + calls to Pa_Initialize() and Pa_Terminate(). | ||
| 339 | +*/ | ||
| 340 | +const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi ); | ||
| 341 | + | ||
| 342 | + | ||
| 343 | +/** Convert a static host API unique identifier, into a runtime | ||
| 344 | + host API index. | ||
| 345 | + | ||
| 346 | + @param type A unique host API identifier belonging to the PaHostApiTypeId | ||
| 347 | + enumeration. | ||
| 348 | + | ||
| 349 | + @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or, | ||
| 350 | + a PaErrorCode (which are always negative) if PortAudio is not initialized | ||
| 351 | + or an error is encountered. | ||
| 352 | + | ||
| 353 | + The paHostApiNotFound error code indicates that the host API specified by the | ||
| 354 | + type parameter is not available. | ||
| 355 | + | ||
| 356 | + @see PaHostApiTypeId | ||
| 357 | +*/ | ||
| 358 | +PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ); | ||
| 359 | + | ||
| 360 | + | ||
| 361 | +/** Convert a host-API-specific device index to standard PortAudio device index. | ||
| 362 | + This function may be used in conjunction with the deviceCount field of | ||
| 363 | + PaHostApiInfo to enumerate all devices for the specified host API. | ||
| 364 | + | ||
| 365 | + @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) | ||
| 366 | + | ||
| 367 | + @param hostApiDeviceIndex A valid per-host device index in the range | ||
| 368 | + 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1) | ||
| 369 | + | ||
| 370 | + @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1) | ||
| 371 | + or, a PaErrorCode (which are always negative) if PortAudio is not initialized | ||
| 372 | + or an error is encountered. | ||
| 373 | + | ||
| 374 | + A paInvalidHostApi error code indicates that the host API index specified by | ||
| 375 | + the hostApi parameter is out of range. | ||
| 376 | + | ||
| 377 | + A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter | ||
| 378 | + is out of range. | ||
| 379 | + | ||
| 380 | + @see PaHostApiInfo | ||
| 381 | +*/ | ||
| 382 | +PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, | ||
| 383 | + int hostApiDeviceIndex ); | ||
| 384 | + | ||
| 385 | + | ||
| 386 | + | ||
| 387 | +/** Structure used to return information about a host error condition. | ||
| 388 | +*/ | ||
| 389 | +typedef struct PaHostErrorInfo{ | ||
| 390 | + PaHostApiTypeId hostApiType; /**< the host API which returned the error code */ | ||
| 391 | + long errorCode; /**< the error code returned */ | ||
| 392 | + const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */ | ||
| 393 | +}PaHostErrorInfo; | ||
| 394 | + | ||
| 395 | + | ||
| 396 | +/** Return information about the last host error encountered. The error | ||
| 397 | + information returned by Pa_GetLastHostErrorInfo() will never be modified | ||
| 398 | + asynchronously by errors occurring in other PortAudio owned threads | ||
| 399 | + (such as the thread that manages the stream callback.) | ||
| 400 | + | ||
| 401 | + This function is provided as a last resort, primarily to enhance debugging | ||
| 402 | + by providing clients with access to all available error information. | ||
| 403 | + | ||
| 404 | + @return A pointer to an immutable structure constraining information about | ||
| 405 | + the host error. The values in this structure will only be valid if a | ||
| 406 | + PortAudio function has previously returned the paUnanticipatedHostError | ||
| 407 | + error code. | ||
| 408 | +*/ | ||
| 409 | +const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ); | ||
| 410 | + | ||
| 411 | + | ||
| 412 | + | ||
| 413 | +/* Device enumeration and capabilities */ | ||
| 414 | + | ||
| 415 | +/** Retrieve the number of available devices. The number of available devices | ||
| 416 | + may be zero. | ||
| 417 | + | ||
| 418 | + @return A non-negative value indicating the number of available devices or, | ||
| 419 | + a PaErrorCode (which are always negative) if PortAudio is not initialized | ||
| 420 | + or an error is encountered. | ||
| 421 | +*/ | ||
| 422 | +PaDeviceIndex Pa_GetDeviceCount( void ); | ||
| 423 | + | ||
| 424 | + | ||
| 425 | +/** Retrieve the index of the default input device. The result can be | ||
| 426 | + used in the inputDevice parameter to Pa_OpenStream(). | ||
| 427 | + | ||
| 428 | + @return The default input device index for the default host API, or paNoDevice | ||
| 429 | + if no default input device is available or an error was encountered. | ||
| 430 | +*/ | ||
| 431 | +PaDeviceIndex Pa_GetDefaultInputDevice( void ); | ||
| 432 | + | ||
| 433 | + | ||
| 434 | +/** Retrieve the index of the default output device. The result can be | ||
| 435 | + used in the outputDevice parameter to Pa_OpenStream(). | ||
| 436 | + | ||
| 437 | + @return The default output device index for the default host API, or paNoDevice | ||
| 438 | + if no default output device is available or an error was encountered. | ||
| 439 | + | ||
| 440 | + @note | ||
| 441 | + On the PC, the user can specify a default device by | ||
| 442 | + setting an environment variable. For example, to use device #1. | ||
| 443 | +<pre> | ||
| 444 | + set PA_RECOMMENDED_OUTPUT_DEVICE=1 | ||
| 445 | +</pre> | ||
| 446 | + The user should first determine the available device ids by using | ||
| 447 | + the supplied application "pa_devs". | ||
| 448 | +*/ | ||
| 449 | +PaDeviceIndex Pa_GetDefaultOutputDevice( void ); | ||
| 450 | + | ||
| 451 | + | ||
| 452 | +/** The type used to represent monotonic time in seconds. PaTime is | ||
| 453 | + used for the fields of the PaStreamCallbackTimeInfo argument to the | ||
| 454 | + PaStreamCallback and as the result of Pa_GetStreamTime(). | ||
| 455 | + | ||
| 456 | + PaTime values have unspecified origin. | ||
| 457 | + | ||
| 458 | + @see PaStreamCallback, PaStreamCallbackTimeInfo, Pa_GetStreamTime | ||
| 459 | +*/ | ||
| 460 | +typedef double PaTime; | ||
| 461 | + | ||
| 462 | + | ||
| 463 | +/** A type used to specify one or more sample formats. Each value indicates | ||
| 464 | + a possible format for sound data passed to and from the stream callback, | ||
| 465 | + Pa_ReadStream and Pa_WriteStream. | ||
| 466 | + | ||
| 467 | + The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 | ||
| 468 | + and aUInt8 are usually implemented by all implementations. | ||
| 469 | + | ||
| 470 | + The floating point representation (paFloat32) uses +1.0 and -1.0 as the | ||
| 471 | + maximum and minimum respectively. | ||
| 472 | + | ||
| 473 | + paUInt8 is an unsigned 8 bit format where 128 is considered "ground" | ||
| 474 | + | ||
| 475 | + The paNonInterleaved flag indicates that audio data is passed as an array | ||
| 476 | + of pointers to separate buffers, one buffer for each channel. Usually, | ||
| 477 | + when this flag is not used, audio data is passed as a single buffer with | ||
| 478 | + all channels interleaved. | ||
| 479 | + | ||
| 480 | + @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo | ||
| 481 | + @see paFloat32, paInt16, paInt32, paInt24, paInt8 | ||
| 482 | + @see paUInt8, paCustomFormat, paNonInterleaved | ||
| 483 | +*/ | ||
| 484 | +typedef unsigned long PaSampleFormat; | ||
| 485 | + | ||
| 486 | + | ||
| 487 | +#define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ | ||
| 488 | +#define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ | ||
| 489 | +#define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ | ||
| 490 | +#define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ | ||
| 491 | +#define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ | ||
| 492 | +#define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ | ||
| 493 | +#define paCustomFormat ((PaSampleFormat) 0x00010000) /**< @see PaSampleFormat */ | ||
| 494 | + | ||
| 495 | +#define paNonInterleaved ((PaSampleFormat) 0x80000000) /**< @see PaSampleFormat */ | ||
| 496 | + | ||
| 497 | +/** A structure providing information and capabilities of PortAudio devices. | ||
| 498 | + Devices may support input, output or both input and output. | ||
| 499 | +*/ | ||
| 500 | +typedef struct PaDeviceInfo | ||
| 501 | +{ | ||
| 502 | + int structVersion; /* this is struct version 2 */ | ||
| 503 | + const char *name; | ||
| 504 | + PaHostApiIndex hostApi; /**< note this is a host API index, not a type id*/ | ||
| 505 | + | ||
| 506 | + int maxInputChannels; | ||
| 507 | + int maxOutputChannels; | ||
| 508 | + | ||
| 509 | + /** Default latency values for interactive performance. */ | ||
| 510 | + PaTime defaultLowInputLatency; | ||
| 511 | + PaTime defaultLowOutputLatency; | ||
| 512 | + /** Default latency values for robust non-interactive applications (eg. playing sound files). */ | ||
| 513 | + PaTime defaultHighInputLatency; | ||
| 514 | + PaTime defaultHighOutputLatency; | ||
| 515 | + | ||
| 516 | + double defaultSampleRate; | ||
| 517 | +} PaDeviceInfo; | ||
| 518 | + | ||
| 519 | + | ||
| 520 | +/** Retrieve a pointer to a PaDeviceInfo structure containing information | ||
| 521 | + about the specified device. | ||
| 522 | + @return A pointer to an immutable PaDeviceInfo structure. If the device | ||
| 523 | + parameter is out of range the function returns NULL. | ||
| 524 | + | ||
| 525 | + @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) | ||
| 526 | + | ||
| 527 | + @note PortAudio manages the memory referenced by the returned pointer, | ||
| 528 | + the client must not manipulate or free the memory. The pointer is only | ||
| 529 | + guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). | ||
| 530 | + | ||
| 531 | + @see PaDeviceInfo, PaDeviceIndex | ||
| 532 | +*/ | ||
| 533 | +const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); | ||
| 534 | + | ||
| 535 | + | ||
| 536 | +/** Parameters for one direction (input or output) of a stream. | ||
| 537 | +*/ | ||
| 538 | +typedef struct PaStreamParameters | ||
| 539 | +{ | ||
| 540 | + /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) | ||
| 541 | + specifying the device to be used or the special constant | ||
| 542 | + paUseHostApiSpecificDeviceSpecification which indicates that the actual | ||
| 543 | + device(s) to use are specified in hostApiSpecificStreamInfo. | ||
| 544 | + This field must not be set to paNoDevice. | ||
| 545 | + */ | ||
| 546 | + PaDeviceIndex device; | ||
| 547 | + | ||
| 548 | + /** The number of channels of sound to be delivered to the | ||
| 549 | + stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). | ||
| 550 | + It can range from 1 to the value of maxInputChannels in the | ||
| 551 | + PaDeviceInfo record for the device specified by the device parameter. | ||
| 552 | + */ | ||
| 553 | + int channelCount; | ||
| 554 | + | ||
| 555 | + /** The sample format of the buffer provided to the stream callback, | ||
| 556 | + a_ReadStream() or Pa_WriteStream(). It may be any of the formats described | ||
| 557 | + by the PaSampleFormat enumeration. | ||
| 558 | + */ | ||
| 559 | + PaSampleFormat sampleFormat; | ||
| 560 | + | ||
| 561 | + /** The desired latency in seconds. Where practical, implementations should | ||
| 562 | + configure their latency based on these parameters, otherwise they may | ||
| 563 | + choose the closest viable latency instead. Unless the suggested latency | ||
| 564 | + is greater than the absolute upper limit for the device implementations | ||
| 565 | + should round the suggestedLatency up to the next practical value - ie to | ||
| 566 | + provide an equal or higher latency than suggestedLatency wherever possible. | ||
| 567 | + Actual latency values for an open stream may be retrieved using the | ||
| 568 | + inputLatency and outputLatency fields of the PaStreamInfo structure | ||
| 569 | + returned by Pa_GetStreamInfo(). | ||
| 570 | + @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo | ||
| 571 | + */ | ||
| 572 | + PaTime suggestedLatency; | ||
| 573 | + | ||
| 574 | + /** An optional pointer to a host api specific data structure | ||
| 575 | + containing additional information for device setup and/or stream processing. | ||
| 576 | + hostApiSpecificStreamInfo is never required for correct operation, | ||
| 577 | + if not used it should be set to NULL. | ||
| 578 | + */ | ||
| 579 | + void *hostApiSpecificStreamInfo; | ||
| 580 | + | ||
| 581 | +} PaStreamParameters; | ||
| 582 | + | ||
| 583 | + | ||
| 584 | +/** Return code for Pa_IsFormatSupported indicating success. */ | ||
| 585 | +#define paFormatIsSupported (0) | ||
| 586 | + | ||
| 587 | +/** Determine whether it would be possible to open a stream with the specified | ||
| 588 | + parameters. | ||
| 589 | + | ||
| 590 | + @param inputParameters A structure that describes the input parameters used to | ||
| 591 | + open a stream. The suggestedLatency field is ignored. See PaStreamParameters | ||
| 592 | + for a description of these parameters. inputParameters must be NULL for | ||
| 593 | + output-only streams. | ||
| 594 | + | ||
| 595 | + @param outputParameters A structure that describes the output parameters used | ||
| 596 | + to open a stream. The suggestedLatency field is ignored. See PaStreamParameters | ||
| 597 | + for a description of these parameters. outputParameters must be NULL for | ||
| 598 | + input-only streams. | ||
| 599 | + | ||
| 600 | + @param sampleRate The required sampleRate. For full-duplex streams it is the | ||
| 601 | + sample rate for both input and output | ||
| 602 | + | ||
| 603 | + @return Returns 0 if the format is supported, and an error code indicating why | ||
| 604 | + the format is not supported otherwise. The constant paFormatIsSupported is | ||
| 605 | + provided to compare with the return value for success. | ||
| 606 | + | ||
| 607 | + @see paFormatIsSupported, PaStreamParameters | ||
| 608 | +*/ | ||
| 609 | +PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, | ||
| 610 | + const PaStreamParameters *outputParameters, | ||
| 611 | + double sampleRate ); | ||
| 612 | + | ||
| 613 | + | ||
| 614 | + | ||
| 615 | +/* Streaming types and functions */ | ||
| 616 | + | ||
| 617 | + | ||
| 618 | +/** | ||
| 619 | + A single PaStream can provide multiple channels of real-time | ||
| 620 | + streaming audio input and output to a client application. A stream | ||
| 621 | + provides access to audio hardware represented by one or more | ||
| 622 | + PaDevices. Depending on the underlying Host API, it may be possible | ||
| 623 | + to open multiple streams using the same device, however this behavior | ||
| 624 | + is implementation defined. Portable applications should assume that | ||
| 625 | + a PaDevice may be simultaneously used by at most one PaStream. | ||
| 626 | + | ||
| 627 | + Pointers to PaStream objects are passed between PortAudio functions that | ||
| 628 | + operate on streams. | ||
| 629 | + | ||
| 630 | + @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, | ||
| 631 | + Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, | ||
| 632 | + Pa_GetStreamTime, Pa_GetStreamCpuLoad | ||
| 633 | + | ||
| 634 | +*/ | ||
| 635 | +typedef void PaStream; | ||
| 636 | + | ||
| 637 | + | ||
| 638 | +/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() | ||
| 639 | + or Pa_OpenDefaultStream() to indicate that the stream callback will | ||
| 640 | + accept buffers of any size. | ||
| 641 | +*/ | ||
| 642 | +#define paFramesPerBufferUnspecified (0) | ||
| 643 | + | ||
| 644 | + | ||
| 645 | +/** Flags used to control the behavior of a stream. They are passed as | ||
| 646 | + parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be | ||
| 647 | + ORed together. | ||
| 648 | + | ||
| 649 | + @see Pa_OpenStream, Pa_OpenDefaultStream | ||
| 650 | + @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, | ||
| 651 | + paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags | ||
| 652 | +*/ | ||
| 653 | +typedef unsigned long PaStreamFlags; | ||
| 654 | + | ||
| 655 | +/** @see PaStreamFlags */ | ||
| 656 | +#define paNoFlag ((PaStreamFlags) 0) | ||
| 657 | + | ||
| 658 | +/** Disable default clipping of out of range samples. | ||
| 659 | + @see PaStreamFlags | ||
| 660 | +*/ | ||
| 661 | +#define paClipOff ((PaStreamFlags) 0x00000001) | ||
| 662 | + | ||
| 663 | +/** Disable default dithering. | ||
| 664 | + @see PaStreamFlags | ||
| 665 | +*/ | ||
| 666 | +#define paDitherOff ((PaStreamFlags) 0x00000002) | ||
| 667 | + | ||
| 668 | +/** Flag requests that where possible a full duplex stream will not discard | ||
| 669 | + overflowed input samples without calling the stream callback. This flag is | ||
| 670 | + only valid for full duplex callback streams and only when used in combination | ||
| 671 | + with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using | ||
| 672 | + this flag incorrectly results in a paInvalidFlag error being returned from | ||
| 673 | + Pa_OpenStream and Pa_OpenDefaultStream. | ||
| 674 | + | ||
| 675 | + @see PaStreamFlags, paFramesPerBufferUnspecified | ||
| 676 | +*/ | ||
| 677 | +#define paNeverDropInput ((PaStreamFlags) 0x00000004) | ||
| 678 | + | ||
| 679 | +/** Call the stream callback to fill initial output buffers, rather than the | ||
| 680 | + default behavior of priming the buffers with zeros (silence). This flag has | ||
| 681 | + no effect for input-only and blocking read/write streams. | ||
| 682 | + | ||
| 683 | + @see PaStreamFlags | ||
| 684 | +*/ | ||
| 685 | +#define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) | ||
| 686 | + | ||
| 687 | +/** A mask specifying the platform specific bits. | ||
| 688 | + @see PaStreamFlags | ||
| 689 | +*/ | ||
| 690 | +#define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) | ||
| 691 | + | ||
| 692 | +/** | ||
| 693 | + Timing information for the buffers passed to the stream callback. | ||
| 694 | + | ||
| 695 | + Time values are expressed in seconds and are synchronised with the time base used by Pa_GetStreamTime() for the associated stream. | ||
| 696 | + | ||
| 697 | + @see PaStreamCallback, Pa_GetStreamTime | ||
| 698 | +*/ | ||
| 699 | +typedef struct PaStreamCallbackTimeInfo{ | ||
| 700 | + PaTime inputBufferAdcTime; /**< The time when the first sample of the input buffer was captured at the ADC input */ | ||
| 701 | + PaTime currentTime; /**< The time when the stream callback was invoked */ | ||
| 702 | + PaTime outputBufferDacTime; /**< The time when the first sample of the output buffer will output the DAC */ | ||
| 703 | +} PaStreamCallbackTimeInfo; | ||
| 704 | + | ||
| 705 | + | ||
| 706 | +/** | ||
| 707 | + Flag bit constants for the statusFlags to PaStreamCallback. | ||
| 708 | + | ||
| 709 | + @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, | ||
| 710 | + paPrimingOutput | ||
| 711 | +*/ | ||
| 712 | +typedef unsigned long PaStreamCallbackFlags; | ||
| 713 | + | ||
| 714 | +/** In a stream opened with paFramesPerBufferUnspecified, indicates that | ||
| 715 | + input data is all silence (zeros) because no real data is available. In a | ||
| 716 | + stream opened without paFramesPerBufferUnspecified, it indicates that one or | ||
| 717 | + more zero samples have been inserted into the input buffer to compensate | ||
| 718 | + for an input underflow. | ||
| 719 | + @see PaStreamCallbackFlags | ||
| 720 | +*/ | ||
| 721 | +#define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) | ||
| 722 | + | ||
| 723 | +/** In a stream opened with paFramesPerBufferUnspecified, indicates that data | ||
| 724 | + prior to the first sample of the input buffer was discarded due to an | ||
| 725 | + overflow, possibly because the stream callback is using too much CPU time. | ||
| 726 | + Otherwise indicates that data prior to one or more samples in the | ||
| 727 | + input buffer was discarded. | ||
| 728 | + @see PaStreamCallbackFlags | ||
| 729 | +*/ | ||
| 730 | +#define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) | ||
| 731 | + | ||
| 732 | +/** Indicates that output data (or a gap) was inserted, possibly because the | ||
| 733 | + stream callback is using too much CPU time. | ||
| 734 | + @see PaStreamCallbackFlags | ||
| 735 | +*/ | ||
| 736 | +#define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) | ||
| 737 | + | ||
| 738 | +/** Indicates that output data will be discarded because no room is available. | ||
| 739 | + @see PaStreamCallbackFlags | ||
| 740 | +*/ | ||
| 741 | +#define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) | ||
| 742 | + | ||
| 743 | +/** Some of all of the output data will be used to prime the stream, input | ||
| 744 | + data may be zero. | ||
| 745 | + @see PaStreamCallbackFlags | ||
| 746 | +*/ | ||
| 747 | +#define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) | ||
| 748 | + | ||
| 749 | +/** | ||
| 750 | + Allowable return values for the PaStreamCallback. | ||
| 751 | + @see PaStreamCallback | ||
| 752 | +*/ | ||
| 753 | +typedef enum PaStreamCallbackResult | ||
| 754 | +{ | ||
| 755 | + paContinue=0, /**< Signal that the stream should continue invoking the callback and processing audio. */ | ||
| 756 | + paComplete=1, /**< Signal that the stream should stop invoking the callback and finish once all output samples have played. */ | ||
| 757 | + paAbort=2 /**< Signal that the stream should stop invoking the callback and finish as soon as possible. */ | ||
| 758 | +} PaStreamCallbackResult; | ||
| 759 | + | ||
| 760 | + | ||
| 761 | +/** | ||
| 762 | + Functions of type PaStreamCallback are implemented by PortAudio clients. | ||
| 763 | + They consume, process or generate audio in response to requests from an | ||
| 764 | + active PortAudio stream. | ||
| 765 | + | ||
| 766 | + When a stream is running, PortAudio calls the stream callback periodically. | ||
| 767 | + The callback function is responsible for processing buffers of audio samples | ||
| 768 | + passed via the input and output parameters. | ||
| 769 | + | ||
| 770 | + The PortAudio stream callback runs at very high or real-time priority. | ||
| 771 | + It is required to consistently meet its time deadlines. Do not allocate | ||
| 772 | + memory, access the file system, call library functions or call other functions | ||
| 773 | + from the stream callback that may block or take an unpredictable amount of | ||
| 774 | + time to complete. | ||
| 775 | + | ||
| 776 | + In order for a stream to maintain glitch-free operation the callback | ||
| 777 | + must consume and return audio data faster than it is recorded and/or | ||
| 778 | + played. PortAudio anticipates that each callback invocation may execute for | ||
| 779 | + a duration approaching the duration of frameCount audio frames at the stream | ||
| 780 | + sample rate. It is reasonable to expect to be able to utilise 70% or more of | ||
| 781 | + the available CPU time in the PortAudio callback. However, due to buffer size | ||
| 782 | + adaption and other factors, not all host APIs are able to guarantee audio | ||
| 783 | + stability under heavy CPU load with arbitrary fixed callback buffer sizes. | ||
| 784 | + When high callback CPU utilisation is required the most robust behavior | ||
| 785 | + can be achieved by using paFramesPerBufferUnspecified as the | ||
| 786 | + Pa_OpenStream() framesPerBuffer parameter. | ||
| 787 | + | ||
| 788 | + @param input and @param output are either arrays of interleaved samples or; | ||
| 789 | + if non-interleaved samples were requested using the paNonInterleaved sample | ||
| 790 | + format flag, an array of buffer pointers, one non-interleaved buffer for | ||
| 791 | + each channel. | ||
| 792 | + | ||
| 793 | + The format, packing and number of channels used by the buffers are | ||
| 794 | + determined by parameters to Pa_OpenStream(). | ||
| 795 | + | ||
| 796 | + @param frameCount The number of sample frames to be processed by | ||
| 797 | + the stream callback. | ||
| 798 | + | ||
| 799 | + @param timeInfo Timestamps indicating the ADC capture time of the first sample | ||
| 800 | + in the input buffer, the DAC output time of the first sample in the output buffer | ||
| 801 | + and the time the callback was invoked. | ||
| 802 | + See PaStreamCallbackTimeInfo and Pa_GetStreamTime() | ||
| 803 | + | ||
| 804 | + @param statusFlags Flags indicating whether input and/or output buffers | ||
| 805 | + have been inserted or will be dropped to overcome underflow or overflow | ||
| 806 | + conditions. | ||
| 807 | + | ||
| 808 | + @param userData The value of a user supplied pointer passed to | ||
| 809 | + Pa_OpenStream() intended for storing synthesis data etc. | ||
| 810 | + | ||
| 811 | + @return | ||
| 812 | + The stream callback should return one of the values in the | ||
| 813 | + ::PaStreamCallbackResult enumeration. To ensure that the callback continues | ||
| 814 | + to be called, it should return paContinue (0). Either paComplete or paAbort | ||
| 815 | + can be returned to finish stream processing, after either of these values is | ||
| 816 | + returned the callback will not be called again. If paAbort is returned the | ||
| 817 | + stream will finish as soon as possible. If paComplete is returned, the stream | ||
| 818 | + will continue until all buffers generated by the callback have been played. | ||
| 819 | + This may be useful in applications such as soundfile players where a specific | ||
| 820 | + duration of output is required. However, it is not necessary to utilize this | ||
| 821 | + mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also | ||
| 822 | + be used to stop the stream. The callback must always fill the entire output | ||
| 823 | + buffer irrespective of its return value. | ||
| 824 | + | ||
| 825 | + @see Pa_OpenStream, Pa_OpenDefaultStream | ||
| 826 | + | ||
| 827 | + @note With the exception of Pa_GetStreamCpuLoad() it is not permissible to call | ||
| 828 | + PortAudio API functions from within the stream callback. | ||
| 829 | +*/ | ||
| 830 | +typedef int PaStreamCallback( | ||
| 831 | + const void *input, void *output, | ||
| 832 | + unsigned long frameCount, | ||
| 833 | + const PaStreamCallbackTimeInfo* timeInfo, | ||
| 834 | + PaStreamCallbackFlags statusFlags, | ||
| 835 | + void *userData ); | ||
| 836 | + | ||
| 837 | + | ||
| 838 | +/** Opens a stream for either input, output or both. | ||
| 839 | + | ||
| 840 | + @param stream The address of a PaStream pointer which will receive | ||
| 841 | + a pointer to the newly opened stream. | ||
| 842 | + | ||
| 843 | + @param inputParameters A structure that describes the input parameters used by | ||
| 844 | + the opened stream. See PaStreamParameters for a description of these parameters. | ||
| 845 | + inputParameters must be NULL for output-only streams. | ||
| 846 | + | ||
| 847 | + @param outputParameters A structure that describes the output parameters used by | ||
| 848 | + the opened stream. See PaStreamParameters for a description of these parameters. | ||
| 849 | + outputParameters must be NULL for input-only streams. | ||
| 850 | + | ||
| 851 | + @param sampleRate The desired sampleRate. For full-duplex streams it is the | ||
| 852 | + sample rate for both input and output. Note that the actual sampleRate | ||
| 853 | + may differ very slightly from the desired rate because of hardware limitations. | ||
| 854 | + The exact rate can be queried using Pa_GetStreamInfo(). If nothing close | ||
| 855 | + to the desired sampleRate is available then the open will fail and return an error. | ||
| 856 | + | ||
| 857 | + @param framesPerBuffer The number of frames passed to the stream callback | ||
| 858 | + function, or the preferred block granularity for a blocking read/write stream. | ||
| 859 | + The special value paFramesPerBufferUnspecified (0) may be used to request that | ||
| 860 | + the stream callback will receive an optimal (and possibly varying) number of | ||
| 861 | + frames based on host requirements and the requested latency settings. | ||
| 862 | + Note: With some host APIs, the use of non-zero framesPerBuffer for a callback | ||
| 863 | + stream may introduce an additional layer of buffering which could introduce | ||
| 864 | + additional latency. PortAudio guarantees that the additional latency | ||
| 865 | + will be kept to the theoretical minimum however, it is strongly recommended | ||
| 866 | + that a non-zero framesPerBuffer value only be used when your algorithm | ||
| 867 | + requires a fixed number of frames per stream callback. | ||
| 868 | + | ||
| 869 | + @param streamFlags Flags which modify the behavior of the streaming process. | ||
| 870 | + This parameter may contain a combination of flags ORed together. Some flags may | ||
| 871 | + only be relevant to certain buffer formats. | ||
| 872 | + | ||
| 873 | + @param streamCallback A pointer to a client supplied function that is responsible | ||
| 874 | + for processing and filling input and output buffers. If this parameter is NULL | ||
| 875 | + the stream will be opened in 'blocking read/write' mode. In blocking mode, | ||
| 876 | + the client can receive sample data using Pa_ReadStream and write sample data | ||
| 877 | + using Pa_WriteStream, the number of samples that may be read or written | ||
| 878 | + without blocking is returned by Pa_GetStreamReadAvailable and | ||
| 879 | + Pa_GetStreamWriteAvailable respectively. | ||
| 880 | + | ||
| 881 | + @param userData A client supplied pointer which is passed to the stream callback | ||
| 882 | + function. It could for example, contain a pointer to instance data necessary | ||
| 883 | + for processing the audio buffers. This parameter is ignored if streamCallback | ||
| 884 | + is NULL. | ||
| 885 | + | ||
| 886 | + @return | ||
| 887 | + Upon success Pa_OpenStream() returns paNoError and places a pointer to a | ||
| 888 | + valid PaStream in the stream argument. The stream is inactive (stopped). | ||
| 889 | + If a call to Pa_OpenStream() fails, a non-zero error code is returned (see | ||
| 890 | + PaError for possible error codes) and the value of stream is invalid. | ||
| 891 | + | ||
| 892 | + @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, | ||
| 893 | + Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable | ||
| 894 | +*/ | ||
| 895 | +PaError Pa_OpenStream( PaStream** stream, | ||
| 896 | + const PaStreamParameters *inputParameters, | ||
| 897 | + const PaStreamParameters *outputParameters, | ||
| 898 | + double sampleRate, | ||
| 899 | + unsigned long framesPerBuffer, | ||
| 900 | + PaStreamFlags streamFlags, | ||
| 901 | + PaStreamCallback *streamCallback, | ||
| 902 | + void *userData ); | ||
| 903 | + | ||
| 904 | + | ||
| 905 | +/** A simplified version of Pa_OpenStream() that opens the default input | ||
| 906 | + and/or output devices. | ||
| 907 | + | ||
| 908 | + @param stream The address of a PaStream pointer which will receive | ||
| 909 | + a pointer to the newly opened stream. | ||
| 910 | + | ||
| 911 | + @param numInputChannels The number of channels of sound that will be supplied | ||
| 912 | + to the stream callback or returned by Pa_ReadStream. It can range from 1 to | ||
| 913 | + the value of maxInputChannels in the PaDeviceInfo record for the default input | ||
| 914 | + device. If 0 the stream is opened as an output-only stream. | ||
| 915 | + | ||
| 916 | + @param numOutputChannels The number of channels of sound to be delivered to the | ||
| 917 | + stream callback or passed to Pa_WriteStream. It can range from 1 to the value | ||
| 918 | + of maxOutputChannels in the PaDeviceInfo record for the default output device. | ||
| 919 | + If 0 the stream is opened as an output-only stream. | ||
| 920 | + | ||
| 921 | + @param sampleFormat The sample format of both the input and output buffers | ||
| 922 | + provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. | ||
| 923 | + sampleFormat may be any of the formats described by the PaSampleFormat | ||
| 924 | + enumeration. | ||
| 925 | + | ||
| 926 | + @param sampleRate Same as Pa_OpenStream parameter of the same name. | ||
| 927 | + @param framesPerBuffer Same as Pa_OpenStream parameter of the same name. | ||
| 928 | + @param streamCallback Same as Pa_OpenStream parameter of the same name. | ||
| 929 | + @param userData Same as Pa_OpenStream parameter of the same name. | ||
| 930 | + | ||
| 931 | + @return As for Pa_OpenStream | ||
| 932 | + | ||
| 933 | + @see Pa_OpenStream, PaStreamCallback | ||
| 934 | +*/ | ||
| 935 | +PaError Pa_OpenDefaultStream( PaStream** stream, | ||
| 936 | + int numInputChannels, | ||
| 937 | + int numOutputChannels, | ||
| 938 | + PaSampleFormat sampleFormat, | ||
| 939 | + double sampleRate, | ||
| 940 | + unsigned long framesPerBuffer, | ||
| 941 | + PaStreamCallback *streamCallback, | ||
| 942 | + void *userData ); | ||
| 943 | + | ||
| 944 | + | ||
| 945 | +/** Closes an audio stream. If the audio stream is active it | ||
| 946 | + discards any pending buffers as if Pa_AbortStream() had been called. | ||
| 947 | +*/ | ||
| 948 | +PaError Pa_CloseStream( PaStream *stream ); | ||
| 949 | + | ||
| 950 | + | ||
| 951 | +/** Functions of type PaStreamFinishedCallback are implemented by PortAudio | ||
| 952 | + clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback | ||
| 953 | + function. Once registered they are called when the stream becomes inactive | ||
| 954 | + (ie once a call to Pa_StopStream() will not block). | ||
| 955 | + A stream will become inactive after the stream callback returns non-zero, | ||
| 956 | + or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio | ||
| 957 | + output, if the stream callback returns paComplete, or Pa_StopStream() is called, | ||
| 958 | + the stream finished callback will not be called until all generated sample data | ||
| 959 | + has been played. | ||
| 960 | + | ||
| 961 | + @param userData The userData parameter supplied to Pa_OpenStream() | ||
| 962 | + | ||
| 963 | + @see Pa_SetStreamFinishedCallback | ||
| 964 | +*/ | ||
| 965 | +typedef void PaStreamFinishedCallback( void *userData ); | ||
| 966 | + | ||
| 967 | + | ||
| 968 | +/** Register a stream finished callback function which will be called when the | ||
| 969 | + stream becomes inactive. See the description of PaStreamFinishedCallback for | ||
| 970 | + further details about when the callback will be called. | ||
| 971 | + | ||
| 972 | + @param stream a pointer to a PaStream that is in the stopped state - if the | ||
| 973 | + stream is not stopped, the stream's finished callback will remain unchanged | ||
| 974 | + and an error code will be returned. | ||
| 975 | + | ||
| 976 | + @param streamFinishedCallback a pointer to a function with the same signature | ||
| 977 | + as PaStreamFinishedCallback, that will be called when the stream becomes | ||
| 978 | + inactive. Passing NULL for this parameter will un-register a previously | ||
| 979 | + registered stream finished callback function. | ||
| 980 | + | ||
| 981 | + @return on success returns paNoError, otherwise an error code indicating the cause | ||
| 982 | + of the error. | ||
| 983 | + | ||
| 984 | + @see PaStreamFinishedCallback | ||
| 985 | +*/ | ||
| 986 | +PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); | ||
| 987 | + | ||
| 988 | + | ||
| 989 | +/** Commences audio processing. | ||
| 990 | +*/ | ||
| 991 | +PaError Pa_StartStream( PaStream *stream ); | ||
| 992 | + | ||
| 993 | + | ||
| 994 | +/** Terminates audio processing. It waits until all pending | ||
| 995 | + audio buffers have been played before it returns. | ||
| 996 | +*/ | ||
| 997 | +PaError Pa_StopStream( PaStream *stream ); | ||
| 998 | + | ||
| 999 | + | ||
| 1000 | +/** Terminates audio processing immediately without waiting for pending | ||
| 1001 | + buffers to complete. | ||
| 1002 | +*/ | ||
| 1003 | +PaError Pa_AbortStream( PaStream *stream ); | ||
| 1004 | + | ||
| 1005 | + | ||
| 1006 | +/** Determine whether the stream is stopped. | ||
| 1007 | + A stream is considered to be stopped prior to a successful call to | ||
| 1008 | + Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. | ||
| 1009 | + If a stream callback returns a value other than paContinue the stream is NOT | ||
| 1010 | + considered to be stopped. | ||
| 1011 | + | ||
| 1012 | + @return Returns one (1) when the stream is stopped, zero (0) when | ||
| 1013 | + the stream is running or, a PaErrorCode (which are always negative) if | ||
| 1014 | + PortAudio is not initialized or an error is encountered. | ||
| 1015 | + | ||
| 1016 | + @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive | ||
| 1017 | +*/ | ||
| 1018 | +PaError Pa_IsStreamStopped( PaStream *stream ); | ||
| 1019 | + | ||
| 1020 | + | ||
| 1021 | +/** Determine whether the stream is active. | ||
| 1022 | + A stream is active after a successful call to Pa_StartStream(), until it | ||
| 1023 | + becomes inactive either as a result of a call to Pa_StopStream() or | ||
| 1024 | + Pa_AbortStream(), or as a result of a return value other than paContinue from | ||
| 1025 | + the stream callback. In the latter case, the stream is considered inactive | ||
| 1026 | + after the last buffer has finished playing. | ||
| 1027 | + | ||
| 1028 | + @return Returns one (1) when the stream is active (ie playing or recording | ||
| 1029 | + audio), zero (0) when not playing or, a PaErrorCode (which are always negative) | ||
| 1030 | + if PortAudio is not initialized or an error is encountered. | ||
| 1031 | + | ||
| 1032 | + @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped | ||
| 1033 | +*/ | ||
| 1034 | +PaError Pa_IsStreamActive( PaStream *stream ); | ||
| 1035 | + | ||
| 1036 | + | ||
| 1037 | + | ||
| 1038 | +/** A structure containing unchanging information about an open stream. | ||
| 1039 | + @see Pa_GetStreamInfo | ||
| 1040 | +*/ | ||
| 1041 | + | ||
| 1042 | +typedef struct PaStreamInfo | ||
| 1043 | +{ | ||
| 1044 | + /** this is struct version 1 */ | ||
| 1045 | + int structVersion; | ||
| 1046 | + | ||
| 1047 | + /** The input latency of the stream in seconds. This value provides the most | ||
| 1048 | + accurate estimate of input latency available to the implementation. It may | ||
| 1049 | + differ significantly from the suggestedLatency value passed to Pa_OpenStream(). | ||
| 1050 | + The value of this field will be zero (0.) for output-only streams. | ||
| 1051 | + @see PaTime | ||
| 1052 | + */ | ||
| 1053 | + PaTime inputLatency; | ||
| 1054 | + | ||
| 1055 | + /** The output latency of the stream in seconds. This value provides the most | ||
| 1056 | + accurate estimate of output latency available to the implementation. It may | ||
| 1057 | + differ significantly from the suggestedLatency value passed to Pa_OpenStream(). | ||
| 1058 | + The value of this field will be zero (0.) for input-only streams. | ||
| 1059 | + @see PaTime | ||
| 1060 | + */ | ||
| 1061 | + PaTime outputLatency; | ||
| 1062 | + | ||
| 1063 | + /** The sample rate of the stream in Hertz (samples per second). In cases | ||
| 1064 | + where the hardware sample rate is inaccurate and PortAudio is aware of it, | ||
| 1065 | + the value of this field may be different from the sampleRate parameter | ||
| 1066 | + passed to Pa_OpenStream(). If information about the actual hardware sample | ||
| 1067 | + rate is not available, this field will have the same value as the sampleRate | ||
| 1068 | + parameter passed to Pa_OpenStream(). | ||
| 1069 | + */ | ||
| 1070 | + double sampleRate; | ||
| 1071 | + | ||
| 1072 | +} PaStreamInfo; | ||
| 1073 | + | ||
| 1074 | + | ||
| 1075 | +/** Retrieve a pointer to a PaStreamInfo structure containing information | ||
| 1076 | + about the specified stream. | ||
| 1077 | + @return A pointer to an immutable PaStreamInfo structure. If the stream | ||
| 1078 | + parameter is invalid, or an error is encountered, the function returns NULL. | ||
| 1079 | + | ||
| 1080 | + @param stream A pointer to an open stream previously created with Pa_OpenStream. | ||
| 1081 | + | ||
| 1082 | + @note PortAudio manages the memory referenced by the returned pointer, | ||
| 1083 | + the client must not manipulate or free the memory. The pointer is only | ||
| 1084 | + guaranteed to be valid until the specified stream is closed. | ||
| 1085 | + | ||
| 1086 | + @see PaStreamInfo | ||
| 1087 | +*/ | ||
| 1088 | +const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); | ||
| 1089 | + | ||
| 1090 | + | ||
| 1091 | +/** Returns the current time in seconds for a stream according to the same clock used | ||
| 1092 | + to generate callback PaStreamCallbackTimeInfo timestamps. The time values are | ||
| 1093 | + monotonically increasing and have unspecified origin. | ||
| 1094 | + | ||
| 1095 | + Pa_GetStreamTime returns valid time values for the entire life of the stream, | ||
| 1096 | + from when the stream is opened until it is closed. Starting and stopping the stream | ||
| 1097 | + does not affect the passage of time returned by Pa_GetStreamTime. | ||
| 1098 | + | ||
| 1099 | + This time may be used for synchronizing other events to the audio stream, for | ||
| 1100 | + example synchronizing audio to MIDI. | ||
| 1101 | + | ||
| 1102 | + @return The stream's current time in seconds, or 0 if an error occurred. | ||
| 1103 | + | ||
| 1104 | + @see PaTime, PaStreamCallback, PaStreamCallbackTimeInfo | ||
| 1105 | +*/ | ||
| 1106 | +PaTime Pa_GetStreamTime( PaStream *stream ); | ||
| 1107 | + | ||
| 1108 | + | ||
| 1109 | +/** Retrieve CPU usage information for the specified stream. | ||
| 1110 | + The "CPU Load" is a fraction of total CPU time consumed by a callback stream's | ||
| 1111 | + audio processing routines including, but not limited to the client supplied | ||
| 1112 | + stream callback. This function does not work with blocking read/write streams. | ||
| 1113 | + | ||
| 1114 | + This function may be called from the stream callback function or the | ||
| 1115 | + application. | ||
| 1116 | + | ||
| 1117 | + @return | ||
| 1118 | + A floating point value, typically between 0.0 and 1.0, where 1.0 indicates | ||
| 1119 | + that the stream callback is consuming the maximum number of CPU cycles possible | ||
| 1120 | + to maintain real-time operation. A value of 0.5 would imply that PortAudio and | ||
| 1121 | + the stream callback was consuming roughly 50% of the available CPU time. The | ||
| 1122 | + return value may exceed 1.0. A value of 0.0 will always be returned for a | ||
| 1123 | + blocking read/write stream, or if an error occurs. | ||
| 1124 | +*/ | ||
| 1125 | +double Pa_GetStreamCpuLoad( PaStream* stream ); | ||
| 1126 | + | ||
| 1127 | + | ||
| 1128 | +/** Read samples from an input stream. The function doesn't return until | ||
| 1129 | + the entire buffer has been filled - this may involve waiting for the operating | ||
| 1130 | + system to supply the data. | ||
| 1131 | + | ||
| 1132 | + @param stream A pointer to an open stream previously created with Pa_OpenStream. | ||
| 1133 | + | ||
| 1134 | + @param buffer A pointer to a buffer of sample frames. The buffer contains | ||
| 1135 | + samples in the format specified by the inputParameters->sampleFormat field | ||
| 1136 | + used to open the stream, and the number of channels specified by | ||
| 1137 | + inputParameters->numChannels. If non-interleaved samples were requested using | ||
| 1138 | + the paNonInterleaved sample format flag, buffer is a pointer to the first element | ||
| 1139 | + of an array of buffer pointers, one non-interleaved buffer for each channel. | ||
| 1140 | + | ||
| 1141 | + @param frames The number of frames to be read into buffer. This parameter | ||
| 1142 | + is not constrained to a specific range, however high performance applications | ||
| 1143 | + will want to match this parameter to the framesPerBuffer parameter used | ||
| 1144 | + when opening the stream. | ||
| 1145 | + | ||
| 1146 | + @return On success PaNoError will be returned, or PaInputOverflowed if input | ||
| 1147 | + data was discarded by PortAudio after the previous call and before this call. | ||
| 1148 | +*/ | ||
| 1149 | +PaError Pa_ReadStream( PaStream* stream, | ||
| 1150 | + void *buffer, | ||
| 1151 | + unsigned long frames ); | ||
| 1152 | + | ||
| 1153 | + | ||
| 1154 | +/** Write samples to an output stream. This function doesn't return until the | ||
| 1155 | + entire buffer has been written - this may involve waiting for the operating | ||
| 1156 | + system to consume the data. | ||
| 1157 | + | ||
| 1158 | + @param stream A pointer to an open stream previously created with Pa_OpenStream. | ||
| 1159 | + | ||
| 1160 | + @param buffer A pointer to a buffer of sample frames. The buffer contains | ||
| 1161 | + samples in the format specified by the outputParameters->sampleFormat field | ||
| 1162 | + used to open the stream, and the number of channels specified by | ||
| 1163 | + outputParameters->numChannels. If non-interleaved samples were requested using | ||
| 1164 | + the paNonInterleaved sample format flag, buffer is a pointer to the first element | ||
| 1165 | + of an array of buffer pointers, one non-interleaved buffer for each channel. | ||
| 1166 | + | ||
| 1167 | + @param frames The number of frames to be written from buffer. This parameter | ||
| 1168 | + is not constrained to a specific range, however high performance applications | ||
| 1169 | + will want to match this parameter to the framesPerBuffer parameter used | ||
| 1170 | + when opening the stream. | ||
| 1171 | + | ||
| 1172 | + @return On success PaNoError will be returned, or paOutputUnderflowed if | ||
| 1173 | + additional output data was inserted after the previous call and before this | ||
| 1174 | + call. | ||
| 1175 | +*/ | ||
| 1176 | +PaError Pa_WriteStream( PaStream* stream, | ||
| 1177 | + const void *buffer, | ||
| 1178 | + unsigned long frames ); | ||
| 1179 | + | ||
| 1180 | + | ||
| 1181 | +/** Retrieve the number of frames that can be read from the stream without | ||
| 1182 | + waiting. | ||
| 1183 | + | ||
| 1184 | + @return Returns a non-negative value representing the maximum number of frames | ||
| 1185 | + that can be read from the stream without blocking or busy waiting or, a | ||
| 1186 | + PaErrorCode (which are always negative) if PortAudio is not initialized or an | ||
| 1187 | + error is encountered. | ||
| 1188 | +*/ | ||
| 1189 | +signed long Pa_GetStreamReadAvailable( PaStream* stream ); | ||
| 1190 | + | ||
| 1191 | + | ||
| 1192 | +/** Retrieve the number of frames that can be written to the stream without | ||
| 1193 | + waiting. | ||
| 1194 | + | ||
| 1195 | + @return Returns a non-negative value representing the maximum number of frames | ||
| 1196 | + that can be written to the stream without blocking or busy waiting or, a | ||
| 1197 | + PaErrorCode (which are always negative) if PortAudio is not initialized or an | ||
| 1198 | + error is encountered. | ||
| 1199 | +*/ | ||
| 1200 | +signed long Pa_GetStreamWriteAvailable( PaStream* stream ); | ||
| 1201 | + | ||
| 1202 | + | ||
| 1203 | +/* Miscellaneous utilities */ | ||
| 1204 | + | ||
| 1205 | + | ||
| 1206 | +/** Retrieve the size of a given sample format in bytes. | ||
| 1207 | + | ||
| 1208 | + @return The size in bytes of a single sample in the specified format, | ||
| 1209 | + or paSampleFormatNotSupported if the format is not supported. | ||
| 1210 | +*/ | ||
| 1211 | +PaError Pa_GetSampleSize( PaSampleFormat format ); | ||
| 1212 | + | ||
| 1213 | + | ||
| 1214 | +/** Put the caller to sleep for at least 'msec' milliseconds. This function is | ||
| 1215 | + provided only as a convenience for authors of portable code (such as the tests | ||
| 1216 | + and examples in the PortAudio distribution.) | ||
| 1217 | + | ||
| 1218 | + The function may sleep longer than requested so don't rely on this for accurate | ||
| 1219 | + musical timing. | ||
| 1220 | +*/ | ||
| 1221 | +void Pa_Sleep( long msec ); | ||
| 1222 | + | ||
| 1223 | + | ||
| 1224 | + | ||
| 1225 | +#ifdef __cplusplus | ||
| 1226 | +} | ||
| 1227 | +#endif /* __cplusplus */ | ||
| 1228 | +#endif /* PORTAUDIO_H */ |
| @@ -4,9 +4,11 @@ | @@ -4,9 +4,11 @@ | ||
| 4 | #include <malloc.h> | 4 | #include <malloc.h> |
| 5 | 5 | ||
| 6 | #include "Megaphone_TTS.h" | 6 | #include "Megaphone_TTS.h" |
| 7 | -#include "tts_sample.h" | 7 | +#include "cn_tts/cn_tts.h" |
| 8 | #include "JZsdkLib.h" | 8 | #include "JZsdkLib.h" |
| 9 | -#include "tts_sample.h" | 9 | +#include "Intl_tts/Intl_tts.h" |
| 10 | + | ||
| 11 | +#include "version_choose.h" | ||
| 10 | 12 | ||
| 11 | static int g_Megaphone_TTS_tone = 0x01; | 13 | static int g_Megaphone_TTS_tone = 0x01; |
| 12 | static int g_Megaphone_TTS_volue = 100; | 14 | static int g_Megaphone_TTS_volue = 100; |
| @@ -31,6 +33,26 @@ int TTS_Compound_flag=0;//默认是0 //TTS 标志 | @@ -31,6 +33,26 @@ int TTS_Compound_flag=0;//默认是0 //TTS 标志 | ||
| 31 | static void *TTS_flie(void *arg); | 33 | static void *TTS_flie(void *arg); |
| 32 | static int TTS(int name,int volume,int speed,int len,char *data, int ReplyFlag);//文本播放UTF-8,name发音人默认name==1;volume合成音量默认合成音量100;speed语速默认speed==50;argv文本内容。 | 34 | static int TTS(int name,int volume,int speed,int len,char *data, int ReplyFlag);//文本播放UTF-8,name发音人默认name==1;volume合成音量默认合成音量100;speed语速默认speed==50;argv文本内容。 |
| 33 | 35 | ||
| 36 | + | ||
| 37 | +/********* | ||
| 38 | + * | ||
| 39 | + * TTS初始化 | ||
| 40 | + * | ||
| 41 | + * *********/ | ||
| 42 | +T_JZsdkReturnCode TTS_Init() | ||
| 43 | +{ | ||
| 44 | + //讯飞初始化 | ||
| 45 | + login_tts(); | ||
| 46 | + | ||
| 47 | +#if FIRMWARE_ORIGIN == OVERSEAS_VERSION | ||
| 48 | + //海外版初始化 | ||
| 49 | + espeak_init(); | ||
| 50 | +#endif | ||
| 51 | + | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | + | ||
| 55 | + | ||
| 34 | /********* | 56 | /********* |
| 35 | * | 57 | * |
| 36 | * TTS设置音色 | 58 | * TTS设置音色 |
| @@ -51,11 +73,13 @@ T_JZsdkReturnCode TTS_SetTone(int tone) | @@ -51,11 +73,13 @@ T_JZsdkReturnCode TTS_SetTone(int tone) | ||
| 51 | case 0x11: | 73 | case 0x11: |
| 52 | printf("tts设置为 英文女声\n"); | 74 | printf("tts设置为 英文女声\n"); |
| 53 | break; | 75 | break; |
| 54 | - | 76 | + |
| 55 | case 0x12: | 77 | case 0x12: |
| 56 | printf("tts设置为 英文男声\n"); | 78 | printf("tts设置为 英文男声\n"); |
| 57 | break; | 79 | break; |
| 58 | - | 80 | + |
| 81 | +#if FIRMWARE_ORIGIN == DOMESTIC_VERSION //国内版才有方言 | ||
| 82 | + | ||
| 59 | case 0x31: | 83 | case 0x31: |
| 60 | printf("tts设置为 东北话\n"); | 84 | printf("tts设置为 东北话\n"); |
| 61 | break; | 85 | break; |
| @@ -79,7 +103,43 @@ T_JZsdkReturnCode TTS_SetTone(int tone) | @@ -79,7 +103,43 @@ T_JZsdkReturnCode TTS_SetTone(int tone) | ||
| 79 | case 0x36: | 103 | case 0x36: |
| 80 | printf("tts设置为 广东话\n"); | 104 | printf("tts设置为 广东话\n"); |
| 81 | break; | 105 | break; |
| 82 | - | 106 | + |
| 107 | +#elif FIRMWARE_ORIGIN == OVERSEAS_VERSION //海外版才有其他国家的语音 | ||
| 108 | + | ||
| 109 | + case 0x41://俄 russian ru | ||
| 110 | + printf("tts设置为 俄语\n"); | ||
| 111 | + break; | ||
| 112 | + | ||
| 113 | + case 0x42://法 french fr-fr | ||
| 114 | + printf("tts设置为 法语\n"); | ||
| 115 | + break; | ||
| 116 | + | ||
| 117 | + case 0x43://德 german de | ||
| 118 | + printf("tts设置为 德语\n"); | ||
| 119 | + break; | ||
| 120 | + | ||
| 121 | + case 0x44://韩 ko | ||
| 122 | + printf("tts设置为 韩语\n"); | ||
| 123 | + break; | ||
| 124 | + | ||
| 125 | + case 0x45://意大利 italian it | ||
| 126 | + printf("tts设置为 意大利语\n"); | ||
| 127 | + break; | ||
| 128 | + | ||
| 129 | + case 0x46://波兰 polish pl | ||
| 130 | + printf("tts设置为 波兰语\n"); | ||
| 131 | + break; | ||
| 132 | + | ||
| 133 | + case 0x47://西班牙 spanish es | ||
| 134 | + printf("tts设置为 西班牙语\n"); | ||
| 135 | + break; | ||
| 136 | + | ||
| 137 | + case 0x48://葡萄牙 portugal pt-pt | ||
| 138 | + printf("葡萄牙语\n"); | ||
| 139 | + break; | ||
| 140 | + | ||
| 141 | +#endif | ||
| 142 | + | ||
| 83 | default: | 143 | default: |
| 84 | printf("无效的tts设置\n"); | 144 | printf("无效的tts设置\n"); |
| 85 | return JZ_ERRORCODE_TTS_INVALID_TONE; | 145 | return JZ_ERRORCODE_TTS_INVALID_TONE; |
| @@ -137,41 +197,47 @@ int TTS_Play(int len, char *data, int ReplyFlag) | @@ -137,41 +197,47 @@ int TTS_Play(int len, char *data, int ReplyFlag) | ||
| 137 | 197 | ||
| 138 | static int TTS(int name,int volume,int speed,int len,char *data, int ReplyFlag)//文本播放UTF-8,name发音人默认name==1;volume合成音量默认合成音量100;speed语速默认speed==50;argv文本内容。 | 198 | static int TTS(int name,int volume,int speed,int len,char *data, int ReplyFlag)//文本播放UTF-8,name发音人默认name==1;volume合成音量默认合成音量100;speed语速默认speed==50;argv文本内容。 |
| 139 | { | 199 | { |
| 140 | - pthread_t TTS_flie_task; | ||
| 141 | - pthread_attr_t task_attribute; //线程属性 | ||
| 142 | - pthread_attr_init(&task_attribute); //初始化线程属性 | ||
| 143 | - pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程属性 | ||
| 144 | - | ||
| 145 | - | ||
| 146 | - //如果tts没有在合成线程标志 | ||
| 147 | - if(TTS_Compound_flag==0) | 200 | + if(name < 40) //中英文或者方言 |
| 148 | { | 201 | { |
| 149 | - //tts参数结构体 | ||
| 150 | - struct t_Megaphone_tts_param *Megaphone_tts_param = (struct t_Megaphone_tts_param *)malloc(sizeof(struct t_Megaphone_tts_param)); | ||
| 151 | - if(Megaphone_tts_param == NULL)//如果申请内存失败,malloc会返回一个NULl | ||
| 152 | - { | ||
| 153 | - printf("malloc use failure"); | ||
| 154 | - return 1;//申请内存失败,错误退出 | ||
| 155 | - } | 202 | + pthread_t TTS_flie_task; |
| 203 | + pthread_attr_t task_attribute; //线程属性 | ||
| 204 | + pthread_attr_init(&task_attribute); //初始化线程属性 | ||
| 205 | + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程属性 | ||
| 156 | 206 | ||
| 157 | - //清空参数 | ||
| 158 | - memset (Megaphone_tts_param,0,sizeof(struct t_Megaphone_tts_param)); | ||
| 159 | - | ||
| 160 | - //写入参数 | ||
| 161 | - Megaphone_tts_param->tts_speed = speed; | ||
| 162 | - Megaphone_tts_param->tts_tone = name; | ||
| 163 | - Megaphone_tts_param->tts_volume = volume; | ||
| 164 | - Megaphone_tts_param->tts_ReplyFlag = ReplyFlag; | ||
| 165 | - snprintf(Megaphone_tts_param->ttsdata,len+8,"%s", data); | ||
| 166 | - | ||
| 167 | - | ||
| 168 | - int tts_ret = pthread_create(&TTS_flie_task,&task_attribute,TTS_flie,(void *)Megaphone_tts_param); //TTS线程 | ||
| 169 | - if(tts_ret != 0) | 207 | + //如果tts没有在合成线程标志 |
| 208 | + if(TTS_Compound_flag==0) | ||
| 170 | { | 209 | { |
| 171 | - printf("创建TTS线程失败!\n"); | ||
| 172 | - return -1; | 210 | + //tts参数结构体 |
| 211 | + struct t_Megaphone_tts_param *Megaphone_tts_param = (struct t_Megaphone_tts_param *)malloc(sizeof(struct t_Megaphone_tts_param)); | ||
| 212 | + if(Megaphone_tts_param == NULL)//如果申请内存失败,malloc会返回一个NULl | ||
| 213 | + { | ||
| 214 | + printf("malloc use failure"); | ||
| 215 | + return 1;//申请内存失败,错误退出 | ||
| 216 | + } | ||
| 217 | + | ||
| 218 | + //清空参数 | ||
| 219 | + memset (Megaphone_tts_param,0,sizeof(struct t_Megaphone_tts_param)); | ||
| 220 | + | ||
| 221 | + //写入参数 | ||
| 222 | + Megaphone_tts_param->tts_speed = speed; | ||
| 223 | + Megaphone_tts_param->tts_tone = name; | ||
| 224 | + Megaphone_tts_param->tts_volume = volume; | ||
| 225 | + Megaphone_tts_param->tts_ReplyFlag = ReplyFlag; | ||
| 226 | + snprintf(Megaphone_tts_param->ttsdata,len+8,"%s", data); | ||
| 227 | + | ||
| 228 | + | ||
| 229 | + int tts_ret = pthread_create(&TTS_flie_task,&task_attribute,TTS_flie,(void *)Megaphone_tts_param); //TTS线程 | ||
| 230 | + if(tts_ret != 0) | ||
| 231 | + { | ||
| 232 | + printf("创建TTS线程失败!\n"); | ||
| 233 | + return -1; | ||
| 234 | + } | ||
| 173 | } | 235 | } |
| 174 | } | 236 | } |
| 237 | + else if(name>0x40&&name<0x50)//外语 | ||
| 238 | + { | ||
| 239 | + espeak_tts(name,speed,data,len); | ||
| 240 | + } | ||
| 175 | } | 241 | } |
| 176 | 242 | ||
| 177 | //TTS合成线程 | 243 | //TTS合成线程 |
| @@ -29,6 +29,7 @@ T_JZsdkReturnCode TTS_SetSpeed(int Speed); | @@ -29,6 +29,7 @@ T_JZsdkReturnCode TTS_SetSpeed(int Speed); | ||
| 29 | int TTS_Get_tone(); | 29 | int TTS_Get_tone(); |
| 30 | int TTS_Get_speed(); | 30 | int TTS_Get_speed(); |
| 31 | int TTS_Get_TTS_AppendTone(); | 31 | int TTS_Get_TTS_AppendTone(); |
| 32 | +T_JZsdkReturnCode TTS_Init(); | ||
| 32 | 33 | ||
| 33 | int TTS_Set_TTSLoopPlayMode(int mode);//设置播放模式,mode==1单曲播放。mode==2单曲循环 | 34 | int TTS_Set_TTSLoopPlayMode(int mode);//设置播放模式,mode==1单曲播放。mode==2单曲循环 |
| 34 | T_JZsdkReturnCode TTS_SetAppendTone(int tone); | 35 | T_JZsdkReturnCode TTS_SetAppendTone(int tone); |
| @@ -11,14 +11,14 @@ | @@ -11,14 +11,14 @@ | ||
| 11 | #include <string.h> | 11 | #include <string.h> |
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | -#include "include/qtts.h" | ||
| 15 | -#include "include/msp_cmn.h" | ||
| 16 | -#include "include/msp_errors.h" | 14 | +#include "qtts.h" |
| 15 | +#include "msp_cmn.h" | ||
| 16 | +#include "msp_errors.h" | ||
| 17 | #include "JZsdkLib.h" | 17 | #include "JZsdkLib.h" |
| 18 | 18 | ||
| 19 | #include "Megaphone_InputAndOutput.h" | 19 | #include "Megaphone_InputAndOutput.h" |
| 20 | -#include "../Music/Megaphone_Music.h" | ||
| 21 | -#include "tts_sample.h" | 20 | +#include "../../Music/Megaphone_Music.h" |
| 21 | +#include "cn_tts.h" | ||
| 22 | 22 | ||
| 23 | 23 | ||
| 24 | typedef int SR_DWORD; | 24 | typedef int SR_DWORD; |
| @@ -193,6 +193,7 @@ int play_tts(int name,int volume,int speed, char *argv, int ReplyFlag) | @@ -193,6 +193,7 @@ int play_tts(int name,int volume,int speed, char *argv, int ReplyFlag) | ||
| 193 | char tts_add2[512]; | 193 | char tts_add2[512]; |
| 194 | snprintf(tts_add1,512,"engine_type = local,voice_name=xiaoyan, text_encoding = UTF8, tts_res_path = fo|/root/tts/xiaoyan.jet;fo|/root/tts/common.jet, sample_rate = 16000, speed = %d, volume = 100, pitch = 50, rdn = 2",tts_speed_add); | 194 | snprintf(tts_add1,512,"engine_type = local,voice_name=xiaoyan, text_encoding = UTF8, tts_res_path = fo|/root/tts/xiaoyan.jet;fo|/root/tts/common.jet, sample_rate = 16000, speed = %d, volume = 100, pitch = 50, rdn = 2",tts_speed_add); |
| 195 | snprintf(tts_add2,512,"engine_type = local,voice_name=xiaofeng, text_encoding = UTF8, tts_res_path = fo|/root/tts/xiaofeng.jet;fo|/root/tts/common.jet, sample_rate = 16000, speed = %d, volume = 100, pitch = 50, rdn = 2",tts_speed_add); | 195 | snprintf(tts_add2,512,"engine_type = local,voice_name=xiaofeng, text_encoding = UTF8, tts_res_path = fo|/root/tts/xiaofeng.jet;fo|/root/tts/common.jet, sample_rate = 16000, speed = %d, volume = 100, pitch = 50, rdn = 2",tts_speed_add); |
| 196 | + | ||
| 196 | /* 文本合成 */ | 197 | /* 文本合成 */ |
| 197 | printf("开始合成 ...\n"); | 198 | printf("开始合成 ...\n"); |
| 198 | 199 |
| 1 | -#ifndef TTS_SAMPLE_H | ||
| 2 | -#define TTS_SAMPLE_H | 1 | +#ifndef CN_TTS_SAMPLE_H |
| 2 | +#define CN_TTS_SAMPLE_H | ||
| 3 | 3 | ||
| 4 | void login_tts(void);// 注册讯飞 | 4 | void login_tts(void);// 注册讯飞 |
| 5 | int play_tts(int name,int volume,int speed, char *argv, int ReplyFlag); | 5 | int play_tts(int name,int volume,int speed, char *argv, int ReplyFlag); |
| @@ -151,7 +151,7 @@ static void *Opus_RealTimeVoice_LoopPlay(void *arg) | @@ -151,7 +151,7 @@ static void *Opus_RealTimeVoice_LoopPlay(void *arg) | ||
| 151 | 151 | ||
| 152 | //设立缓冲区域 | 152 | //设立缓冲区域 |
| 153 | int range = 0; | 153 | int range = 0; |
| 154 | - while (range < 30 && Opus_RealTimeVoice_LoopReadFlag != 0) // 70 2s | 154 | + while (range < 10 && Opus_RealTimeVoice_LoopReadFlag != 0) // 40ms*10 =400ms |
| 155 | { | 155 | { |
| 156 | range = (Opus_RealTimeVoice_Loop_End-Opus_RealTimeVoice_Loop_Head); | 156 | range = (Opus_RealTimeVoice_Loop_End-Opus_RealTimeVoice_Loop_Head); |
| 157 | if (range < 0) | 157 | if (range < 0) |
| @@ -171,14 +171,6 @@ static void *Opus_RealTimeVoice_LoopPlay(void *arg) | @@ -171,14 +171,6 @@ static void *Opus_RealTimeVoice_LoopPlay(void *arg) | ||
| 171 | Opus_RealTimeVoice_PlayLoop_HeadReset(); //池满判断 | 171 | Opus_RealTimeVoice_PlayLoop_HeadReset(); //池满判断 |
| 172 | if(ret < 0) | 172 | if(ret < 0) |
| 173 | { | 173 | { |
| 174 | - //USER_LOG_ERROR("实时喊话解码器出错"); | ||
| 175 | - printf("实时喊话解码器出错\n"); | ||
| 176 | - //录音喊话异常中断 | ||
| 177 | - Opus_RealTimeVoice_AbnormalInterrupt(); | ||
| 178 | - | ||
| 179 | - //重新开始解码播放流程 | ||
| 180 | - Opus_RealTimeVoice_Start(RealTimeDecodeRate); | ||
| 181 | - | ||
| 182 | break; | 174 | break; |
| 183 | } | 175 | } |
| 184 | } | 176 | } |
| @@ -186,6 +178,23 @@ static void *Opus_RealTimeVoice_LoopPlay(void *arg) | @@ -186,6 +178,23 @@ static void *Opus_RealTimeVoice_LoopPlay(void *arg) | ||
| 186 | 178 | ||
| 187 | Opus_RealTimeVoice_LoopReadStopFlag = JZ_FLAGCODE_OFF; | 179 | Opus_RealTimeVoice_LoopReadStopFlag = JZ_FLAGCODE_OFF; |
| 188 | 180 | ||
| 181 | + if (ReadTimeVoice_StatusFlag == JZ_FLAGCODE_OFF) | ||
| 182 | + { | ||
| 183 | + //录音喊话异常中断 | ||
| 184 | + Opus_RealTimeVoice_AbnormalInterrupt(); | ||
| 185 | + | ||
| 186 | + USER_LOG_INFO("实时喊话关闭\n"); | ||
| 187 | + } | ||
| 188 | + else | ||
| 189 | + { | ||
| 190 | + USER_LOG_ERROR("实时喊话解码器出错"); | ||
| 191 | + //录音喊话异常中断 | ||
| 192 | + Opus_RealTimeVoice_AbnormalInterrupt(); | ||
| 193 | + | ||
| 194 | + //重新开始解码播放流程 | ||
| 195 | + Opus_RealTimeVoice_Start(RealTimeDecodeRate); | ||
| 196 | + } | ||
| 197 | + | ||
| 189 | } | 198 | } |
| 190 | 199 | ||
| 191 | // 池子头部到底了,重置池头 | 200 | // 池子头部到底了,重置池头 |
| @@ -211,6 +220,8 @@ static int Opus_RealTimeVoice_ClearLoop() | @@ -211,6 +220,8 @@ static int Opus_RealTimeVoice_ClearLoop() | ||
| 211 | { | 220 | { |
| 212 | Opus_RealTimeVoice_Loop_Head=0; | 221 | Opus_RealTimeVoice_Loop_Head=0; |
| 213 | Opus_RealTimeVoice_Loop_End=0; | 222 | Opus_RealTimeVoice_Loop_End=0; |
| 223 | + | ||
| 224 | + printf("清空播放缓冲池"); | ||
| 214 | } | 225 | } |
| 215 | 226 | ||
| 216 | /************************************************************************************************************************************************ | 227 | /************************************************************************************************************************************************ |
| @@ -285,6 +296,8 @@ static int Opus_RealTimeVoice_WriteDataClear() | @@ -285,6 +296,8 @@ static int Opus_RealTimeVoice_WriteDataClear() | ||
| 285 | Opus_RealTimeVoice_WriteData_LoopHead=0; | 296 | Opus_RealTimeVoice_WriteData_LoopHead=0; |
| 286 | Opus_RealTimeVoice_WriteData_LoopEnd=0; | 297 | Opus_RealTimeVoice_WriteData_LoopEnd=0; |
| 287 | Opus_RealTimeVoice_WriteData_ResidueLenth = 0; | 298 | Opus_RealTimeVoice_WriteData_ResidueLenth = 0; |
| 299 | + | ||
| 300 | + printf("清除写入缓冲池\n"); | ||
| 288 | } | 301 | } |
| 289 | 302 | ||
| 290 | 303 | ||
| @@ -324,29 +337,43 @@ int Opus_RealTimeVoice_WriteDataToLoop(unsigned char *buf,int length) | @@ -324,29 +337,43 @@ int Opus_RealTimeVoice_WriteDataToLoop(unsigned char *buf,int length) | ||
| 324 | //① 、检查池子当前组内有无剩余数据,如果池子当前组有剩 上次写入的语音数据, 接着往里面写入 | 337 | //① 、检查池子当前组内有无剩余数据,如果池子当前组有剩 上次写入的语音数据, 接着往里面写入 |
| 325 | if (Opus_RealTimeVoice_WriteData_ResidueLenth > 0) //如果残留物有长度 | 338 | if (Opus_RealTimeVoice_WriteData_ResidueLenth > 0) //如果残留物有长度 |
| 326 | { | 339 | { |
| 327 | - // 在写入解码前加锁 | ||
| 328 | - pthread_mutex_lock(&WriteDataLock); | ||
| 329 | - | ||
| 330 | - while (WriteDataFlag != 1) | ||
| 331 | - { | ||
| 332 | - pthread_cond_wait(&WriteCond, &WriteDataLock); | ||
| 333 | - } | ||
| 334 | - | ||
| 335 | - //数据进池,每组80数据 | ||
| 336 | - for( ; Opus_RealTimeVoice_WriteData_ResidueLenth < 80 ; Opus_RealTimeVoice_WriteData_ResidueLenth ++) | 340 | + //两种可能,第一种 再次写入完数据后,也不够一组80 |
| 341 | + if (length + Opus_RealTimeVoice_WriteData_ResidueLenth < 80) | ||
| 337 | { | 342 | { |
| 338 | - Opus_RealTimeVoice_WriteDataLoop[Opus_RealTimeVoice_WriteData_LoopEnd] [Opus_RealTimeVoice_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 339 | - temp_lenth ++; | 343 | + for ( ; temp_lenth < length ; Opus_RealTimeVoice_WriteData_ResidueLenth++) |
| 344 | + { | ||
| 345 | + Opus_RealTimeVoice_WriteDataLoop[Opus_RealTimeVoice_WriteData_LoopEnd][Opus_RealTimeVoice_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 346 | + temp_lenth ++; | ||
| 347 | + } | ||
| 348 | + return 0; | ||
| 340 | } | 349 | } |
| 341 | - Opus_RealTimeVoice_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 342 | - Opus_RealTimeVoice_WriteData_ResidueLenth = 0; //残留物长度归0 | 350 | + //足够就是正常步骤 |
| 351 | + else | ||
| 352 | + { | ||
| 353 | + // 在写入解码前加锁 | ||
| 354 | + pthread_mutex_lock(&WriteDataLock); | ||
| 343 | 355 | ||
| 344 | - Opus_RealTimeVoice_WriteDataEndReset(); //池满判断 | 356 | + while (WriteDataFlag != 1) |
| 357 | + { | ||
| 358 | + pthread_cond_wait(&WriteCond, &WriteDataLock); | ||
| 359 | + } | ||
| 345 | 360 | ||
| 346 | - // 在解码数据后解锁 | ||
| 347 | - WriteDataFlag = 0; | ||
| 348 | - pthread_cond_signal(&WriteCond); | ||
| 349 | - pthread_mutex_unlock(&WriteDataLock); | 361 | + //数据进池,每组80数据 |
| 362 | + for( ; Opus_RealTimeVoice_WriteData_ResidueLenth < 80 ; Opus_RealTimeVoice_WriteData_ResidueLenth ++) | ||
| 363 | + { | ||
| 364 | + Opus_RealTimeVoice_WriteDataLoop[Opus_RealTimeVoice_WriteData_LoopEnd] [Opus_RealTimeVoice_WriteData_ResidueLenth] = buf [temp_lenth]; | ||
| 365 | + temp_lenth ++; | ||
| 366 | + } | ||
| 367 | + Opus_RealTimeVoice_WriteData_LoopEnd+=1; //池尾后移一组 | ||
| 368 | + Opus_RealTimeVoice_WriteData_ResidueLenth = 0; //残留物长度归0 | ||
| 369 | + | ||
| 370 | + Opus_RealTimeVoice_WriteDataEndReset(); //池满判断 | ||
| 371 | + | ||
| 372 | + // 在解码数据后解锁 | ||
| 373 | + WriteDataFlag = 0; | ||
| 374 | + pthread_cond_signal(&WriteCond); | ||
| 375 | + pthread_mutex_unlock(&WriteDataLock); | ||
| 376 | + } | ||
| 350 | } | 377 | } |
| 351 | 378 | ||
| 352 | 379 | ||
| @@ -419,7 +446,9 @@ static int Opus_RealTimeVoice_DeinitDecoder() | @@ -419,7 +446,9 @@ static int Opus_RealTimeVoice_DeinitDecoder() | ||
| 419 | while (Opus_RealTimeVoice_WriteDataStopFlag == JZ_FLAGCODE_ON) | 446 | while (Opus_RealTimeVoice_WriteDataStopFlag == JZ_FLAGCODE_ON) |
| 420 | { | 447 | { |
| 421 | delayMs(1); | 448 | delayMs(1); |
| 422 | - } | 449 | + } |
| 450 | + | ||
| 451 | + printf("自动线程关闭完毕\n"); | ||
| 423 | 452 | ||
| 424 | //2、清空数据池 | 453 | //2、清空数据池 |
| 425 | Opus_RealTimeVoice_ClearLoop(); | 454 | Opus_RealTimeVoice_ClearLoop(); |
| @@ -429,10 +458,14 @@ static int Opus_RealTimeVoice_DeinitDecoder() | @@ -429,10 +458,14 @@ static int Opus_RealTimeVoice_DeinitDecoder() | ||
| 429 | if (Opus_RealTimeVoice_decoder != NULL) | 458 | if (Opus_RealTimeVoice_decoder != NULL) |
| 430 | { | 459 | { |
| 431 | //释放掉解码器 | 460 | //释放掉解码器 |
| 432 | - USER_LOG_INFO("释放解码器"); | 461 | + USER_LOG_INFO("释放解码器完成"); |
| 433 | opus_decoder_destroy(Opus_RealTimeVoice_decoder); | 462 | opus_decoder_destroy(Opus_RealTimeVoice_decoder); |
| 434 | Opus_RealTimeVoice_decoder = NULL; | 463 | Opus_RealTimeVoice_decoder = NULL; |
| 435 | } | 464 | } |
| 465 | + else | ||
| 466 | + { | ||
| 467 | + USER_LOG_INFO("解码器为空"); | ||
| 468 | + } | ||
| 436 | } | 469 | } |
| 437 | 470 | ||
| 438 | 471 | ||
| @@ -453,7 +486,7 @@ T_JZsdkReturnCode Opus_RealTimeVoice_GetStatusFlag() | @@ -453,7 +486,7 @@ T_JZsdkReturnCode Opus_RealTimeVoice_GetStatusFlag() | ||
| 453 | static int Opus_RealTimeVoice_AbnormalInterrupt() | 486 | static int Opus_RealTimeVoice_AbnormalInterrupt() |
| 454 | { | 487 | { |
| 455 | //如果喊话模式没被打开,就没必要跑了, 不然释放空的解码器会导致奔溃 | 488 | //如果喊话模式没被打开,就没必要跑了, 不然释放空的解码器会导致奔溃 |
| 456 | - if (ReadTimeVoice_StatusFlag != JZ_FLAGCODE_ON) | 489 | + if (ReadTimeVoice_StatusFlag == JZ_FLAGCODE_ON) |
| 457 | { | 490 | { |
| 458 | //释放解码器 | 491 | //释放解码器 |
| 459 | Opus_RealTimeVoice_DeinitDecoder(); | 492 | Opus_RealTimeVoice_DeinitDecoder(); |
| @@ -469,8 +502,10 @@ static int Opus_RealTimeVoice_AbnormalInterrupt() | @@ -469,8 +502,10 @@ static int Opus_RealTimeVoice_AbnormalInterrupt() | ||
| 469 | * ***************************/ | 502 | * ***************************/ |
| 470 | int Opus_RealTimeVoice_Close() | 503 | int Opus_RealTimeVoice_Close() |
| 471 | { | 504 | { |
| 505 | + ReadTimeVoice_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 506 | + | ||
| 472 | //释放解码器 | 507 | //释放解码器 |
| 473 | Opus_RealTimeVoice_DeinitDecoder(); | 508 | Opus_RealTimeVoice_DeinitDecoder(); |
| 509 | +} | ||
| 510 | + | ||
| 474 | 511 | ||
| 475 | - ReadTimeVoice_StatusFlag = JZ_FLAGCODE_OFF; | ||
| 476 | -} |
| @@ -64,6 +64,8 @@ int Opus_RecordVoice_SaveOpusTrans(char *SaveData, int size) | @@ -64,6 +64,8 @@ int Opus_RecordVoice_SaveOpusTrans(char *SaveData, int size) | ||
| 64 | { | 64 | { |
| 65 | printf("写入opus失败 %d\n", writelen); | 65 | printf("写入opus失败 %d\n", writelen); |
| 66 | } | 66 | } |
| 67 | + | ||
| 68 | + fflush(SaveFixedOpus_fp); | ||
| 67 | } | 69 | } |
| 68 | 70 | ||
| 69 | SaveFixedOpus_len = SaveFixedOpus_len +size; | 71 | SaveFixedOpus_len = SaveFixedOpus_len +size; |
| @@ -73,6 +75,7 @@ int Opus_RecordVoice_SaveOpusTrans(char *SaveData, int size) | @@ -73,6 +75,7 @@ int Opus_RecordVoice_SaveOpusTrans(char *SaveData, int size) | ||
| 73 | int Opus_RecordVoice_SaveOpusStop() | 75 | int Opus_RecordVoice_SaveOpusStop() |
| 74 | { | 76 | { |
| 75 | //1、关闭存储的文件 | 77 | //1、关闭存储的文件 |
| 78 | + fflush(SaveFixedOpus_fp); | ||
| 76 | fclose(SaveFixedOpus_fp); | 79 | fclose(SaveFixedOpus_fp); |
| 77 | SaveFixedOpus_len = 0; //置零长度 | 80 | SaveFixedOpus_len = 0; //置零长度 |
| 78 | 81 |
| @@ -681,10 +681,16 @@ T_JZsdkReturnCode UIcontrol_Set_GimbalPitchFineTuning(int DeviceName,int value) | @@ -681,10 +681,16 @@ T_JZsdkReturnCode UIcontrol_Set_GimbalPitchFineTuning(int DeviceName,int value) | ||
| 681 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 681 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 682 | } | 682 | } |
| 683 | 683 | ||
| 684 | +//查询云台角度 | ||
| 685 | +T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalAngle(int *PitchValue, int *YawValue) | ||
| 686 | +{ | ||
| 687 | + Gimbal_CheckStatus_Angle(PitchValue, YawValue); | ||
| 688 | +} | ||
| 689 | + | ||
| 684 | //查询云台微调值 | 690 | //查询云台微调值 |
| 685 | -T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalPitchFineTuning(int *PitchValue, int *YawPitchValue) | 691 | +T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalPitchFineTuning(int *PitchValue, int *YawValue) |
| 686 | { | 692 | { |
| 687 | - Gimbal_CheckStatus_GimbalFineTuning(PitchValue, YawPitchValue); | 693 | + Gimbal_CheckStatus_GimbalFineTuning(PitchValue, YawValue); |
| 688 | } | 694 | } |
| 689 | 695 | ||
| 690 | //获得云台俯仰微调值 | 696 | //获得云台俯仰微调值 |
| @@ -49,11 +49,12 @@ T_JZsdkReturnCode UIcontrol_Set_TTS_speed(int DeviceName, int value); | @@ -49,11 +49,12 @@ T_JZsdkReturnCode UIcontrol_Set_TTS_speed(int DeviceName, int value); | ||
| 49 | T_JZsdkReturnCode UIcontrol_Set_GimbalPitchAngle(int DeviceName, int value); | 49 | T_JZsdkReturnCode UIcontrol_Set_GimbalPitchAngle(int DeviceName, int value); |
| 50 | T_JZsdkReturnCode UIcontrol_SetGimbalRange(int DeviceName,int value); | 50 | T_JZsdkReturnCode UIcontrol_SetGimbalRange(int DeviceName,int value); |
| 51 | T_JZsdkReturnCode UIcontrol_Set_GimbalPitchFineTuning(int DeviceName,int value); | 51 | T_JZsdkReturnCode UIcontrol_Set_GimbalPitchFineTuning(int DeviceName,int value); |
| 52 | -T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalPitchFineTuning(int *PitchValue, int *YawPitchValue); | 52 | +T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalPitchFineTuning(int *PitchValue, int *YawValue); |
| 53 | T_JZsdkReturnCode UIcontrol_Obtain_GimbalPitchFineTuninng(int DeviceName, int Pitch); | 53 | T_JZsdkReturnCode UIcontrol_Obtain_GimbalPitchFineTuninng(int DeviceName, int Pitch); |
| 54 | T_JZsdkReturnCode UIcontrol_Set_GimbalLinkageControl(int DeviceName, int value); | 54 | T_JZsdkReturnCode UIcontrol_Set_GimbalLinkageControl(int DeviceName, int value); |
| 55 | T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalLinkage(int *value); | 55 | T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalLinkage(int *value); |
| 56 | T_JZsdkReturnCode UIcontrol_Obtain_GimbalLinkage(int DeviceName, int GimbalLinkage); | 56 | T_JZsdkReturnCode UIcontrol_Obtain_GimbalLinkage(int DeviceName, int GimbalLinkage); |
| 57 | +T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalAngle(int *PitchValue, int *YawValue); | ||
| 57 | 58 | ||
| 58 | //探照灯类 | 59 | //探照灯类 |
| 59 | T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value); | 60 | T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value); |
| @@ -67,6 +68,7 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int val | @@ -67,6 +68,7 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int val | ||
| 67 | T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, int value2); | 68 | T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, int value2); |
| 68 | T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightStatus(int *ValueSwitch, int *ValueMode); | 69 | T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightStatus(int *ValueSwitch, int *ValueMode); |
| 69 | T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightColor(int *ValueColor1, int *ValueColor2); | 70 | T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightColor(int *ValueColor1, int *ValueColor2); |
| 71 | +T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Color(int DeviceName, int color1, int color2); | ||
| 70 | 72 | ||
| 71 | 73 | ||
| 72 | //接收处理类 | 74 | //接收处理类 |
ModuleLib/TTS/intl_tts/libTTS_Player.so
0 → 100644
不能预览此文件类型
ModuleLib/TTS/intl_tts/libportaudio.so.2
0 → 100644
不能预览此文件类型
Upgrade_Package/1.c
已删除
100644 → 0
| 1 | -#include "linux_log.h" | ||
| 2 | -#include <time.h> | ||
| 3 | - | ||
| 4 | - | ||
| 5 | -uint64_t clock_ms_get(void) | ||
| 6 | -{ | ||
| 7 | - struct timespec clock_time; | ||
| 8 | - uint64_t time_ms; | ||
| 9 | - | ||
| 10 | - clock_gettime(CLOCK_MONOTONIC, &clock_time); | ||
| 11 | - time_ms = clock_time.tv_sec * 1000 + clock_time.tv_nsec / 1000000; | ||
| 12 | - return time_ms; | ||
| 13 | -} | ||
| 14 | - | ||
| 15 | -uint64_t log_time(void) | ||
| 16 | -{ | ||
| 17 | - | ||
| 18 | -#if LOG_SHOW_DATE_ENABLE | ||
| 19 | - struct timespec clock_time; | ||
| 20 | - time_t time_seconds; | ||
| 21 | - uint64_t time_ms; | ||
| 22 | - char str[50]; | ||
| 23 | - | ||
| 24 | - clock_gettime(CLOCK_REALTIME, &clock_time); | ||
| 25 | - time(&time_seconds); // seconds from 1970-1-1:0:0:0 | ||
| 26 | - time_ms = clock_time.tv_nsec / 1000000; | ||
| 27 | - sprintf(str,"Date: %s:[ms:%ld] LOG: ",asctime(localtime(&time_seconds)),time_ms); | ||
| 28 | - printf("%s",str); | ||
| 29 | -#endif | ||
| 30 | - | ||
| 31 | - return clock_ms_get(); | ||
| 32 | -} | ||
| 33 | - | ||
| 34 | -void linux_log_demo(void) | ||
| 35 | -{ | ||
| 36 | - char str[100]; | ||
| 37 | - LOG_ERROR("This is %s : 0x%.4x ", "LOG_ERRTR",0x00FF); | ||
| 38 | - LOG_WARN("This is %s ","LOG_WARN!"); | ||
| 39 | - sleep(1); | ||
| 40 | - LOG_INFO("This is %s ","LOG_INFO"); | ||
| 41 | - LOG_DEBUG("This is %s ","LOG_DEBUG!"); | ||
| 42 | - | ||
| 43 | - while(1) | ||
| 44 | - { | ||
| 45 | - LOG_INFO("This is %s ","LOG_INFO"); | ||
| 46 | - LOG_DEBUG("This is %s ","LOG_DEBUG!"); | ||
| 47 | - usleep(100000); | ||
| 48 | - } | ||
| 49 | -} |
Upgrade_Package/JZ_H10_V00.00.00.08.bin
已删除
100644 → 0
不能预览此文件类型
Upgrade_Package/JZ_H1E_V00.00.00.09.bin
0 → 100644
不能预览此文件类型
不能预览此文件类型
| 1 | #1、输入设备名字,程序模式,硬件号,版本号 | 1 | #1、输入设备名字,程序模式,硬件号,版本号 |
| 2 | -payload_name="JZ_H10" | 2 | +payload_name="JZ_H1E" |
| 3 | payload_mode="APP_UART" # APP_PSDK 或者 APP_UART | 3 | payload_mode="APP_UART" # APP_PSDK 或者 APP_UART |
| 4 | -payload_platform="PLATFORM_H3" #影响mp2实时功能 | ||
| 5 | -payload_version="V00.00.00.08" | 4 | +payload_platform="PLATFORM_V3S" |
| 5 | +payload_version="V00.00.00.09" | ||
| 6 | +payload_origin="OVERSEAS_VERSION" # 国内版DOMESTIC_VERSION 海外版OVERSEAS_VERSION | ||
| 6 | #2、根据负载选择滤波方式,目前仅h10使用带阻滤波 | 7 | #2、根据负载选择滤波方式,目前仅h10使用带阻滤波 |
| 7 | #high_pass_filtering | 8 | #high_pass_filtering |
| 8 | #directed_stopband_filtering | 9 | #directed_stopband_filtering |
| 9 | 10 | ||
| 10 | -#if [ "${payload_name}" == "JZ_H10" ] || [ "${payload_name}" == "JZ_H10T" ]; then | ||
| 11 | if [ "${payload_name}" == "JZ_H10" ] ; then | 11 | if [ "${payload_name}" == "JZ_H10" ] ; then |
| 12 | filtering_way="directed_stopband_filtering" | 12 | filtering_way="directed_stopband_filtering" |
| 13 | filter_type="DIRECTED_STOPBAND_FILTERING" | 13 | filter_type="DIRECTED_STOPBAND_FILTERING" |
| @@ -60,6 +60,14 @@ version_text="#define DEBUG_VERSION 0x${payload_version_part4}" | @@ -60,6 +60,14 @@ version_text="#define DEBUG_VERSION 0x${payload_version_part4}" | ||
| 60 | echo $version_text | 60 | echo $version_text |
| 61 | sed -i "22s/.*/$version_text/" ../application/version_choose.h | 61 | sed -i "22s/.*/$version_text/" ../application/version_choose.h |
| 62 | 62 | ||
| 63 | +# 负载的固件归属地 | ||
| 64 | +# 修改cmake文件,是否需要加载海外tts库 | ||
| 65 | +cmake_origin="set(firewarm_origin ${payload_origin}) " | ||
| 66 | +sed -i "27s/.*/$cmake_origin/" ../CMakeLists.txt | ||
| 67 | +# 修改version.h,是否需要加载海外tts模块 | ||
| 68 | +version_origin="#define FIRMWARE_ORIGIN ${payload_origin}" | ||
| 69 | +sed -i "28s/.*/$version_origin/" ../application/version_choose.h | ||
| 70 | + | ||
| 63 | #打包诱骗升级包 | 71 | #打包诱骗升级包 |
| 64 | # 拼接字符串得到更新包名字 | 72 | # 拼接字符串得到更新包名字 |
| 65 | BinName=$payload_name"_"$payload_version".bin" | 73 | BinName=$payload_name"_"$payload_version".bin" |
| @@ -26,7 +26,7 @@ int Main_APP_Uart() | @@ -26,7 +26,7 @@ int Main_APP_Uart() | ||
| 26 | Ircut_Init(); | 26 | Ircut_Init(); |
| 27 | 27 | ||
| 28 | //串口程序计时开始(用于连接上就跑串口程序,没连上就退出 继续跑psdk) | 28 | //串口程序计时开始(用于连接上就跑串口程序,没连上就退出 继续跑psdk) |
| 29 | - //Main_WorkMode(); | 29 | + Main_WorkMode(); |
| 30 | 30 | ||
| 31 | if (DEVICE_VERSION == JZ_H1E) | 31 | if (DEVICE_VERSION == JZ_H1E) |
| 32 | { | 32 | { |
| @@ -157,8 +157,23 @@ int Main_WorkModeSet(int mode) | @@ -157,8 +157,23 @@ int Main_WorkModeSet(int mode) | ||
| 157 | if (mode == JZ_FLAGCODE_ON) | 157 | if (mode == JZ_FLAGCODE_ON) |
| 158 | { | 158 | { |
| 159 | //播报喊话器准备就绪 | 159 | //播报喊话器准备就绪 |
| 160 | - delayMs(3000); | ||
| 161 | - Megaphone_TTS_Play(strlen("喊话器直连模式准备就绪"), "喊话器直连模式准备就绪", 0); | 160 | + delayMs(3500); |
| 161 | + | ||
| 162 | +#if FIRMWARE_ORIGIN == DOMESTIC_VERSION //国内版才有方言 | ||
| 163 | + | ||
| 164 | + //播放喊话器启动中 | ||
| 165 | + Megaphone_TTS_Play(strlen("喊话器直连模式准备就绪"), "喊话器直连模式准备就绪", 0); | ||
| 166 | + | ||
| 167 | +#elif FIRMWARE_ORIGIN == OVERSEAS_VERSION //海外版才有其他国家的语音 | ||
| 168 | + | ||
| 169 | + //设置语音为英文 | ||
| 170 | + Megaphone_TTS_SetTone(0x11); | ||
| 171 | + | ||
| 172 | + //播放喊话器启动中 | ||
| 173 | + Megaphone_TTS_Play(strlen("Speaker Direct Mode Ready"),"Speaker Direct Mode Ready", 0); | ||
| 174 | + | ||
| 175 | +#endif | ||
| 176 | + | ||
| 162 | } | 177 | } |
| 163 | } | 178 | } |
| 164 | 179 |
| @@ -7,38 +7,44 @@ | @@ -7,38 +7,44 @@ | ||
| 7 | #define VERSION_CHOOSE_H | 7 | #define VERSION_CHOOSE_H |
| 8 | 8 | ||
| 9 | //1~10行 除了D可以修改版本选择 禁止动任何东西 | 9 | //1~10行 除了D可以修改版本选择 禁止动任何东西 |
| 10 | -#define DEVICE_VERSION JZ_H10 | 10 | +#define DEVICE_VERSION JZ_H1E |
| 11 | 11 | ||
| 12 | //禁止修改行 选择是串口程序 还是 psdk程序 | 12 | //禁止修改行 选择是串口程序 还是 psdk程序 |
| 13 | #define APP_VERSION APP_UART | 13 | #define APP_VERSION APP_UART |
| 14 | 14 | ||
| 15 | //禁止修改行 板子型号 | 15 | //禁止修改行 板子型号 |
| 16 | -#define PLATFORM_VERSION PLATFORM_H3 | 16 | +#define PLATFORM_VERSION PLATFORM_V3S |
| 17 | 17 | ||
| 18 | //禁止修改行 串口连接程序的软件版本号 | 18 | //禁止修改行 串口连接程序的软件版本号 |
| 19 | #define MAJOR_VERSION 0x00 | 19 | #define MAJOR_VERSION 0x00 |
| 20 | #define MINOR_VERSION 0x00 | 20 | #define MINOR_VERSION 0x00 |
| 21 | #define MODIFY_VERSION 0x00 | 21 | #define MODIFY_VERSION 0x00 |
| 22 | -#define DEBUG_VERSION 0x08 | 22 | +#define DEBUG_VERSION 0x09 |
| 23 | 23 | ||
| 24 | //禁止修改行 滤波方式 | 24 | //禁止修改行 滤波方式 |
| 25 | -#define FILTERING_TYPE DIRECTED_STOPBAND_FILTERING | 25 | +#define FILTERING_TYPE HIGH_PASS_FILTERING |
| 26 | 26 | ||
| 27 | +//禁止修改行固件属地 目前 国内版/海外版 | ||
| 28 | +#define FIRMWARE_ORIGIN OVERSEAS_VERSION | ||
| 27 | 29 | ||
| 28 | //软件模式 | 30 | //软件模式 |
| 29 | #define APP_PSDK 0x01 | 31 | #define APP_PSDK 0x01 |
| 30 | #define APP_UART 0x02 | 32 | #define APP_UART 0x02 |
| 31 | 33 | ||
| 32 | //平台选择 | 34 | //平台选择 |
| 33 | - | ||
| 34 | #define PLATFORM_H3 0x01 | 35 | #define PLATFORM_H3 0x01 |
| 35 | #define PLATFORM_V3S 0x02 | 36 | #define PLATFORM_V3S 0x02 |
| 36 | 37 | ||
| 38 | +//固件属地 | ||
| 39 | +#define OVERSEAS_VERSION 0x01 //海外版 | ||
| 40 | +#define DOMESTIC_VERSION 0x02 //国内版 | ||
| 41 | + | ||
| 37 | //音频滤波的方式 | 42 | //音频滤波的方式 |
| 38 | //目前只有h10t 和h10使用带阻滤波 | 43 | //目前只有h10t 和h10使用带阻滤波 |
| 39 | #define DIRECTED_STOPBAND_FILTERING 0x10001 //带阻滤波 | 44 | #define DIRECTED_STOPBAND_FILTERING 0x10001 //带阻滤波 |
| 40 | #define HIGH_PASS_FILTERING 0x10002 //高通滤波 | 45 | #define HIGH_PASS_FILTERING 0x10002 //高通滤波 |
| 41 | 46 | ||
| 47 | + | ||
| 42 | //设备选择 | 48 | //设备选择 |
| 43 | #define JZ_H1E 0x0010 | 49 | #define JZ_H1E 0x0010 |
| 44 | #define JZ_H1EIntl 0x0011 | 50 | #define JZ_H1EIntl 0x0011 |
| @@ -28,18 +28,20 @@ The CXX compiler identification is GNU, found in "/mnt/hgfs/share/展架程序/b | @@ -28,18 +28,20 @@ The CXX compiler identification is GNU, found in "/mnt/hgfs/share/展架程序/b | ||
| 28 | Detecting C compiler ABI info compiled with the following output: | 28 | Detecting C compiler ABI info compiled with the following output: |
| 29 | Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp | 29 | Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp |
| 30 | 30 | ||
| 31 | -Run Build Command(s):/usr/bin/make -f Makefile cmTC_0d185/fast && /usr/bin/make -f CMakeFiles/cmTC_0d185.dir/build.make CMakeFiles/cmTC_0d185.dir/build | 31 | +Run Build Command(s):/usr/bin/make -f Makefile cmTC_006c8/fast && make: Warning: File 'Makefile' has modification time 0.38 s in the future |
| 32 | +/usr/bin/make -f CMakeFiles/cmTC_006c8.dir/build.make CMakeFiles/cmTC_006c8.dir/build | ||
| 32 | make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' | 33 | make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' |
| 33 | -Building C object CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o | ||
| 34 | -/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc -pthread -std=gnu99 -lm -ldl -lstdc++ -v -o CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.24/Modules/CMakeCCompilerABI.c | 34 | +make[1]: Warning: File 'CMakeFiles/cmTC_006c8.dir/flags.make' has modification time 0.38 s in the future |
| 35 | +Building C object CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o | ||
| 36 | +/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc -pthread -std=gnu99 -lm -ldl -lstdc++ -v -o CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.24/Modules/CMakeCCompilerABI.c | ||
| 35 | Using built-in specs. | 37 | Using built-in specs. |
| 36 | COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc | 38 | COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc |
| 37 | Target: arm-cortexa9-linux-gnueabihf | 39 | Target: arm-cortexa9-linux-gnueabihf |
| 38 | Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long | 40 | Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long |
| 39 | Thread model: posix | 41 | Thread model: posix |
| 40 | gcc version 4.9.3 (ctng-1.21.0-229g-FA) | 42 | gcc version 4.9.3 (ctng-1.21.0-229g-FA) |
| 41 | -COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' | ||
| 42 | - /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/cc1 -quiet -v -iprefix /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/ -isysroot /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root -D_REENTRANT /usr/local/share/cmake-3.24/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3 -mtls-dialect=gnu -auxbase-strip CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o -std=gnu99 -version -o /tmp/ccPdnbhM.s | 43 | +COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' |
| 44 | + /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/cc1 -quiet -v -iprefix /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/ -isysroot /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root -D_REENTRANT /usr/local/share/cmake-3.24/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3 -mtls-dialect=gnu -auxbase-strip CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o -std=gnu99 -version -o /tmp/ccfEGNsd.s | ||
| 43 | GNU C (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf) | 45 | GNU C (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf) |
| 44 | compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3 | 46 | compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3 |
| 45 | GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 | 47 | GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 |
| @@ -58,15 +60,15 @@ GNU C (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf) | @@ -58,15 +60,15 @@ GNU C (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf) | ||
| 58 | compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3 | 60 | compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3 |
| 59 | GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 | 61 | GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 |
| 60 | Compiler executable checksum: eeb0d0cd8c4112e84e5c64edda5289df | 62 | Compiler executable checksum: eeb0d0cd8c4112e84e5c64edda5289df |
| 61 | -COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' | ||
| 62 | - /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/as -v -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3 -meabi=5 -o CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o /tmp/ccPdnbhM.s | 63 | +COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' |
| 64 | + /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/as -v -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3 -meabi=5 -o CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o /tmp/ccfEGNsd.s | ||
| 63 | GNU assembler version 2.25.1 (arm-cortexa9-linux-gnueabihf) using BFD version (ctng-1.21.0-229g-FA) 2.25.1 | 65 | GNU assembler version 2.25.1 (arm-cortexa9-linux-gnueabihf) using BFD version (ctng-1.21.0-229g-FA) 2.25.1 |
| 64 | COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ | 66 | COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ |
| 65 | LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/ | 67 | LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/ |
| 66 | -COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' | ||
| 67 | -Linking C executable cmTC_0d185 | ||
| 68 | -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0d185.dir/link.txt --verbose=1 | ||
| 69 | -/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc -pthread -std=gnu99 -lm -ldl -lstdc++ -v -rdynamic CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o -o cmTC_0d185 | 68 | +COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' |
| 69 | +Linking C executable cmTC_006c8 | ||
| 70 | +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_006c8.dir/link.txt --verbose=1 | ||
| 71 | +/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc -pthread -std=gnu99 -lm -ldl -lstdc++ -v -rdynamic CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o -o cmTC_006c8 | ||
| 70 | Using built-in specs. | 72 | Using built-in specs. |
| 71 | COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc | 73 | COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc |
| 72 | COLLECT_LTO_WRAPPER=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper | 74 | COLLECT_LTO_WRAPPER=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper |
| @@ -76,9 +78,11 @@ Thread model: posix | @@ -76,9 +78,11 @@ Thread model: posix | ||
| 76 | gcc version 4.9.3 (ctng-1.21.0-229g-FA) | 78 | gcc version 4.9.3 (ctng-1.21.0-229g-FA) |
| 77 | COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ | 79 | COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ |
| 78 | LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/ | 80 | LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/ |
| 79 | -COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-rdynamic' '-o' 'cmTC_0d185' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' | ||
| 80 | - /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2 -plugin /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so -plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUopn6L.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root --build-id --eh-frame-hdr --hash-style=gnu -export-dynamic -dynamic-linker /lib/ld-linux-armhf.so.3 -X -m armelf_linux_eabi -o cmTC_0d185 /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3 -L/usr/local/arm/4.9.3/bin/../lib/gcc -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib -lm -ldl -lstdc++ CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lpthread -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtend.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crtn.o | 81 | +COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-rdynamic' '-o' 'cmTC_006c8' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' |
| 82 | + /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2 -plugin /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so -plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7J6Ikc.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root --build-id --eh-frame-hdr --hash-style=gnu -export-dynamic -dynamic-linker /lib/ld-linux-armhf.so.3 -X -m armelf_linux_eabi -o cmTC_006c8 /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3 -L/usr/local/arm/4.9.3/bin/../lib/gcc -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib -lm -ldl -lstdc++ CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lpthread -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtend.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crtn.o | ||
| 83 | +make[1]: warning: Clock skew detected. Your build may be incomplete. | ||
| 81 | make[1]: Leaving directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' | 84 | make[1]: Leaving directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' |
| 85 | +make: warning: Clock skew detected. Your build may be incomplete. | ||
| 82 | 86 | ||
| 83 | 87 | ||
| 84 | 88 | ||
| @@ -101,18 +105,20 @@ Parsed C implicit link information from above output: | @@ -101,18 +105,20 @@ Parsed C implicit link information from above output: | ||
| 101 | link line regex: [^( *|.*[/\])(arm-cortexa9-linux-gnueabihf-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] | 105 | link line regex: [^( *|.*[/\])(arm-cortexa9-linux-gnueabihf-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] |
| 102 | ignore line: [Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp] | 106 | ignore line: [Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp] |
| 103 | ignore line: [] | 107 | ignore line: [] |
| 104 | - ignore line: [Run Build Command(s):/usr/bin/make -f Makefile cmTC_0d185/fast && /usr/bin/make -f CMakeFiles/cmTC_0d185.dir/build.make CMakeFiles/cmTC_0d185.dir/build] | 108 | + ignore line: [Run Build Command(s):/usr/bin/make -f Makefile cmTC_006c8/fast && make: Warning: File 'Makefile' has modification time 0.38 s in the future] |
| 109 | + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_006c8.dir/build.make CMakeFiles/cmTC_006c8.dir/build] | ||
| 105 | ignore line: [make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp'] | 110 | ignore line: [make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp'] |
| 106 | - ignore line: [Building C object CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o] | ||
| 107 | - ignore line: [/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc -pthread -std=gnu99 -lm -ldl -lstdc++ -v -o CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.24/Modules/CMakeCCompilerABI.c] | 111 | + ignore line: [make[1]: Warning: File 'CMakeFiles/cmTC_006c8.dir/flags.make' has modification time 0.38 s in the future] |
| 112 | + ignore line: [Building C object CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o] | ||
| 113 | + ignore line: [/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc -pthread -std=gnu99 -lm -ldl -lstdc++ -v -o CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.24/Modules/CMakeCCompilerABI.c] | ||
| 108 | ignore line: [Using built-in specs.] | 114 | ignore line: [Using built-in specs.] |
| 109 | ignore line: [COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc] | 115 | ignore line: [COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc] |
| 110 | ignore line: [Target: arm-cortexa9-linux-gnueabihf] | 116 | ignore line: [Target: arm-cortexa9-linux-gnueabihf] |
| 111 | ignore line: [Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl -Bstatic -lstdc++ -Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long] | 117 | ignore line: [Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl -Bstatic -lstdc++ -Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long] |
| 112 | ignore line: [Thread model: posix] | 118 | ignore line: [Thread model: posix] |
| 113 | ignore line: [gcc version 4.9.3 (ctng-1.21.0-229g-FA) ] | 119 | ignore line: [gcc version 4.9.3 (ctng-1.21.0-229g-FA) ] |
| 114 | - ignore line: [COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] | ||
| 115 | - ignore line: [ /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/cc1 -quiet -v -iprefix /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/ -isysroot /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root -D_REENTRANT /usr/local/share/cmake-3.24/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3 -mtls-dialect=gnu -auxbase-strip CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o -std=gnu99 -version -o /tmp/ccPdnbhM.s] | 120 | + ignore line: [COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] |
| 121 | + ignore line: [ /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/cc1 -quiet -v -iprefix /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/ -isysroot /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root -D_REENTRANT /usr/local/share/cmake-3.24/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3 -mtls-dialect=gnu -auxbase-strip CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o -std=gnu99 -version -o /tmp/ccfEGNsd.s] | ||
| 116 | ignore line: [GNU C (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf)] | 122 | ignore line: [GNU C (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf)] |
| 117 | ignore line: [ compiled by GNU C version 4.8.4 GMP version 6.0.0 MPFR version 3.1.3 MPC version 1.0.3] | 123 | ignore line: [ compiled by GNU C version 4.8.4 GMP version 6.0.0 MPFR version 3.1.3 MPC version 1.0.3] |
| 118 | ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] | 124 | ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] |
| @@ -131,15 +137,15 @@ Parsed C implicit link information from above output: | @@ -131,15 +137,15 @@ Parsed C implicit link information from above output: | ||
| 131 | ignore line: [ compiled by GNU C version 4.8.4 GMP version 6.0.0 MPFR version 3.1.3 MPC version 1.0.3] | 137 | ignore line: [ compiled by GNU C version 4.8.4 GMP version 6.0.0 MPFR version 3.1.3 MPC version 1.0.3] |
| 132 | ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] | 138 | ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] |
| 133 | ignore line: [Compiler executable checksum: eeb0d0cd8c4112e84e5c64edda5289df] | 139 | ignore line: [Compiler executable checksum: eeb0d0cd8c4112e84e5c64edda5289df] |
| 134 | - ignore line: [COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] | ||
| 135 | - ignore line: [ /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/as -v -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3 -meabi=5 -o CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o /tmp/ccPdnbhM.s] | 140 | + ignore line: [COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] |
| 141 | + ignore line: [ /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/as -v -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3 -meabi=5 -o CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o /tmp/ccfEGNsd.s] | ||
| 136 | ignore line: [GNU assembler version 2.25.1 (arm-cortexa9-linux-gnueabihf) using BFD version (ctng-1.21.0-229g-FA) 2.25.1] | 142 | ignore line: [GNU assembler version 2.25.1 (arm-cortexa9-linux-gnueabihf) using BFD version (ctng-1.21.0-229g-FA) 2.25.1] |
| 137 | ignore line: [COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/] | 143 | ignore line: [COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/] |
| 138 | ignore line: [LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/] | 144 | ignore line: [LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/] |
| 139 | - ignore line: [COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] | ||
| 140 | - ignore line: [Linking C executable cmTC_0d185] | ||
| 141 | - ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0d185.dir/link.txt --verbose=1] | ||
| 142 | - ignore line: [/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc -pthread -std=gnu99 -lm -ldl -lstdc++ -v -rdynamic CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o -o cmTC_0d185 ] | 145 | + ignore line: [COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-o' 'CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o' '-c' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] |
| 146 | + ignore line: [Linking C executable cmTC_006c8] | ||
| 147 | + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_006c8.dir/link.txt --verbose=1] | ||
| 148 | + ignore line: [/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc -pthread -std=gnu99 -lm -ldl -lstdc++ -v -rdynamic CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o -o cmTC_006c8 ] | ||
| 143 | ignore line: [Using built-in specs.] | 149 | ignore line: [Using built-in specs.] |
| 144 | ignore line: [COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc] | 150 | ignore line: [COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc] |
| 145 | ignore line: [COLLECT_LTO_WRAPPER=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper] | 151 | ignore line: [COLLECT_LTO_WRAPPER=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper] |
| @@ -149,13 +155,13 @@ Parsed C implicit link information from above output: | @@ -149,13 +155,13 @@ Parsed C implicit link information from above output: | ||
| 149 | ignore line: [gcc version 4.9.3 (ctng-1.21.0-229g-FA) ] | 155 | ignore line: [gcc version 4.9.3 (ctng-1.21.0-229g-FA) ] |
| 150 | ignore line: [COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/] | 156 | ignore line: [COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/] |
| 151 | ignore line: [LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/] | 157 | ignore line: [LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/] |
| 152 | - ignore line: [COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-rdynamic' '-o' 'cmTC_0d185' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] | ||
| 153 | - link line: [ /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2 -plugin /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so -plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUopn6L.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root --build-id --eh-frame-hdr --hash-style=gnu -export-dynamic -dynamic-linker /lib/ld-linux-armhf.so.3 -X -m armelf_linux_eabi -o cmTC_0d185 /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3 -L/usr/local/arm/4.9.3/bin/../lib/gcc -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib -lm -ldl -lstdc++ CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lpthread -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtend.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crtn.o] | 158 | + ignore line: [COLLECT_GCC_OPTIONS='-pthread' '-std=gnu99' '-v' '-rdynamic' '-o' 'cmTC_006c8' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] |
| 159 | + link line: [ /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2 -plugin /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so -plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7J6Ikc.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root --build-id --eh-frame-hdr --hash-style=gnu -export-dynamic -dynamic-linker /lib/ld-linux-armhf.so.3 -X -m armelf_linux_eabi -o cmTC_006c8 /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3 -L/usr/local/arm/4.9.3/bin/../lib/gcc -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib -lm -ldl -lstdc++ CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lpthread -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtend.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crtn.o] | ||
| 154 | arg [/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2] ==> ignore | 160 | arg [/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2] ==> ignore |
| 155 | arg [-plugin] ==> ignore | 161 | arg [-plugin] ==> ignore |
| 156 | arg [/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so] ==> ignore | 162 | arg [/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so] ==> ignore |
| 157 | arg [-plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper] ==> ignore | 163 | arg [-plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper] ==> ignore |
| 158 | - arg [-plugin-opt=-fresolution=/tmp/ccUopn6L.res] ==> ignore | 164 | + arg [-plugin-opt=-fresolution=/tmp/cc7J6Ikc.res] ==> ignore |
| 159 | arg [-plugin-opt=-pass-through=-lgcc] ==> ignore | 165 | arg [-plugin-opt=-pass-through=-lgcc] ==> ignore |
| 160 | arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore | 166 | arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore |
| 161 | arg [-plugin-opt=-pass-through=-lpthread] ==> ignore | 167 | arg [-plugin-opt=-pass-through=-lpthread] ==> ignore |
| @@ -173,7 +179,7 @@ Parsed C implicit link information from above output: | @@ -173,7 +179,7 @@ Parsed C implicit link information from above output: | ||
| 173 | arg [-m] ==> ignore | 179 | arg [-m] ==> ignore |
| 174 | arg [armelf_linux_eabi] ==> ignore | 180 | arg [armelf_linux_eabi] ==> ignore |
| 175 | arg [-o] ==> ignore | 181 | arg [-o] ==> ignore |
| 176 | - arg [cmTC_0d185] ==> ignore | 182 | + arg [cmTC_006c8] ==> ignore |
| 177 | arg [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o] ==> obj [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o] | 183 | arg [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o] ==> obj [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o] |
| 178 | arg [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o] ==> obj [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o] | 184 | arg [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o] ==> obj [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o] |
| 179 | arg [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o] ==> obj [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o] | 185 | arg [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o] ==> obj [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o] |
| @@ -185,7 +191,7 @@ Parsed C implicit link information from above output: | @@ -185,7 +191,7 @@ Parsed C implicit link information from above output: | ||
| 185 | arg [-lm] ==> lib [m] | 191 | arg [-lm] ==> lib [m] |
| 186 | arg [-ldl] ==> lib [dl] | 192 | arg [-ldl] ==> lib [dl] |
| 187 | arg [-lstdc++] ==> lib [stdc++] | 193 | arg [-lstdc++] ==> lib [stdc++] |
| 188 | - arg [CMakeFiles/cmTC_0d185.dir/CMakeCCompilerABI.c.o] ==> ignore | 194 | + arg [CMakeFiles/cmTC_006c8.dir/CMakeCCompilerABI.c.o] ==> ignore |
| 189 | arg [-lgcc] ==> lib [gcc] | 195 | arg [-lgcc] ==> lib [gcc] |
| 190 | arg [--as-needed] ==> ignore | 196 | arg [--as-needed] ==> ignore |
| 191 | arg [-lgcc_s] ==> lib [gcc_s] | 197 | arg [-lgcc_s] ==> lib [gcc_s] |
| @@ -217,18 +223,20 @@ Parsed C implicit link information from above output: | @@ -217,18 +223,20 @@ Parsed C implicit link information from above output: | ||
| 217 | Detecting CXX compiler ABI info compiled with the following output: | 223 | Detecting CXX compiler ABI info compiled with the following output: |
| 218 | Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp | 224 | Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp |
| 219 | 225 | ||
| 220 | -Run Build Command(s):/usr/bin/make -f Makefile cmTC_31ee1/fast && /usr/bin/make -f CMakeFiles/cmTC_31ee1.dir/build.make CMakeFiles/cmTC_31ee1.dir/build | 226 | +Run Build Command(s):/usr/bin/make -f Makefile cmTC_0ba72/fast && make: Warning: File 'Makefile' has modification time 0.23 s in the future |
| 227 | +/usr/bin/make -f CMakeFiles/cmTC_0ba72.dir/build.make CMakeFiles/cmTC_0ba72.dir/build | ||
| 221 | make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' | 228 | make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' |
| 222 | -Building CXX object CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o | ||
| 223 | -/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -v -o CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.24/Modules/CMakeCXXCompilerABI.cpp | 229 | +make[1]: Warning: File 'CMakeFiles/cmTC_0ba72.dir/flags.make' has modification time 0.23 s in the future |
| 230 | +Building CXX object CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o | ||
| 231 | +/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -v -o CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.24/Modules/CMakeCXXCompilerABI.cpp | ||
| 224 | Using built-in specs. | 232 | Using built-in specs. |
| 225 | COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ | 233 | COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ |
| 226 | Target: arm-cortexa9-linux-gnueabihf | 234 | Target: arm-cortexa9-linux-gnueabihf |
| 227 | Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long | 235 | Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long |
| 228 | Thread model: posix | 236 | Thread model: posix |
| 229 | gcc version 4.9.3 (ctng-1.21.0-229g-FA) | 237 | gcc version 4.9.3 (ctng-1.21.0-229g-FA) |
| 230 | -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' | ||
| 231 | - /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/cc1plus -quiet -v -iprefix /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/ -isysroot /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root -D_GNU_SOURCE /usr/local/share/cmake-3.24/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3 -mtls-dialect=gnu -auxbase-strip CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o -version -o /tmp/ccSp4aAW.s | 238 | +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' |
| 239 | + /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/cc1plus -quiet -v -iprefix /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/ -isysroot /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root -D_GNU_SOURCE /usr/local/share/cmake-3.24/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3 -mtls-dialect=gnu -auxbase-strip CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o -version -o /tmp/ccViDTcm.s | ||
| 232 | GNU C++ (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf) | 240 | GNU C++ (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf) |
| 233 | compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3 | 241 | compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3 |
| 234 | GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 | 242 | GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 |
| @@ -253,15 +261,15 @@ GNU C++ (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf) | @@ -253,15 +261,15 @@ GNU C++ (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf) | ||
| 253 | compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3 | 261 | compiled by GNU C version 4.8.4, GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.3 |
| 254 | GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 | 262 | GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 |
| 255 | Compiler executable checksum: 3ff7ac3bbb22638e38898d02aefebadb | 263 | Compiler executable checksum: 3ff7ac3bbb22638e38898d02aefebadb |
| 256 | -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' | ||
| 257 | - /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/as -v -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3 -meabi=5 -o CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccSp4aAW.s | 264 | +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' |
| 265 | + /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/as -v -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3 -meabi=5 -o CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccViDTcm.s | ||
| 258 | GNU assembler version 2.25.1 (arm-cortexa9-linux-gnueabihf) using BFD version (ctng-1.21.0-229g-FA) 2.25.1 | 266 | GNU assembler version 2.25.1 (arm-cortexa9-linux-gnueabihf) using BFD version (ctng-1.21.0-229g-FA) 2.25.1 |
| 259 | COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ | 267 | COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ |
| 260 | LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/ | 268 | LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/ |
| 261 | -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' | ||
| 262 | -Linking CXX executable cmTC_31ee1 | ||
| 263 | -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_31ee1.dir/link.txt --verbose=1 | ||
| 264 | -/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -v -rdynamic CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_31ee1 | 269 | +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' |
| 270 | +Linking CXX executable cmTC_0ba72 | ||
| 271 | +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0ba72.dir/link.txt --verbose=1 | ||
| 272 | +/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -v -rdynamic CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_0ba72 | ||
| 265 | Using built-in specs. | 273 | Using built-in specs. |
| 266 | COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ | 274 | COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ |
| 267 | COLLECT_LTO_WRAPPER=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper | 275 | COLLECT_LTO_WRAPPER=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper |
| @@ -271,9 +279,11 @@ Thread model: posix | @@ -271,9 +279,11 @@ Thread model: posix | ||
| 271 | gcc version 4.9.3 (ctng-1.21.0-229g-FA) | 279 | gcc version 4.9.3 (ctng-1.21.0-229g-FA) |
| 272 | COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ | 280 | COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ |
| 273 | LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/ | 281 | LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/ |
| 274 | -COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_31ee1' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' | ||
| 275 | - /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2 -plugin /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so -plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper -plugin-opt=-fresolution=/tmp/ccrjMpuV.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root --build-id --eh-frame-hdr --hash-style=gnu -export-dynamic -dynamic-linker /lib/ld-linux-armhf.so.3 -X -m armelf_linux_eabi -o cmTC_31ee1 /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3 -L/usr/local/arm/4.9.3/bin/../lib/gcc -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtend.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crtn.o | 282 | +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0ba72' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu' |
| 283 | + /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2 -plugin /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so -plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper -plugin-opt=-fresolution=/tmp/cczCbxYp.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root --build-id --eh-frame-hdr --hash-style=gnu -export-dynamic -dynamic-linker /lib/ld-linux-armhf.so.3 -X -m armelf_linux_eabi -o cmTC_0ba72 /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3 -L/usr/local/arm/4.9.3/bin/../lib/gcc -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtend.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crtn.o | ||
| 284 | +make[1]: warning: Clock skew detected. Your build may be incomplete. | ||
| 276 | make[1]: Leaving directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' | 285 | make[1]: Leaving directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' |
| 286 | +make: warning: Clock skew detected. Your build may be incomplete. | ||
| 277 | 287 | ||
| 278 | 288 | ||
| 279 | 289 | ||
| @@ -302,18 +312,20 @@ Parsed CXX implicit link information from above output: | @@ -302,18 +312,20 @@ Parsed CXX implicit link information from above output: | ||
| 302 | link line regex: [^( *|.*[/\])(arm-cortexa9-linux-gnueabihf-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] | 312 | link line regex: [^( *|.*[/\])(arm-cortexa9-linux-gnueabihf-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] |
| 303 | ignore line: [Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp] | 313 | ignore line: [Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp] |
| 304 | ignore line: [] | 314 | ignore line: [] |
| 305 | - ignore line: [Run Build Command(s):/usr/bin/make -f Makefile cmTC_31ee1/fast && /usr/bin/make -f CMakeFiles/cmTC_31ee1.dir/build.make CMakeFiles/cmTC_31ee1.dir/build] | 315 | + ignore line: [Run Build Command(s):/usr/bin/make -f Makefile cmTC_0ba72/fast && make: Warning: File 'Makefile' has modification time 0.23 s in the future] |
| 316 | + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_0ba72.dir/build.make CMakeFiles/cmTC_0ba72.dir/build] | ||
| 306 | ignore line: [make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp'] | 317 | ignore line: [make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp'] |
| 307 | - ignore line: [Building CXX object CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o] | ||
| 308 | - ignore line: [/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -v -o CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.24/Modules/CMakeCXXCompilerABI.cpp] | 318 | + ignore line: [make[1]: Warning: File 'CMakeFiles/cmTC_0ba72.dir/flags.make' has modification time 0.23 s in the future] |
| 319 | + ignore line: [Building CXX object CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o] | ||
| 320 | + ignore line: [/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -v -o CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.24/Modules/CMakeCXXCompilerABI.cpp] | ||
| 309 | ignore line: [Using built-in specs.] | 321 | ignore line: [Using built-in specs.] |
| 310 | ignore line: [COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++] | 322 | ignore line: [COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++] |
| 311 | ignore line: [Target: arm-cortexa9-linux-gnueabihf] | 323 | ignore line: [Target: arm-cortexa9-linux-gnueabihf] |
| 312 | ignore line: [Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl -Bstatic -lstdc++ -Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long] | 324 | ignore line: [Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3 --with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c c++ --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard --with-pkgversion=ctng-1.21.0-229g-FA --with-bugurl=http://www.friendlyarm.com/ --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpfr=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-mpc=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-isl=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-cloog=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --with-libelf=/work/toolchain/build/arm-cortexa9-linux-gnueabihf/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl -Bstatic -lstdc++ -Bdynamic -lm' --enable-threads=posix --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-long-long] |
| 313 | ignore line: [Thread model: posix] | 325 | ignore line: [Thread model: posix] |
| 314 | ignore line: [gcc version 4.9.3 (ctng-1.21.0-229g-FA) ] | 326 | ignore line: [gcc version 4.9.3 (ctng-1.21.0-229g-FA) ] |
| 315 | - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] | ||
| 316 | - ignore line: [ /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/cc1plus -quiet -v -iprefix /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/ -isysroot /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root -D_GNU_SOURCE /usr/local/share/cmake-3.24/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3 -mtls-dialect=gnu -auxbase-strip CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o -version -o /tmp/ccSp4aAW.s] | 327 | + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] |
| 328 | + ignore line: [ /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/cc1plus -quiet -v -iprefix /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/ -isysroot /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root -D_GNU_SOURCE /usr/local/share/cmake-3.24/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3 -mtls-dialect=gnu -auxbase-strip CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o -version -o /tmp/ccViDTcm.s] | ||
| 317 | ignore line: [GNU C++ (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf)] | 329 | ignore line: [GNU C++ (ctng-1.21.0-229g-FA) version 4.9.3 (arm-cortexa9-linux-gnueabihf)] |
| 318 | ignore line: [ compiled by GNU C version 4.8.4 GMP version 6.0.0 MPFR version 3.1.3 MPC version 1.0.3] | 330 | ignore line: [ compiled by GNU C version 4.8.4 GMP version 6.0.0 MPFR version 3.1.3 MPC version 1.0.3] |
| 319 | ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] | 331 | ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] |
| @@ -338,15 +350,15 @@ Parsed CXX implicit link information from above output: | @@ -338,15 +350,15 @@ Parsed CXX implicit link information from above output: | ||
| 338 | ignore line: [ compiled by GNU C version 4.8.4 GMP version 6.0.0 MPFR version 3.1.3 MPC version 1.0.3] | 350 | ignore line: [ compiled by GNU C version 4.8.4 GMP version 6.0.0 MPFR version 3.1.3 MPC version 1.0.3] |
| 339 | ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] | 351 | ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] |
| 340 | ignore line: [Compiler executable checksum: 3ff7ac3bbb22638e38898d02aefebadb] | 352 | ignore line: [Compiler executable checksum: 3ff7ac3bbb22638e38898d02aefebadb] |
| 341 | - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] | ||
| 342 | - ignore line: [ /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/as -v -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3 -meabi=5 -o CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccSp4aAW.s] | 353 | + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] |
| 354 | + ignore line: [ /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/as -v -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3 -meabi=5 -o CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccViDTcm.s] | ||
| 343 | ignore line: [GNU assembler version 2.25.1 (arm-cortexa9-linux-gnueabihf) using BFD version (ctng-1.21.0-229g-FA) 2.25.1] | 355 | ignore line: [GNU assembler version 2.25.1 (arm-cortexa9-linux-gnueabihf) using BFD version (ctng-1.21.0-229g-FA) 2.25.1] |
| 344 | ignore line: [COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/] | 356 | ignore line: [COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/] |
| 345 | ignore line: [LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/] | 357 | ignore line: [LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/] |
| 346 | - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] | ||
| 347 | - ignore line: [Linking CXX executable cmTC_31ee1] | ||
| 348 | - ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_31ee1.dir/link.txt --verbose=1] | ||
| 349 | - ignore line: [/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -v -rdynamic CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_31ee1 ] | 358 | + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] |
| 359 | + ignore line: [Linking CXX executable cmTC_0ba72] | ||
| 360 | + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0ba72.dir/link.txt --verbose=1] | ||
| 361 | + ignore line: [/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -v -rdynamic CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_0ba72 ] | ||
| 350 | ignore line: [Using built-in specs.] | 362 | ignore line: [Using built-in specs.] |
| 351 | ignore line: [COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++] | 363 | ignore line: [COLLECT_GCC=/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++] |
| 352 | ignore line: [COLLECT_LTO_WRAPPER=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper] | 364 | ignore line: [COLLECT_LTO_WRAPPER=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper] |
| @@ -356,13 +368,13 @@ Parsed CXX implicit link information from above output: | @@ -356,13 +368,13 @@ Parsed CXX implicit link information from above output: | ||
| 356 | ignore line: [gcc version 4.9.3 (ctng-1.21.0-229g-FA) ] | 368 | ignore line: [gcc version 4.9.3 (ctng-1.21.0-229g-FA) ] |
| 357 | ignore line: [COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/] | 369 | ignore line: [COMPILER_PATH=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../libexec/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/] |
| 358 | ignore line: [LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/] | 370 | ignore line: [LIBRARY_PATH=/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/:/usr/local/arm/4.9.3/bin/../lib/gcc/:/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib/:/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/] |
| 359 | - ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_31ee1' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] | ||
| 360 | - link line: [ /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2 -plugin /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so -plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper -plugin-opt=-fresolution=/tmp/ccrjMpuV.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root --build-id --eh-frame-hdr --hash-style=gnu -export-dynamic -dynamic-linker /lib/ld-linux-armhf.so.3 -X -m armelf_linux_eabi -o cmTC_31ee1 /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3 -L/usr/local/arm/4.9.3/bin/../lib/gcc -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtend.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crtn.o] | 371 | + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0ba72' '-shared-libgcc' '-march=armv7-a' '-mtune=cortex-a9' '-mfloat-abi=hard' '-mfpu=vfpv3' '-mtls-dialect=gnu'] |
| 372 | + link line: [ /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2 -plugin /usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so -plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper -plugin-opt=-fresolution=/tmp/cczCbxYp.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root --build-id --eh-frame-hdr --hash-style=gnu -export-dynamic -dynamic-linker /lib/ld-linux-armhf.so.3 -X -m armelf_linux_eabi -o cmTC_0ba72 /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3 -L/usr/local/arm/4.9.3/bin/../lib/gcc -L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib -L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtend.o /usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crtn.o] | ||
| 361 | arg [/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2] ==> ignore | 373 | arg [/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/collect2] ==> ignore |
| 362 | arg [-plugin] ==> ignore | 374 | arg [-plugin] ==> ignore |
| 363 | arg [/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so] ==> ignore | 375 | arg [/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/liblto_plugin.so] ==> ignore |
| 364 | arg [-plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper] ==> ignore | 376 | arg [-plugin-opt=/usr/local/arm/4.9.3/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper] ==> ignore |
| 365 | - arg [-plugin-opt=-fresolution=/tmp/ccrjMpuV.res] ==> ignore | 377 | + arg [-plugin-opt=-fresolution=/tmp/cczCbxYp.res] ==> ignore |
| 366 | arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore | 378 | arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore |
| 367 | arg [-plugin-opt=-pass-through=-lgcc] ==> ignore | 379 | arg [-plugin-opt=-pass-through=-lgcc] ==> ignore |
| 368 | arg [-plugin-opt=-pass-through=-lc] ==> ignore | 380 | arg [-plugin-opt=-pass-through=-lc] ==> ignore |
| @@ -379,7 +391,7 @@ Parsed CXX implicit link information from above output: | @@ -379,7 +391,7 @@ Parsed CXX implicit link information from above output: | ||
| 379 | arg [-m] ==> ignore | 391 | arg [-m] ==> ignore |
| 380 | arg [armelf_linux_eabi] ==> ignore | 392 | arg [armelf_linux_eabi] ==> ignore |
| 381 | arg [-o] ==> ignore | 393 | arg [-o] ==> ignore |
| 382 | - arg [cmTC_31ee1] ==> ignore | 394 | + arg [cmTC_0ba72] ==> ignore |
| 383 | arg [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o] ==> obj [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o] | 395 | arg [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o] ==> obj [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crt1.o] |
| 384 | arg [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o] ==> obj [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o] | 396 | arg [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o] ==> obj [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib/crti.o] |
| 385 | arg [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o] ==> obj [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o] | 397 | arg [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o] ==> obj [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/crtbegin.o] |
| @@ -388,7 +400,7 @@ Parsed CXX implicit link information from above output: | @@ -388,7 +400,7 @@ Parsed CXX implicit link information from above output: | ||
| 388 | arg [-L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib] ==> dir [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib] | 400 | arg [-L/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib] ==> dir [/usr/local/arm/4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/lib] |
| 389 | arg [-L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib] ==> dir [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib] | 401 | arg [-L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib] ==> dir [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/lib] |
| 390 | arg [-L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib] ==> dir [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib] | 402 | arg [-L/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib] ==> dir [/usr/local/arm/4.9.3/bin/../arm-cortexa9-linux-gnueabihf/sys-root/usr/lib] |
| 391 | - arg [CMakeFiles/cmTC_31ee1.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore | 403 | + arg [CMakeFiles/cmTC_0ba72.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore |
| 392 | arg [-lstdc++] ==> lib [stdc++] | 404 | arg [-lstdc++] ==> lib [stdc++] |
| 393 | arg [-lm] ==> lib [m] | 405 | arg [-lm] ==> lib [m] |
| 394 | arg [-lgcc_s] ==> lib [gcc_s] | 406 | arg [-lgcc_s] ==> lib [gcc_s] |
| @@ -419,15 +431,15 @@ Parsed CXX implicit link information from above output: | @@ -419,15 +431,15 @@ Parsed CXX implicit link information from above output: | ||
| 419 | Detecting CXX [-std=c++14] compiler features compiled with the following output: | 431 | Detecting CXX [-std=c++14] compiler features compiled with the following output: |
| 420 | Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp | 432 | Change Dir: /mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp |
| 421 | 433 | ||
| 422 | -Run Build Command(s):/usr/bin/make -f Makefile cmTC_e99f4/fast && make: Warning: File 'Makefile' has modification time 0.36 s in the future | ||
| 423 | -/usr/bin/make -f CMakeFiles/cmTC_e99f4.dir/build.make CMakeFiles/cmTC_e99f4.dir/build | 434 | +Run Build Command(s):/usr/bin/make -f Makefile cmTC_01ec4/fast && make: Warning: File 'Makefile' has modification time 0.079 s in the future |
| 435 | +/usr/bin/make -f CMakeFiles/cmTC_01ec4.dir/build.make CMakeFiles/cmTC_01ec4.dir/build | ||
| 424 | make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' | 436 | make[1]: Entering directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' |
| 425 | -make[1]: Warning: File 'CMakeFiles/cmTC_e99f4.dir/flags.make' has modification time 0.36 s in the future | ||
| 426 | -Building CXX object CMakeFiles/cmTC_e99f4.dir/feature_tests.cxx.o | ||
| 427 | -/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -std=c++14 -o CMakeFiles/cmTC_e99f4.dir/feature_tests.cxx.o -c /mnt/hgfs/share/展架程序/build/CMakeFiles/feature_tests.cxx | ||
| 428 | -Linking CXX executable cmTC_e99f4 | ||
| 429 | -/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e99f4.dir/link.txt --verbose=1 | ||
| 430 | -/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -rdynamic CMakeFiles/cmTC_e99f4.dir/feature_tests.cxx.o -o cmTC_e99f4 | 437 | +make[1]: Warning: File 'CMakeFiles/cmTC_01ec4.dir/flags.make' has modification time 0.076 s in the future |
| 438 | +Building CXX object CMakeFiles/cmTC_01ec4.dir/feature_tests.cxx.o | ||
| 439 | +/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -std=c++14 -o CMakeFiles/cmTC_01ec4.dir/feature_tests.cxx.o -c /mnt/hgfs/share/展架程序/build/CMakeFiles/feature_tests.cxx | ||
| 440 | +Linking CXX executable cmTC_01ec4 | ||
| 441 | +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_01ec4.dir/link.txt --verbose=1 | ||
| 442 | +/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++ -rdynamic CMakeFiles/cmTC_01ec4.dir/feature_tests.cxx.o -o cmTC_01ec4 | ||
| 431 | make[1]: 警告:检测到时钟错误。您的创建可能是不完整的。 | 443 | make[1]: 警告:检测到时钟错误。您的创建可能是不完整的。 |
| 432 | make[1]: Leaving directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' | 444 | make[1]: Leaving directory '/mnt/hgfs/share/展架程序/build/CMakeFiles/CMakeTmp' |
| 433 | make: 警告:检测到时钟错误。您的创建可能是不完整的。 | 445 | make: 警告:检测到时钟错误。您的创建可能是不完整的。 |
| @@ -74,11 +74,10 @@ set(CMAKE_DEPENDS_DEPENDENCY_FILES | @@ -74,11 +74,10 @@ set(CMAKE_DEPENDS_DEPENDENCY_FILES | ||
| 74 | "/mnt/hgfs/share/展架程序/Module/Megaphone/AudioFile/Megaphone_AudioFile.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/AudioFile/Megaphone_AudioFile.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/AudioFile/Megaphone_AudioFile.c.o.d" | 74 | "/mnt/hgfs/share/展架程序/Module/Megaphone/AudioFile/Megaphone_AudioFile.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/AudioFile/Megaphone_AudioFile.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/AudioFile/Megaphone_AudioFile.c.o.d" |
| 75 | "/mnt/hgfs/share/展架程序/Module/Megaphone/Megaphone_InputAndOutput.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Megaphone_InputAndOutput.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Megaphone_InputAndOutput.c.o.d" | 75 | "/mnt/hgfs/share/展架程序/Module/Megaphone/Megaphone_InputAndOutput.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Megaphone_InputAndOutput.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Megaphone_InputAndOutput.c.o.d" |
| 76 | "/mnt/hgfs/share/展架程序/Module/Megaphone/Music/Megaphone_Music.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/Megaphone_Music.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/Megaphone_Music.c.o.d" | 76 | "/mnt/hgfs/share/展架程序/Module/Megaphone/Music/Megaphone_Music.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/Megaphone_Music.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/Megaphone_Music.c.o.d" |
| 77 | - "/mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/10.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/10.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/10.c.o.d" | ||
| 78 | - "/mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/10t.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/10t.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/10t.c.o.d" | ||
| 79 | "/mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.c.o.d" | 77 | "/mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.c.o.d" |
| 78 | + "/mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Intl_tts/Intl_tts.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Intl_tts/Intl_tts.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Intl_tts/Intl_tts.c.o.d" | ||
| 80 | "/mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Megaphone_TTS.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Megaphone_TTS.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Megaphone_TTS.c.o.d" | 79 | "/mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Megaphone_TTS.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Megaphone_TTS.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Megaphone_TTS.c.o.d" |
| 81 | - "/mnt/hgfs/share/展架程序/Module/Megaphone/TTS/tts_sample.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/tts_sample.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/tts_sample.c.o.d" | 80 | + "/mnt/hgfs/share/展架程序/Module/Megaphone/TTS/cn_tts/cn_tts.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/cn_tts/cn_tts.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/cn_tts/cn_tts.c.o.d" |
| 82 | "/mnt/hgfs/share/展架程序/Module/Megaphone/opus/RealTimeVoice/Megaphone_RealTimeVoice.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/opus/RealTimeVoice/Megaphone_RealTimeVoice.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/opus/RealTimeVoice/Megaphone_RealTimeVoice.c.o.d" | 81 | "/mnt/hgfs/share/展架程序/Module/Megaphone/opus/RealTimeVoice/Megaphone_RealTimeVoice.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/opus/RealTimeVoice/Megaphone_RealTimeVoice.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/opus/RealTimeVoice/Megaphone_RealTimeVoice.c.o.d" |
| 83 | "/mnt/hgfs/share/展架程序/Module/Megaphone/opus/RecordVoice/Megaphone_RecordVoice.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/opus/RecordVoice/Megaphone_RecordVoice.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/opus/RecordVoice/Megaphone_RecordVoice.c.o.d" | 82 | "/mnt/hgfs/share/展架程序/Module/Megaphone/opus/RecordVoice/Megaphone_RecordVoice.c" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/opus/RecordVoice/Megaphone_RecordVoice.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/opus/RecordVoice/Megaphone_RecordVoice.c.o.d" |
| 84 | "/mnt/hgfs/share/展架程序/Module/UI_control/Psdk_UI_io.c" "CMakeFiles/JZ_UART_APP.dir/Module/UI_control/Psdk_UI_io.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/UI_control/Psdk_UI_io.c.o.d" | 83 | "/mnt/hgfs/share/展架程序/Module/UI_control/Psdk_UI_io.c" "CMakeFiles/JZ_UART_APP.dir/Module/UI_control/Psdk_UI_io.c.o" "gcc" "CMakeFiles/JZ_UART_APP.dir/Module/UI_control/Psdk_UI_io.c.o.d" |
不能预览此文件类型
不能预览此文件类型
| @@ -26,7 +26,7 @@ CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Megaphone_InputAndOutput.c.o: \ | @@ -26,7 +26,7 @@ CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Megaphone_InputAndOutput.c.o: \ | ||
| 26 | /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdint.h \ | 26 | /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdint.h \ |
| 27 | /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/wchar.h \ | 27 | /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/wchar.h \ |
| 28 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_ErrorCode.h \ | 28 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_ErrorCode.h \ |
| 29 | - /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/tts_sample.h \ | 29 | + /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/cn_tts/cn_tts.h \ |
| 30 | /mnt/hgfs/share/展架程序/Module/Megaphone/Music/Megaphone_Music.h \ | 30 | /mnt/hgfs/share/展架程序/Module/Megaphone/Music/Megaphone_Music.h \ |
| 31 | /mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.h \ | 31 | /mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTimeMP2.h \ |
| 32 | /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Megaphone_TTS.h \ | 32 | /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Megaphone_TTS.h \ |
不能预览此文件类型
不能预览此文件类型
不能预览此文件类型
| @@ -64,5 +64,4 @@ CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTime | @@ -64,5 +64,4 @@ CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/Megaphone_RealTime | ||
| 64 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_Code.h \ | 64 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_Code.h \ |
| 65 | /mnt/hgfs/share/展架程序/./Module/Megaphone/Megaphone_InputAndOutput.h \ | 65 | /mnt/hgfs/share/展架程序/./Module/Megaphone/Megaphone_InputAndOutput.h \ |
| 66 | /mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/../Megaphone_Music.h \ | 66 | /mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/../Megaphone_Music.h \ |
| 67 | - /mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/../RealTimeMP2/Megaphone_RealTimeMP2.h \ | ||
| 68 | - /mnt/hgfs/share/展架程序/./application/version_choose.h | 67 | + /mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/../RealTimeMP2/Megaphone_RealTimeMP2.h |
不能预览此文件类型
| 1 | +CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Intl_tts/Intl_tts.c.o: \ | ||
| 2 | + /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Intl_tts/Intl_tts.c \ | ||
| 3 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdc-predef.h \ | ||
| 4 | + /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Intl_tts/Intl_tts.h \ | ||
| 5 | + /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Intl_tts/Intl_interface.h \ | ||
| 6 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdio.h \ | ||
| 7 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/features.h \ | ||
| 8 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/sys/cdefs.h \ | ||
| 9 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/wordsize.h \ | ||
| 10 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/gnu/stubs.h \ | ||
| 11 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/gnu/stubs-hard.h \ | ||
| 12 | + /usr/local/arm/4.9.3/lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/include/stddef.h \ | ||
| 13 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/types.h \ | ||
| 14 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/typesizes.h \ | ||
| 15 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/libio.h \ | ||
| 16 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/_G_config.h \ | ||
| 17 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/wchar.h \ | ||
| 18 | + /usr/local/arm/4.9.3/lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/include/stdarg.h \ | ||
| 19 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/stdio_lim.h \ | ||
| 20 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/sys_errlist.h \ | ||
| 21 | + /mnt/hgfs/share/展架程序/./Module/Megaphone/Megaphone_InputAndOutput.h \ | ||
| 22 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_Code.h \ | ||
| 23 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_InsCode.h \ | ||
| 24 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_FLagCode.h \ | ||
| 25 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_ReturnCode.h \ | ||
| 26 | + /usr/local/arm/4.9.3/lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/include/stdint.h \ | ||
| 27 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdint.h \ | ||
| 28 | + /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/wchar.h \ | ||
| 29 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_ErrorCode.h \ | ||
| 30 | + /mnt/hgfs/share/展架程序/./application/version_choose.h \ | ||
| 31 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdkLib.h \ | ||
| 32 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdkBase.h \ | ||
| 33 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Logger/JZsdk_Logger.h \ | ||
| 34 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Osal/JZsdk_FileSystm.h \ | ||
| 35 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Delay/JZsdk_Delay.h \ | ||
| 36 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_FLagCode.h \ | ||
| 37 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_CommonFuntion/JZsdkCommonFuntion.h \ | ||
| 38 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_CommonFuntion/JZsdk_string/JZsdk_string.h \ | ||
| 39 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_Code.h |
| @@ -39,7 +39,7 @@ CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Megaphone_TTS.c.o: \ | @@ -39,7 +39,7 @@ CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Megaphone_TTS.c.o: \ | ||
| 39 | /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdint.h \ | 39 | /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdint.h \ |
| 40 | /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/wchar.h \ | 40 | /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/bits/wchar.h \ |
| 41 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_ErrorCode.h \ | 41 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_ErrorCode.h \ |
| 42 | - /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/tts_sample.h \ | 42 | + /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/cn_tts/cn_tts.h \ |
| 43 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdkLib.h \ | 43 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdkLib.h \ |
| 44 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdkBase.h \ | 44 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdkBase.h \ |
| 45 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Logger/JZsdk_Logger.h \ | 45 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Logger/JZsdk_Logger.h \ |
| @@ -48,4 +48,6 @@ CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Megaphone_TTS.c.o: \ | @@ -48,4 +48,6 @@ CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/TTS/Megaphone_TTS.c.o: \ | ||
| 48 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_FLagCode.h \ | 48 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_FLagCode.h \ |
| 49 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_CommonFuntion/JZsdkCommonFuntion.h \ | 49 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_CommonFuntion/JZsdkCommonFuntion.h \ |
| 50 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_CommonFuntion/JZsdk_string/JZsdk_string.h \ | 50 | /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_CommonFuntion/JZsdk_string/JZsdk_string.h \ |
| 51 | - /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_Code.h | 51 | + /mnt/hgfs/share/展架程序/./JZsdk/JZsdk_Base/JZsdk_Code/JZsdk_Code.h \ |
| 52 | + /mnt/hgfs/share/展架程序/Module/Megaphone/TTS/Intl_tts/Intl_tts.h \ | ||
| 53 | + /mnt/hgfs/share/展架程序/./application/version_choose.h |
-
请 注册 或 登录 后发表评论