作者 ookk303

音频修改

1 #include <stdio.h> 1 #include <stdio.h>
2 #include "./JZsdk_DeviceCode.h" 2 #include "./JZsdk_DeviceCode.h"
3 3
  4 +/*************************
  5 + *
  6 + * 获取设备名称
  7 + *
  8 + *
  9 + * ************************/
4 unsigned char *JZsdk_GetDeviceName() 10 unsigned char *JZsdk_GetDeviceName()
5 { 11 {
  12 +
  13 +
6 return 14 return
7 } 15 }
@@ -63,6 +63,10 @@ typedef enum { @@ -63,6 +63,10 @@ typedef enum {
63 63
64 } JZ_CheckCode; //检查校验码 64 } JZ_CheckCode; //检查校验码
65 65
  66 +typedef enum {
  67 + JZ_ERROR_SYSTEM_MODULE_CODE_NO_UPGRADE_FILE = 0x6000, //没有升级文件
  68 +}JZ_Ugrade_ErrorCode;
  69 +
66 /* Exported functions --------------------------------------------------------*/ 70 /* Exported functions --------------------------------------------------------*/
67 71
68 #ifdef __cplusplus 72 #ifdef __cplusplus
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <pthread.h> 2 #include <pthread.h>
3 -#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" 3 +
4 #include "JZsdkLib.h" 4 #include "JZsdkLib.h"
  5 +#include "JZsdk_Hal.h"
5 6
6 T_JZsdkReturnCode HeartBeat_Uart1Check() 7 T_JZsdkReturnCode HeartBeat_Uart1Check()
7 { 8 {
8 - //1、获取串口1连接状态 9 + //1、获取hal的使用状态
  10 + int JZsdk_HalPort_UseFlag(UART_DEV_1);
9 11
10 12
11 } 13 }
@@ -22,18 +24,18 @@ static void *HeartBeatTask(void *arg) @@ -22,18 +24,18 @@ static void *HeartBeatTask(void *arg)
22 { 24 {
23 delayS(10); 25 delayS(10);
24 26
25 - HeartBeat_Uart1Check(); 27 + HeartBeat_HalCheck();
26 } 28 }
27 29
28 } 30 }
29 31
30 /***************** 32 /*****************
31 * 33 *
32 - * 心跳帧初始化 34 + * 心跳帧主设备类型的初始化
33 * 35 *
34 * 36 *
35 * *************************/ 37 * *************************/
36 -T_JZsdkReturnCode HeartBeat_Init() 38 +static T_JZsdkReturnCode HeartBeat_Main()
37 { 39 {
38 pthread_t PowerMangerTask; 40 pthread_t PowerMangerTask;
39 pthread_attr_t task_attribute; //线程属性 41 pthread_attr_t task_attribute; //线程属性
@@ -48,3 +50,16 @@ T_JZsdkReturnCode HeartBeat_Init() @@ -48,3 +50,16 @@ T_JZsdkReturnCode HeartBeat_Init()
48 50
49 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 51 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
50 } 52 }
  53 +
  54 +/*****************
  55 + *
  56 + * 心跳帧初始化
  57 + *
  58 + *
  59 + * *************************/
  60 +T_JZsdkReturnCode HeartBeat_Init()
  61 +{
  62 + HeartBeat_Main();
  63 +
  64 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  65 +}
@@ -3,10 +3,13 @@ @@ -3,10 +3,13 @@
3 3
4 #include "BaseConfig.h" 4 #include "BaseConfig.h"
5 5
  6 +
6 #define UPGRADE_FILE_DIR "/root/ugradeFile" 7 #define UPGRADE_FILE_DIR "/root/ugradeFile"
7 #define UPGRADE_FILE_STATUS_A "/root/ugradeFile/upgrade_status_a" 8 #define UPGRADE_FILE_STATUS_A "/root/ugradeFile/upgrade_status_a"
8 #define UPGRADE_FILE_STATUS_B "/root/ugradeFile/upgrade_status_b" 9 #define UPGRADE_FILE_STATUS_B "/root/ugradeFile/upgrade_status_b"
9 10
  11 +#define REMOTE_UPGRADE_FILE_DIR "/root/ugradeFile/remote_ugradeFile.tar"
  12 +
