作者 潘浩彬

合并分支 'dev' 到 'master'

Dev



查看合并请求 !18
正在显示 64 个修改的文件 包含 2637 行增加1041 行删除

要显示太多修改。

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

... ... @@ -122,7 +122,17 @@
"hardwareinfo.h": "c",
"jzsdk_attributedef.h": "c",
"msp_types.h": "c",
"attribute.h": "c"
"attribute.h": "c",
"rk_venc_rc.h": "c",
"rk_mpi.h": "c",
"cameradef.h": "c",
"cam_zoom.h": "c",
"videodev2.h": "c",
"jzsdk_widget.h": "c",
"dji_sdk_config.h": "c",
"hal_uart.h": "c",
"jzsdkbase.h": "c",
"dji_logger.h": "c"
},
"Codegeex.GenerationPreference": "automatic",
"C_Cpp.dimInactiveRegions": false
... ...
# 编译链的配置
#1、编译链与设备类型的选择
set(DEVICE_NAME JZ_H1T)
set(DEVICE_NAME JZ_U30)
#上一行为禁止修改行
message("**************************JZSDK构建编译开始***************************\n")
if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H10")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_U30")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "TF_A1")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
set(MAKE_COMPILER ARM_X86_64_ARRCH64)
endif()
... ...
... ... @@ -19,8 +19,11 @@ file(GLOB_RECURSE JZSDK_COMMON_SRC ${ROOT_DIRS}JZsdk_Common/*.c)
list(APPEND ALL_SRC_FILES ${JZSDK_COMMON_SRC})
list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_Common)
file(GLOB_RECURSE JZSDK_CONFIG_SRC ${ROOT_DIRS}JZsdk_Config/*.c)
list(APPEND ALL_SRC_FILES ${JZSDK_CONFIG_SRC})
file(GLOB_RECURSE JZSDK_CONFIG_SRC_baseConfig ${ROOT_DIRS}JZsdk_Config/BaseConfig.c)
file(GLOB_RECURSE JZSDK_CONFIG_SRC_Paramterpar ${ROOT_DIRS}JZsdk_Config/ParamterParsing.c)
list(APPEND ALL_SRC_FILES ${JZSDK_CONFIG_SRC_baseConfig})
list(APPEND ALL_SRC_FILES ${JZSDK_CONFIG_SRC_Paramterpar})
list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_Config)
file(GLOB_RECURSE JZSDK_HAL_SRC ${ROOT_DIRS}JZsdk_hal/*.c)
... ... @@ -37,13 +40,6 @@ if(${DEVICE_INFO_MODULE} STREQUAL "VERSION_SWITCH_ON")
endif()
#如果要加载设备配置
if(${DEVICE_CONFIG_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n设备配置源码加载中")
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}Module/DeviceConfig/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
endif()
#如果要加载云台模块,需要加载以下附属内容
if(${GIMBAL_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n云台模块源码加载中")
... ... @@ -108,7 +104,16 @@ if(${MEDIA_PROC_MODULE} STREQUAL "VERSION_SWITCH_ON")
endif()
#如果要加载音频库模块,需要加载以下附属内容
if(${AUDIODEAL_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n音频库模块加载中")
message("加载音频库")
add_definitions(-DMACRO_AUDIODEAL_MODULE)
file(GLOB_RECURSE AUDIODEAL_SRC ${ROOT_DIRS}Module/AudioDeal/*.c)
list(APPEND ALL_SRC_FILES ${AUDIODEAL_SRC})
endif()
#如果要加载喊话器模块,需要加载以下附属内容
if(${MEGAPHONE_MODULE} STREQUAL "VERSION_SWITCH_ON")
... ... @@ -119,10 +124,6 @@ if(${MEGAPHONE_MODULE} STREQUAL "VERSION_SWITCH_ON")
file(GLOB_RECURSE MEGAPHONE_SRC ${ROOT_DIRS}Module/Megaphone/*.c)
list(APPEND ALL_SRC_FILES ${MEGAPHONE_SRC})
message("加载音频库")
file(GLOB_RECURSE AUDIODEAL_SRC ${ROOT_DIRS}Module/AudioDeal/*.c)
list(APPEND ALL_SRC_FILES ${AUDIODEAL_SRC})
message("加载讯飞TTS模块")
set(IFLAY_TTS_MODULE VERSION_SWITCH_ON)
... ... @@ -188,7 +189,7 @@ if(${IMAGEPROCESSING_MODULE} STREQUAL "VERSION_SWITCH_ON")
list(APPEND ALL_SRC_FILES ${MODULE_IMAGEPROCESSING_cpp_SRC})
endif()
message("\n模组加载完毕\n")
# 头文件加载,后续再进行优化
list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/Megaphone)
... ...
... ... @@ -9,9 +9,6 @@ set(AUDIODEAL_MODULE VERSION_SWITCH_OFF)
# 信息模块
set(DEVICE_INFO_MODULE VERSION_SWITCH_OFF)
# 设备配置模块
set(DEVICE_CONFIG_MODULE VERSION_SWITCH_OFF)
# Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_OFF)
... ... @@ -60,9 +57,6 @@ set(IMAGEPROCESSING_MODULE VERSION_SWITCH_OFF)
# 添加信息模块
set(DEVICE_INFO_MODULE VERSION_SWITCH_ON)
# 添加设备配置模块
set(DEVICE_CONFIG_MODULE VERSION_SWITCH_ON)
# 添加UI管理模块
set(UI_CONTROL_MODULE VERSION_SWITCH_ON)
... ... @@ -75,6 +69,7 @@ message("通用库加载完成")
########################### 独立库加载 ##########################################
if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
# 添加AudioDeal 音频处理模块
set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
... ... @@ -93,6 +88,12 @@ if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H1_series/JZ_H1E/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("h1e基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
# 添加AudioDeal 音频处理模块
... ... @@ -113,6 +114,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H1_series/JZ_H1T/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("h1t基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3")
# 添加AudioDeal 音频处理模块
... ... @@ -133,6 +140,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_U3_series/JZ_U3/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("u3基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
# 添加AudioDeal 音频处理模块
... ... @@ -156,6 +169,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
# 添加激光模块
set(SIDE_LASER_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_U3_series/JZ_U3S/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("u3s基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D")
# 添加AudioDeal 音频处理模块
... ... @@ -176,6 +195,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_U3_series/JZ_U3D/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("u3d基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_U30")
# 添加AudioDeal 音频处理模块
... ... @@ -196,6 +221,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U30")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_U3_series/JZ_U30/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("u30基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_H10")
# 添加AudioDeal 音频处理模块
set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
... ... @@ -215,6 +246,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H10")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H10_series/JZ_H10/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("h10基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T")
# 添加AudioDeal 音频处理模块
... ... @@ -232,6 +269,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H10_series/JZ_H10T/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("h10t基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S")
# 添加AudioDeal 音频处理模块
set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
... ... @@ -254,6 +297,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H150S_H150T/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("h150s基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T")
# 添加AudioDeal 音频处理模块
... ... @@ -277,6 +326,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T")
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H150S_H150T/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("h150t基础配置完毕\n")
elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
# 添加Gimbal 云台处理模块
... ... @@ -296,6 +351,13 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
# 添加昆腾模块
set(LIB_KT_MODULE VERSION_SWITCH_ON)
#设备独立配置源文件
file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZC1/*.c)
list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC})
message("C1基础配置完毕\n")
endif()
message("***********************模组模块配置完毕*********************************\n")
\ No newline at end of file
... ...
... ... @@ -22,13 +22,16 @@ static T_JZsdkReturnCode JZsdk_PrepareSystemEnvironment()
//初始化sdk
T_JZsdkReturnCode JZsdk_LibInit()
T_JZsdkReturnCode JZsdk_LibInit(int LogFlag)
{
//环境初始化
JZsdk_PrepareSystemEnvironment();
if (LogFlag == JZ_FLAGCODE_ON)
{
//1、初始化log
JZsdk_LoggerInit();
}
//2、任务管理系统初始化
TaskManagement_Init();
... ...
... ... @@ -26,7 +26,7 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_LibInit();
T_JZsdkReturnCode JZsdk_LibInit(int LogFlag);
#ifdef __cplusplus
... ...
... ... @@ -21,6 +21,10 @@ unsigned char * JZsdk_DefineCode_GetPortName(int Port)
return "HAL数据";
break;
case NET_DEV_1:
return "设备NET1";
break;
case NO_SPECIFIED:
return "无指定设备";
break;
... ...
... ... @@ -9,6 +9,7 @@
//特殊版本号
#define SPECIAL_NORMAL 0x01 //普通版本
#define SPECIAL_DAOTONG 0x02 //道通版本
#define SPECIAL_H10_M300 0x03 //h10 m300版本
//软件模式
#define APP_PSDK 0x01
... ...
... ... @@ -161,6 +161,22 @@ typedef enum {
JZ_INSCODE_5AFRAME_UPGRADE_TRANS = 0x10001103, //升级传输数据
JZ_INSCODE_5AFRAME_UPGRADE_END = 0x10001104, //升级传输结束
JZ_INSCODE_5AFRAME_CAMERA_VIDEO_PUSH_INDEX = 0x10001200, //设置视频推送索引
JZ_INSOCDE_5AFRAME_CAMERA_TAKE_PHOTO = 0x10001201, //拍照
JZ_INSCODE_5AFRAME_CAMERA_VIDEO_RECORD_START = 0x10001202, //录像开始
JZ_INSCODE_5AFRAME_CAMERA_VIDEO_RECORD_STOP = 0x10001203, //录像结束
JZ_INSCODE_5AFRAME_CAMERA_SHUTTER_CONTROL = 0x10001204, //快门控制
JZ_INSCODE_5AFRAME_CAMERA_FREEZE_CONTROL = 0x10001205, //冻结控制
JZ_INSOCDE_5AFRAME_IRC_CORRECT_WAY = 0x10001300, //红外校准方式
JZ_INSCODE_5AFRAME_IRC_SPC_PARAM = 0x10001301, //单点参数
JZ_INSCODE_5AFRAME_IRC_TPC_PARAM = 0x10001302, //两点参数
JZ_INSOCDE_5AFRAME_IRC_OUTPUT_COLOR_MODE = 0x10001400, //红外输出颜色模式
JZ_INSCODE_5AFRAME_IRC_PSEUDO_COLOR_PARAM = 0x10001401, //红外伪彩色
JZ_INSCODE_5AFRAME_IRC_GAS_ENHANCE_PARAM = 0x10001402, //红外气体增强
//5B类帧
JZ_INSCODE_5BFRAME_FRAME = 0x10004000, //发送帧
... ...
... ... @@ -48,9 +48,10 @@ typedef enum JZsdk_Widget_Control
JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT = 0x0036, //气体增强纠正
JZSDK_WIDGET_IRC_MARK_LOW_AND_HIGH_DATA = 0x0037, //红外标记高低数据
JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_HIGH_CALIBRATION = 0x0037, //气体增强纠正高温校准
JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_LOW_CALIBRATION = 0x0038, //气体增强纠正低温校准
JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_HIGH_CALIBRATION = 0x0038, //气体增强纠正高温校准
JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_LOW_CALIBRATION = 0x0039, //气体增强纠正低温校准
... ...
... ... @@ -47,6 +47,8 @@ typedef uint64_t U64_t;
typedef double F64_t;
typedef float F32_t;
#define JZSDK_SINGLE_THREAD 0 //jz单线程
#define JZSDK_MULTI_THREAD 1 //jz多线程
//线程权柄
typedef void *T_JZTaskHandle;
... ...
... ... @@ -672,6 +672,85 @@ static int Comparison_5AFRAME_FirstLevelCode_0xA1(char *getdata)
}
static int Comparison_5AFRAME_FirstLevelCode_0x90(char *getdata)
{
switch (getdata[8])
{
case 0x00:
return JZ_INSCODE_5AFRAME_CAMERA_VIDEO_PUSH_INDEX;
break;
case 0x01:
return JZ_INSOCDE_5AFRAME_CAMERA_TAKE_PHOTO;
break;
case 0x02:
return JZ_INSCODE_5AFRAME_CAMERA_VIDEO_RECORD_START;
break;
case 0x03:
return JZ_INSCODE_5AFRAME_CAMERA_VIDEO_RECORD_STOP;
break;
case 0x04:
return JZ_INSCODE_5AFRAME_CAMERA_SHUTTER_CONTROL;
break;
case 0x05:
return JZ_INSCODE_5AFRAME_CAMERA_FREEZE_CONTROL;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
static int Comparison_5AFRAME_FirstLevelCode_0x93(char *getdata)
{
switch (getdata[8])
{
case 0x00:
return JZ_INSOCDE_5AFRAME_IRC_CORRECT_WAY;
break;
case 0x10:
return JZ_INSCODE_5AFRAME_IRC_SPC_PARAM;
break;
case 0x11:
return JZ_INSCODE_5AFRAME_IRC_TPC_PARAM;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
static int Comparison_5AFRAME_FirstLevelCode_0x94(char *getdata)
{
switch (getdata[8])
{
case 0x00:
return JZ_INSOCDE_5AFRAME_IRC_OUTPUT_COLOR_MODE;
break;
case 0x10:
return JZ_INSCODE_5AFRAME_IRC_PSEUDO_COLOR_PARAM;
break;
case 0x11:
return JZ_INSCODE_5AFRAME_IRC_GAS_ENHANCE_PARAM;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
/******************************************************************
回复帧对比
... ... @@ -813,6 +892,21 @@ int JZsdk_5AFrameComparsion(char *getdata, int len)
return Comparison_5AFRAME_FirstLevelCode_0x6F(getdata);
break;
//一级功能码 90
case 0x90:
return Comparison_5AFRAME_FirstLevelCode_0x90(getdata);
break;
//一级功能码 93
case 0x93:
return Comparison_5AFRAME_FirstLevelCode_0x93(getdata);
break;
//一级功能码 92
case 0x94:
return Comparison_5AFRAME_FirstLevelCode_0x94(getdata);
break;
//一级功能码 升级功能
case 0xA1:
return Comparison_5AFRAME_FirstLevelCode_0xA1(getdata);
... ... @@ -820,6 +914,7 @@ int JZsdk_5AFrameComparsion(char *getdata, int len)
//一级功能码
/*********************************************************************************************************************************************************
*
*
... ...
... ... @@ -474,9 +474,9 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
case JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS:
{
char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x59, 0xf2, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x59, 0xf2, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
... ...
... ... @@ -420,11 +420,18 @@ T_JZsdkReturnCode JZsdk_Osal_Rename(const char *oldFilePath, const char *newFile
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
ret = rename(oldFilePath, newFilePath);
unsigned char cmd[256] = {0};
sprintf((char *)cmd, "mv %s %s", oldFilePath, newFilePath);
ret = system((char *)cmd);
if (ret < 0) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// ret = rename(oldFilePath, newFilePath);
// if (ret < 0) {
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include "JZsdkLib.h"
#include "Hal_Send/HalSend.h"
#include "BaseConfig.h"
#include "ircut.h"
#include "Gimbal/Gimbal.h"
#include "Hal_Send/HalSend.h"
#include "JZsdk_Hal.h"
#include "ircut.h"
#include "Psdk_UI_io.h"
#include "Lighting_InAndOut.h"
#include "JZsdk_network/JZsdk_network.h"
#include "JZsdk_haldata_deal/JZsdk_data_transmisson.h"
#include "MediaProc/MediaProc.h"
#include "UI_control/WidegMgmt/JZsdk_Widget.h"
#include "DeviceConfig/DeviceConfig.h"
#include "DeviceSample/DeviceSample.h"
#include "CommonMod/CommonMod.h"
#include "JZsdk_Hal.h"
#if APP_VERSION == APP_PSDK
#include "fc_subscription/test_fc_subscription.h"
#include "fc_subscription/test_fc_subscription.h"
#endif
#include "DeviceInfo/DeviceInfo.h"
#ifdef MEGAPHONE_CONFIG_STATUS_ON
#include "AudioDeal/AudioDeal.h"
#include "Megaphone/Megaphone.h"
extern int MegaphoneStatusFlag;
#endif
#ifdef SIDE_LASER_STATUS_ON
#include "SideLaser/SideLaser.h"
#endif
static int Main_WorkMode();
static void *Main_WorkModeTask(void *arg);
static int WorkMode = JZ_FLAGCODE_OFF;
static int g_All_filter_Mode = JZ_FLAGCODE_OFF; //用于m30的滤波开关
static int StartupPriorityNum = JZ_FLAGCODE_OFF; //优先启动项值
static int g_device_InitFlag = JZ_FLAGCODE_OFF; //基础配置初始化标志位,该标志位用于判断设备是否已经完成准备就绪,目前主要影响的是预设任务
static int g_baseconfig_InitFlag = JZ_FLAGCODE_OFF; //基础配置初始化标志位,该标志位用于判断设备是否已经完成baseconfig 目前用处影响g_device_InitFlag
static int g_Main_WorkMode_InitFlag = JZ_FLAGCODE_OFF; //基础配置初始化标志位,该标志位用于判断设备是否已经完成连接与启动播放 目前用处影响g_device_InitFlag
/*******************
*
* mode get 是未获取 m30滤波开关
* 其他值为set+get
*
* ********************/
T_JZsdkReturnCode Main_M30_all_filter_mode(int *mode)
{
//喊话器功能被打开时
#ifdef MEGAPHONE_CONFIG_STATUS_ON
if (*mode == JZ_FLAGCODE_GET)
{
*mode = g_All_filter_Mode;
printf("滤波模式获取%d\n",*mode);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if ( (*mode != JZ_FLAGCODE_ON) && (*mode != JZ_FLAGCODE_OFF) )
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
else
{
printf("滤波模式设置%d\n",*mode);
g_All_filter_Mode = *mode;
if (*mode == JZ_FLAGCODE_ON)
{
//先关闭播放
//Megaphone_StopPlay(JZ_FLAGCODE_OFF);
//修改滤波
AudioDeal_SetFilterMode(0x01);
}
else
{
//先关闭播放
//Megaphone_StopPlay(JZ_FLAGCODE_OFF);
//修改滤波
AudioDeal_SetFilterMode(0x00);
}
}
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*** ************************* *************************
*
... ... @@ -136,553 +70,6 @@ int Main_Device_Wheather_Use()
}
T_JZsdkReturnCode Main_APP_Psdk()
{
int value[5] = {0, 0, 0, 0, 0};
//sdklib加载
JZsdk_LibInit();
//hal加载
JZsdk_Hal_Init();
JZSDK_LOG_INFO("%x,PsdkVersion%x.%x.%x.%x\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
//通用模块初始化
CommonMod_Init();
//引脚初始化
Ircut_Init();
//设备信息初始化
DeviceInfo_Init();
//工作模式设置函数,用于超时,及播放启动语音等
Main_WorkMode();
//外接传输模块
JZsdk_data_transmisson_Receive_Init();
//喊话器功能被打开时
#ifdef MEGAPHONE_CONFIG_STATUS_ON
//音频库初始化
AudioDeal_Init();
#endif
if (DEVICE_VERSION == TF_A1)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
else if (DEVICE_VERSION == JZ_H1E)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//喊话器初始化
Megaphone_Init();
}
else if (DEVICE_VERSION == JZ_H1T)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_TRANSPARENT);
}
else if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
if (DEVICE_VERSION == JZ_H150T)
{
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
}
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//相机初始化
MediaProc_Init();
}
else if (DEVICE_VERSION == JZ_H10)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
}
else if (DEVICE_VERSION == JZ_H10T)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
}
else if (DEVICE_VERSION == JZ_U3)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
else if (DEVICE_VERSION == JZ_U3S)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
#ifdef SIDE_LASER_STATUS_ON
//侧边激光初始化
SideLaser_Init();
#endif
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
else if (DEVICE_VERSION == JZ_U3D)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
else if (DEVICE_VERSION == JZ_U30)
{
//串口设备1初始化
//value[0] = UART_DEV1_BITRATE;
//JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
else if (DEVICE_VERSION == JZ_C1)
{
//初始化C1
JZC1_Init();
}
//初始化控件
JZSDK_WidgetMgMT_Init();
//初始化app模式
JZsdk_HalPort_SetUseFlag(DEVICE_PSDK ,JZ_FLAGCODE_ON);
Main_WorkModeSet(JZ_FLAGCODE_ON);
g_baseconfig_InitFlag = JZ_FLAGCODE_ON;
}
int Main_APP_Uart()
{
int value[5] = {0, 0, 0, 0, 0};
//lib库初始化
JZsdk_LibInit();
JZsdk_Hal_Init();
JZSDK_LOG_INFO("0x%x,UartVersion%x.%x.%x.%x\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
//通用模块
CommonMod_Init();
//引脚初始化
Ircut_Init();
//设备信息初始化
DeviceInfo_Init();
//工作模式设置函数,用于超时,及播放启动语音等
Main_WorkMode();
//喊话器功能被打开时
#ifdef MEGAPHONE_CONFIG_STATUS_ON
//音频库初始化
AudioDeal_Init();
#endif
if (DEVICE_VERSION == JZ_H1E)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//喊话器初始化
Megaphone_Init();
}
if (DEVICE_VERSION == JZ_H1T)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_TRANSPARENT);
// //测试增加选项
// //开启循环
// JZsdk_Uart_audio_PlayLoop(UART_DEV_1, 1);
// //设置音量
// JZsdk_Uart_Set_Volume(UART_DEV_1, 50);
}
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//网口初始化
JZsdk_NetWork_Init();
if (DEVICE_VERSION == JZ_H150T)
{
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
}
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//相机初始化
MediaProc_Init();
//喊话器初始化
Megaphone_Init();
}
if (DEVICE_VERSION == JZ_H10)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//H10和10t固定打开滤波
int filter_mode = JZ_FLAGCODE_ON;
Main_M30_all_filter_mode(&filter_mode);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
}
if (DEVICE_VERSION == JZ_H10T)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
//H10和10t固定打开滤波
int filter_mode = JZ_FLAGCODE_ON;
Main_M30_all_filter_mode(&filter_mode);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
}
if (DEVICE_VERSION == JZ_U3)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_OFF);
// //测试需要开启亮度
// JZsdk_Uart_SearchLight_Control(UART_DEV_1, 1);
// JZsdk_Uart_SearchLight_Lumen(UART_DEV_1, 20, 20);
}
else if (DEVICE_VERSION == JZ_U3S)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
#ifdef SIDE_LASER_STATUS_ON
//侧边激光初始化
SideLaser_Init();
#endif
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
else if (DEVICE_VERSION == JZ_U3D)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
// delayS(3);
// JZSDK_LOG_INFO("开起发光");
// //开灯
// UIcontrol_SearchLightControl(UART_DEV_1, 0x02);
// UIcontrol_Set_SearchLightLumen(UART_DEV_1, 1, 100, 100);
}
else if (DEVICE_VERSION == JZ_U30)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
if (DEVICE_VERSION == TF_A1)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
g_baseconfig_InitFlag = JZ_FLAGCODE_ON;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
int Main_TestAPP()
{
int value[5] = {0, 0, 0, 0, 0};
JZsdk_LibInit();
JZsdk_Hal_Init();
CommonMod_Init();
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//JZ_FLAGCODE_GET为返回工作值,其他值为设置
int Main_WorkModeSet(int mode)
{
... ... @@ -856,6 +243,171 @@ static void *Main_WorkModeTask(void *arg)
}
/************************************************************************************************************************************************
*
*
*
*
*
* 初始化
*
*
*
*
************************************************************************************************************************************************/
static T_JZsdkReturnCode DeviceSample_init(int mode)
{
//a1加载
#if DEVICE_VERSION == JZ_A1
TF_a1_init(mode);
#endif
//h1e加载
#if DEVICE_VERSION == JZ_H1E
JZ_h1e_init(mode);
#endif
//h1t加载
#if DEVICE_VERSION == JZ_H1T
JZ_h1t_init(mode);
#endif
//h10加载
#if DEVICE_VERSION == JZ_H10
JZ_h10_init(mode);
#endif
//h10t加载
#if DEVICE_VERSION == JZ_H10T
JZ_h10t_init(mode);
#endif
//h150s h150t加载
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
JZ_h150s_h150t_init(mode);
#endif
//u3加载
#if DEVICE_VERSION == JZ_U3
JZ_u3_init(mode);
#endif
//u3s加载
#if DEVICE_VERSION == JZ_U3S
JZ_u3s_init(mode);
#endif
//u3d加载
#if DEVICE_VERSION == JZ_U3D
JZ_u3d_init(mode);
#endif
//u30加载
#if DEVICE_VERSION == JZ_U30
JZ_u30_init(mode);
#endif
//c1加载
#if DEVICE_VERSION == JZ_C1
JZC1_Init(mode);
#endif
}
T_JZsdkReturnCode Main_APP_Psdk()
{
int value[5] = {0, 0, 0, 0, 0};
//sdklib加载
JZsdk_LibInit(JZ_FLAGCODE_ON);
//hal加载
JZsdk_Hal_Init();
JZSDK_LOG_INFO("%x,PsdkVersion%x.%x.%x.%x\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
//通用模块初始化
CommonMod_Init();
//引脚初始化
Ircut_Init();
//设备信息初始化
DeviceInfo_Init();
//工作模式设置函数,用于超时,及播放启动语音等
Main_WorkMode();
//外接传输模块
JZsdk_data_transmisson_Receive_Init();
//设备例程初始化
DeviceSample_init(APP_PSDK);
//初始化控件
JZSDK_WidgetMgMT_Init();
//初始化app模式
JZsdk_HalPort_SetUseFlag(DEVICE_PSDK ,JZ_FLAGCODE_ON);
Main_WorkModeSet(JZ_FLAGCODE_ON);
g_baseconfig_InitFlag = JZ_FLAGCODE_ON;
}
int Main_APP_Uart()
{
int value[5] = {0, 0, 0, 0, 0};
//lib库初始化
JZsdk_LibInit(JZ_FLAGCODE_ON);
JZsdk_Hal_Init();
JZSDK_LOG_INFO("0x%x,UartVersion%x.%x.%x.%x\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
//通用模块
CommonMod_Init();
//引脚初始化
Ircut_Init();
//设备信息初始化
DeviceInfo_Init();
//工作模式设置函数,用于超时,及播放启动语音等
Main_WorkMode();
//设备例程初始化
DeviceSample_init(APP_UART);
g_baseconfig_InitFlag = JZ_FLAGCODE_ON;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
int Main_TestAPP()
{
int value[5] = {0, 0, 0, 0, 0};
JZsdk_LibInit(JZ_FLAGCODE_ON);
JZsdk_Hal_Init();
CommonMod_Init();
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
/**********************************
*
* 获取设备初始化标志
... ...
... ... @@ -207,9 +207,10 @@ extern "C" {
#define GIMBAL_UART_NUM NULL
#define GIMBAL_UART_BITRATE (0)
#define NET_WORK_IPADDR NULL
#define NET_WORK_TARGET_IPADDR NULL
#define NET_WORK_NETMASK NULL
#define NET_WORK_IPADDR "192.168.5.3"
#define NET_WORK_TARGET_IPADDR "192.168.5.10"
#define NET_WORK_NETMASK "255.255.255.0"
#else
#define UART_DEV1_NUM NULL
... ... @@ -239,7 +240,6 @@ int Main_APP_Uart();
T_JZsdkReturnCode Main_APP_Psdk();
int Main_TestAPP();
int Main_Device_Wheather_Use();
T_JZsdkReturnCode Main_M30_all_filter_mode(int *mode);
T_JZsdkReturnCode Main_StartupPriority(int *choose);
T_JZsdkReturnCode Main_SetDeviceName(unsigned int Port, int g_DeviceID);
int BaseConfig_GetDeviceInitFlag();
... ...
/**
********************************************************************
* @file DeviceSample.h
* DeviceSample.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef DEVICE_SAMPLE_H
#define DEVICE_SAMPLE_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "DeviceSample/JZ_H1_series/JZ_H1E/JZ_h1e.h"
#include "DeviceSample/JZ_H1_series/JZ_H1T/JZ_h1t.h"
#include "DeviceSample/JZ_H10_series/JZ_H10/JZ_h10.h"
#include "DeviceSample/JZ_H10_series/JZ_H10T/JZ_h10t.h"
#include "DeviceSample/JZ_H150S_H150T/JZ_h150s_h150t.h"
#include "DeviceSample/JZ_U3_series/JZ_U3/JZ_u3.h"
#include "DeviceSample/JZ_U3_series/JZ_U3S/JZ_u3s.h"
#include "DeviceSample/JZ_U3_series/JZ_U3D/JZ_u3d.h"
#include "DeviceSample/JZ_U3_series/JZ_U30/JZ_u30.h"
#include "DeviceSample/JZC1/JZC1.h"
#include "TF_A1/TF_a1.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <time.h>
#include <unistd.h>
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include <stdatomic.h>
#include "JZsdk_usb_bulk/JZsdk_usb_bulk.h"
#include "IRCUT/ircut.h"
#ifdef RTK_MPP_STATUS_ON
#include "MediaProc/MultProc/RTK_mmp/RTK_mmp.h"
#include "MediaProc/MultProc/RTK_mmp/Dec/RTK_mmp_dec.h"
#include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h"
#include "MediaProc/Camera/Camera.h"
#endif
#ifdef RTK_RGA_STATUS_ON
#include "MediaProc/RgaProc/RK_Rga/RK_Rga.h"
//c1的rga结构体
#endif
#include "MediaProc/MediaProc.h"
#include "UI_control/UI_control.h"
#include "CommonMod/PowerManger/PowerManger.h"
typedef struct C1_RgaInfo
{
//源图像
... ... @@ -42,27 +39,57 @@ typedef struct C1_RgaInfo
}C1_RgaInfo;
static C1_RgaInfo *g_C1_RgaIrcInfo = NULL;
static C1_RgaInfo *g_C1_RgaOptInfo = NULL;
typedef struct T_JZC1_info
{
/*************************************************************/
//红外相机的编码器信息
T_rtk_mmp_enc_info *IRC_enc_info;
static unsigned char *g_MixedIrc_Buffer = NULL;
//红外相机的rga信息
C1_RgaInfo *IRC_rga_info;
static unsigned char *g_MixedOpt_Buffer = NULL;
static unsigned int g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF;
/*************************************************************/
//光学相机的解码器信息
T_rtk_mmp_dec_info *Opt_dec_info;
//光学相机的编码器信息
T_rtk_mmp_enc_info *Opt_enc_info;
//光学相机的相机信息
JZsdk_CameraInfo *Opt_Camera_info;
C1_RgaInfo *Opt_rga_info;
#endif
#ifdef MEDIA_PROC_CONFIG_STATUS_ON
/*************************************************************/
//融合相机的编码器信息
T_rtk_mmp_enc_info *Fuse_enc_info;
#include "MediaProc/Camera/Cam_FrameCatch/Cam_FrameCatch.h"
#include "MediaProc/MediaParm.h"
#include "MediaProc/VideoMgmt/VideoStreamPush/VideoStream_Push.h"
#include "MediaProc/VideoMgmt/VideoMgmt.h"
#include "MediaProc/IRC_funtion/IRC_Param.h"
#include "MediaProc/IRC_funtion/IRC_funtion.h"
#include "MediaProc/MediaProc_Param.h"
}T_JZC1_info;
#define JZ_C1_IRC_WIDTH 320
#define JZ_C1_IRC_HEIGHT 256
#define JZ_C1_IRC_FRAMERATE 30
#define JZ_C1_IRC_INDEX VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST
#define JZ_C1_OPT_WIDTH 1920
#define JZ_C1_OPT_HEIGHT 1080
#define JZ_C1_OPT_FRAMERATE 30
#define JZ_C1_OPT_INDEX VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND
#define JZ_C1_OPT_DEV_PATH ("/dev/video21")
#define JZ_C1_OPT_PIXEL V4L2_PIX_FMT_MJPEG
#define JZ_C1_FUSE_WIDTH 1920
#define JZ_C1_FUSE_HEIGHT 1080
#define JZ_C1_FUSE_FRAMERATE 30
#define JZ_C1_FUSE_INDEX VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD
static unsigned char *g_MixedIrc_Buffer = NULL;
static unsigned char *g_MixedOpt_Buffer = NULL;
static unsigned int g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF;
static T_JZC1_info g_JZC1_info;
static void *g_usb_index = NULL;
... ... @@ -72,15 +99,15 @@ static const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc,
#define NSEC_PER_SEC 1000000000L //1秒的纳秒数
#define TARGET_FPS 30
static unsigned char FrameBuffer[FIRST_HEIGHT * FIRST_WIDTH *2]; //用于存储帧数据的缓冲区
static unsigned char FrameBuffer[JZ_C1_IRC_HEIGHT * JZ_C1_IRC_WIDTH *2]; //用于存储帧数据的缓冲区
static unsigned int FrameBufferLen = 0; //用于存储帧数据的长度
static int FrameBuffer_UseFlag = JZ_FLAGCODE_OFF;
#ifdef RTK_RGA_STATUS_ON
static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned char *image, unsigned int *imgage_size);
static T_JZsdkReturnCode JZC1_RgaInit(C1_RgaInfo **rgaInfo, int dst_width, int dst_height, int dst_format);
#endif
//数据推送函数
static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, unsigned int data_len)
{
... ... @@ -93,7 +120,7 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un
}
//红外相机
if (currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST && CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST)
if (currentIndex == JZ_C1_IRC_INDEX && CameraIndex == JZ_C1_IRC_INDEX)
{
//推送数据到流转模块
... ... @@ -101,14 +128,14 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un
}
//光学相机
if(CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND && currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND)
if(CameraIndex == JZ_C1_OPT_INDEX && currentIndex == JZ_C1_OPT_INDEX)
{
//推送数据到流转模块
VideoMgmt_Single_FrameIn(data, data_len);
}
//组合视频流
if (currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD && CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD)
if (currentIndex == JZ_C1_FUSE_INDEX && CameraIndex == JZ_C1_FUSE_INDEX)
{
//推送数据到流转模块
VideoMgmt_Single_FrameIn(data, data_len);
... ... @@ -119,17 +146,13 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un
static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len)
{
#ifdef RTK_MPP_STATUS_ON
//JZSDK_LOG_INFO("JZC1_OptDeal");
MppFrame yuv_data = NULL; //用于传递yuv数据的地址
MppPacket Packet = NULL;
//输入数据进入解码器
RTK_mmp_dec_input(JZsdk_RtkMmpGetDecHandleAddr(1), data, data_len, &yuv_data);
RTK_mmp_dec_input(g_JZC1_info.Opt_dec_info, data, data_len, &yuv_data);
// int width = mpp_frame_get_width(yuv_data);
// int height = mpp_frame_get_height(yuv_data);
... ... @@ -180,7 +203,7 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len
unsigned char *temp_data = (unsigned char *)malloc(size);
memcpy(temp_data, mpp_buffer_get_ptr(temp), size);
JZC1_RgaDeal(g_C1_RgaOptInfo, ZoomRatio, temp_data, &size);
JZC1_RgaDeal(g_JZC1_info.Opt_rga_info, ZoomRatio, temp_data, &size);
//重新将数据放回
memcpy(mpp_buffer_get_ptr(temp), temp_data, size);
... ... @@ -200,7 +223,7 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len
//将返回的数据输入进编码器
RTK_mmp_enc_yuv_to_h264_byFrame(JZsdk_RtkMmpGetEncHandleAddr(1), yuv_data, &Packet);
RTK_mmp_enc_yuv_to_h264_byFrame(g_JZC1_info.Opt_enc_info, yuv_data, &Packet);
//获取数据指针与长度
int packet_len = mpp_packet_get_length(Packet);
... ... @@ -211,7 +234,6 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len
//释放掉编码图像
mpp_packet_deinit(&Packet);
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -230,7 +252,6 @@ static T_JZsdkReturnCode JZC1_Irc_DataCorrect(unsigned char *data)
//在这里将灰度图数据转换成目标数据
static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len)
{
#ifdef IRC_CONFIG_STATUS_ON
//JZSDK_LOG_DEBUG("irc数据处理");
if (data_len == 0)
{
... ... @@ -291,7 +312,7 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
if (ZoomRatio != JZ_FLAGCODE_OFF)
{
JZC1_RgaDeal(g_C1_RgaIrcInfo, ZoomRatio, raw_data, &raw_data_len);
JZC1_RgaDeal(g_JZC1_info.IRC_rga_info, ZoomRatio, raw_data, &raw_data_len);
}
//将数据放入混合缓冲区
... ... @@ -304,10 +325,9 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
unsigned char *h264Data = NULL;
unsigned int h264DataLen = 0;
#ifdef RTK_MPP_STATUS_ON
MppPacket Packet = NULL;
RTK_mmp_enc_data_to_h264(JZsdk_RtkMmpGetEncHandleAddr(0), raw_data, raw_data_len, &Packet);
RTK_mmp_enc_data_to_h264(g_JZC1_info.IRC_enc_info, raw_data, raw_data_len, &Packet);
h264DataLen = mpp_packet_get_length(Packet);
h264Data = (unsigned char *)mpp_packet_get_pos(Packet);
... ... @@ -316,7 +336,6 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
//释放掉packet
mpp_packet_deinit(&Packet);
#endif
//将h264数据推送
JZC1_PushFrame(1, h264Data, h264DataLen);
... ... @@ -334,11 +353,10 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len
u16Data = NULL;
}
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
static void *JZC1_IrcDataBuffer_Thread(void *args)
{
... ... @@ -350,12 +368,12 @@ static void *JZC1_IrcDataBuffer_Thread(void *args)
long long prev_time = start_time.tv_sec * NSEC_PER_SEC + start_time.tv_nsec;
//设置间隔时间
long long period = NSEC_PER_SEC / TARGET_FPS;
long long period = NSEC_PER_SEC / JZ_C1_IRC_FRAMERATE;
unsigned char *TempBuffer = (unsigned char *)malloc(163840);
unsigned int TempBufferLen = 0;
int num = 0;
while (1)
{
... ... @@ -386,16 +404,47 @@ static void *JZC1_IrcDataBuffer_Thread(void *args)
JZC1_IrcDeal(TempBuffer, TempBufferLen);
prev_time = current_time;
}
// 为了防止过于频繁地调用 clock_gettime,可以添加一个小的睡眠时间
// 例如,休眠1毫秒(100000000纳秒),以减少CPU占用
struct timespec req = { .tv_sec = 0, .tv_nsec = 1000000 };
nanosleep(&req, NULL);
// // 为了防止过于频繁地调用 clock_gettime,可以添加一个小的睡眠时间
// // 例如,休眠1毫秒(100000000纳秒),以减少CPU占用
// struct timespec req = { .tv_sec = 0, .tv_nsec = 1000000 };
// nanosleep(&req, NULL);
}
}
// static void *JZC1_IrcDataBuffer_Thread(void *args)
// {
// unsigned char *TempBuffer = (unsigned char *)malloc(163840);
// unsigned int TempBufferLen = 0;
}
// const long long period = NSEC_PER_SEC / TARGET_FPS; // 33,333,333 ns
// struct timespec next;
// clock_gettime(CLOCK_MONOTONIC, &next);
// while(1) {
// // 精确周期控制
// next.tv_nsec += period;
// if (next.tv_nsec >= NSEC_PER_SEC) {
// next.tv_sec++;
// next.tv_nsec -= NSEC_PER_SEC;
// }
// // 无锁化改造
// if(atomic_exchange(&FrameBuffer_UseFlag, JZ_FLAGCODE_ON) == JZ_FLAGCODE_OFF) {
// memcpy(TempBuffer, FrameBuffer, FrameBufferLen); // 零拷贝优化见方案2
// atomic_store(&FrameBuffer_UseFlag, JZ_FLAGCODE_OFF);
// JZC1_IrcDeal(TempBuffer, FrameBufferLen);
// JZSDK_LOG_INFO("deal");
// }
// // 高精度休眠
// clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &next, NULL);
// }
// }
static T_JZsdkReturnCode JZC1_IrcDataSave(unsigned char *data, unsigned int data_len)
{
... ... @@ -419,7 +468,7 @@ static T_JZsdkReturnCode JZC1_IrcDataSave(unsigned char *data, unsigned int data
//红外数据接收线程
static void *JZC1_IrcDataRecv_Thread(void *args)
{
int frame_len = FIRST_WIDTH *2* FIRST_HEIGHT; //163840
int frame_len = g_JZC1_info.IRC_enc_info->width * g_JZC1_info.IRC_enc_info->height *2; //163840
unsigned char buf[frame_len]; //usb数据缓冲区需要为512的倍数
unsigned char frameData[frame_len]; // 存储整帧数据的画面缓冲区
unsigned int lineNum = 0;
... ... @@ -547,14 +596,13 @@ static void *JZC1_IrcDataRecv_Thread(void *args)
}
}
//C1 红外相机数据的初始化
static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init()
{
T_JZsdkReturnCode ret;
//初始化接收的usb口
ret = JZsdk_HalUsbBulk_Init(&g_usb_index, 0, 0, LINUX_USB_PID, LINUX_USB_VID, USB_IN_POINT, USB_OUT_POINT);
ret = JZsdk_HalUsbBulk_Init(&g_usb_index, 0, 0, JZSDK_USB_PID, JZSDK_USB_VID, USB_IN_POINT, USB_OUT_POINT);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
return ret;
... ... @@ -584,44 +632,68 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init()
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZSDK_LOG_INFO("JZsdk_JZC1_Irc_Data_Init sucess");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// /********************
// *
// * 混合视频说明
// *
// * 1920*1088 做处理 并输出为 1920*1080
// * __________________________________________________________________
// * |_________________________________ |
// * | |________________________________|
// * | | |
// * | | 1920*1088 /2 960* 544 |
// * | | |
// * | 320*256 拉伸4到 1280*1024 | |
// * | 裁剪出 3/4 到 960 * 768 | |
// * | | |
// * | |________________________________|
// * |_________________________________| |
// * |__________________________________________________________________|
// *
// * ******************/
static T_JZsdkReturnCode JZC1_RgaInit(C1_RgaInfo *rgaInfo, int dst_width, int dst_height, int dst_format)
{
int width = dst_width;
int height = dst_height;
int rect_x = 0;
int rect_y = 0;
int rect_w = dst_width;
int rect_h = dst_height;
rgaInfo->src_img = NULL;
/********************
*
* 混合视频说明
*
* 1920*1088 做处理 并输出为 1920*1080
* __________________________________________________________________
* |_________________________________ |
* | |________________________________|
* | | |
* | | 1920*1088 /2 960* 544 |
* | | |
* | 320*256 拉伸4到 1280*1024 | |
* | 裁剪出 3/4 到 960 * 768 | |
* | | |
* | |________________________________|
* |_________________________________| |
* |__________________________________________________________________|
*
* ******************/
RK_Rga_ImageInit(&(rgaInfo->src_img), width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输入模块
rgaInfo->corp_img = NULL;
RK_Rga_ImageInit(&(rgaInfo->corp_img), width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化裁剪模块
/******************
*
* 混合视频处理
*
*
* ********************/
static void JZC1_MixedVideo_Deal()
{
rgaInfo->dst_img = NULL;
RK_Rga_ImageInit(&(rgaInfo->dst_img), width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输出模块
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// /******************
// *
// * 混合视频处理
// *
// *
// * ********************/
// static void JZC1_MixedVideo_Deal()
// {
// }
static void *MixedVideo_Thread(void *args)
{
#ifdef RTK_RGA_STATUS_ON
... ... @@ -642,16 +714,16 @@ static void *MixedVideo_Thread(void *args)
im_rect Irc_Rect;
Irc_Rect.x = 0;
Irc_Rect.y = 0;
Irc_Rect.width = JZ_ALIGN(FIRST_WIDTH, 16);
Irc_Rect.height = JZ_ALIGN(FIRST_HEIGHT, 16);
Irc_Rect.width = g_JZC1_info.IRC_enc_info->hor_stride;
Irc_Rect.height = g_JZC1_info.IRC_enc_info->ver_stride;
int IRc_Format = RK_FORMAT_YCbCr_420_SP;
//红外放大图像
im_rect Irc_ResizeRect;
Irc_ResizeRect.x = 0;
Irc_ResizeRect.y = 0;
Irc_ResizeRect.width = JZ_ALIGN(FIRST_WIDTH, 16) * 4;
Irc_ResizeRect.height = JZ_ALIGN(FIRST_HEIGHT, 16) * 4;
Irc_ResizeRect.width = g_JZC1_info.IRC_enc_info->hor_stride * 4;
Irc_ResizeRect.height = g_JZC1_info.IRC_enc_info->ver_stride * 4;
//红外裁剪区域
im_rect Irc_CropRect;
... ... @@ -678,16 +750,16 @@ static void *MixedVideo_Thread(void *args)
im_rect Opt_Rect;
Opt_Rect.x = 0;
Opt_Rect.y = 0;
Opt_Rect.width = JZ_ALIGN(SECOND_WIDTH, 16);
Opt_Rect.height = JZ_ALIGN(SECOND_HEIGHT, 16);
Opt_Rect.width = g_JZC1_info.Opt_enc_info->hor_stride;
Opt_Rect.height = g_JZC1_info.Opt_enc_info->ver_stride;
int Opt_Format = RK_FORMAT_YCbCr_420_SP;
//光学源缩小图像
im_rect Opt_ResizeRect;
Opt_ResizeRect.x = 0;
Opt_ResizeRect.y = 0;
Opt_ResizeRect.width = JZ_ALIGN(SECOND_WIDTH, 16) / 2;
Opt_ResizeRect.height = JZ_ALIGN(SECOND_HEIGHT, 16) / 2;
Opt_ResizeRect.width = g_JZC1_info.Opt_enc_info->hor_stride / 2;
Opt_ResizeRect.height = g_JZC1_info.Opt_enc_info->ver_stride / 2;
//光学源图像
RK_RgaImage *Opt_SrcImg = NULL;
... ... @@ -704,8 +776,8 @@ static void *MixedVideo_Thread(void *args)
im_rect Dst_Rect;
Dst_Rect.x = 0;
Dst_Rect.y = 0;
Dst_Rect.width = JZ_ALIGN(SECOND_WIDTH, 16);
Dst_Rect.height = JZ_ALIGN(SECOND_HEIGHT, 16);
Dst_Rect.width = g_JZC1_info.Opt_enc_info->hor_stride;
Dst_Rect.height = g_JZC1_info.Opt_enc_info->ver_stride;
int Dst_Format = RK_FORMAT_YCbCr_420_SP;
//目标图像中光学图像的矩形
... ... @@ -765,8 +837,8 @@ static void *MixedVideo_Thread(void *args)
memset(Opt_SrcImg->buf, 0, Opt_SrcImg->buf_size);
//将数据放入缓冲区
memcpy(Irc_SrcImg->buf, g_MixedIrc_Buffer, (JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2);
memcpy(Opt_SrcImg->buf, g_MixedOpt_Buffer, JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2);
memcpy(Irc_SrcImg->buf, g_MixedIrc_Buffer, (g_JZC1_info.IRC_enc_info->hor_stride) * (g_JZC1_info.IRC_enc_info->ver_stride) * 3 / 2);
memcpy(Opt_SrcImg->buf, g_MixedOpt_Buffer, g_JZC1_info.Opt_enc_info->hor_stride * g_JZC1_info.Opt_enc_info->ver_stride * 3 / 2);
g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF;
... ... @@ -817,10 +889,9 @@ static void *MixedVideo_Thread(void *args)
//JZSDK_LOG_DEBUG("DstImg->buf_size:%d", DstImg->buf_size);
#ifdef RTK_MPP_STATUS_ON
MppPacket Packet = NULL;
RTK_mmp_enc_data_to_h264(JZsdk_RtkMmpGetEncHandleAddr(2), DstImg->buf, DstImg->buf_size, &Packet);
RTK_mmp_enc_data_to_h264(g_JZC1_info.Fuse_enc_info, DstImg->buf, DstImg->buf_size, &Packet);
h264DataLen = mpp_packet_get_length(Packet);
h264Data = (unsigned char *)mpp_packet_get_pos(Packet);
... ... @@ -829,7 +900,6 @@ static void *MixedVideo_Thread(void *args)
//释放掉packet
mpp_packet_deinit(&Packet);
#endif
//推送视频流
JZC1_PushFrame(VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD, h264Data, h264DataLen);
... ... @@ -858,8 +928,9 @@ static void *MixedVideo_Thread(void *args)
static T_JZsdkReturnCode JZC1_MixedVideo_Init()
{
#ifdef IRC_CONFIG_STATUS_ON
g_MixedIrc_Buffer = (unsigned char *)malloc(JZ_ALIGN(FIRST_WIDTH, 16)*JZ_ALIGN(FIRST_HEIGHT, 16)*3/2);
g_MixedOpt_Buffer = (unsigned char *)malloc(JZ_ALIGN(SECOND_WIDTH, 16)*JZ_ALIGN(SECOND_HEIGHT, 16)*3/2);
g_MixedIrc_Buffer = (unsigned char *)malloc(g_JZC1_info.IRC_enc_info->hor_stride * g_JZC1_info.IRC_enc_info->ver_stride * 3/2);
g_MixedOpt_Buffer = (unsigned char *)malloc(g_JZC1_info.Opt_enc_info->hor_stride * g_JZC1_info.Opt_enc_info->ver_stride * 3/2);
//混合视频初始化
pthread_t Task;
... ... @@ -880,150 +951,13 @@ static T_JZsdkReturnCode JZC1_MixedVideo_Init()
}
#endif
//JZ_C1 的媒体初始化
static T_JZsdkReturnCode JZC1_MediaInit()
{
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
//初始化媒体模块
#ifdef MEDIA_PROC_CONFIG_STATUS_ON
//初始化videoMgmt模块
VideoMgmt_Init();
//初始化Mulit模块
#ifdef RTK_MPP_STATUS_ON
//初始化红外的编解码器
RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(0), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, FIRST_WIDTH, FIRST_HEIGHT, 30, 5);
//初始化光学的编解码器
RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT);
RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15);
// RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT);
// RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15);
//初始化混合视频流的编码器
RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(2), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15);
#endif
//初始化Camera模块
int CameraFd = -1;
ret = V4l2_Camarainit2(&CameraFd, SECOND_WIDTH, SECOND_HEIGHT, 30);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("光学相机启动失败");
}
else
{
//光学相机的抓取
ret = JZsdk_FrameCatch_Single(JZC1_OptDeal);
}
//初始化IRC_funtion模块
ret = IRC_ParamInit(FIRST_HEIGHT, FIRST_WIDTH, 25);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("初始化红外的数据处理失败");
}
else
{
//初始化红外的数据输入
ret = JZsdk_JZC1_Irc_Data_Init();
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("红外相机初始化失败");
}
}
//设置默认参数
//默认推送红外摄像头 后续改成 红外+光学 的组合画面
VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD);
//设置快门为开
JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON);
//设置伪彩颜色为hot
int value = 8;
Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value);
//设置为默认输出模式
value = 0;
Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value);
//设置默认打开自动校正
value = JZ_FLAGCODE_ON;
Proc_IRC_param(JZ_FLAGCODE_SET, JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE, &value);
//初始化变焦模块
Cam_Zoom_Init();
//初始化RGA模块
#ifdef RTK_RGA_STATUS_ON
ret = JZC1_RgaInit(&g_C1_RgaIrcInfo, JZ_ALIGN(FIRST_WIDTH, 16), JZ_ALIGN(FIRST_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP);
ret = JZC1_RgaInit(&g_C1_RgaOptInfo, JZ_ALIGN(SECOND_WIDTH, 16), JZ_ALIGN(SECOND_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP);
//混合视频初始化
JZC1_MixedVideo_Init();
#endif
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
#ifdef RTK_RGA_STATUS_ON
static T_JZsdkReturnCode JZC1_RgaInit(C1_RgaInfo **rgaInfo, int dst_width, int dst_height, int dst_format)
{
//初始化rga结构体
(*rgaInfo) = (C1_RgaInfo *)malloc(sizeof(C1_RgaInfo));
if ((*rgaInfo) == NULL)
{
JZSDK_LOG_ERROR("RGA初始化失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
int width = dst_width;
int height = dst_height;
int rect_x = 0;
int rect_y = 0;
int rect_w = dst_width;
int rect_h = dst_height;
(*rgaInfo)->src_img = NULL;
RK_Rga_ImageInit(&(*rgaInfo)->src_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输入模块
(*rgaInfo)->corp_img = NULL;
RK_Rga_ImageInit(&(*rgaInfo)->corp_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化裁剪模块
(*rgaInfo)->dst_img = NULL;
RK_Rga_ImageInit(&(*rgaInfo)->dst_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输出模块
}
#endif
//rga处理
#ifdef RTK_RGA_STATUS_ON
static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned char *image, unsigned int *imgage_size)
{
int d_ret;
if (g_C1_RgaIrcInfo == NULL || *imgage_size != rga_info->src_img->buf_size)
if (g_JZC1_info.IRC_rga_info == NULL || *imgage_size != rga_info->src_img->buf_size)
{
printf("C1_Rga_Deal failed imagesize:%d bufsize:%d\n", *imgage_size, rga_info->src_img->buf_size);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
... ... @@ -1089,33 +1023,306 @@ static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned
}
T_JZsdkReturnCode JZC1_SetNextFrame_IDR(unsigned int index)
{
if (index == JZ_C1_IRC_INDEX)
{
RTK_mmp_enc_SetNextFrame_IDR(g_JZC1_info.IRC_enc_info);
}
else if (index == JZ_C1_OPT_INDEX)
{
RTK_mmp_enc_SetNextFrame_IDR(g_JZC1_info.Opt_enc_info);
}
else if (index == JZ_C1_FUSE_INDEX)
{
RTK_mmp_enc_SetNextFrame_IDR(g_JZC1_info.Fuse_enc_info);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
#endif
T_JZsdkReturnCode JZC1_Init()
static int save_int_to_file(const char* filename, int value)
{
T_JZsdkReturnCode ret;
FILE* file = fopen(filename, "wb");
if (!file) {
perror("fopen failed");
return -1;
}
//初始化引脚
Ircut_Init();
size_t written = fwrite(&value, sizeof(int), 1, file);
fclose(file);
//初始化媒体模块
ret = JZC1_MediaInit();
if (written != 1) {
fprintf(stderr, "Failed to write integer\n");
return -1;
}
return 0;
}
JZSDK_LOG_INFO("JZ_C1 INIT COMPLETED\n");
static int read_int_from_file(const char* filename) {
FILE* file = fopen(filename, "rb");
if (!file) {
perror("fopen failed");
return 0;
}
return ret;
int value = 0;
size_t read = fread(&value, sizeof(int), 1, file);
fclose(file);
if (read != 1) {
fprintf(stderr, "Failed to read integer\n");
return 0;
}
return value;
}
T_JZsdkReturnCode JZC1_PowerOff_Save()
{
JZSDK_LOG_INFO("开始关机保存");
JZsdk_Osal_Mkdir("/root/ValueSave");
//获取校正类型
int correction_type;
Camera_param(JZ_FLAGCODE_GET, CAMERA_CORRCTION_MODE, &correction_type);
//保存
save_int_to_file("/root/ValueSave/correction_type", correction_type);
JZSDK_LOG_INFO("已存储校正类型:%d", correction_type);
//保存单点校正模式
int single_point_correction_mode;
Proc_IRC_param(JZ_FLAGCODE_GET, JZSDK_WIDGET_SPC_MODE, &single_point_correction_mode);
//保存
save_int_to_file("/root/ValueSave/single_point_correction_mode", single_point_correction_mode);
JZSDK_LOG_INFO("已存储单点校正模式:%d", single_point_correction_mode);
//保存两点校正模式
int double_point_correction_mode;
Proc_IRC_param(JZ_FLAGCODE_GET, JZSDK_WIDGET_TPC_MODE, &double_point_correction_mode);
//保存
save_int_to_file("/root/ValueSave/double_point_correction_mode", double_point_correction_mode);
JZSDK_LOG_INFO("已存储两点校正模式:%d", double_point_correction_mode);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
static T_JZsdkReturnCode JZC1_PowerOn_Read()
{
//读取校正类型
int correction_type = read_int_from_file("/root/ValueSave/correction_type");
//设置校正类型
UIcontrol_CameraCorrectionMode(NO_SPECIFIED ,correction_type);
//读取单点校正模式
int single_point_correction_mode = read_int_from_file("/root/ValueSave/single_point_correction_mode");
//设置单点校正模式
UIcontrol_Set_SPCmode(NO_SPECIFIED, single_point_correction_mode);
//读取两点校正模式
int double_point_correction_mode = read_int_from_file("/root/ValueSave/double_point_correction_mode");
//设置两点校正模式
UIcontrol_Set_TpcMode(NO_SPECIFIED, double_point_correction_mode);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//c1的实际初始化函数
T_JZsdkReturnCode JZC1_Init(int mode)
{
//网口初始化
if (mode == APP_UART)
{
//网口初始化
JZsdk_NetWork_Init();
}
#ifdef RTK_MPP_STATUS_ON
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
T_JZsdkVideoMgmtHandler VideoMgmtHandler = {
.SetNextFrame_IDR = JZC1_SetNextFrame_IDR,
};
VideoMgmt_Init(VideoMgmtHandler);
//初始化红外的编码器
g_JZC1_info.IRC_enc_info = (T_rtk_mmp_enc_info *)malloc(sizeof(T_rtk_mmp_enc_info));
if (g_JZC1_info.IRC_enc_info == NULL)
{
JZSDK_LOG_ERROR("malloc enc_info failed");
}
g_JZC1_info.IRC_enc_info->Input_fmt = MPP_FMT_YUV420SP;
g_JZC1_info.IRC_enc_info->encType = MPP_VIDEO_CodingAVC;
g_JZC1_info.IRC_enc_info->width = JZ_C1_IRC_WIDTH;
g_JZC1_info.IRC_enc_info->height = JZ_C1_IRC_HEIGHT;
g_JZC1_info.IRC_enc_info->FrameNum = JZ_C1_IRC_FRAMERATE;
g_JZC1_info.IRC_enc_info->IDR_gop = 5;
g_JZC1_info.IRC_enc_info->hor_stride = JZ_ALIGN(g_JZC1_info.IRC_enc_info->width, 16);
g_JZC1_info.IRC_enc_info->ver_stride = JZ_ALIGN(g_JZC1_info.IRC_enc_info->height, 16);
RTK_mmp_enc_Init(g_JZC1_info.IRC_enc_info);
//初始化光学摄像头的解码器
g_JZC1_info.Opt_dec_info = (T_rtk_mmp_dec_info *)malloc(sizeof(T_rtk_mmp_dec_info));
if (g_JZC1_info.Opt_dec_info == NULL)
{
JZSDK_LOG_ERROR("malloc dec_info failed");
}
g_JZC1_info.Opt_dec_info->Dec_type = MPP_VIDEO_CodingMJPEG;
g_JZC1_info.Opt_dec_info->out_format = MPP_FMT_YUV420SP;
g_JZC1_info.Opt_dec_info->width = JZ_C1_OPT_WIDTH;
g_JZC1_info.Opt_dec_info->height = JZ_C1_OPT_HEIGHT;
g_JZC1_info.Opt_dec_info->hor_stride = JZ_ALIGN(g_JZC1_info.Opt_dec_info->width, 16);
g_JZC1_info.Opt_dec_info->ver_stride = JZ_ALIGN(g_JZC1_info.Opt_dec_info->height, 16);
RTK_mmp_dec_Init(g_JZC1_info.Opt_dec_info);
//初始化光学的编码器
g_JZC1_info.Opt_enc_info = (T_rtk_mmp_enc_info *)malloc(sizeof(T_rtk_mmp_enc_info));
if (g_JZC1_info.Opt_enc_info == NULL)
{
JZSDK_LOG_ERROR("malloc enc_info failed");
}
g_JZC1_info.Opt_enc_info->Input_fmt = MPP_FMT_YUV420SP;
g_JZC1_info.Opt_enc_info->encType = MPP_VIDEO_CodingAVC;
g_JZC1_info.Opt_enc_info->width = JZ_C1_OPT_WIDTH;
g_JZC1_info.Opt_enc_info->height = JZ_C1_OPT_HEIGHT;
g_JZC1_info.Opt_enc_info->FrameNum = JZ_C1_OPT_FRAMERATE;
g_JZC1_info.Opt_enc_info->IDR_gop = 15;
g_JZC1_info.Opt_enc_info->hor_stride = JZ_ALIGN(g_JZC1_info.Opt_enc_info->width, 16);
g_JZC1_info.Opt_enc_info->ver_stride = JZ_ALIGN(g_JZC1_info.Opt_enc_info->height, 16);
RTK_mmp_enc_Init(g_JZC1_info.Opt_enc_info);
//初始化融合的编码器
g_JZC1_info.Fuse_enc_info = (T_rtk_mmp_enc_info *)malloc(sizeof(T_rtk_mmp_enc_info));
if (g_JZC1_info.Fuse_enc_info == NULL)
{
JZSDK_LOG_ERROR("malloc enc_info failed");
}
g_JZC1_info.Fuse_enc_info->Input_fmt = MPP_FMT_YUV420SP;
g_JZC1_info.Fuse_enc_info->encType = MPP_VIDEO_CodingAVC;
g_JZC1_info.Fuse_enc_info->width = JZ_C1_FUSE_WIDTH;
g_JZC1_info.Fuse_enc_info->height = JZ_C1_FUSE_HEIGHT;
g_JZC1_info.Fuse_enc_info->FrameNum = JZ_C1_FUSE_FRAMERATE;
g_JZC1_info.Fuse_enc_info->IDR_gop = 15;
g_JZC1_info.Fuse_enc_info->hor_stride = JZ_ALIGN(g_JZC1_info.Fuse_enc_info->width, 16);
g_JZC1_info.Fuse_enc_info->ver_stride = JZ_ALIGN(g_JZC1_info.Fuse_enc_info->height, 16);
RTK_mmp_enc_Init(g_JZC1_info.Fuse_enc_info);
//初始化光学相机
g_JZC1_info.Opt_Camera_info = (JZsdk_CameraInfo *)malloc(sizeof(JZsdk_CameraInfo));
if (g_JZC1_info.Opt_Camera_info == NULL)
{
JZSDK_LOG_ERROR("malloc camera_info failed");
}
g_JZC1_info.Opt_Camera_info->width = JZ_C1_OPT_WIDTH;
g_JZC1_info.Opt_Camera_info->height = JZ_C1_OPT_HEIGHT;
g_JZC1_info.Opt_Camera_info->FrameNum = JZ_C1_OPT_FRAMERATE;
g_JZC1_info.Opt_Camera_info->CameraFormat = JZ_C1_OPT_PIXEL;
g_JZC1_info.Opt_Camera_info->ThreadMode = JZSDK_SINGLE_THREAD;
memset(&(g_JZC1_info.Opt_Camera_info->CameraParam), 0, sizeof(JZsdk_CameraParam));
memset(g_JZC1_info.Opt_Camera_info->CmeraDevPath, 0, sizeof(g_JZC1_info.Opt_Camera_info->CmeraDevPath));
memcpy(g_JZC1_info.Opt_Camera_info->CmeraDevPath, JZ_C1_OPT_DEV_PATH, strlen(JZ_C1_OPT_DEV_PATH));
g_JZC1_info.Opt_Camera_info->SingleDataOutput = JZC1_OptDeal;
ret = Camera_Init(g_JZC1_info.Opt_Camera_info);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("光学相机启动失败");
}
//初始化IRC_funtion模块
ret = IRC_ParamInit(JZ_C1_IRC_HEIGHT, JZ_C1_IRC_WIDTH, 25);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("初始化红外的数据处理失败");
}
else
{
//初始化红外的数据输入
ret = JZsdk_JZC1_Irc_Data_Init();
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("红外相机初始化失败");
}
}
//默认推送红外摄像头 后续改成 红外+光学 的组合画面
VideoMgmt_VideoStreamFlowIndex(JZ_C1_FUSE_INDEX);
//设置快门为开
JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON);
//设置伪彩颜色为hot
int value = 8;
Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value);
//设置为默认输出模式
value = 0;
Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value);
//设置默认打开自动校正
value = JZ_FLAGCODE_ON;
Proc_IRC_param(JZ_FLAGCODE_SET, JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE, &value);
//初始化变焦模块
Cam_Zoom_Init();
//初始化C1的RGA模块
#ifdef RTK_RGA_STATUS_ON
g_JZC1_info.IRC_rga_info = (C1_RgaInfo *)malloc(sizeof(C1_RgaInfo));
if (g_JZC1_info.IRC_rga_info == NULL)
{
JZSDK_LOG_ERROR("malloc IRC_rga_info failed");
}
ret = JZC1_RgaInit(g_JZC1_info.IRC_rga_info, g_JZC1_info.IRC_enc_info->hor_stride, g_JZC1_info.IRC_enc_info->ver_stride, RK_FORMAT_YCbCr_420_SP);
g_JZC1_info.Opt_rga_info = (C1_RgaInfo *)malloc(sizeof(C1_RgaInfo));
if (g_JZC1_info.Opt_rga_info == NULL)
{
JZSDK_LOG_ERROR("malloc Opt_rga_info failed");
}
ret = JZC1_RgaInit(g_JZC1_info.Opt_rga_info, g_JZC1_info.Opt_enc_info->hor_stride, g_JZC1_info.Opt_enc_info->ver_stride, RK_FORMAT_YCbCr_420_SP);
//混合视频初始化
JZC1_MixedVideo_Init();
#endif
#endif
//注册保存的回调函数
PowerManager_RegisterPowerOffCallback(JZC1_PowerOff_Save);
//注册读取保存的回调函数
PowerManager_RegisterPowerOnCallback(JZC1_PowerOn_Read);
JZSDK_LOG_INFO("JZC1_Init success");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
... ... @@ -25,7 +25,7 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZC1_Init();
T_JZsdkReturnCode JZC1_Init(int mode);
#ifdef __cplusplus
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
/****************************
*
* h10 h10t 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_h10_init(int mode)
{
//音频库初始化
AudioDeal_Init();
int value[5] = {0};
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file DeviceConfig.h
* DeviceConfig.h的头文件
* @file JZ_h10.h
* JZ_h10.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef DEVICE_CONFIG_H
#define DEVICE_CONFIG_H
#ifndef JZ_h10_H
#define JZ_h10_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "DeviceConfig/JZC1/JZC1.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
... ... @@ -27,6 +25,8 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_h10_init(int mode);
#ifdef __cplusplus
}
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
/****************************
*
* h10 h10t 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_h10t_init(int mode)
{
//音频库初始化
AudioDeal_Init();
int value[5] = {0};
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZ_h10.h
* JZ_h10.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZ_h10_H
#define JZ_h10_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_h10_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
#include "MediaProc/MediaProc.h"
typedef struct T_H150S_Info
{
JZsdk_CameraInfo *CamereInfo;
}T_H150S_Info;
static T_H150S_Info g_H150S_Info;
#define JZ_H150S_OPT_WIDTH 1920
#define JZ_H150S_OPT_HEIGHT 1080
#define JZ_H150S_OPT_FRAMERATE 25
#define JZ_H150S_OPT_INDEX VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST
#define JZ_H150S_OPT_DEV_PATH ("/dev/video0")
#define JZ_H150S_OPT_PIXEL V4L2_PIX_FMT_H264
#define JZ_H150S_OPT_BRIGHTNESS (80) //亮度,该摄像头亮度范围为 1-255 默认128
#define JZ_H150S_OPT_CONTRAST (155) //对比度,摄像头对比度范围为 1-255 默认128
#define JZ_H150S_OPT_SATURATION (128) //饱和度 摄像头饱和度范围为 1-255 默认128
static T_JZsdkReturnCode JZ_h150s_h150t_PushFrame(int CameraIndex,unsigned char *data, int data_len)
{
int currentIndex = VideoMgmt_GetVideoStreamFlowIndexNum(); //获取当前视频流索引
//无视频流
if (currentIndex == 0)
{
//不推送视频
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//相机
if (currentIndex == JZ_H150S_OPT_INDEX && CameraIndex == JZ_H150S_OPT_INDEX)
{
//推送数据到流转模块
VideoMgmt_Single_FrameIn(data, data_len);
}
}
static T_JZsdkReturnCode JZ_h150s_h150t_Opt_deal(unsigned char *buf, int len)
{
JZ_h150s_h150t_PushFrame(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST, buf, len);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/****************************
*
* h150s h150t 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_h150s_h150t_init(int mode)
{
T_JZsdkReturnCode ret;
//音频库初始化
AudioDeal_Init();
if (mode == APP_UART)
{
//串口设备1初始化
int value[1];
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//h150t额外开启4g
if (DEVICE_VERSION == JZ_H150T)
{
//4g设备初始化
int value[1];
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
}
if (mode == APP_UART)
{
//网口初始化
JZsdk_NetWork_Init();
}
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//视频流模块初始化
T_JZsdkVideoMgmtHandler VideoMgmtHandler = {
.SetNextFrame_IDR = NULL,
};
VideoMgmt_Init(VideoMgmtHandler);
//相机初始化
g_H150S_Info.CamereInfo = (JZsdk_CameraInfo *)malloc(sizeof(JZsdk_CameraInfo));
if (g_H150S_Info.CamereInfo == NULL)
{
JZSDK_LOG_ERROR("malloc error");
}
memset(g_H150S_Info.CamereInfo, 0, sizeof(JZsdk_CameraInfo));
g_H150S_Info.CamereInfo->width = JZ_H150S_OPT_WIDTH;
g_H150S_Info.CamereInfo->height = JZ_H150S_OPT_HEIGHT;
g_H150S_Info.CamereInfo->FrameNum = JZ_H150S_OPT_FRAMERATE;
g_H150S_Info.CamereInfo->CameraFormat = JZ_H150S_OPT_PIXEL;
memcpy(g_H150S_Info.CamereInfo->CmeraDevPath, JZ_H150S_OPT_DEV_PATH, strlen(JZ_H150S_OPT_DEV_PATH));
g_H150S_Info.CamereInfo->ThreadMode = JZSDK_SINGLE_THREAD;
g_H150S_Info.CamereInfo->SingleDataOutput = JZ_h150s_h150t_Opt_deal;
g_H150S_Info.CamereInfo->CameraParam.Brightness = JZ_H150S_OPT_BRIGHTNESS;
g_H150S_Info.CamereInfo->CameraParam.Contrast = JZ_H150S_OPT_CONTRAST;
g_H150S_Info.CamereInfo->CameraParam.Saturation = JZ_H150S_OPT_SATURATION;
ret = Camera_Init(g_H150S_Info.CamereInfo);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("光学相机启动失败");
}
VideoMgmt_VideoStreamFlowIndex(JZ_H150S_OPT_INDEX);
JZSDK_LOG_INFO("Module Init success");
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZ_h150s_h150t.h
* JZ_h150s_h150t.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZ_H150S_H150T_H
#define JZ_H150S_H150T_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_h150s_h150t_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
/****************************
*
* h1e 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_h1e_init(int mode)
{
int value[5] = {0};
//音频库初始化
AudioDeal_Init();
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//喊话器初始化
Megaphone_Init();
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZ_h1e.h
* JZ_h1e.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZ_H1E_H
#define JZ_H1E_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_h1e_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
/****************************
*
* h15tt 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_h1t_init(int mode)
{
int value[5] = {0};
//音频库初始化
AudioDeal_Init();
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//4g设备初始化
value[0] = COMM_4G_UART_BITRATE;
JZsdk_HalPort_Init(UART_4G, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_TRANSPARENT);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZ_h1t.h
* JZ_h1t.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZ_H1T_H
#define JZ_H1T_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_h1t_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
/****************************
*
* u3 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_u3_init(int mode)
{
//音频库初始化
AudioDeal_Init();
int value[5] = {0};
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZ_u3.h
* JZ_u3.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZ_u3_H
#define JZ_u3_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_u3_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
/****************************
*
* u30 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_u30_init(int mode)
{
//音频库初始化
AudioDeal_Init();
int value[5] = {0};
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZ_u30.h
* JZ_u30.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZ_u30_H
#define JZ_u30_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_u30_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
/****************************
*
* u3d 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_u3d_init(int mode)
{
//音频库初始化
AudioDeal_Init();
int value[5] = {0};
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZ_u3d.h
* JZ_u3d.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZ_u3d_H
#define JZ_u3d_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_u3d_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
#include "SideLaser/SideLaser.h"
/****************************
*
* u3s 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode JZ_u3s_init(int mode)
{
//音频库初始化
AudioDeal_Init();
int value[5] = {0};
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
#ifdef SIDE_LASER_STATUS_ON
//侧边激光初始化
SideLaser_Init();
#endif
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZ_u3s.h
* JZ_u3s.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZ_u3s_H
#define JZ_u3s_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode JZ_u3s_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include <pthread.h>
#include "JZsdk_Hal.h"
#include "Megaphone/Megaphone.h"
#include "AudioDeal/AudioDeal.h"
#include "Gimbal/Gimbal.h"
/****************************
*
* a1 初始化
*
* mode psdk为psdk模式 uart为串口模式
*
* ****************************/
T_JZsdkReturnCode TF_a1_init(int mode)
{
//音频库初始化
AudioDeal_Init();
int value[5] = {0};
if (mode == APP_UART)
{
//串口设备1初始化
value[0] = UART_DEV1_BITRATE;
JZsdk_HalPort_Init(UART_DEV_1, value);
}
//串口设备2初始化
value[0] = UART_DEV2_BITRATE;
JZsdk_HalPort_Init(UART_DEV_2, value);
//喊话器初始化
Megaphone_Init();
//云台初始化
Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT);
//灯类初始化
Lighting_Init();
delayMs(1000);
//消息订阅初始化
HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file tf_a1.h
* tf_a1.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef TF_A1_H
#define TF_A1_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
T_JZsdkReturnCode TF_a1_init(int mode);
#ifdef __cplusplus
}
#endif
#endif
... ...
... ... @@ -7,19 +7,19 @@
#define VERSION_CHOOSE_H
#include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h"
//1~10行 除了D可以修改版本选择 禁止动任何东西
#define DEVICE_VERSION JZ_H1T
#define DEVICE_VERSION JZ_U30
//禁止修改行 选择是串口程序 还是 psdk程序
#define APP_VERSION APP_UART
#define APP_VERSION APP_PSDK
//禁止修改行 板子型号
#define PLATFORM_VERSION PLATFORM_V3S
//禁止修改行 串口连接程序的软件版本号
#define MAJOR_VERSION 0x00
#define MINOR_VERSION 0x00
#define MODIFY_VERSION 0x02
#define DEBUG_VERSION 0x13
#define MAJOR_VERSION 0x01
#define MINOR_VERSION 0x03
#define MODIFY_VERSION 0x10
#define DEBUG_VERSION 0x00
//禁止修改行 滤波方式
#define FILTERING_TYPE HIGH_PASS_FILTERING
... ... @@ -38,6 +38,11 @@
//这个开关可以方便日常代码编写的跳转功能
#ifdef COMPILE_MODE_MODULE
//是否开启音频库功能
#ifdef MACRO_AUDIODEAL_MODULE
#define AUDIODEAL_CONFIG_STATUS_ON
#endif
//是否开启喊话器功能
#ifdef MACRO_MEGAPHONE_MODULE
#define MEGAPHONE_CONFIG_STATUS_ON
... ... @@ -89,6 +94,10 @@
#endif
#else //这里用于方便调试使用,不是实际加载的模组
//是否开启音频库功能
#define AUDIODEAL_CONFIG_STATUS_ON
//是否开启喊话器功能
#define MEGAPHONE_CONFIG_STATUS_ON
... ...
... ... @@ -60,6 +60,10 @@ int HalRecv_type1_PreliminaryScreeningOfData(unsigned char *Data, int DataLen, i
//JZSDK_LOG_INFO("hal-数据传输,接受到数据+未处理数据的长度len: %d", DataLen);
break;
case NET_DEV_1:
//JZSDK_LOG_INFO("网络-设备1号,接受到数据+未处理数据的长度len: %d", DataLen);
break;
/********** 未报备的接口 ************/
default:
ResidualLength = 0;
... ...
... ... @@ -25,9 +25,13 @@
#include "Megaphone/Music/AudioFile/Megaphone_AudioFile.h"
#include "Megaphone/Opus/Megaphone_Opus.h"
#include "Megaphone/PcmAudio/PcmAudioFile.h"
#endif
#ifdef AUDIODEAL_CONFIG_STATUS_ON
#include "AudioDeal/AudioDeal.h"
#endif
static int HalRecvMode = JZ_FLAGCODE_OFF; //接收模式,主要是为了限制不同设备同时要求hal层做出 同一个数据接收相关功能 ,目前做法是只限定一个hal设备使用一种数据接收模式
static int HalRecvDataLen = 0; //用于计算接收数据长度
... ... @@ -1640,6 +1644,8 @@ static T_JZsdkReturnCode RecvDeal_Delete_Audio(int Port, char *getbuf)
memcpy(FileName, &getbuf[9], FileName_Length);
FileName[FileName_Length] = '\0'; // 确保文件名以null结尾
JZSDK_LOG_INFO("删除音频:%s", FileName);
//3、拼接指令
char FilePath[512];
snprintf(FilePath, 512 ,"/root/sdcard/audio/%s", FileName);
... ... @@ -3063,6 +3069,8 @@ static T_JZsdkReturnCode RecvDeal_SearchLight_SubscriptionControl(int Port, char
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
UIcontrol_Set_SearchLight_MessageSubscribe(Port, value);
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
... ... @@ -3332,8 +3340,305 @@ static T_JZsdkReturnCode RecvDeal_Upgrade_End(int Port, char *getbuf)
return ret;
}
/*******************************************************************************************************************************
*
* 视频流部分
*
* *******************************************************************************************************************************/
T_JZsdkReturnCode RecvDeal_Set_VideoPushIndex(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,视频推送索引",JZsdk_DefineCode_GetPortName(Port));
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int value = getbuf[9];
T_JZsdkReturnCode ret = UIcontrol_Set_VideoMgmtPushIndex(Port, value);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
T_JZsdkReturnCode RecvDeal_Set_ShutterControl(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,快门控制",JZsdk_DefineCode_GetPortName(Port));
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int value = getbuf[9];
T_JZsdkReturnCode ret = UIcontrol_Set_ShutterSwitch(Port, value);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
T_JZsdkReturnCode RecvDeal_Set_FreezeControl(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,冻结控制",JZsdk_DefineCode_GetPortName(Port));
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int value = getbuf[9];
T_JZsdkReturnCode ret = UIcontrol_FreezeVideo(Port, value);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
T_JZsdkReturnCode RecvDeal_Set_IRCCorrectWay(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,红外校正方式",JZsdk_DefineCode_GetPortName(Port));
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int value = getbuf[10];
T_JZsdkReturnCode ret = UIcontrol_CameraCorrectionMode(Port, value);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
T_JZsdkReturnCode RecvDeal_Set_IRCCorrectSPCParam(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,红外spc控制",JZsdk_DefineCode_GetPortName(Port));
T_JZsdkReturnCode ret;
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int mode = getbuf[9];
int value = getbuf[10];
//单点档位
if (mode == 0x00)
{
ret = UIcontrol_Set_SPCmode(Port, value);
}
//单点校正模式
else if (mode == 0x01)
{
ret = UIcontrol_Camera_SPC_ResetSwitch(Port, value);
}
//修改自动校正时间
else if (mode == 0x02)
{
ret = UIcontrol_Set_SpcAutoTime(Port, value);
}
else
{
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
T_JZsdkReturnCode RecvDeal_Set_IRCCorrectTPCParam(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,红外tpc控制",JZsdk_DefineCode_GetPortName(Port));
T_JZsdkReturnCode ret;
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int mode = getbuf[9];
int value = getbuf[10];
//单点档位
if (mode == 0x00)
{
ret = UIcontrol_Set_TpcMode(Port, value);
}
//修改两点校正数据组
else if (mode == 0x01)
{
ret = UI_control_IrcMarkLowAndHighTemp(Port, value);
}
else
{
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
T_JZsdkReturnCode RecvDeal_Set_IRCCorrectColorOutputMode(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,红外校正颜色输出模式",JZsdk_DefineCode_GetPortName(Port));
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int value = getbuf[10];
T_JZsdkReturnCode ret = UIcontrol_Set_PixelColorMode(Port, value);
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
T_JZsdkReturnCode RecvDeal_Set_IRCCorrectPseudoColorParam(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,红外伪彩参数",JZsdk_DefineCode_GetPortName(Port));
T_JZsdkReturnCode ret;
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int mode = getbuf[9];
int value = getbuf[10];
//修改伪彩颜色
if(mode == 0x00)
{
ret = UIcontrol_Set_PseudoColor(Port, value);
}
else
{
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
T_JZsdkReturnCode RecvDeal_Set_IRCCorrectGasEnhanceParam(int Port, char *getbuf)
{
JZSDK_LOG_INFO("%s,红外气体增强参数",JZsdk_DefineCode_GetPortName(Port));
T_JZsdkReturnCode ret;
//获取帧的序列号
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
//1、通过数据帧,获取控制值
int mode = getbuf[9];
int value = getbuf[10];
//修改气体增强颜色
if(mode == 0x00)
{
ret = UIcontrol_Set_GasEnhancementColor(Port, value);
}
else if (mode == 0x01)
{
ret = UIcontrol_GasEnhancementCorrect(Port, value);
}
else
{
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
//回复操作成功
HalSend_type1Send_Reply_Success(Port, FrameSequence);
}
else
{
//回复操作失败
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
}
return ret;
}
/*******************************************************************************************************************************
*
... ... @@ -4152,11 +4457,15 @@ static T_JZsdkReturnCode RecvDeal_SetSpecialParameters(int Port, char *getbuf)
//0x01设置滤波
case 0x01:
{
ret = Main_M30_all_filter_mode(&value);
#ifdef MEGAPHONE_CONFIG_STATUS_ON
ret = AudioDeal_SetFilterMode(value);
if(ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("特参一失败");
}
#endif
}
break;
... ... @@ -4209,11 +4518,11 @@ static T_JZsdkReturnCode RecvDeal_CheckSpecialParameters(int Port, char *getbuf)
//0x01设置滤波
case 0x01:
{
ret = Main_M30_all_filter_mode(&value);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("特参一获取失败");
}
#ifdef MEGAPHONE_CONFIG_STATUS_ON
value = AudioDeal_GetFilterMode();
ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
#endif
}
break;
... ... @@ -4853,6 +5162,50 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi
RecvDeal_Upgrade_End(Port,getbuf);
break;
//设置推流索引值
case JZ_INSCODE_5AFRAME_CAMERA_VIDEO_PUSH_INDEX:
RecvDeal_Set_VideoPushIndex(Port,getbuf);
break;
//设置快门控制
case JZ_INSCODE_5AFRAME_CAMERA_SHUTTER_CONTROL:
RecvDeal_Set_ShutterControl(Port,getbuf);
break;
//冻结控制
case JZ_INSCODE_5AFRAME_CAMERA_FREEZE_CONTROL:
RecvDeal_Set_FreezeControl(Port,getbuf);
break;
//红外校正方式
case JZ_INSOCDE_5AFRAME_IRC_CORRECT_WAY:
RecvDeal_Set_IRCCorrectWay(Port,getbuf);
break;
//红外单点参数
case JZ_INSCODE_5AFRAME_IRC_SPC_PARAM:
RecvDeal_Set_IRCCorrectSPCParam(Port,getbuf);
break;
//红外两点参数
case JZ_INSCODE_5AFRAME_IRC_TPC_PARAM:
RecvDeal_Set_IRCCorrectTPCParam(Port,getbuf);
break;
//红外色彩输出模式
case JZ_INSOCDE_5AFRAME_IRC_OUTPUT_COLOR_MODE:
RecvDeal_Set_IRCCorrectColorOutputMode(Port,getbuf);
break;
//红外伪彩输出控制
case JZ_INSCODE_5AFRAME_IRC_PSEUDO_COLOR_PARAM:
RecvDeal_Set_IRCCorrectPseudoColorParam(Port,getbuf);
break;
//红外气体增强控制
case JZ_INSCODE_5AFRAME_IRC_GAS_ENHANCE_PARAM:
RecvDeal_Set_IRCCorrectGasEnhanceParam(Port,getbuf);
break;
/*******************************************************************************************************************************
*
... ...
... ... @@ -20,8 +20,8 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#define SINGLE_THREAD_SEND 0
#define MULTI_THREAD_SEND 1
#define SINGLE_THREAD_SEND JZSDK_SINGLE_THREAD
#define MULTI_THREAD_SEND JZSDK_MULTI_THREAD
/* Exported types ------------------------------------------------------------*/
... ...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <termios.h>
#include "BaseConfig.h"
#include "version_choose.h"
#include "JZsdkLib.h"
#include "./JZsdk_network.h"
#include "../Hal_Recv/HalRecv.h"
#define LINUX_CMD_STR_MAX_SIZE (128)
#define LINUX_NETWORK_DEV "eth0"
#define UDP_SERVER_PORT (23003)
#define TCP_SERVER_PORT (23004)
#define MAX_LISTEN_NUM (5)
#define MAX_SEND_FRAME_LENTH (60000)
#define JZSDK_UTIL_MIN(a, b) (((a) < (b)) ? (a) : (b))
static int udp_socket = 0;
static struct sockaddr_in udp_server_addr;
typedef struct T_JZsdk_network_Info
{
//udp套接字
int udp_socket;
//udp服务器地址
struct sockaddr_in udp_server_addr;
//udp端口
int udp_port;
//tcp套接字
int tcp_socket;
//tcp服务器地址
struct sockaddr_in tcp_server_addr;
//tcp端口
int tcp_port;
}T_JZsdk_network_Info;
T_JZsdk_network_Info g_JZsdk_network_Info;
static int NetworkMode = JZ_FLAGCODE_OFF; //网络模式
static T_JZsdkReturnCode JZsdk_NetWork_UdpInit()
{
//创建UDP socket 套接字
g_JZsdk_network_Info.udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
if (g_JZsdk_network_Info.udp_socket == -1) {
JZSDK_LOG_ERROR("网口套接字注册失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//配置udp服务器地址
memset(&g_JZsdk_network_Info.udp_server_addr, 0, sizeof(g_JZsdk_network_Info.udp_server_addr));
g_JZsdk_network_Info.udp_server_addr.sin_family = AF_INET;
g_JZsdk_network_Info.udp_server_addr.sin_port = htons(g_JZsdk_network_Info.udp_port);
if(inet_aton(NET_WORK_TARGET_IPADDR, &g_JZsdk_network_Info.udp_server_addr.sin_addr) == 0)
{
JZSDK_LOG_ERROR("udp服务器配置失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
static T_JZsdkReturnCode handle_client(int client_socket, int port)
{
char buffer[4096] = {0}; // 初始化接收缓冲区
ssize_t bytes_read;
// 读取客户端发送的数据
bytes_read = read(client_socket, buffer, 4096 - 1);
if (bytes_read > 0)
{
//printf("%s\n", buffer);
// 检查是否是 OPTIONS 请求
if (strstr(buffer, "OPTIONS / HTTP/1.1") != NULL) {
// 返回允许跨域的响应头
const char *options_response =
"HTTP/1.1 200 OK\r\n"
"Access-Control-Allow-Origin: *\r\n"
"Access-Control-Allow-Methods: POST, OPTIONS\r\n"
"Access-Control-Allow-Headers: Content-Type\r\n"
"Content-Length: 0\r\n"
"\r\n";
write(client_socket, options_response, strlen(options_response));
close(client_socket);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// 解析 HTTP 请求头中的 Content-Length
char *content_length = strstr(buffer, "Content-Length: ");
if (content_length) {
int len = atoi(content_length + 16); // 跳过 "Content-Length: " 的16个字符
unsigned char *body = strstr(buffer, "\r\n\r\n") + 4; // 定位消息体起始位置
//JZSDK_LOG_INFO("[Port %d] Received: %d%s\n", port, len, body); // 打印消息体内容
HalRecv_type1_PreliminaryScreeningOfData(body, len, NET_DEV_1);
}
}
// 发送固定 HTTP 响应
const char *response =
"HTTP/1.1 200 OK\r\n"
"Access-Control-Allow-Origin: *\r\n"
"Content-Length: 19\r\n"
"\r\n"
"Data received successfully";
write(client_socket, response, strlen(response));
close(client_socket); // 关闭客户端连接
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
static void *JZsdk_Tcp_RecvThread(void *arg)
{
while (1)
{
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int client_socket = accept(g_JZsdk_network_Info.tcp_socket, (struct sockaddr *)&client_addr, &client_addr_len);
if(client_socket == -1)
{
JZSDK_LOG_ERROR("tcp服务器接收失败");
continue;
}
handle_client(client_socket, g_JZsdk_network_Info.tcp_port); // 处理客户端请求
}
}
static T_JZsdkReturnCode JZsdk_NetWork_TcpInit()
{
T_JZsdkOsalHandler *osal_handler = JZsdk_Platform_GetOsalHandler();
if(osal_handler == NULL)
{
JZSDK_LOG_ERROR("osal_handler is NULL");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//创建tcp socket套接字
g_JZsdk_network_Info.tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
if (g_JZsdk_network_Info.tcp_socket == -1)
{
JZSDK_LOG_ERROR("网口套接字注册失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//配置tcp服务器
memset(&g_JZsdk_network_Info.tcp_server_addr, 0, sizeof(g_JZsdk_network_Info.tcp_server_addr));
g_JZsdk_network_Info.tcp_server_addr.sin_family = AF_INET;
g_JZsdk_network_Info.tcp_server_addr.sin_port = htons(g_JZsdk_network_Info.tcp_port);
g_JZsdk_network_Info.tcp_server_addr.sin_addr.s_addr = inet_addr("192.168.5.3");
//把tcp套接字绑定到指定地址
if(bind(g_JZsdk_network_Info.tcp_socket, (struct sockaddr *)&g_JZsdk_network_Info.tcp_server_addr, sizeof(g_JZsdk_network_Info.tcp_server_addr)) == -1)
{
JZSDK_LOG_ERROR("tcp服务器配置失败");
close(g_JZsdk_network_Info.tcp_socket);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//进入监听状态
if(listen(g_JZsdk_network_Info.tcp_socket, MAX_LISTEN_NUM) == -1)
{
JZSDK_LOG_ERROR("tcp服务器监听失败");
close(g_JZsdk_network_Info.tcp_socket);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
T_JZTaskHandle g_tcp_server_task = NULL;
//创建监听线程
osal_handler->TaskCreate("tcp_server", JZsdk_Tcp_RecvThread, 8192, NULL, &g_tcp_server_task);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_NetWork_Init()
{
T_JZsdkReturnCode ret;
... ... @@ -35,6 +201,9 @@ T_JZsdkReturnCode JZsdk_NetWork_Init()
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
g_JZsdk_network_Info.udp_port = UDP_SERVER_PORT;
g_JZsdk_network_Info.tcp_port = TCP_SERVER_PORT;
//1、打开网卡设备
memset(cmdStr, 0, sizeof(cmdStr));
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s up", LINUX_NETWORK_DEV);
... ... @@ -46,7 +215,7 @@ T_JZsdkReturnCode JZsdk_NetWork_Init()
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//2、打开网络
//2、配置IP地址
memset(cmdStr, 0, sizeof(cmdStr));
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s %s netmask %s", LINUX_NETWORK_DEV, NET_WORK_IPADDR, NET_WORK_NETMASK);
ret = system(cmdStr);
... ... @@ -57,22 +226,11 @@ T_JZsdkReturnCode JZsdk_NetWork_Init()
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//3、创建UDP socket 套接字
udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
if (udp_socket == -1) {
JZSDK_LOG_ERROR("网口套接字注册失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//udp初始化
JZsdk_NetWork_UdpInit();
//4、配置udp服务器地址
memset(&udp_server_addr, 0, sizeof(udp_server_addr));
udp_server_addr.sin_family = AF_INET;
udp_server_addr.sin_port = htons(UDP_SERVER_PORT);
if(inet_aton(NET_WORK_TARGET_IPADDR, &udp_server_addr.sin_addr) == 0)
{
JZSDK_LOG_ERROR("udp服务器配置失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//tcp初始化
JZsdk_NetWork_TcpInit();
NetworkMode = JZ_FLAGCODE_ON;
... ... @@ -87,8 +245,8 @@ T_JZsdkReturnCode JZsdk_NetWork_DeInit()
static T_JZsdkReturnCode JZsdk_NetWork_Sent(const unsigned char *data, const int data_len)
{
int bytes_sent = sendto(udp_socket, data, data_len, 0,
(struct sockaddr *) &udp_server_addr, sizeof(udp_server_addr));
int bytes_sent = sendto(g_JZsdk_network_Info.udp_socket, data, data_len, 0,
(struct sockaddr *) &g_JZsdk_network_Info.udp_server_addr, sizeof(g_JZsdk_network_Info.udp_server_addr));
if (bytes_sent == -1)
{
... ...
... ... @@ -17,8 +17,8 @@
extern "C" {
#endif
#define LINUX_USB_VID (0x04b4)
#define LINUX_USB_PID (0x00f1)
#define JZSDK_USB_VID (0x04b4)
#define JZSDK_USB_PID (0x00f1)
#define USB_OUT_POINT (0x02)
#define USB_IN_POINT (0x86)
... ...
... ... @@ -89,6 +89,14 @@ T_JZsdkReturnCode AudioDeal_SetFilterMode(int mode)
FF_Filter_Set_FilterMode(mode);
}
/*
获取音频库的滤波模式
0x00 默认滤波 0x01 M30滤波
*/
T_JZsdkReturnCode AudioDeal_GetFilterMode()
{
return FF_Filter_Get_FilterMode();
}
/******************************
... ...
... ... @@ -102,6 +102,8 @@ int AudioDeal_GetPauseAndContinuePlayStatus();
T_JZsdkReturnCode Get_AudioDealStatus();
T_JZsdkReturnCode AudioDeal_SetFilterMode(int mode);
T_JZsdkReturnCode AudioDeal_GetFilterMode();
T_JZsdkReturnCode AudioDeal_Mp3DataStop();
#ifdef __cplusplus
... ...
... ... @@ -440,3 +440,8 @@ T_JZsdkReturnCode FF_Filter_Set_FilterMode(int mode)
g_FilterMode = mode;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode FF_Filter_Get_FilterMode()
{
return g_FilterMode;
}
\ No newline at end of file
... ...
... ... @@ -21,6 +21,7 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType);
T_JZsdkReturnCode FF_Filter_push_frame_to_fliter(struct AudioDealInfo *AD_Info ,AVFrame* in_frame);
T_JZsdkReturnCode FF_Filter_get_frame_from_filter(struct AudioDealInfo *AD_Info ,AVFrame* out_frame);
T_JZsdkReturnCode FF_Filter_Set_FilterMode(int mode);
T_JZsdkReturnCode FF_Filter_Get_FilterMode();
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
... ...
... ... @@ -4,21 +4,76 @@
#define POWER_STATUS_OFF 0
#define POWER_STATUS_REBOOT 1
//电源管理初始化
T_JZsdkReturnCode PowerManger_Init()
// 使用static限制全局变量可见范围
static T_JZsdkReturnCode (*g_PoweroffCallback)(void) = NULL;
static T_JZsdkReturnCode (*g_PoweronCallback)(void) = NULL;
T_JZsdkReturnCode PowerManager_RegisterPowerOffCallback(T_JZsdkReturnCode (*callback)(void))
{
if (!callback)
{
JZSDK_LOG_ERROR("Invalid NULL callback");
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
g_PoweroffCallback = callback;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode PowerManager_RegisterPowerOnCallback(T_JZsdkReturnCode (*callback)(void))
{
if (!callback)
{
JZSDK_LOG_ERROR("Invalid NULL callback");
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
g_PoweronCallback = callback;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//电源开关
T_JZsdkReturnCode PowerManger_PowerOff()
{
JZSDK_LOG_INFO("执行关闭电源");
if (g_PoweroffCallback) {
T_JZsdkReturnCode callbackRet = g_PoweroffCallback();
if (callbackRet != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("关机任务未正常执行");
}
}
JZsdk_RunSystemCmd("poweroff");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//电源开机时的任务 //这意味着已经完成所有初始化
T_JZsdkReturnCode PowerManger_PowerOn()
{
JZSDK_LOG_INFO("执行开机任务");
if (g_PoweronCallback) {
T_JZsdkReturnCode callbackRet = g_PoweronCallback();
if (callbackRet != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("开机任务未正常执行");
}
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//电源管理初始化
T_JZsdkReturnCode PowerManger_Init()
{
}
//电源重启
T_JZsdkReturnCode PowerManger_PowerReboot()
... ...
... ... @@ -25,6 +25,9 @@ extern "C" {
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode PowerManger_SetPowerStatus(int status);
T_JZsdkReturnCode PowerManager_RegisterPowerOffCallback(T_JZsdkReturnCode (*callback)(void));
T_JZsdkReturnCode PowerManager_RegisterPowerOnCallback(T_JZsdkReturnCode (*callback)(void));
T_JZsdkReturnCode PowerManger_PowerOn();
#ifdef __cplusplus
... ...
... ... @@ -293,7 +293,14 @@ static T_JZsdkReturnCode DeviceMessage_Enter_Debug(unsigned char *message)
memset(old_message, 0, MESSAGE_MAX_LEN);
memset(new_message, 0, MESSAGE_MAX_LEN);
if (g_MessageLanguage == DEVICE_MESSAGE_CHINESE)
{
snprintf(new_message,MESSAGE_MAX_LEN,"调试界面\n");
}
else
{
snprintf(new_message,MESSAGE_MAX_LEN,"Debug-Perspective\n");
}
snprintf(old_message,MESSAGE_MAX_LEN,"%s",message);
snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);
... ...
... ... @@ -83,6 +83,14 @@ T_JZsdkReturnCode FOMAT_FirewareOriginRegion_Init(int SerialType, unsigned char
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//检测是否是欧洲定制区域固件
if ((SerialNumber[4] == 'E' || SerialNumber[4] == 'e')
&& (SerialNumber[5] == 'U' || SerialNumber[5] == 'u'))
{
g_OriginRegionNum = ORIGIN_EU;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//无匹配序列号
if (FIRMWARE_ORIGIN == DOMESTIC_VERSION)
{
... ...
... ... @@ -26,6 +26,8 @@ static int WarningLight_Mode; //警灯模式
static int WarningLight_Color1; //警灯颜色1
static int WarningLight_Color2; //警灯颜色2
static int g_SearchLight_Subscription_Flag = JZ_FLAGCODE_ON; //消息订阅状态
#define MAX(a,b) ( (a>b) ?a:b )
T_JZsdkReturnCode Lighting_Init()
... ... @@ -421,3 +423,26 @@ T_JZsdkReturnCode JZsdk_SearchLight_FlushLumen(int InputLumen)
{
JZsdk_SearchLightTemControl_FlushLumen(InputLumen);
}
/****************
*
* 获取消息订阅状态
*
* *************/
int JZsdk_SearchLight_GetMessageSubFlag(void)
{
return g_SearchLight_Subscription_Flag;
}
/***************************
*
* 设置消息订阅状态
*
*
************************/
T_JZsdkReturnCode JZsdk_SearchLight_SetMessageSubFlag(int InputFlag)
{
g_SearchLight_Subscription_Flag = InputFlag;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
... ... @@ -55,6 +55,11 @@ T_JZsdkReturnCode Lighting_CheckStatus_WarningLightColor(int *ValueColor1, int *
T_JZsdkReturnCode JZsdk_SearchLight_FlushLumen(int InputLumen);
int JZsdk_SearchLight_GetMessageSubFlag(void);
T_JZsdkReturnCode JZsdk_SearchLight_SetMessageSubFlag(int InputFlag);
#ifdef __cplusplus
}
#endif
... ...
... ... @@ -94,39 +94,11 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode)
/*******************************************************************************************************************************************/
//多线程抓取数据线程
static void *JZsdk_Catch_MultiThread2(void *args)
{
while (1)
{
unsigned int buf_size = 0;
unsigned char *buf = NULL;
//从相机中读取一张照片
V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size);
//printf("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]);
if (buf == NULL)
{
JZSDK_LOG_ERROR("相机数据读取失败");
continue;
}
//放入缓冲池 //将数据放入缓冲池,从而被其他线程使用
VideoMgmt_write_data(&args, buf, buf_size);
//归还图片
V4L2_CameraFrameRecord_OnlyReturnFrame();
}
}
//单线程抓取数据线程
static void *JZsdk_Catch_SingleThread2(void *args)
static void *JZsdk_Catch_SingleThread(void *args)
{
t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput *)args;
JZsdk_CameraInfo *CameraInfo = (JZsdk_CameraInfo *)args;
while (1)
{
... ... @@ -134,7 +106,7 @@ static void *JZsdk_Catch_SingleThread2(void *args)
unsigned char *buf = NULL;
//从相机中读取一张照片
V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size);
V4L2_CameraFrameRecord_OnlyGetFrame2(CameraInfo ,&buf, &buf_size);
//JZSDK_LOG_INFO("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]);
... ... @@ -145,10 +117,10 @@ static void *JZsdk_Catch_SingleThread2(void *args)
}
//进行数据处理
task->task_function(buf, buf_size);
CameraInfo->SingleDataOutput(buf, buf_size);
//归还图片
V4L2_CameraFrameRecord_OnlyReturnFrame();
V4L2_CameraFrameRecord_OnlyReturnFrame2(CameraInfo);
}
}
... ... @@ -161,43 +133,79 @@ static void *JZsdk_Catch_SingleThread2(void *args)
* 传入线程的处理函数 task_function
*
* *****************************************/
T_JZsdkReturnCode JZsdk_FrameCatch_Single(T_JZsdkReturnCode (*task_function)(unsigned char*, unsigned int))
T_JZsdkReturnCode JZsdk_FrameCatch_Single(JZsdk_CameraInfo *CameraInfo)
{
T_JZsdkReturnCode ret;
//初始化数据接收线程
pthread_t ReadDataTask;
pthread_attr_t task_attribute; //线程属性
pthread_attr_init(&task_attribute); //初始化线程属性
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
T_JZTaskHandle single_task = NULL;
T_JZsdkOsalHandler *osal_handler = JZsdk_Platform_GetOsalHandler();
osal_handler->TaskCreate("framecatch_single",JZsdk_Catch_SingleThread, 8192, (void *)CameraInfo, &single_task);
//单线程模式
if (task_function == NULL)
if (single_task == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput*)malloc(sizeof(t_FrameCatch_TaskFuntionInput));
if (task == NULL)
JZSDK_LOG_INFO("创建相机抓取并处理初始化线程成功!");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//多线程抓取数据线程
static void *JZsdk_Catch_MultiThread2(void *args)
{
while (1)
{
// 处理内存分配失败的情况
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
unsigned int buf_size = 0;
unsigned char *buf = NULL;
//task->task_function = task_function;
task->task_function = (void (*)(unsigned char *, unsigned int))task_function;
//从相机中读取一张照片
V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size);
int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread2,(void *)task); //线程
if(opus_Protection != 0)
//printf("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]);
if (buf == NULL)
{
JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
JZSDK_LOG_ERROR("相机数据读取失败");
continue;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
//放入缓冲池 //将数据放入缓冲池,从而被其他线程使用
VideoMgmt_write_data(&args, buf, buf_size);
//归还图片
V4L2_CameraFrameRecord_OnlyReturnFrame();
}
}
/*************************
*
*
... ...
... ... @@ -24,10 +24,10 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode);
T_JZsdkReturnCode JZsdk_FrameCatch_Single(T_JZsdkReturnCode (*task_function)(unsigned char*, unsigned int));
T_JZsdkReturnCode JZsdk_FrameCatch_Single(JZsdk_CameraInfo *CameraInfo);
T_JZsdkReturnCode JZsdk_FrameCatch_Multi(void *FrameIndex);
T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode);
#ifdef __cplusplus
}
... ...
... ... @@ -97,6 +97,7 @@ T_JZsdkReturnCode Cam_Zoom_Init()
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZSDK_LOG_INFO("变焦模块初始化成功!");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
... ... @@ -31,41 +31,41 @@ int g_CameraRegionBox_FirstPixel[2] = {0, 0}; // 初始化第一点坐标(x, y)
int g_CameraRegionBox_SecondPixel[2] = {0, 0}; // 初始化第二点坐标(x, y)为(0, 0)
int g_CameraRegionBox_ClickTime = 0;
/******************************
*
* 相机初始化
* ThreadMode: 0为单线程 1为多线程
* width: 宽
* height: 高
* frame_num: 帧数
*
* ******************************/
T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_num)
T_JZsdkReturnCode Camera_Init(JZsdk_CameraInfo *CameraInfo)
{
T_JZsdkReturnCode ret;
//初始化摄像头
ret = V4l2_Camarainit2(&g_CameraFd,width,height,frame_num);
ret = V4L2_CameraInit_2(CameraInfo);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
return ret;
}
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
//初始化摄像头参数
ret = V4L2_Parameter_Setting(g_CameraFd);
ret = V4L2_Parameter_Setting(CameraInfo);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("摄像头参数调整失败");
return ret;
}
#endif
//根据线程模式初始化抓取和初步处理的线程
JZsdk_FrameCatch_Init(ThreadMode);
if (CameraInfo->ThreadMode == JZSDK_SINGLE_THREAD && CameraInfo->SingleDataOutput != NULL)
{
JZsdk_FrameCatch_Single(CameraInfo);
}
else if(CameraInfo->ThreadMode == JZSDK_MULTI_THREAD)
{
//JZsdk_FrameCatch_Init(ThreadMode);
}
else
{
JZSDK_LOG_ERROR("线程模式错误");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ... @@ -136,6 +136,7 @@ T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch()
* **************************/
T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch()
{
JZSDK_LOG_INFO("气体增强打档");
IRC_SetDGCE_ResetFlag();
}
... ... @@ -206,17 +207,21 @@ static T_JZsdkReturnCode Camera_CorrectionMode(int mode)
{
case 0:
RealMode = JZ_FLAGCODE_OFF;
JZSDK_LOG_INFO("无校正");
break;
case 1:
RealMode = IRC_CORRCTION_SPC;
JZSDK_LOG_INFO("单点校正");
break;
case 2:
RealMode = IRC_CORRCTION_TPC;
JZSDK_LOG_INFO("两点校正");
break;
default:
JZSDK_LOG_INFO("模式错误:%d",mode);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
break;
}
... ... @@ -242,18 +247,22 @@ static T_JZsdkReturnCode Camera_GasEnhancementColor(int mode)
switch (mode)
{
case 0:
JZSDK_LOG_INFO("气体增强红色");
RealMode = IRC_GAS_ENHANCEMENT_RED;
break;
case 1:
JZSDK_LOG_INFO("气体增强绿色");
RealMode = IRC_GAS_ENHANCEMENT_GREEN;
break;
case 2:
JZSDK_LOG_INFO("气体增强蓝色");
RealMode = IRC_GAS_ENHANCEMENT_BLUE;
break;
default:
JZSDK_LOG_ERROR("气体增强错误:%d",mode);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
break;
}
... ...
... ... @@ -13,6 +13,7 @@
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "MediaProc/MediaProc_Param.h"
#include "MediaProc/Camera/CameraDef.h"
#include "MediaProc/Camera/Cam_FrameCatch/Cam_FrameCatch.h"
#include "MediaProc/Camera/V4L2_camera/V4L2_CameraParameterSetting.h"
... ... @@ -37,7 +38,7 @@ T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch();
T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch();
T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch();
T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_num);
T_JZsdkReturnCode Camera_Init(JZsdk_CameraInfo *CameraInfo);
#ifdef __cplusplus
... ...
/**
********************************************************************
* @file CameraDef.h
* Camera的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef CMAERA_DEF_H
#define CMAERA_DEF_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
typedef struct JZsdk_CameraParam
{
unsigned int Brightness; //亮度,该摄像头亮度范围为 1-255 默认128
unsigned int Contrast; //对比度,该摄像头对比度范围为 1-255 默认128
unsigned int Saturation; //饱和度,该摄像头饱和度范围为 1-255 默认128
unsigned int expsure; //曝光,该摄像头曝光范围为 1-255 默认128
}JZsdk_CameraParam;
typedef struct JZsdk_CameraInfo
{
/***************** 摄像头基础配置 ******************/
int CameraFd; //摄像头文件描述符
unsigned char CmeraDevPath[JZSDK_FILE_PATH_SIZE_MAX]; //摄像头设备路径
int width;
int height;
int FrameNum;
int CameraFormat;
/***************** 摄像头参数配置 ******************/
JZsdk_CameraParam CameraParam;
/***************** 设置画面数据的输出配置 ******************/
//相机拍摄的画面流的输出模式 分为单线程和多线程
int ThreadMode;
//单线程时,需要提供一个数据输出的函数
T_JZsdkReturnCode (*SingleDataOutput)(unsigned char *data, unsigned int len);
//多线程时,输出的缓冲区索引值
int VideoMgmt_index;
}JZsdk_CameraInfo;
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
... ... @@ -16,36 +16,48 @@
#include <linux/videodev2.h>
#include "./V4L2_CameraParameterSetting.h"
#include "JZsdkLib.h"
#include "../Camera.h"
#include "MediaProc/MediaParm.h"
T_JZsdkReturnCode V4L2_Parameter_Setting(int cam_fd)
T_JZsdkReturnCode V4L2_Parameter_Setting(JZsdk_CameraInfo *CameraInfo)
{
struct v4l2_control ctrl;
//设置亮度*
if (CameraInfo->CameraParam.Brightness != 0)
{
ctrl.id= V4L2_CID_BRIGHTNESS;
ctrl.value = BRIGHTNESS;
if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1)
ctrl.value = CameraInfo->CameraParam.Brightness;
if(ioctl(CameraInfo->CameraFd,VIDIOC_S_CTRL,&ctrl)==-1)
{
JZSDK_LOG_INFO("相机亮度设置失败");
}
}
//设置对比度
if (CameraInfo->CameraParam.Contrast != 0)
{
ctrl.id = V4L2_CID_CONTRAST;
ctrl.value= CONTRAST;
if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1)
ctrl.value= CameraInfo->CameraParam.Contrast;
if(ioctl(CameraInfo->CameraFd,VIDIOC_S_CTRL,&ctrl)==-1)
{
JZSDK_LOG_INFO("相机对比度设置失败");
}
}
//设置饱和度
if (CameraInfo->CameraParam.Saturation != 0)
{
ctrl.id = V4L2_CID_SATURATION;
ctrl.value= SATURATION;
if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1)
ctrl.value= CameraInfo->CameraParam.Saturation;
if(ioctl(CameraInfo->CameraFd,VIDIOC_S_CTRL,&ctrl)==-1)
{
perror("相机饱和度设置失败");
}
}
/*
//设置色度
ctrl.id = V4L2_CID_HUE;
... ... @@ -104,6 +116,7 @@ T_JZsdkReturnCode V4L2_Parameter_Setting(int cam_fd)
exit(EXIT_FAILURE);
}
*/
JZSDK_LOG_INFO("V4L2_Parameter_Setting success");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
... ... @@ -12,7 +12,7 @@
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "../CameraDef.h"
#ifdef __cplusplus
extern "C" {
... ... @@ -26,7 +26,7 @@ extern "C" {
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode V4L2_Parameter_Setting(int cam_fd);
T_JZsdkReturnCode V4L2_Parameter_Setting(JZsdk_CameraInfo *CameraInfo);
#ifdef __cplusplus
... ...
... ... @@ -275,7 +275,7 @@ static int open_device()
return 0;
}
T_JZsdkReturnCode V4l2_Camarainit2(int *dev_fd, int width, int height, int frame_num)
T_JZsdkReturnCode V4l2_Camarainit(int *dev_fd, int width, int height, int frame_num)
{
int ret;
... ... @@ -314,7 +314,8 @@ T_JZsdkReturnCode V4l2_Camarainit2(int *dev_fd, int width, int height, int frame
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
int V4L2_CamaraUninit2()
int V4L2_CamaraUninit()
{
//停止采集
... ...