作者 潘浩彬

10更新

正在显示 91 个修改的文件 包含 2503 行增加1174 行删除

要显示太多修改。

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

@@ -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(&current_time); 101 time(&current_time);
102 info = localtime(&current_time); 102 info = localtime(&current_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(&parameter->mutex, NULL);
  70 + pthread_cond_init(&parameter->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 }
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 -// }  
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
  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
  1 +#ifndef INTL_TTS_H
  2 +#define INTL_TTS_H
  3 +int espeak_init();
  4 +int espeak_tts(int languages, int speed ,char *tts_words ,int len );
  5 +#endif
  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 //接收处理类
不能预览此文件类型
不能预览此文件类型
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 -}  
不能预览此文件类型
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 \
1 -CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/10.c.o: \  
2 - /mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/10.c \  
3 - /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdc-predef.h  
1 -CMakeFiles/JZ_UART_APP.dir/Module/Megaphone/Music/RealTimeMP2/10t.c.o: \  
2 - /mnt/hgfs/share/展架程序/Module/Megaphone/Music/RealTimeMP2/10t.c \  
3 - /usr/local/arm/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include/stdc-predef.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