10 static int Upgrade_status = JZ_FLAGCODE_OFF; 13 static int Upgrade_status = JZ_FLAGCODE_OFF;
11 14
12 /************************************ 15 /************************************
@@ -17,21 +20,30 @@ static int Upgrade_status = JZ_FLAGCODE_OFF; @@ -17,21 +20,30 @@ static int Upgrade_status = JZ_FLAGCODE_OFF;
17 * *************************************/ 20 * *************************************/
18 T_JZsdkReturnCode Upgrade_PackageParse() 21 T_JZsdkReturnCode Upgrade_PackageParse()
19 { 22 {
20 - //解析升级包  
21 -  
22 - //1、分析是否存在linux自身的升级包  
23 - unsigned char upgradeFileName[128];  
24 - int upgradeFileNameLen = 0;  
25 -  
26 - //拼接为升级包的名字  
27 - memcpy(upgradeFileName, ) 23 + T_JZsdkReturnCode ret;
  24 + unsigned char cmd[128] = {0};
28 25
29 - if (JZsdk_check_file_exists(UPGRADE_FILE_DIR)) 26 + //分析是否存在升级包
  27 + if (JZsdk_check_file_exists(REMOTE_UPGRADE_FILE_DIR) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
30 { 28 {
  29 + JZSDK_LOG_ERROR("Upgrade_PackageParse: upgrade file not exists");
  30 + return JZ_ERROR_SYSTEM_MODULE_CODE_NO_UPGRADE_FILE;
  31 + }
31 32
  33 + //分解升级包
  34 + memseyt(cmd, 0, sizeof(cmd));
  35 + sprintf(cmd, "tar -xvf %s -C %s", REMOTE_UPGRADE_FILE_DIR, UPGRADE_FILE_DIR);
  36 + ret = JZsdk_RunSystemCmd(cmd);
  37 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  38 + {
  39 + JZSDK_LOG_ERROR("Upgrade_PackageParse: RunSystemCmd failed");
  40 + return ret;
32 } 41 }
33 42
34 - //2、分析是否存在其他模块的升级包 43 + //解析升级包
  44 + //首先分析本机的升级包
  45 + unsigned char upgrade_file_name[128] = {0};
  46 +
35 47
36 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 48 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
37 } 49 }
@@ -66,7 +78,7 @@ T_JZsdkReturnCode Upgrade_Init() @@ -66,7 +78,7 @@ T_JZsdkReturnCode Upgrade_Init()
66 78
67 //检查是否还存在升级包 79 //检查是否还存在升级包
68 80
69 - 81 + //
70 } 82 }
71 83
72 84
@@ -19,7 +19,7 @@ extern "C" { @@ -19,7 +19,7 @@ extern "C" {
19 /* Exported constants --------------------------------------------------------*/ 19 /* Exported constants --------------------------------------------------------*/
20 /* 常亮定义*/ 20 /* 常亮定义*/
21 #include "JZsdkLib.h" 21 #include "JZsdkLib.h"
22 -#include "./AudioFile_Param.h" 22 +#include "./AudioMange_Param.h"
23 23
24 /* Exported types ------------------------------------------------------------*/ 24 /* Exported types ------------------------------------------------------------*/
25 25
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 #include "AudioDeal/AudioDealThread/AudioDealThread.h" 11 #include "AudioDeal/AudioDealThread/AudioDealThread.h"
12 #include "./AudioFile_PlayDeal.h" 12 #include "./AudioFile_PlayDeal.h"
13 13
14 -#include "./AudioMange.h" 14 +#include "Megaohone/AudioMange/AudioMange.h"
15 #include "Megaphone/Megaphone.h" 15 #include "Megaphone/Megaphone.h"
16 16
17 #define AUDIO_DIR "/root/sdcard/audio" 17 #define AUDIO_DIR "/root/sdcard/audio"
@@ -571,7 +571,7 @@ T_JZsdkReturnCode AudioFile_SaveAudioFileStart(char *FileName) @@ -571,7 +571,7 @@ T_JZsdkReturnCode AudioFile_SaveAudioFileStart(char *FileName)
571 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 571 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
572 } 572 }
573 573
574 - g_AudioFile_SaveAudioFile_NameFp = fopen(SAVE_FILE_DIR, "w"); 574 + g_AudioFile_SaveAudioFile_NameFp = fopen(SAVE_FILE_DIR, "wb");
575 if (g_AudioFile_SaveAudioFile_NameFp == NULL) 575 if (g_AudioFile_SaveAudioFile_NameFp == NULL)
576 { 576 {
577 JZSDK_LOG_INFO("上传audio文件创建失败"); 577 JZSDK_LOG_INFO("上传audio文件创建失败");
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <string.h>
  4 +#include <pthread.h>
  5 +#include <dirent.h>
  6 +#include <sys/stat.h>
  7 +
  8 +#include "JZsdkLib.h"
  9 +#include "Megaphone/AudioMange/AudioMange.h"
  10 +
  11 +#define OPUS_DIR "/root/sdcard/opus"
  12 +
  13 +//创建一个opus节点
  14 +static struct AudioMange_Node *g_OpusList = NULL;
  15 +static struct AudioMange_Node *g_OpusListtail = NULL; // 用于跟踪链表的尾部
  16 +
  17 +static int g_OpusListNum = 0; //用于记录链表中的节点数量
  18 +static int g_OpusList_CurrentNum = 0; //用于记录链表中当前节点位置
  19 +
  20 +/*********
  21 + *
  22 + * opus文件链表注销
  23 + *
  24 +**********/
  25 +static T_JZsdkReturnCode OpusFile_FreeAudioList()
  26 +{
  27 + //清空尾部指针
  28 + g_OpusListtail = NULL;
  29 +
  30 + //清空歌曲数量
  31 + g_OpusListNum = 0; //记录链表中一共有几首歌
  32 + g_OpusList_CurrentNum = 0; //记录播放当前第几首歌
  33 +
  34 + //释放掉整个链表
  35 + Jzsdk_Free_AndioMange_Node(&g_OpusList);
  36 +
  37 + g_OpusList = NULL;
  38 +
  39 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  40 +}
  41 +
  42 +/*********
  43 + *
  44 + * opus文件链表刷新
  45 + *
  46 +**********/
  47 +T_JZsdkReturnCode OpusFile_FlushList()
  48 +{
  49 + //读取audio文件夹,并将歌曲名放入音频列表
  50 + DIR *dir;
  51 + struct dirent *entry;
  52 + struct stat fileStat;
  53 +
  54 + //创建一个临时opus节点
  55 + struct AudioMange_audio_struct OpusInfo;
  56 + T_JZsdkReturnCode ret;
  57 +
  58 + //检查是否存在opus文件夹,没有则创建一个
  59 + if(JZsdk_check_directory_exists_posix(OPUS_DIR) != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  60 + {
  61 + JZSDK_LOG_ERROR("不存在opus文件夹,创建一个");
  62 + JZsdk_Osal_Mkdir(OPUS_DIR);
  63 + }
  64 +
  65 + //确定音频文件夹存在
  66 + if ((dir = opendir(OPUS_DIR)) == NULL)
  67 + {
  68 + JZSDK_LOG_ERROR("音频文件夹获取失败");
  69 + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
  70 + }
  71 +
  72 + //查看歌曲存放链表是否有注册过
  73 + if (g_OpusList != NULL)
  74 + {
  75 + OpusFile_FreeAudioList();
  76 + }
  77 +
  78 +
  79 + while ((entry = readdir(dir)) != NULL)
  80 + {
  81 + const unsigned char *filename = entry->d_name;
  82 + unsigned int fileSize;
  83 + int len = strlen(filename);
  84 +
  85 + // // 获取文件状态信息,包括大小
  86 + // if (stat(filename, &fileStat) == 0)
  87 + // {
  88 + // fileSize = (unsigned long long)fileStat.st_size;
  89 + // }
  90 + // else
  91 + // {
  92 + // JZSDK_LOG_ERROR("%s文件信息获取错误",filename);
  93 + // fileSize = 0;
  94 + // continue;
  95 + // }
  96 +
  97 + // 跳过目录和隐藏文件,并检查文件扩展名
  98 + if (entry->d_type != DT_DIR && strcmp(filename, ".") != 0 && strcmp(filename, "..") != 0)
  99 + {
  100 + //printf("获取到%s\n",filename);
  101 +
  102 + // 检查后缀
  103 + if (JZsdk_strings_suffix_comparison_withLen((const unsigned char *)filename, len, (const unsigned char *)".opus") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  104 + {
  105 + // 处理文件
  106 + memset(&OpusInfo, 0, sizeof(OpusInfo)); // 清除audioInfo结构
  107 +
  108 + //写入文件名
  109 + strncpy(OpusInfo.FileName, entry->d_name, JZSDK_FILENAME_SIZE);
  110 +
  111 + unsigned char fileDir [256];
  112 + snprintf(fileDir, sizeof(fileDir), "/root/sdcard/opus/%s", filename);
  113 +
  114 + //写入文件大小
  115 + JZsdk_Fs_ReadFileSize(fileDir, &(OpusInfo.FileSize));
  116 +
  117 + //根据文件大小写入时长信息
  118 + //int temp_time = (OpusInfo.FileSize * 8) / (16000 * 16 * 1); #这条是pcm算时长,超准确
  119 + int temp_time = (OpusInfo.FileSize * 8) / (16000);
  120 + OpusInfo.Time = temp_time;
  121 +
  122 + //写入文件名长度
  123 + OpusInfo.FileNameLen = len;
  124 +
  125 + // 创建新节点
  126 + struct AudioMange_Node *newNode = NULL;
  127 + ret = Jzsdk_Create_AndioMange_Node(&newNode, OpusInfo);
  128 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  129 + {
  130 + JZSDK_LOG_ERROR("存放音乐 %s 失败", entry->d_name);
  131 + continue;
  132 + }
  133 +
  134 + // 将新节点添加到链表末尾
  135 + Jzsdk_AddAudioNodeToCircularList(&g_OpusList, &g_OpusListtail, &newNode);
  136 +
  137 + // 歌曲计数+1
  138 + g_OpusListNum++;
  139 + }
  140 + }
  141 + }
  142 +
  143 + closedir(dir);
  144 +
  145 + //设置默认播放歌曲
  146 + g_OpusList_CurrentNum = 0;
  147 +
  148 + //打印一遍已加载的音乐
  149 + JZsdk_PrintfAuidoNode_AudioList(g_OpusList);
  150 +
  151 + JZSDK_LOG_INFO("刷新opus列表已完成");
  152 +
  153 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  154 +}
  155 +
  156 +
  157 +
  158 +
  159 +
  160 +
  161 +
  162 +
  163 +
  164 +/*********
  165 + *
  166 + * opus文件初始化
  167 + *
  168 +**********/
  169 +T_JZsdkReturnCode Megaphone_OpusFile_Init()
  170 +{
  171 + //刷新opus列表
  172 + OpusFile_FlushList();
  173 +}
  1 +#include <stdio.h>
  2 +#include "JZsdkLib.h"
  3 +
  4 +static int g_OpusFile_SaveLen = 0;
  5 +static FILE *g_OpusFile_SaveFp = NULL;
  6 +static int g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF;
  7 +
  8 +#define OPUS_FILE_DIR "/root/sdcard/opus"
  9 +#define OPUS_TEMP_SAVE_DIR "/root/opusFileTemp.opus"
  10 +static unsigned char opus_SaveFile[128];
  11 +
  12 +/******************
  13 + *
  14 + *
  15 + * 开始存储opus文件
  16 + *
  17 + *
  18 + * **********************/
  19 +T_JZsdkReturnCode OpusFile_SaveOpusFileStart(unsigned char *FileName)
  20 +{
  21 + g_OpusFile_SaveLen = 0;
  22 +
  23 + memset(opus_SaveFile, 0, sizeof(opus_SaveFile));
  24 + sprintf(opus_SaveFile, "%s/%s",OPUS_FILE_DIR, FileName);
  25 +
  26 + JZSDK_LOG_INFO("上传的opus文件存储路径为:%s", opus_SaveFile);
  27 +
  28 + if (g_OpusFile_SaveFp != NULL)
  29 + {
  30 + JZSDK_LOG_ERROR("要保存的opus文件已经打开,请先关闭保存功能");
  31 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  32 + }
  33 +
  34 + g_OpusFile_SaveFp = fopen(OPUS_TEMP_SAVE_DIR, "wb");
  35 + if (g_OpusFile_SaveFp == NULL)
  36 + {
  37 + JZSDK_LOG_ERROR("打开opus文件失败");
  38 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  39 + }
  40 +
  41 + g_OpusFile_SaveFlag = JZ_FLAGCODE_ON;
  42 +
  43 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  44 +}
  45 +
  46 +/******************
  47 + *
  48 + *
  49 + * 存储opus流中
  50 + *
  51 + *
  52 + * **********************/
  53 +T_JZsdkReturnCode OpusFile_SaveOpusFileStream(unsigned char *Stream, int StreamLen)
  54 +{
  55 + if (g_OpusFile_SaveFlag == JZ_FLAGCODE_OFF)
  56 + {
  57 + JZSDK_LOG_ERROR("没有打开opus文件保存功能");
  58 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  59 + }
  60 +
  61 + if (g_OpusFile_SaveFp == NULL)
  62 + {
  63 + JZSDK_LOG_ERROR("要保存的opus文件未打开");
  64 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  65 + }
  66 +
  67 + fseek(g_OpusFile_SaveFp, g_OpusFile_SaveLen, SEEK_SET);
  68 + int writeLen = fwrite(Stream, 1, StreamLen, g_OpusFile_SaveFp);
  69 + if (writeLen != StreamLen)
  70 + {
  71 + JZSDK_LOG_ERROR("opus文件写入失败");
  72 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  73 + }
  74 +
  75 + g_OpusFile_SaveLen += StreamLen;
  76 +
  77 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  78 +}
  79 +
  80 +/******************
  81 + *
  82 + *
  83 + * 结束存储opus文件
  84 + *
  85 + *
  86 + * **********************/
  87 +T_JZsdkReturnCode OpusFile_SaveOpusFileEnd()