作者 ookk303

0.0.2.6 更新云台内容,并且更新了滤波

正在显示 48 个修改的文件 包含 1539 行增加2023 行删除
{
"files.associations": {
"typeinfo": "c",
"streamproc.h": "c",
"jzsdk_code.h": "c",
"camera.h": "c",
"ui_control.h": "c",
"baseconfig.h": "c",
"jzsdklib.h": "c",
"uartconnection.h": "c",
"taskmanagement.h": "c",
"gimbal_param.h": "c",
"serialproc.h": "c",
"version_choose.h": "c",
"megaphone.h": "c",
"uart_config.h": "c",
"jzsdk_uart_input.h": "c",
"jzsdk_inscode.h": "c",
"psdk_ui_io.h": "c",
"lighting_inandout.h": "c"
},
"Codegeex.GenerationPreference": "automatic"
}
\ No newline at end of file
... ...
... ... @@ -22,6 +22,7 @@ extern "C" {
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "JZsdk_CommonFuntion/JZsdkCommonFuntion.h"
#include "JZsdk_TaskManagement/TaskManagement.h"
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
... ...
... ... @@ -8,7 +8,7 @@
#include "version_choose.h"
#include "ircut.h"
#include "Megaphone/Megaphone.h"
#include "Gimbal_InAndOut.h"
#include "Gimbal/Gimbal.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"
#include "BaseConfig.h"
... ... @@ -76,7 +76,6 @@ T_JZsdkReturnCode Main_M30_all_filter_mode(int *mode)
//先关闭播放
Megaphone_StopPlay(JZ_FLAGCODE_OFF);
//修改滤波
AudioDeal_FilterReset(0x01);
}
... ... @@ -85,7 +84,6 @@ T_JZsdkReturnCode Main_M30_all_filter_mode(int *mode)
//先关闭播放
Megaphone_StopPlay(JZ_FLAGCODE_OFF);
//修改滤波
AudioDeal_FilterReset(0x00);
}
... ... @@ -292,10 +290,10 @@ T_JZsdkReturnCode Main_APP_Psdk()
//灯类初始化
Lighting_Init();
#if SIDE_LASER_STATUS_ON
//侧边激光初始化
SideLaser_Init();
#endif
delayMs(1000);
//消息订阅初始化
... ...
... ... @@ -19,7 +19,7 @@
#define MAJOR_VERSION 0x00
#define MINOR_VERSION 0x00
#define MODIFY_VERSION 0x02
#define DEBUG_VERSION 0x04
#define DEBUG_VERSION 0x06
//禁止修改行 滤波方式
#define FILTERING_TYPE HIGH_PASS_FILTERING
... ... @@ -55,6 +55,7 @@
//是否开启红外相机功能
#ifdef MACRO_IRC_MODULE
#define IRC_CONFIG_STATUS VERSION_SWITCH_ON
#define IRC_CONFIG_STATUS_ON
#else
#define IRC_CONFIG_STATUS VERSION_SWITCH_OFF
#endif
... ...
... ... @@ -11,7 +11,7 @@
#include "JZsdk_uart/JZsdk_Uart_UartDeal.h"
#include "JZsdk_uart/Uart_Config.h"
#include "JZsdk_uart/JZsdk_Uart_Send/JZsdk_Uart_Send.h"
#include "Gimbal_InAndOut.h"
#include "Gimbal/Gimbal.h"
// 记录串口是否有被使用,方便ui_contrl进行信息反馈
struct UartDev_UseFlag
... ...
... ... @@ -25,6 +25,7 @@
//音频库索引值,用于管理所有的音频库信息
struct AudioDealInfo *AudioDeakInfo_index = NULL;
T_JZsdkReturnCode g_AudioDealPauseFlag = JZ_FLAGCODE_OFF;
static int Audiodeal_status = JZ_FLAGCODE_OFF;
T_JZsdkReturnCode AudioDeal_Init()
{
... ... @@ -68,6 +69,8 @@ T_JZsdkReturnCode AudioDeal_Init()
AudioDeakInfo_index->FilterInfo = NULL;
FF_Filter_Init(AudioDeakInfo_index, 0x00);
Audiodeal_status = JZ_FLAGCODE_ON;
JZSDK_LOG_INFO("MODULE_AUDIODEL_INIT_COMPLETE");
}
... ... @@ -85,7 +88,11 @@ T_JZsdkReturnCode AudioDeal_FilterReset(int mode)
* *********************************************/
T_JZsdkReturnCode AudioDeal_ResampleRest(unsigned int in_sampleRate, AVChannelLayout in_ch_layout, enum AVSampleFormat in_format)
{
Audiodeal_status = JZ_FLAGCODE_OFF;
FF_Resample_Reset(AudioDeakInfo_index ,in_sampleRate, in_ch_layout, in_format);
Audiodeal_status = JZ_FLAGCODE_ON;
}
/***************************************************************************************************************************************************
... ... @@ -108,6 +115,12 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput(int In_Bitrate, unsigned char *buffer,
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
while (Audiodeal_status != JZ_FLAGCODE_ON)
{
delayMs(1);
}
//1、打开音频库的处理标志位,该标志可以重复打开,只有强制关闭音频时,需要关闭该标志
AudioDeakInfo_index->AudioDeal_ResampleAndFilter_Execute_Flag = JZ_FLAGCODE_ON;
... ... @@ -136,6 +149,11 @@ T_JZsdkReturnCode AudioDeal_PcmDataInput_WithoutReply(int In_Bitrate, unsigned c
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
while (Audiodeal_status != JZ_FLAGCODE_ON)
{
delayMs(1);
}
//1、打开音频库的处理标志位,该标志可以重复打开,只有强制关闭音频时,需要关闭该标志
AudioDeakInfo_index->AudioDeal_ResampleAndFilter_Execute_Flag = JZ_FLAGCODE_ON;
... ... @@ -159,6 +177,11 @@ T_JZsdkReturnCode AudioDeal_Mp3DataInput(int In_Bitrate, unsigned char *buffer,
JZSDK_LOG_ERROR("音频处理器未注册");
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
while (Audiodeal_status != JZ_FLAGCODE_ON)
{
delayMs(1);
}
//1、打开音频库的处理标志位,该标志可以重复打开,只有强制关闭音频时,需要关闭该标志
AudioDeakInfo_index->AudioDeal_ResampleAndFilter_Execute_Flag = JZ_FLAGCODE_ON;
... ... @@ -193,6 +216,11 @@ T_JZsdkReturnCode AudioFile_Stream_DataInput(AVFrame *frame)
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
while (Audiodeal_status != JZ_FLAGCODE_ON)
{
delayMs(1);
}
//1、打开音频库的处理标志位,该标志可以重复打开,只有强制关闭音频时,需要关闭该标志
AudioDeakInfo_index->AudioDeal_ResampleAndFilter_Execute_Flag = JZ_FLAGCODE_ON;
... ...
... ... @@ -311,7 +311,7 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int mode)
}
else if (mode == 0x01)
{
ret =FF_Filter_ParamInit(AD_Info, Filter_M30);
ret =FF_Filter_ParamInit(AD_Info, Filter_M30_1);
}
else
{
... ...
... ... @@ -219,7 +219,42 @@ t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。
equalizer=f=4000:t=q:w=2.0:g=0, \
equalizer=f=8000:t=q:w=2.0:g=0, \
equalizer=f=16000:t=q:w=2.0:g=0"
/******
*
*
* loudnorm 标准化音量滤波器
* I= 最大响度
* LRA 响度范围 值越小 范围越小
* TP 音量的最大值
*
* 用于将音频都调节到一个音量大小
*
*
* 降低音量的动态范围,用于减少发热
*
* *********/
//旧式机115
/*
2 37
4 39
6 41
8 43
11 45
14 47
17 49
21 50
22 52
25 55
27 54
31 55
40 57
*/
#define Filter_No10 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
... ... @@ -231,20 +266,224 @@ t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。
equalizer=f=8000:t=q:w=2.0:g=0, \
equalizer=f=16000:t=q:w=2.0:g=0"
#define Filter_M30 "equalizer=f=31:t=q:w=2.0:g=-48, \
//半小时49度 但是音量掉到107了
/*
00 35
4 37
8 39
13 41
18 43
27 45
36 47
52 49
60 49
*/
#define Filter_No11 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
equalizer=f=250:t=q:w=2.0:g=-32, \
equalizer=f=500:t=q:w=2.0:g=-24, \
equalizer=f=1000:t=q:w=2.0:g=-12, \
equalizer=f=2000:t=q:w=2.0:g=0, \
equalizer=f=4000:t=q:w=2.0:g=0, \
equalizer=f=8000:t=q:w=2.0:g=0, \
equalizer=f=16000:t=q:w=2.0:g=0, \
anequalizer=c0 f=3250 w=750 g=-48 t=2|c1 f=3250 w=750 g=-48 t=2"
equalizer=f=4000:t=q:w=2.0:g=-16, \
equalizer=f=8000:t=q:w=2.0:g=-24, \
equalizer=f=16000:t=q:w=2.0:g=-32"
//113.3
#define Filter_No12 "equalizer=f=31:t=q:w=2.0:g=-42, \
equalizer=f=62:t=q:w=2.0:g=-42, \
equalizer=f=125:t=q:w=2.0:g=-42, \
equalizer=f=250:t=q:w=2.0:g=-28, \
equalizer=f=500:t=q:w=2.0:g=-16, \
equalizer=f=1000:t=q:w=2.0:g=0, \
equalizer=f=2000:t=q:w=2.0:g=0, \
equalizer=f=4000:t=q:w=2.0:g=-2, \
equalizer=f=8000:t=q:w=2.0:g=-4, \
equalizer=f=16000:t=q:w=2.0:g=-8"
//115.6 降低两端 提高中段音量
/*
00 35
01 37
03 39
04 41
05 43
06 45
07 47
09 49 发热过于严重
*/
#define Filter_No13 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
equalizer=f=250:t=q:w=2.0:g=-32, \
equalizer=f=500:t=q:w=2.0:g=-24, \
equalizer=f=1000:t=q:w=2.0:g=+8, \
equalizer=f=2000:t=q:w=2.0:g=+8, \
equalizer=f=4000:t=q:w=2.0:g=-4, \
equalizer=f=8000:t=q:w=2.0:g=-8, \
equalizer=f=16000:t=q:w=2.0:g=-12"
//111 降低中频 提高低频
#define Filter_No14 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
equalizer=f=250:t=q:w=2.0:g=-18, \
equalizer=f=500:t=q:w=2.0:g=-12, \
equalizer=f=1000:t=q:w=2.0:g=-12, \
equalizer=f=2000:t=q:w=2.0:g=-10, \
equalizer=f=4000:t=q:w=2.0:g=-2, \
equalizer=f=8000:t=q:w=2.0:g=-4, \
equalizer=f=16000:t=q:w=2.0:g=-8"
#define FILTER_PARAM Filter_No10
//112.1 14基础上补偿一点中频
#define Filter_No15 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
equalizer=f=250:t=q:w=2.0:g=-18, \
equalizer=f=500:t=q:w=2.0:g=-12, \
equalizer=f=1000:t=q:w=2.0:g=-8, \
equalizer=f=2000:t=q:w=2.0:g=-6, \
equalizer=f=4000:t=q:w=2.0:g=-2, \
equalizer=f=8000:t=q:w=2.0:g=-4, \
equalizer=f=16000:t=q:w=2.0:g=-8"
//112.5 15基础上补偿一点低频
#define Filter_No16 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-32, \
equalizer=f=250:t=q:w=2.0:g=-12, \
equalizer=f=500:t=q:w=2.0:g=-6, \
equalizer=f=1000:t=q:w=2.0:g=-8, \
equalizer=f=2000:t=q:w=2.0:g=-6, \
equalizer=f=4000:t=q:w=2.0:g=-2, \
equalizer=f=8000:t=q:w=2.0:g=-4, \
equalizer=f=16000:t=q:w=2.0:g=-8"
//117 10的基础上,降低中频,补偿高频
#define Filter_No17 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
equalizer=f=250:t=q:w=2.0:g=-32, \
equalizer=f=500:t=q:w=2.0:g=-24, \
equalizer=f=1000:t=q:w=2.0:g=-12, \
equalizer=f=2000:t=q:w=2.0:g=-8, \
equalizer=f=4000:t=q:w=2.0:g=+8, \
equalizer=f=8000:t=q:w=2.0:g=+4, \
equalizer=f=16000:t=q:w=2.0:g=+2"
//115 17的基础上,减少中高频补偿
#define Filter_No18 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
equalizer=f=250:t=q:w=2.0:g=-32, \
equalizer=f=500:t=q:w=2.0:g=-24, \
equalizer=f=1000:t=q:w=2.0:g=-12, \
equalizer=f=2000:t=q:w=2.0:g=-8, \
equalizer=f=4000:t=q:w=2.0:g=+2, \
equalizer=f=8000:t=q:w=2.0:g=+4, \
equalizer=f=16000:t=q:w=2.0:g=+2"
//114.6 18的基础上,减少中高频补偿
/*
00 35
2 37
6 39
8 41
11 43
14 45
20 47
24 49
30 50
31 49
33 50
39 52
51 54
56 55
57 54
63 54
*/
#define Filter_No19 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-48, \
equalizer=f=125:t=q:w=2.0:g=-48, \
equalizer=f=250:t=q:w=2.0:g=-32, \
equalizer=f=500:t=q:w=2.0:g=-24, \
equalizer=f=1000:t=q:w=2.0:g=-12, \
equalizer=f=2000:t=q:w=2.0:g=-8, \
equalizer=f=4000:t=q:w=2.0:g=+1, \
equalizer=f=8000:t=q:w=2.0:g=+2, \
equalizer=f=16000:t=q:w=2.0:g=+2"
// 19的基础上,补偿低频 比10号方案尖一点
/*
0 35
3 37
5 39
7 41
10 43
14 45
18 47
23 49
27 50
34 52
35 50
36 52
42 54
55 55
63 55
*/
#define Filter_No20 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-36, \
equalizer=f=125:t=q:w=2.0:g=-30, \
equalizer=f=250:t=q:w=2.0:g=-26, \
equalizer=f=500:t=q:w=2.0:g=-20, \
equalizer=f=1000:t=q:w=2.0:g=-12, \
equalizer=f=2000:t=q:w=2.0:g=-8, \
equalizer=f=4000:t=q:w=2.0:g=+1, \
equalizer=f=8000:t=q:w=2.0:g=+2, \
equalizer=f=16000:t=q:w=2.0:g=+2"
// 20的基础上,补偿中低频
/*
0 35
3 37
5 39
7 41
11 43
13 45
14 47
17 49
19 50
20 52
22 50
23 52
26 54
27 55
*/
#define Filter_No21 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-36, \
equalizer=f=125:t=q:w=2.0:g=-30, \
equalizer=f=250:t=q:w=2.0:g=-24, \
equalizer=f=500:t=q:w=2.0:g=-16, \
equalizer=f=1000:t=q:w=2.0:g=-12, \
equalizer=f=2000:t=q:w=2.0:g=-8, \
equalizer=f=4000:t=q:w=2.0:g=+1, \
equalizer=f=8000:t=q:w=2.0:g=+2, \
equalizer=f=16000:t=q:w=2.0:g=+2"
#define Filter_M30_1 "equalizer=f=31:t=q:w=2.0:g=-48, \
equalizer=f=62:t=q:w=2.0:g=-36, \
equalizer=f=125:t=q:w=2.0:g=-30, \
equalizer=f=250:t=q:w=2.0:g=-24, \
equalizer=f=500:t=q:w=2.0:g=-16, \
equalizer=f=1000:t=q:w=2.0:g=-12, \
equalizer=f=2000:t=q:w=2.0:g=-8, \
equalizer=f=4000:t=q:w=2.0:g=+1, \
equalizer=f=8000:t=q:w=2.0:g=+4, \
equalizer=f=16000:t=q:w=2.0:g=+3, \
anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
anequalizer=c0 f=3700 w=1400 g=-22 t=0|c1 f=3700 w=1400 g=-22 t=0"
#define FILTER_PARAM Filter_No20
/* Exported types ------------------------------------------------------------*/
... ...
... ... @@ -7,7 +7,7 @@
#include "version_choose.h"
#include "BaseConfig.h"
#include "../SerialNumberProc/SerialProc.h"
#include "Gimbal/Gimbal_InAndOut.h"
#include "Gimbal/Gimbal.h"
#include "UI_control/Psdk_UI_io.h"
#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
... ...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "JZsdkLib.h"
#define HARDWARE_DIR "/root/HardwareIdeNum"
... ...
/*
* @Author: ookk303
* @Date: 2024-08-23 17:46:53
* @LastEditors: Do not edit
* @LastEditTime: 2024-08-28 15:26:17
* @Description:
* @FilePath: \JZSDK_Linux\Module\Gimbal\Gimbal.c
*/
#include <stdio.h>
#include <pthread.h>
#include <math.h>
#include "JZsdkLib.h"
#include "Gimbal/Gimbal_Param.h"
#include "Gimbal/Gimbal.h"
#include "Gimbal/Gimbal_DataDeal/Gimbal_DataDeal.h"
#include "Gimbal/Gimbal_MotorFineTuning/MotorFineTuning.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"
#include "BaseConfig.h"
//数值角度记录
static int Gimbal_PitchAngle = 0; //俯仰角度 //控制云台上相机相对于水平面的上下移动。
static int Gimbal_YawAngle = 0; //偏航角度 //个角度控制云台上相机相对于水平面的上下移动。
static int Gimbal_RollAngle = 0; //滚转角度 //控制云台上相机围绕其前后轴(即与相机镜头方向平行的轴)的旋转。
//微调角度
static int g_MotorFineTuningPitch = 0; //pitch微调值
static int g_MotorFineTuningYaw = 0; //yaw微调值
static int g_MotorFineTuningRoll = 0; //roll微调值
//飞机自身角度
static int Gimbal_UavSelfPitch = 0;
//实际角度 (数值角度+飞机自身角度+微调角度)
static int Gimbal_RealPitchAngle = 0;
static int g_Gimbal_Linkage; //云台联动标志位
static int g_JZsdk_GimbalStatusFlag = JZ_FLAGCODE_OFF; //云台状态,用于判断云台是否已经初始化完毕
static T_JZsdkReturnCode Gimbal_Set_RealPitchAngle(int pitch, int FineTuningP, int UAV_pitch);
/**************************
*
*
* 云台角度发送线程
*
*
* ***************************/
static void *Gimbal_SendAngleTask(void *arg)
{
int Old_angle = 0; //上一次变化的角度
int Old_UAV_self_angle; //上一次飞机的角度
int Old_PitchFineTuning; //上一次微调的角度
JZSDK_LOG_INFO("云台角度发送初始化完成");
int test_value =0;
while (1)
{
if (Gimbal_PitchAngle != Old_angle //云台角度发生了变化
|| Gimbal_UavSelfPitch != Old_UAV_self_angle //飞机自身角度发生了变化
|| g_MotorFineTuningPitch != Old_PitchFineTuning //微调角度发生了变化
)
{
Old_angle = Gimbal_PitchAngle;
Old_UAV_self_angle = Gimbal_UavSelfPitch;
Old_PitchFineTuning = g_MotorFineTuningPitch;
Gimbal_Set_RealPitchAngle(Old_angle, Old_PitchFineTuning, Old_UAV_self_angle);
}
//1s检测200次舵机角度
delayMs(1000/200);
}
}
//发送线程初始化
static T_JZsdkReturnCode Gimbal_SendAngleTask_Init()
{
pthread_t WriteDataTask;
pthread_attr_t task_attribute; //线程属性
pthread_attr_init(&task_attribute); //初始化线程属性
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
int opus_Protection = pthread_create(&WriteDataTask,&task_attribute,Gimbal_SendAngleTask,NULL); //线程
if(opus_Protection != 0)
{
JZSDK_LOG_ERROR("角度发送线程初始化失败!");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
JZSDK_LOG_INFO("MODULE_GIMBAL_INIT_COMPLETE");
}
//初始化舵机部分
static T_JZsdkReturnCode Gimal_MotorInit()
{
//角度发送线程初始化
Gimbal_SendAngleTask_Init();
//数据处理初始化
Gimbal_DataDeal_init();
}
//初始化云台模块
T_JZsdkReturnCode Gimbal_Init()
{
//舵机初始化
Gimal_MotorInit();
//云台微调初始化
MotorFineTuning_Init(&g_MotorFineTuningPitch, &g_MotorFineTuningYaw, &g_MotorFineTuningRoll);
//云台flag打开
g_JZsdk_GimbalStatusFlag = JZ_FLAGCODE_ON;
JZSDK_LOG_INFO("JZsdk_Gimbal_Module_init");
}
//设置云台俯仰角度
T_JZsdkReturnCode Gimbal_Set_PitchAngle(int angle)
{
//禁止打印
//printf("设置云台俯仰角度\n");
//云台未初始化
if (g_JZsdk_GimbalStatusFlag != JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (angle < MIN_PITCH || angle > MAX_PITCH || (MIN_PITCH == MAX_PITCH))
{
printf("云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
}
Gimbal_PitchAngle = angle;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置云台航向角度
T_JZsdkReturnCode Gimbal_Set_YawAngle(int angle)
{
printf("没有航向角度\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//设置云台转向角度
T_JZsdkReturnCode Gimbal_Set_RollAngle(int angle)
{
printf("没有转向角度\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
/*******************
*
* 设置Pitch_云台范围的最大最小值
* flag 0 pitch 1 yaw 2 roll
*
* *************************/
T_JZsdkReturnCode Gimbal_SetGimbalRange(int flag, int value)
{
JZSDK_LOG_INFO("设置云台范围最大最小值 flag:%d 0x%x", flag, value);
switch (flag)
{
case 0:
return Gimbal_DataDeal_SetPitchRange(value);
break;
default:
break;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//查询云台微调值
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalFineTuning(int *FineTuningPitch, int *FineTuningYaw, int *FineTuningRoll)
{
JZSDK_LOG_DEBUG("查询云台微调值");
//组合机需要去获取另外一个设备的值
#if DEVICE_VERSION == JZ_H1T
//1、刷新微调值
JZsdk_Uart_Send_CheckStatus_GimbalFineTuningPitch(UART_DEV_1, 0);
delayMs(10);
#endif
if (FineTuningPitch != NULL)
{
*FineTuningPitch = g_MotorFineTuningPitch;
}
if (FineTuningYaw != NULL)
{
*FineTuningYaw = g_MotorFineTuningYaw;
}
if (FineTuningRoll != NULL)
{
*FineTuningRoll = g_MotorFineTuningRoll;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//收到云台微调值
T_JZsdkReturnCode Gimbal_Obtain_GimbalFineTuning(int pitch, int yaw, int roll)
{
printf("收到云台pitch云台微调值\n");
//组合机需要记录另外一个设备的值
#if DEVICE_VERSION == JZ_H1T
g_MotorFineTuningPitch = pitch;
#else
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//设置pitch云台微调值
T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int pitch)
{
JZSDK_LOG_INFO("设置云台pitch云台微调值\n");
T_JZsdkReturnCode ret;
if (pitch == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置本地微调值
g_MotorFineTuningPitch = g_MotorFineTuningPitch + pitch;
//组合机是发到另外一个设备
#if DEVICE_VERSION == JZ_H1T
JZsdk_Uart_Send_SetGimbalFineTuningPitch(UART_DEV_1, g_MotorFineTuningPitch);
#else
//存储到文件
MotorFineTuning_WritePitch(g_MotorFineTuningPitch);
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置yaw云台微调值
T_JZsdkReturnCode Gimbal_Set_YawFineTuning(int yaw)
{
JZSDK_LOG_INFO("设置云台yaw云台微调值\n");
T_JZsdkReturnCode ret;
if (yaw == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
g_MotorFineTuningYaw = g_MotorFineTuningYaw + yaw;
//微调后重设角度
}
//设置roll云台微调值
T_JZsdkReturnCode Gimbal_Set_RollFineTuning(int pitch, int yaw, int roll)
{
JZSDK_LOG_INFO("设置云台pitch云台微调值\n");
T_JZsdkReturnCode ret;
if (roll == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
g_MotorFineTuningRoll = g_MotorFineTuningRoll + roll;
//微调后重设角度
}
//设置云台联动
T_JZsdkReturnCode Gimbal_Set_GimbalLinkageControl(int value)
{
JZSDK_LOG_INFO("设置云台联动\n");
g_Gimbal_Linkage = value;
#if DEVICE_VERSION == JZ_H1T
JZsdk_Uart_Send_Set_GimbalLinkageControl(UART_DEV_1, 0, value);
#else
//暂时没做接口
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//查询云台联动
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalLinkage(int *value)
{
JZSDK_LOG_INFO("查询云台联动值\n");
#if DEVICE_VERSION == JZ_H1T
//1、刷新云台联动值
JZsdk_Uart_Send_CheckStatus_GimbalLinkage(UART_DEV_1, 0);
delayMs(10);
//2、回复云台联动值
*value = g_Gimbal_Linkage;
#else
//暂时没做接口
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//收到云台联动值
T_JZsdkReturnCode Gimbal_Obtain_GimbalLinkage(int GimbalLinkage)
{
JZSDK_LOG_INFO("收到云台联动值\n");
g_Gimbal_Linkage = GimbalLinkage;
#if DEVICE_VERSION == JZ_H1T
//无操作
//毕竟是t60s返回来的值
#else
//暂时没做接口
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 查询云台角度
*
**********/
T_JZsdkReturnCode Gimbal_CheckStatus_Angle(int *PitchAngle, int *YawAngle, int *RollAngle)
{
//组合机刷新查询角度
#if DEVICE_VERSION == JZ_H1T
JZsdk_Uart_Send_CheckStatus_GimbalAngle(UART_DEV_1, 0);
//给点延时问题不大
delayMs(5);
#else
//直接获取即可
#endif
//2、获取一次本地云台角度
if (PitchAngle != NULL)
{
*PitchAngle = Gimbal_PitchAngle;
}
if (YawAngle != NULL)
{
*YawAngle = Gimbal_YawAngle;
}
if (RollAngle != NULL)
{
*RollAngle = Gimbal_RollAngle;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//获得云台值
T_JZsdkReturnCode Gimbal_Obtain_Gimbal_Pitch(int Pitch)
{
//目前 U3和 H1T会接受到云台返回值
if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
//不做处理,避免出现什么问题
}
else if (DEVICE_VERSION == JZ_H1T)
{
//Gimbal_PitchAngle = Pitch;
//这里暂时不处理,避免多次把5a帧返还给串口1设备
//但是会导致4g接收不到最新的角度
}
else
{
//不处理,避免出现什么问题
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/**************************************************************
*
*
* 飞机特殊控制云台方法
*
*
***************************************************************/
//1、飞机自身角度控制云台
T_JZsdkReturnCode Gimbal_PitchSelfangleMode(int Pitch)
{
if (Gimbal_UavSelfPitch == Pitch)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
Gimbal_UavSelfPitch = Pitch;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//2、滑动条 换算 云台角度
int Gimbal_PitchScaleMode(int value)
{
int step = (abs(MAX_PITCH) + abs(MIN_PITCH)) / 100;
int angle = 0;
angle = value * step + MIN_PITCH;
return angle;
}
//3、拨轮控制云台
T_JZsdkReturnCode Gimbal_PitchRotationMode(int value)
{
int angle;
//JZSDK_LOG_DEBUG("拨轮控制");
if (MAX_PITCH == MIN_PITCH)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
angle = Gimbal_PitchAngle + value;
if (angle > MAX_PITCH)
{
angle = MAX_PITCH;
}
else if (angle < MIN_PITCH)
{
angle = MIN_PITCH;
}
if (angle == Gimbal_PitchAngle)
{
//printf("拨轮控制无效\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
Gimbal_Set_PitchAngle(angle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//输入角度,回复滑动条值
int Gimbal_ReplyPitchToUAVScale(int angle)
{
int value;
int step = (abs(MAX_PITCH) + abs(MIN_PITCH)) / 100;
value = (angle - MIN_PITCH)/step;
return value;
}
//设置云台俯仰角度
static T_JZsdkReturnCode Gimbal_Set_RealPitchAngle(int pitch, int FineTuningP, int UAV_pitch)
{
int temp_angle = 0;
//组合机不用堆叠角度
#if DEVICE_VERSION == JZ_H1T
temp_angle = pitch;
Gimbal_RealPitchAngle = temp_angle;
#else
//叠加飞机角度和微调角度
temp_angle = pitch - UAV_pitch + FineTuningP;
if (temp_angle < MIN_PITCH)
{
temp_angle = MIN_PITCH;
}
if (temp_angle > MAX_PITCH)
{
temp_angle = MAX_PITCH;
}
Gimbal_RealPitchAngle = temp_angle;
#endif
//printf("设置真实俯仰角度\n"); //禁止打印
Gimbal_DataDeal_SetRealAngle(temp_angle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode Get_JZsdk_GimbalStatusFlag()
{
return g_JZsdk_GimbalStatusFlag;
}
int Gimbal_Get_PitchAngle()
{
return Gimbal_PitchAngle;
}
int Gimbal_Get_PitchFineTuning()
{
return g_MotorFineTuningPitch;
}
int Gimbal_Get_PitchRealPitchAngle()
{
return Gimbal_RealPitchAngle;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file GIMBAL_INPUTANDOUTPUT.h
* GIMBAL_INPUTANDOUTPUT的头文件
* @file GIMBAL.h
* GIMBAL.h 的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_INPUTANDOUTPUT_H
#define GIMBAL_INPUTANDOUTPUT_H
#ifndef GIMBAL_H
#define GIMBAL_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
... ... @@ -23,26 +23,35 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int Gimbal_Init();
T_JZsdkReturnCode Gimbal_Init();
T_JZsdkReturnCode Get_JZsdk_GimbalStatusFlag();
T_JZsdkReturnCode Gimbal_Set_PitchAngle(int angle);
int Gimbal_Get_PitchAngle();
T_JZsdkReturnCode Gimbal_SetGimbalRange(int value);
T_JZsdkReturnCode Gimbal_Obtain_Gimbal_Pitch(int Pitch);
T_JZsdkReturnCode Gimbal_Get_GimbalFineTuning(int *Pitch);
T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int DeviceName ,int pitch);
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalFineTuning(int *FineTunigPitch, int *FineTunigYaw);
T_JZsdkReturnCode Gimbal_Obtain_GimbalFineTuning(int pitch);
int Gimbal_Get_PitchFineTuning();
T_JZsdkReturnCode Gimbal_Set_YawAngle(int angle);
T_JZsdkReturnCode Gimbal_Set_RollAngle(int angle);
T_JZsdkReturnCode Gimbal_SetGimbalRange(int flag, int value);
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalFineTuning(int *FineTuningPitch, int *FineTuningYaw, int *FineTuningRoll);
T_JZsdkReturnCode Gimbal_Obtain_GimbalFineTuning(int pitch, int yaw, int roll);
T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int pitch);
T_JZsdkReturnCode Gimbal_Set_YawFineTuning(int yaw);
T_JZsdkReturnCode Gimbal_Set_RollFineTuning(int pitch, int yaw, int roll);
T_JZsdkReturnCode Gimbal_Set_GimbalLinkageControl(int value);
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalLinkage(int *value);
T_JZsdkReturnCode Gimbal_Obtain_GimbalLinkage(int GimbalLinkage);
T_JZsdkReturnCode Gimbal_CheckStatus_Angle(int *PitchAngle, int *YawAngle);
T_JZsdkReturnCode Gimbal_CheckStatus_Angle(int *PitchAngle, int *YawAngle, int *RollAngle);
T_JZsdkReturnCode Gimbal_Obtain_Gimbal_Pitch(int Pitch);
T_JZsdkReturnCode Gimbal_PitchSelfangleMode(int Pitch);
int Gimbal_PitchScaleMode(int value);
T_JZsdkReturnCode Gimbal_PitchRotationMode(int value);
int Gimbal_ReplyPitchToUAVScale(int angle);
int Get_JZsdk_GimbalStatusFlag();
int Gimbal_Get_PitchAngle();
int Gimbal_Get_PitchFineTuning();
int Gimbal_Get_PitchRealPitchAngle();
#ifdef __cplusplus
... ...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "JZsdkLib.h"
#include "BaseConfig.h"
#include "JZsdk_uart/UartConnection/UartConnection.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"
#include "JZsdk_TaskManagement/TaskManagement.h"
#include "Gimbal_SpecialUart/Gimbal_SpecialUart.h"
#if WIRINGPI_STATUS == VERSION_SWITCH_ON
#include <wiringPi.h>
#endif
/******************
*
*
* **************/
T_JZsdkReturnCode Gimbal_DataDeal_init()
{
//由于150s 150t 开发时还没有帧协议,所以是一个独特的控制类型
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
int Uart_fd = 0;
//1、串口初始化
Uart_fd = UartConnection_UartEnabled(GIMBAL_UART_NUM, GIMBAL_UART_BITRATE);
//2、串口接收初始化
Gimbal_SpecialUart_UartReceive_Init(Uart_fd);
//不需特地初始化
#elif DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_C1
// 不用去特地初始化t60的云台
#elif DEVICE_VERSION == JZ_H10 || DEVICE_VERSION == JZ_H10T || DEVICE_VERSION == JZ_U3 \
|| DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == TF_A1
//设置0度
#else
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle)
{
int angle_PWM = 0;
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
//调整为PWM值 1000~2000
//完整计算公式
//angle_PWM= PITCH_PWM_MIN +(-angle)*(PITCH_PWM_MAX-PITCH_PWM_MIN)/(abs(MAX_PITCH)+abs(MIN_PITCH));
//简化为
angle_PWM= PITCH_PWM_MIN +(angle)*(PITCH_PWM_MAX-PITCH_PWM_MIN)/MIN_PITCH;
unsigned char send_angle[]={0x5a,0x00,0x00,0xa5};
send_angle[1]=(unsigned char )(angle_PWM);
send_angle[2]=(unsigned char )(angle_PWM>>8);
Gimbal_SpecialUart_UartSend(send_angle, 4);
#elif DEVICE_VERSION == JZ_H10
int base = 200;
//完整计算公式
//angle_PWM = base + angle*195/((abs(MAX_PITCH)+abs(MIN_PITCH)))
//简化为
angle_PWM = base + angle*195/MIN_PITCH;
//上调15度
//angle_PWM = 200 -angle*195/900 -150*195/900; //上调15度
#if WIRINGPI_STATUS == VERSION_SWITCH_ON
pwmWrite(18,angle_PWM);
#endif
#elif DEVICE_VERSION == JZ_H10T
//因为PWM写的时候是按90度写的,所以分母是900,不是设定的600
PWM_num = ( angle * (V3S_H10T_angle_PWM_MAX-V3S_H10T_angle_PWM_MIN) /900 ) + V3S_H10T_angle_PWM_MAX;
if (PWM_num > PITCH_PWM_MAX)
{
PWM_num = PITCH_PWM_MAX;
}
if (PWM_num < PITCH_PWM_MIN)
{
PWM_num = PITCH_PWM_MIN;
}
Ircut_PWM_control(PWM_num);
#elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D \
|| DEVICE_VERSION == TF_A1
//发送角度给串口2
JZsdk_Uart_Send_SetGimbalPitch(UART_DEV_2, angle);
#elif DEVICE_VERSION == JZ_H1T
//发送角度给串口1
JZsdk_Uart_Send_SetGimbalPitch(UART_DEV_1, angle);
#else
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range)
{
if (Range != 0xFF && Range != 0x00)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
uint8_t set_min_motor[]={0x4A,0x00,0x00,0xA4};
uint8_t set_max_motor[]={0x6A,0x00,0x00,0xA6};
if (Range == 0xFF)
{
Gimbal_SpecialUart_UartSend(set_max_motor, 4);
}
else if (Range == 0x00)
{
Gimbal_SpecialUart_UartSend(set_min_motor, 4);
}
#elif DEVICE_VERSION == JZ_H10
//还没想好怎么弄
#elif DEVICE_VERSION == JZ_H10T
//还没想好怎么弄
#elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D \
|| DEVICE_VERSION == TF_A1
if (Range == 0xFF)
{
JZsdk_Uart_Send_SetGimbalRange(UART_DEV_2, 0, Range);
}
else if (Range == 0x00)
{
JZsdk_Uart_Send_SetGimbalRange(UART_DEV_2, 0, Range);
}
#elif DEVICE_VERSION == JZ_H1T
//好像没必要弄
#else
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
/*
* @Author: ookk303
* @Date: 2024-08-28 14:58:07
* @LastEditors: Do not edit
* @LastEditTime: 2024-08-28 15:03:34
* @Description:
* @FilePath: \JZSDK_Linux\Module\Gimbal\Gimbal_DataDeal\Gimbal_Gimbal_DataDeal
*/
/**
********************************************************************
* @file GIMBAL_H3_H10.h
* H3板子的h10云台头文件
* @file Gimbal_DataDeal.h
* Gimbal_DataDeal.h 的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_H3_H10_H
#define GIMBAL_H3_H10_H
#ifndef GIMBAL_DATADEAL_H
#define GIMBAL_DATADEAL_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
... ... @@ -23,12 +31,11 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int Gimbal_H3_H10_set_angle(int angle);
void Gimbal_H3_H10_init_motor(void);
int Gimbal_H3_H10_CheckStatus_GimbalFineTuning(int *AdjustmentPitch);
//云台微调
T_JZsdkReturnCode Gimbal_H3_H10_set_PitchFineTuning(int Pitch);
T_JZsdkReturnCode Gimbal_DataDeal_init(); //初始化
T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle);
T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range);
T_JZsdkReturnCode Read_MotorFineTuning_Pitch(int *value);
#ifdef __cplusplus
}
... ...
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include "Gimbal_H3_H10.h"
#include "version_choose.h"
#if WIRINGPI_STATUS == VERSION_SWITCH_ON
#include <wiringPi.h>
#endif
/* Private constants ---------------------------------------------------------*/
#define MOTOR_FILE_PATH "/root/motor"
#define H3_H10_angle_PWM_MIN 1000
#define H3_H10_angle_PWM_MAX 2000
#define H3_H10_MOTOR_ADJUSTMENT 5 //云台微调值
/* Private types -------------------------------------------------------------*/
/* Private functions declaration ---------------------------------------------*/
#define MOTOR 18
static int H3_H10_motor_precise_adjustment_pitch =0;//默认H3微调值为0
static void *Gimbal_H3_H10_Motor_control(void *arg);
static int H3_H10_Read_MotorAdjustmentPitch(void);
static void H3_H10_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch);
int Gimbal_H3_H10_CheckStatus_GimbalFineTuning(int *AdjustmentPitch)
{
*AdjustmentPitch = H3_H10_motor_precise_adjustment_pitch;
}
void Gimbal_H3_H10_init_motor(void)
{
H3_H10_motor_precise_adjustment_pitch = H3_H10_Read_MotorAdjustmentPitch();//获取微调角度-读文件获取
Gimbal_H3_H10_set_angle(0);
}
int Gimbal_H3_H10_set_angle(int angle)
{
printf("H3_H10_angle:%d\n",angle);
//每43.5对饮20度
int num = 200 -angle*195/900; //正常
//int num = 200 -angle*195/900 -150*195/900; //上调15度
#if WIRINGPI_STATUS == VERSION_SWITCH_ON
pwmWrite(MOTOR,num);
#endif
}
//云台微调
T_JZsdkReturnCode Gimbal_H3_H10_set_PitchFineTuning(int Pitch)
{
//微调的角度值 提高Pitch
H3_H10_motor_precise_adjustment_pitch += Pitch;
//写入本地文件
H3_H10_Write_MotorAdjustmentPitch(H3_H10_motor_precise_adjustment_pitch);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//从文件中读出电机微调值
static int H3_H10_Read_MotorAdjustmentPitch(void)
{
FILE *motor_file;
int MotorAdjustmentPitch = 0;
motor_file = fopen(MOTOR_FILE_PATH, "rb+");
if (motor_file == NULL)
{
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
if (motor_file == NULL)
{
return 0;
}
}
else
{
int ret = fseek(motor_file, 0, SEEK_SET);
if (ret != 0) {
printf("Seek log count file error, ret: %d.\r\n", ret);
}
ret = fread((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int), motor_file);
if (ret != sizeof(unsigned int)) {
printf("Read motor weitiao error.\r\n");
}
else{
printf("Read motor weitiao=%d\n",MotorAdjustmentPitch);
}
}
fclose(motor_file);
return MotorAdjustmentPitch;
}
//写入电机微调值刀文件中
static void H3_H10_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch)
{
//写入文件
FILE *motor_file;
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
int ret = fwrite((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int),motor_file);
if (ret != sizeof(unsigned int)) {
printf("Write motor weitiao error.\r\n");
}
else{
printf("Write motor weitiao=%d\n",MotorAdjustmentPitch);
}
fclose(motor_file);
}
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include "Gimbal_H3_H150ST_UartDeal.h"
#include "Gimbal_H3_H150ST.h"
#include "BaseConfig.h"
#include "JZsdk_uart/UartConnection/UartConnection.h"
#include "JZsdk_TaskManagement/TaskManagement.h"
/* Private constants ---------------------------------------------------------*/
#define MOTOR_FILE_PATH "/root/motor"
#define H3_H150ST_angle_PWM_MIN 1000
#define H3_H150ST_angle_PWM_MAX 2000
#define H3_H150ST_MOTOR_ADJUSTMENT 5 //云台微调值
/* Private types -------------------------------------------------------------*/
/* Private functions declaration ---------------------------------------------*/
static int H3_H150ST_motor_precise_adjustment_pitch =0;//默认H3微调值为0
static void *H3_H150ST_Motor_control(void *arg);
static void H3_H150ST_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch);
static int H3_H150ST_Read_MotorAdjustmentPitch();
T_JZsdkReturnCode Gimbal_H3_H150ST_init_motor()
{
int Uart_fd = 0;
//1、串口初始化
Uart_fd = UartConnection_UartEnabled(GIMBAL_UART_NUM, GIMBAL_UART_BITRATE);
//2、串口接收初始化
Gimbal_H3_H150ST_UartDeal_Receive(Uart_fd);
//从文件中读出电机微调值
H3_H150ST_motor_precise_adjustment_pitch = H3_H150ST_Read_MotorAdjustmentPitch();
}
/**********
*
* 发送任务函数
*
* ***********/
static void JZsdk_Uart_UartSend_Task(void *data)
{
Gimbal_H3_H150ST_UartDeal_UartSend(data, 4);
}
/****************
*
*
* 发送函数
*
* ****************/
T_JZsdkReturnCode H150ST_UartSend(unsigned char *data, int num)
{
unsigned char *str = (unsigned char*)malloc(sizeof(data));
memcpy(str, data, sizeof(data));
T_JZsdkReturnCode ret = TaskManagement_SubmitTask(JZsdk_Uart_UartSend_Task, (void *)str);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
free(str);
return ret;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置角度
int H3_H150ST_Gimbal_SetAngle(int angle)
{
//调整为PWM值 1000~2000
int angle_PWM = 0;
if(angle>=0){
angle_PWM = H3_H150ST_angle_PWM_MIN;
}
else if(angle<=-900){
angle_PWM = H3_H150ST_angle_PWM_MAX;
}
else if(angle<0 && angle>-900)
{
angle_PWM= H3_H150ST_angle_PWM_MIN +(-angle)*(H3_H150ST_angle_PWM_MAX-H3_H150ST_angle_PWM_MIN)/900;
}
char send_angle[]={0x5a,0x00,0x00,0xa5};
send_angle[1]=(char )(angle_PWM);
send_angle[2]=(char )(angle_PWM>>8);
H150ST_UartSend(send_angle, 4);
}
//H150ST云台范围
T_JZsdkReturnCode H3_H150ST_SetGimbalRange(int Range)
{
uint8_t set_min_motor[]={0x4A,0x00,0x00,0xA4};
uint8_t set_max_motor[]={0x6A,0x00,0x00,0xA6};
if (Range == 0xFF)
{
printf("设置H150ST云台最大值\n");
Gimbal_H3_H150ST_UartDeal_UartSend(set_max_motor, 4);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if (Range == 0x00)
{
printf("设置H150ST云台最小值\n");
Gimbal_H3_H150ST_UartDeal_UartSend(set_min_motor, 4);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//云台微调
T_JZsdkReturnCode Gimbal_H3_H150ST_set_PitchFineTuning(int Pitch)
{
//微调的角度值 提高Pitch
H3_H150ST_motor_precise_adjustment_pitch += Pitch;
//写入本地文件
H3_H150ST_Write_MotorAdjustmentPitch(H3_H150ST_motor_precise_adjustment_pitch);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//微调向上
void H3_H150ST_gimbal_up(void)
{
//微调的pwm值 提高5
H3_H150ST_motor_precise_adjustment_pitch = H3_H150ST_motor_precise_adjustment_pitch + H3_H150ST_MOTOR_ADJUSTMENT;
//写入本地文件
H3_H150ST_Write_MotorAdjustmentPitch(H3_H150ST_motor_precise_adjustment_pitch);
}
//向下微调
void H3_H150ST_gimbal_down(void)
{
//微调的pwm值 减少5
H3_H150ST_motor_precise_adjustment_pitch = H3_H150ST_motor_precise_adjustment_pitch - H3_H150ST_MOTOR_ADJUSTMENT;
//写入本地文件
H3_H150ST_Write_MotorAdjustmentPitch(H3_H150ST_motor_precise_adjustment_pitch);
}
//查询云台微调值
int Gimbal_H3_H150ST_CheckStatus_GimbalFineTuning(int *AdjustmentPitch)
{
*AdjustmentPitch = H3_H150ST_motor_precise_adjustment_pitch;
}
//从文件中读出电机微调值
static int H3_H150ST_Read_MotorAdjustmentPitch()
{
FILE *motor_file;
int MotorAdjustmentPitch = 0;
motor_file = fopen(MOTOR_FILE_PATH, "rb+");
if (motor_file == NULL)
{
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
if (motor_file == NULL)
{
return 0;
}
}
else
{
int ret = fseek(motor_file, 0, SEEK_SET);
if (ret != 0) {
printf("Seek log count file error, ret: %d.\r\n", ret);
}
ret = fread((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int), motor_file);
if (ret != sizeof(unsigned int)) {
printf("Read motor weitiao error.\r\n");
}
else{
printf("Read motor weitiao=%d\n",MotorAdjustmentPitch);
}
}
fclose(motor_file);
return MotorAdjustmentPitch;
}
//写入电机微调值刀文件中
static void H3_H150ST_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch)
{
//写入文件
FILE *motor_file;
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
int ret = fwrite((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int),motor_file);
if (ret != sizeof(unsigned int)) {
printf("Write motor weitiao error.\r\n");
}
else{
printf("Write motor weitiao=%d\n",MotorAdjustmentPitch);
}
fclose(motor_file);
}
/**
********************************************************************
* @file GIMBAL_H3.h
* GIMBAL_H3的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_H3_H150ST_H
#define GIMBAL_H3_H150ST_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int H3_H150ST_Gimbal_SetAngle(int angle);
int Gimbal_H3_H150ST_CheckStatus_GimbalFineTuning(int *AdjustmentPitch);
T_JZsdkReturnCode Gimbal_H3_H150ST_init_motor();
T_JZsdkReturnCode H3_H150ST_SetGimbalRange(int Range);
T_JZsdkReturnCode Gimbal_H3_H150ST_set_PitchFineTuning(int Pitch);
#ifdef __cplusplus
}
#endif
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include "version_choose.h"
#include "Gimbal_H3/Gimbal_H3.h"
#include "Gimbal_V3S/Gimbal_V3S.h"
#include "Gimbal_InAndOut.h"
#include "JZsdkLib.h"
#include "Psdk_UI_io.h"
//数值角度记录
#if DEVICE_VERSION == TF_A1
static int Gimbal_PitchAngle = 0;
static int Gimbal_YawAngle = 0;
#else
static int Gimbal_PitchAngle = 0;
static int Gimbal_YawAngle = 0;
#endif
//微调角度
static int Gimbal_PitchFineTuning = 0;
static int Gimbal_YawFineTuning = 0;
//飞机自身角度
static int Gimbal_UavSelfPitch = 0;
//实际角度 (数值角度+飞机自身角度+微调角度)
static int Gimbal_RealPitchAngle = 0;
static int Gimbal_LinkageNum;
static int Gimbal_SendAngleTask_Init();
static int g_JZsdk_GimbalStatusFlag = JZ_FLAGCODE_OFF;
/**
*
* 获取gimbal模块状态标志位
*
* **/
int Get_JZsdk_GimbalStatusFlag()
{
return g_JZsdk_GimbalStatusFlag;
}
/*
* Gimbal模块初始化
*/
int Gimbal_Init()
{
//发送角度线程初始化
Gimbal_SendAngleTask_Init();
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//云台初始化
Gimbal_H3_H150ST_init_motor();
}
else if (DEVICE_VERSION == JZ_H10)
{
//注:h3_h10的电机引脚已在引脚初始化中完成
Gimbal_H3_H10_init_motor();
}
else if (DEVICE_VERSION == JZ_H10T)
{
//注:h3_h10的电机引脚已在引脚初始化中完成
Gimbal_V3S_H10T_init_motor();
}
else if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
Gimbal_V3S_U3_init_motor();
}
else if (DEVICE_VERSION == JZ_H1T)
{
Gimbal_V3S_H1T_init_motor();
}
else if (DEVICE_VERSION == TF_A1)
{
Gimbal_V3S_TFA1_init_motor();
}
else if (DEVICE_VERSION == JZ_C1)
{
JZSDK_LOG_INFO("C1云台初始化");
}
else
{
return -1;
}
//读取微调值
Gimbal_CheckStatus_GimbalFineTuning(&Gimbal_PitchFineTuning, &Gimbal_YawFineTuning);
//云台flag打开
g_JZsdk_GimbalStatusFlag = JZ_FLAGCODE_ON;
printf("云台初始化完毕\n");
}
//设置云台俯仰角度
T_JZsdkReturnCode Gimbal_Set_PitchAngle(int angle)
{
//printf("设置云台俯仰角度\n");
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//1、判断输入范围是否正确
if ((angle < -900) || (angle > 0))
{
printf("H150s/H150t的云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
}
}
else if (DEVICE_VERSION == JZ_H10)
{
//1、判断输入范围是否正确
if ((angle < -600) || (angle > 0))
//if ((angle < -800) || (angle > 0))
{
printf("H10的云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
}
}
else if (DEVICE_VERSION == JZ_H10T)
{
//1、判断输入范围是否正确
if ((angle < -600) || (angle > 0))
{
printf("H10T的云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
}
}
else if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
//1、判断输入范围是否正确
if ((angle < -900) || (angle > 0))
{
printf("U3的云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
}
}
else if (DEVICE_VERSION == TF_A1)
{
//1、判断输入范围是否正确
if ((angle < -900) || (angle > 0))
{
printf("TFA1的云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
}
}
else if (DEVICE_VERSION == JZ_H1T)
{
//1、判断输入范围是否正确
if ((angle < -900) || (angle > 300))
{
printf("H1T的云台俯仰输入值范围出错:%d\n", angle);
return JZ_ERRORCODE_GIMBAL_INVALID_PITCH;
}
}
else
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
Gimbal_PitchAngle = angle;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//设置云台航向角度
int Gimbal_Set_YawAngle(int angle)
{
printf("没有航向角度\n");
return -1;
}
//设置云台范围的最大最小值
T_JZsdkReturnCode Gimbal_SetGimbalRange(int value)
{
printf("设置云台范围最大最小值\n");
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
return H3_H150ST_SetGimbalRange(value);
}
if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
return V3S_U3_SetGimbalRange(value);
}
if (DEVICE_VERSION == TF_A1)
{
return V3S_TFA1_SetGimbalRange(value);
}
if (DEVICE_VERSION == JZ_H1T)
{
/* code */
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//查询云台微调值
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalFineTuning(int *FineTunigPitch, int *FineTunigYaw)
{
printf("查询云台微调值\n");
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//1、获取微调值
Gimbal_H3_H150ST_CheckStatus_GimbalFineTuning(&Gimbal_PitchFineTuning);
//2、回复微调值
*FineTunigPitch = Gimbal_PitchFineTuning;
*FineTunigYaw = Gimbal_YawFineTuning;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
//1、获取微调值
Gimbal_V3S_U3_CheckStatus_GimbalFineTuning(&Gimbal_PitchFineTuning);
//2、回复微调值
*FineTunigPitch = Gimbal_PitchFineTuning;
*FineTunigYaw = Gimbal_YawFineTuning;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (DEVICE_VERSION == TF_A1)
{
//1、获取微调值
Gimbal_V3S_TFA1_CheckStatus_GimbalFineTuning(&Gimbal_PitchFineTuning);
//2、回复微调值
*FineTunigPitch = Gimbal_PitchFineTuning;
*FineTunigYaw = Gimbal_YawFineTuning;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (DEVICE_VERSION == JZ_H1T)
{
//1、刷新微调值
Gimbal_V3S_H1T_CheckStatus_GimbalFineTuning();
delayMs(10);
//2、回复微调值
*FineTunigPitch = Gimbal_PitchFineTuning;
*FineTunigYaw = Gimbal_YawFineTuning;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (DEVICE_VERSION == JZ_H10)
{
//1、获取微调值
Gimbal_H3_H10_CheckStatus_GimbalFineTuning(&Gimbal_PitchFineTuning);
//2、回复微调值
*FineTunigPitch = Gimbal_PitchFineTuning;
*FineTunigYaw = Gimbal_YawFineTuning;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
if (DEVICE_VERSION == JZ_H10T)
{
//1、获取微调值
Gimbal_V3S_H10T_CheckStatus_GimbalFineTuning(&Gimbal_PitchFineTuning);
//2、回复微调值
*FineTunigPitch = Gimbal_PitchFineTuning;
*FineTunigYaw = Gimbal_YawFineTuning;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//收到云台pitch微调值
T_JZsdkReturnCode Gimbal_Obtain_GimbalFineTuning(int pitch)
{
printf("收到云台pitch云台微调值\n");
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//无操作
}
if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
//无操作
}
if (DEVICE_VERSION == JZ_H1T)
{
Gimbal_PitchFineTuning = pitch;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//设置云台pitch微调值
T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int DeviceName ,int pitch)
{
printf("设置云台pitch云台微调值\n");
T_JZsdkReturnCode ret;
//原值+修改值
Gimbal_PitchFineTuning = Gimbal_PitchFineTuning + pitch;
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
ret = Gimbal_H3_H150ST_set_PitchFineTuning(pitch);
}
else if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
ret = Gimbal_V3S_U3_set_PitchFineTuning(pitch);
}
else if (DEVICE_VERSION == TF_A1)
{
ret = Gimbal_V3S_TFA1_set_PitchFineTuning(pitch);
}
else if (DEVICE_VERSION == JZ_H1T)
{
ret = Gimbal_V3S_H1T_set_PitchFineTuning(pitch);
}
else if (DEVICE_VERSION == JZ_H10)
{
ret = Gimbal_H3_H10_set_PitchFineTuning(pitch);
}
else if (DEVICE_VERSION == JZ_H10T)
{
ret = Gimbal_V3S_H10T_set_PitchFineTuning(pitch);
}
else
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//微调后重设角度
Gimbal_Set_PitchAngle(Gimbal_PitchAngle);
return ret;
}
//设置云台联动
T_JZsdkReturnCode Gimbal_Set_GimbalLinkageControl(int value)
{
printf("设置云台联动\n");
Gimbal_LinkageNum = value;
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//没这玩意
}
if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
//没这玩意
}
if (DEVICE_VERSION == JZ_H1T)
{
Gimbal_V3S_H1T_Set_GimbalLinkageControl(Gimbal_LinkageNum);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//查询云台联动
T_JZsdkReturnCode Gimbal_CheckStatus_GimbalLinkage(int *value)
{
printf("查询云台联动值\n");
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
}
if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
}
if (DEVICE_VERSION == JZ_H1T)
{
//1、刷新云台联动值
Gimbal_V3S_H1T_CheckStatus_GimbalLinkage();
delayMs(10);
//2、回复云台联动值
*value = Gimbal_LinkageNum;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//收到云台联动值
T_JZsdkReturnCode Gimbal_Obtain_GimbalLinkage(int GimbalLinkage)
{
printf("收到云台联动值\n");
Gimbal_LinkageNum = GimbalLinkage;
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
}
if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
}
if (DEVICE_VERSION == JZ_H1T)
{
//无操作
//毕竟是t60s返回来的值
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//获取数值角度
T_JZsdkReturnCode Gimbal_Get_Angle(int *PitchAngle, int *YawAngle)
{
*PitchAngle = Gimbal_PitchAngle;
*YawAngle = Gimbal_YawAngle;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 查询云台角度
*
**********/
T_JZsdkReturnCode Gimbal_CheckStatus_Angle(int *PitchAngle, int *YawAngle)
{
//1、刷新查询角度
if (DEVICE_VERSION == JZ_H1T)
{
Gimbal_V3S_H1T_CheckStatus_GimbalAngle();
}
//2、获取一次本地云台角度
Gimbal_Get_Angle(PitchAngle, YawAngle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
int Gimbal_Get_PitchAngle()
{
return Gimbal_PitchAngle;
}
int Gimbal_Get_PitchFineTuning()
{
return Gimbal_PitchFineTuning;
}
int Gimbal_Get_PitchRealPitchAngle()
{
return Gimbal_RealPitchAngle;
}
//获得云台值
T_JZsdkReturnCode Gimbal_Obtain_Gimbal_Pitch(int Pitch)
{
//目前 U3和 H1T会接受到云台返回值
if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
//不处理,避免出现什么问题
}
else if (DEVICE_VERSION == JZ_H1T)
{
//Gimbal_PitchAngle = Pitch;
//这里暂时不处理,避免多次把5a帧返还给串口1设备
//但是会导致4g接收不到最新的角度
}
else
{
//不处理,避免出现什么问题
}
}
/**************************************************************
*
*
* 飞机特殊控制云台方法
*
*
***************************************************************/
//1、飞机自身角度控制云台
T_JZsdkReturnCode Gimbal_PitchSelfangleMode(int Pitch)
{
if (Gimbal_UavSelfPitch == Pitch)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
Gimbal_UavSelfPitch = Pitch;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//2、滑动条 获取云台角度
int Gimbal_PitchScaleMode(int value)
{
int angle;
if (DEVICE_VERSION == TF_A1 || DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//0~100 转化为 -900~0
angle = value*9 -900;
}
else if (DEVICE_VERSION == JZ_H10 || DEVICE_VERSION == JZ_H10T)
{
//0~100 转化为 -600~0
angle = value*6 -600;
}
else
{
return 0;
}
return angle;
}
//3、拨轮控制云台
T_JZsdkReturnCode Gimbal_PitchRotationMode(int value)
{
int angle;
//JZSDK_LOG_DEBUG("拨轮控制");
if (DEVICE_VERSION == TF_A1 || DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T )
{
angle = Gimbal_PitchAngle + value;
if (angle > 0)
{
angle = 0;
}
else if (angle < -900)
{
angle = -900;
}
if (angle == Gimbal_PitchAngle)
{
printf("拨轮控制无效\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
else if (DEVICE_VERSION == JZ_H10 || DEVICE_VERSION == JZ_H10T )
{
angle = Gimbal_PitchAngle + value;
if (angle > 0)
{
angle = 0;
}
else if (angle < -600)
{
angle = -600;
}
if (angle == Gimbal_PitchAngle)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
else
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
Gimbal_Set_PitchAngle(angle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//输入角度,回复滑动条值
int Gimbal_ReplyPitchToUAVScale(int angle)
{
int value;
if (DEVICE_VERSION == TF_A1 || DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T )
{
//-900~0 转回 0~100
value = (angle+ 900)/9;
}
if (DEVICE_VERSION == JZ_H10 || DEVICE_VERSION == JZ_H10T)
{
//-600~0 转回 0~100
value = (angle+ 600)/6;
}
else
{
return 0;
}
return value;
}
//设置云台俯仰角度
static T_JZsdkReturnCode Gimbal_Set_RealPitchAngle(int angle)
{
int temp_angle;
//printf("设置真实俯仰角度\n");
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
//获取飞机微调角度
int AdjustmentPitch;
Gimbal_H3_H150ST_CheckStatus_GimbalFineTuning(&AdjustmentPitch);
//叠加飞机角度和微调角度
temp_angle = angle - Gimbal_UavSelfPitch + AdjustmentPitch;
//修正angle值
if (temp_angle < -900)
{
angle = -900;
}
else if (temp_angle > 0)
{
angle = 0;
}
else
{
angle = temp_angle;
}
Gimbal_RealPitchAngle = temp_angle;
//发送到云台函数
H3_H150ST_Gimbal_SetAngle(temp_angle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if (DEVICE_VERSION == JZ_H10)
{
//获取飞机微调角度
int AdjustmentPitch;
Gimbal_H3_H10_CheckStatus_GimbalFineTuning(&AdjustmentPitch);
//叠加飞机角度和微调角度
temp_angle = angle - Gimbal_UavSelfPitch + AdjustmentPitch;
//修正angle值
if (temp_angle < -600)
{
angle = -600;
}
else if (temp_angle > 0)
{
angle = 0;
}
else
{
angle = temp_angle;
}
Gimbal_RealPitchAngle = temp_angle;
//发送到云台函数
Gimbal_H3_H10_set_angle(temp_angle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if (DEVICE_VERSION == JZ_H10T)
{
//获取飞机微调角度
int AdjustmentPitch;
Gimbal_V3S_H10T_CheckStatus_GimbalFineTuning(&AdjustmentPitch);
//叠加飞机角度和微调角度
temp_angle = angle - Gimbal_UavSelfPitch + AdjustmentPitch;
//修正angle值
if (temp_angle < -600)
{
angle = -600;
}
else if (temp_angle > 0)
{
angle = 0;
}
else
{
angle = temp_angle;
}
Gimbal_RealPitchAngle = temp_angle;
//发送到云台函数
Gimbal_V3S_H10T_set_angle(temp_angle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if (DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D)
{
//获取飞机微调角度
int AdjustmentPitch;
Gimbal_V3S_U3_CheckStatus_GimbalFineTuning(&AdjustmentPitch);
//叠加飞机角度和微调角度
temp_angle = angle - Gimbal_UavSelfPitch + AdjustmentPitch;
//修正angle值
if (temp_angle < -900)
{
angle = -900;
}
else if (temp_angle > 0)
{
angle = 0;
}
else
{
angle = temp_angle;
}
Gimbal_RealPitchAngle = temp_angle;
//发送到控制云台函数
Gimbal_V3S_U3_set_angle(temp_angle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if (DEVICE_VERSION == TF_A1)
{
//叠加飞机角度和微调角度
temp_angle = angle - Gimbal_UavSelfPitch + Get_V3S_TFA1_motor_precise_adjustment_pitch();
//修正angle值
if (temp_angle < -900)
{
angle = -900;
}
else if (temp_angle > 0)
{
angle = 0;
}
else
{
angle = temp_angle;
}
Gimbal_RealPitchAngle = temp_angle;
//发送到V3S_TFA1控制云台函数
Gimbal_V3S_TFA1_set_angle(temp_angle);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if (DEVICE_VERSION == JZ_H1T)
{
temp_angle = angle;
Gimbal_RealPitchAngle = temp_angle;
Gimbal_V3S_H1T_set_PitchAngle(temp_angle);
}
else if (DEVICE_VERSION == JZ_C1)
{
JZSDK_LOG_INFO("C1相机云台变化");
}
}
/**************************
*
*
* 云台角度发送线程
*
*
* ***************************/
static void *Gimbal_SendAngleTask(void *arg)
{
int angle = 0;
int UAV_self_angle;
int PitchFineTuning;
JZSDK_LOG_DEBUG("云台角度发送初始化完成");
int test_value =0;
while (1)
{
if (Gimbal_PitchAngle != angle //云台角度发生了变化
|| Gimbal_UavSelfPitch != UAV_self_angle //飞机自身角度发生了变化
|| Gimbal_PitchFineTuning != PitchFineTuning //微调角度发生了变化
)
{
angle = Gimbal_PitchAngle;
UAV_self_angle = Gimbal_UavSelfPitch;
PitchFineTuning = Gimbal_PitchFineTuning;
Gimbal_Set_RealPitchAngle(angle);
}
delayMs(6);
}
}
static int Gimbal_SendAngleTask_Init()
{
pthread_t WriteDataTask;
pthread_attr_t task_attribute; //线程属性
pthread_attr_init(&task_attribute); //初始化线程属性
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
int opus_Protection = pthread_create(&WriteDataTask,&task_attribute,Gimbal_SendAngleTask,NULL); //线程
if(opus_Protection != 0)
{
JZSDK_LOG_ERROR("创建控件写入线程失败!");
return -1;
}
JZSDK_LOG_INFO("MODULE_GIMBAL_INIT_COMPLETE");
}
\ No newline at end of file
#include <stdio.h>
#include "JZsdkLib.h"
#include "./MotorFineTuning.h"
#define MOTOR_FILE_PATH "/root/motor"
/************************
*
* 云台微调初始化
*
*
* *************************/
T_JZsdkReturnCode MotorFineTuning_Init(int *pitch, int *yaw, int *roll)
{
Read_MotorFineTuning_Pitch(pitch);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/************************************************************************************************************
*
* pitch轴
*
*
*/
/*******
*
* pitch轴微调值的读取
*
*
* ************/
T_JZsdkReturnCode Read_MotorFineTuning_Pitch(int *value)
{
FILE *motor_file = NULL;
int MotorFineTuningPitch = 0;
motor_file = fopen(MOTOR_FILE_PATH, "rb+");
if (motor_file == NULL)
{
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
if (motor_file == NULL)
{
*value = 0;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
else
{
int ret = fseek(motor_file, 0, SEEK_SET);
if (ret != 0)
{
printf("Seek log count file error, ret: %d.\r\n", ret);
}
ret = fread((int *) &MotorFineTuningPitch, 1, sizeof(int), motor_file);
if (ret != sizeof(int))
{
printf("Read motor weitiao error.\r\n");
*value = 0;
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
else
{
printf("Read motor weitiao=%d\n",MotorFineTuningPitch);
*value = 0;
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
if (motor_file != NULL)
{
fclose(motor_file);
}
*value = MotorFineTuningPitch;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*******
*
* pitch轴微调值的写入
*
*
* ************/
T_JZsdkReturnCode MotorFineTuning_WritePitch(int Pitch)
{
//写入文件
FILE *motor_file;
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
if (motor_file == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
int ret = fwrite((int *) &Pitch, 1, sizeof(unsigned int),motor_file);
if (ret != sizeof(unsigned int))
{
JZSDK_LOG_ERROR("MotorFineTuning_WritePitch error.");
}
else
{
JZSDK_LOG_DEBUG("MotorFineTuning_WritePitch=%d\n",Pitch);
}
fclose(motor_file);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
/*
* @Author: ookk303
* @Date: 2024-08-28 14:58:07
* @LastEditors: Do not edit
* @LastEditTime: 2024-08-28 14:58:27
* @Description:
* @FilePath: \JZSDK_Linux\Module\Gimbal\Gimbal_MotorFineTuning\MotorFineTuning.h
*/
/**
********************************************************************
* @file GIMBAL_V3S_H10T_H.h
* v3s板子的h10t云台头文件
* @file MotorFineTuning.h
* MotorFineTuning.h 的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_V3S_H10T_H
#define GIMBAL_V3S_H10T_H
#ifndef MOTORFINE_TUNING_H
#define MOTORFINE_TUNING_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
... ... @@ -23,12 +31,9 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int Gimbal_V3S_H10T_set_angle(int angle);
void Gimbal_V3S_H10T_init_motor(void);
int Gimbal_V3S_H10T_CheckStatus_GimbalFineTuning(int *AdjustmentPitch);
T_JZsdkReturnCode Gimbal_V3S_H10T_set_PitchFineTuning(int Pitch);
T_JZsdkReturnCode Read_MotorFineTuning_Pitch(int *value);
T_JZsdkReturnCode MotorFineTuning_Init(int *pitch, int *yaw, int *roll);
T_JZsdkReturnCode MotorFineTuning_WritePitch(int Pitch);
#ifdef __cplusplus
}
... ...
/**
********************************************************************
* @file Gimbal_Param.h
* Gimbal_Param.h的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_PARAM_H
#define GIMBAL_PARAM_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "BaseConfig.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
#if DEVICE_VERSION == JZ_C1
#elif DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
#define PITCH_PWM_MAX 2000
#define PITCH_PWM_MIN 1000
#define MAX_PITCH 0
#define MIN_PITCH -900
#elif DEVICE_VERSION == JZ_H10
#define PITCH_PWM_MAX 0
#define PITCH_PWM_MIN 0
#define MAX_PITCH 0
#define MIN_PITCH -600
#elif DEVICE_VERSION == JZ_H10T
#define PITCH_PWM_MAX 820
#define PITCH_PWM_MIN 700
#define MAX_PITCH 0
#define MIN_PITCH -600
#elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D \
|| DEVICE_VERSION == TF_A1
#define PITCH_PWM_MAX 0
#define PITCH_PWM_MIN 0
#define MAX_PITCH 0
#define MIN_PITCH -900
#elif DEVICE_VERSION == JZ_H1T
#define PITCH_PWM_MAX 0
#define PITCH_PWM_MIN 0
#define MAX_PITCH 300
#define MIN_PITCH -900
#else
#define PITCH_PWM_MAX 0
#define PITCH_PWM_MIN 0
#define MAX_PITCH 0
#define MIN_PITCH 0
#endif
#ifdef __cplusplus
}
#endif
#endif
... ...
... ... @@ -8,6 +8,8 @@
#include <termios.h>
#include <sys/time.h>
#include "JZsdkLib.h"
static void *UartDeal_rece(void *arg);
static void *UartDeal_send(void *arg);
static int Gimbal_Uart_fd = 0;
... ... @@ -17,7 +19,7 @@ static int Gimbal_Uart_fd = 0;
创建一个接收Gimbal的接收线程
******************************************************************/
int Gimbal_H3_H150ST_UartDeal_Receive(int Uart_fd)
T_JZsdkReturnCode Gimbal_SpecialUart_UartReceive_Init(int Uart_fd)
{
int ret = 0;
pthread_t Uart_rece_task;
... ... @@ -30,10 +32,12 @@ int Gimbal_H3_H150ST_UartDeal_Receive(int Uart_fd)
ret = pthread_create(&Uart_rece_task,&task_attribute,UartDeal_rece,NULL); //串口接收线程
if(ret != 0)
{
printf("创建展架串口接收线程失败!\n");
JZSDK_LOG_ERROR("创建展架串口接收线程失败!\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
else{
printf("创建展架串口接收线程成功!\n");
JZSDK_LOG_DEBUG("创建展架串口接收线程成功!\n");
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
... ... @@ -82,9 +86,41 @@ static void *UartDeal_rece(void *arg)
* 发送函数
*
* ****************/
int Gimbal_H3_H150ST_UartDeal_UartSend(unsigned char *send, int num)
T_JZsdkReturnCode Gimbal_SpecialUart_UartDeal_UartSend(unsigned char *send, int num)
{
write(Gimbal_Uart_fd,send, num);
return 0;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/**********
*
* 发送任务函数
*
* ***********/
static void JZsdk_Uart_UartSend_Task(void *data)
{
Gimbal_SpecialUart_UartDeal_UartSend(data, 4);
}
/****************
*
*
* 发送函数
*
* ****************/
T_JZsdkReturnCode Gimbal_SpecialUart_UartSend(unsigned char *data, int num)
{
unsigned char *str = (unsigned char*)malloc(sizeof(data));
memcpy(str, data, sizeof(data));
T_JZsdkReturnCode ret = TaskManagement_SubmitTask(JZsdk_Uart_UartSend_Task, (void *)str);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
free(str);
return ret;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
... ... @@ -23,8 +23,8 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int Gimbal_H3_H150ST_UartDeal_Receive(int Uart_fd);
int Gimbal_H3_H150ST_UartDeal_UartSend(unsigned char *send, int num);
T_JZsdkReturnCode Gimbal_SpecialUart_UartReceive_Init(int Uart_fd);
T_JZsdkReturnCode Gimbal_SpecialUart_UartSend(unsigned char *send, int num);
#ifdef __cplusplus
}
... ...
/**
********************************************************************
* @file GIMBAL_H3.h
* GIMBAL_H3的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_V3S_H
#define GIMBAL_V3S_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#include "Gimbal_V3S_H10T/Gimbal_V3S_H10T.h"
#include "Gimbal_V3S_U3/Gimbal_V3S_U3.h"
#include "Gimbal_V3S_H1T/Gimbal_V3S_H1T.h"
#include "Gimbal_V3S_TFA1/Gimbal_V3S_TFA1.h"
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include "./Gimbal_V3S_H10T.h"
#include "ircut.h"
/* Private constants ---------------------------------------------------------*/
#define MOTOR_FILE_PATH "/root/motor"
#define V3S_H10T_angle_PWM_MIN 700
#define V3S_H10T_angle_PWM_MAX 820
#define V3S_H10T_MOTOR_ADJUSTMENT 5 //云台微调值
/* Private types -------------------------------------------------------------*/
/* Private functions declaration ---------------------------------------------*/
static int V3S_H10T_motor_precise_adjustment_pitch =0;//默认微调值为0
static void *Gimbal_V3S_H10T_Motor_control(void *arg);
static int V3S_H10T_Read_MotorAdjustmentPitch(void);
static void V3S_H10T_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch);
int Gimbal_V3S_H10T_CheckStatus_GimbalFineTuning(int *AdjustmentPitch)
{
*AdjustmentPitch = V3S_H10T_motor_precise_adjustment_pitch;
}
void Gimbal_V3S_H10T_init_motor(void)
{
V3S_H10T_motor_precise_adjustment_pitch = V3S_H10T_Read_MotorAdjustmentPitch();//获取微调角度-读文件获取
Gimbal_V3S_H10T_set_angle(0);
}
int Gimbal_V3S_H10T_set_angle(int angle)
{
//传入的角度 -600~0
int PWM_num = 0;
printf("V3S_H10T_angle:%d\n",angle);
if(angle >= 0 )
{
angle = 0;
}
else if(angle <= -600)
{
angle = -600;
}
else if( (angle > -600) && (angle < 0) )
{
//angle不变
}
//因为PWM写的时候是按90度写的,所以分母是900
PWM_num = ( angle * (V3S_H10T_angle_PWM_MAX-V3S_H10T_angle_PWM_MIN) /900 ) + V3S_H10T_angle_PWM_MAX;
if (PWM_num > V3S_H10T_angle_PWM_MAX)
{
PWM_num = V3S_H10T_angle_PWM_MAX;
}
if (PWM_num < V3S_H10T_angle_PWM_MIN)
{
PWM_num = V3S_H10T_angle_PWM_MIN;
}
Ircut_PWM_control(PWM_num);
}
//云台微调
T_JZsdkReturnCode Gimbal_V3S_H10T_set_PitchFineTuning(int Pitch)
{
//微调的角度值 提高Pitch
V3S_H10T_motor_precise_adjustment_pitch += Pitch;
//写入本地文件
V3S_H10T_Write_MotorAdjustmentPitch(V3S_H10T_motor_precise_adjustment_pitch);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//从文件中读出电机微调值
static int V3S_H10T_Read_MotorAdjustmentPitch(void)
{
FILE *motor_file;
int MotorAdjustmentPitch = 0;
motor_file = fopen(MOTOR_FILE_PATH, "rb+");
if (motor_file == NULL)
{
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
if (motor_file == NULL)
{
return 0;
}
}
else
{
int ret = fseek(motor_file, 0, SEEK_SET);
if (ret != 0) {
printf("Seek log count file error, ret: %d.\r\n", ret);
}
ret = fread((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int), motor_file);
if (ret != sizeof(unsigned int)) {
printf("Read motor weitiao error.\r\n");
}
else{
printf("Read motor weitiao=%d\n",MotorAdjustmentPitch);
}
}
fclose(motor_file);
return MotorAdjustmentPitch;
}
//写入电机微调值刀文件中
static void V3S_H10T_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch)
{
//写入文件
FILE *motor_file;
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
int ret = fwrite((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int),motor_file);
if (ret != sizeof(unsigned int)) {
printf("Write motor weitiao error.\r\n");
}
else{
printf("Write motor weitiao=%d\n",MotorAdjustmentPitch);
}
fclose(motor_file);
}
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include "./Gimbal_V3S_H1T.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"
#include "ircut.h"
#include "BaseConfig.h"
/* Private constants ---------------------------------------------------------*/
/* Private types -------------------------------------------------------------*/
/* Private functions declaration ---------------------------------------------*/
/*********************
*
*
* 用于控制T60s的云台
*
*
* *************/
static void *Gimbal_V3S_H1T_Motor_control(void *arg);
static int V3S_H1T_Read_MotorAdjustmentPitch(void);
static void V3S_H1T_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch);
void Gimbal_V3S_H1T_init_motor(void)
{
// 不用去特地初始化t60的云台
}
int Gimbal_V3S_H1T_set_PitchAngle(int angle)
{
printf("V3S_H1T_angle:%d\n",angle);
if(angle >= 300 )
{
angle = 300;
}
else if(angle <= -900)
{
angle = -900;
}
else if( (angle > -900) && (angle < 0) )
{
//angle不变
}
//发送角度给串口1
JZsdk_Uart_Send_SetGimbalPitch(UART_DEV_1, angle);
}
//微调云台
T_JZsdkReturnCode Gimbal_V3S_H1T_set_PitchFineTuning(int PitchFineTuning)
{
JZsdk_Uart_Send_SetGimbalFineTuningPitch(UART_DEV_1, PitchFineTuning);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//查询云台微调值
int Gimbal_V3S_H1T_CheckStatus_GimbalFineTuning()
{
JZsdk_Uart_Send_CheckStatus_GimbalFineTuningPitch(UART_DEV_1, 0);
}
//设置云台联动
int Gimbal_V3S_H1T_Set_GimbalLinkageControl(int value)
{
JZsdk_Uart_Send_Set_GimbalLinkageControl(UART_DEV_1, 0, value);
}
//刷新云台联动值
int Gimbal_V3S_H1T_CheckStatus_GimbalLinkage()
{
JZsdk_Uart_Send_CheckStatus_GimbalLinkage(UART_DEV_1, 0);
}
//查询云台值
T_JZsdkReturnCode Gimbal_V3S_H1T_CheckStatus_GimbalAngle()
{
JZsdk_Uart_Send_CheckStatus_GimbalAngle(UART_DEV_1, 0);
}
\ No newline at end of file
/**
********************************************************************
* @file Gimbal_V3S_H1T.h
* v3s板子的h1t云台头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_V3S_H1T_H
#define GIMBAL_V3S_H1T_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
void Gimbal_V3S_H1T_init_motor(void);
int Gimbal_V3S_H1T_set_PitchAngle(int angle);
T_JZsdkReturnCode Gimbal_V3S_H1T_set_PitchFineTuning(int PitchFineTuning);
int Gimbal_V3S_H1T_CheckStatus_GimbalFineTuning();
int Gimbal_V3S_H1T_Set_GimbalLinkageControl(int value);
int Gimbal_V3S_H1T_CheckStatus_GimbalLinkage();
T_JZsdkReturnCode Gimbal_V3S_H1T_CheckStatus_GimbalAngle();
#ifdef __cplusplus
}
#endif
#endif
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include "./Gimbal_V3S_TFA1.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"
#include "ircut.h"
#include "BaseConfig.h"
/* Private constants ---------------------------------------------------------*/
#define MOTOR_FILE_PATH "/root/motor"
#define V3S_TFA1_MOTOR_ADJUSTMENT 5 //云台微调值
/* Private types -------------------------------------------------------------*/
/* Private functions declaration ---------------------------------------------*/
static int V3S_TFA1_motor_precise_adjustment_pitch =0;//默认微调值为0
static int V3S_TFA1_Read_MotorAdjustmentPitch(void);
static void V3S_TFA1_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch);
void Gimbal_V3S_TFA1_init_motor(void)
{
V3S_TFA1_motor_precise_adjustment_pitch = V3S_TFA1_Read_MotorAdjustmentPitch();//获取微调角度-读文件获取
Gimbal_V3S_TFA1_set_angle(0);
}
static int Gimbal_TFA1_sendAngle(int angle)
{
if(angle >= 0 )
{
angle = 0;
}
else if(angle <= -900)
{
angle = -900;
}
else if( (angle > -900) && (angle < 0) )
{
//angle不变
}
//发送角度给串口2
JZsdk_Uart_Send_SetGimbalPitch(UART_DEV_2, angle);
}
int Gimbal_V3S_TFA1_set_angle(int angle)
{
Gimbal_TFA1_sendAngle(angle);
}
//云台微调
T_JZsdkReturnCode Gimbal_V3S_TFA1_set_PitchFineTuning(int Pitch)
{
//微调的角度值 提高Pitch
V3S_TFA1_motor_precise_adjustment_pitch += Pitch;
//写入本地文件
V3S_TFA1_Write_MotorAdjustmentPitch(V3S_TFA1_motor_precise_adjustment_pitch);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//从文件中读出电机微调值
static int V3S_TFA1_Read_MotorAdjustmentPitch(void)
{
FILE *motor_file;
int MotorAdjustmentPitch = 0;
motor_file = fopen(MOTOR_FILE_PATH, "rb+");
if (motor_file == NULL)
{
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
if (motor_file == NULL)
{
return 0;
}
}
else
{
int ret = fseek(motor_file, 0, SEEK_SET);
if (ret != 0) {
printf("Seek log count file error, ret: %d.\r\n", ret);
}
ret = fread((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int), motor_file);
if (ret != sizeof(unsigned int)) {
printf("Read motor weitiao error.\r\n");
}
else{
printf("Read motor weitiao=%d\n",MotorAdjustmentPitch);
}
}
fclose(motor_file);
return MotorAdjustmentPitch;
}
//写入电机微调值刀文件中
static void V3S_TFA1_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch)
{
//写入文件
FILE *motor_file;
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
int ret = fwrite((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int),motor_file);
if (ret != sizeof(unsigned int)) {
printf("Write motor weitiao error.\r\n");
}
else{
printf("Write motor weitiao=%d\n",MotorAdjustmentPitch);
}
fclose(motor_file);
}
int Gimbal_V3S_TFA1_CheckStatus_GimbalFineTuning(int *AdjustmentPitch)
{
*AdjustmentPitch = V3S_TFA1_motor_precise_adjustment_pitch;
}
//TFA1范围
T_JZsdkReturnCode V3S_TFA1_SetGimbalRange(int Range)
{
if (Range == 0xFF)
{
printf("设置TFA1云台最大值\n");
JZsdk_Uart_Send_SetGimbalRange(UART_DEV_2, 0, Range);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if (Range == 0x00)
{
printf("设置TFA1云台最小值\n");
JZsdk_Uart_Send_SetGimbalRange(UART_DEV_2, 0, Range);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
int Get_V3S_TFA1_motor_precise_adjustment_pitch()
{
return V3S_TFA1_motor_precise_adjustment_pitch;
}
\ No newline at end of file
/**
********************************************************************
* @file Gimbal_V3S_TFA1.h
* v3s板子的A1云台头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_V3S_TFA1_H
#define GIMBAL_V3S_TFA1_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
void Gimbal_V3S_TFA1_init_motor(void);
int Gimbal_V3S_TFA1_set_angle(int angle);
T_JZsdkReturnCode V3S_TFA1_SetGimbalRange(int Range);
T_JZsdkReturnCode Gimbal_V3S_TFA1_set_PitchFineTuning(int Pitch);
int Gimbal_V3S_TFA1_CheckStatus_GimbalFineTuning(int *AdjustmentPitch);
int Get_V3S_TFA1_motor_precise_adjustment_pitch();
#ifdef __cplusplus
}
#endif
#endif
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include "./Gimbal_V3S_U3.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"
#include "ircut.h"
#include "BaseConfig.h"
/* Private constants ---------------------------------------------------------*/
#define MOTOR_FILE_PATH "/root/motor"
#define V3S_U3_MOTOR_ADJUSTMENT 5 //云台微调值
/* Private types -------------------------------------------------------------*/
/* Private functions declaration ---------------------------------------------*/
static int V3S_U3_motor_precise_adjustment_pitch =0;//默认微调值为0
static void *Gimbal_V3S_U3_Motor_control(void *arg);
static int V3S_U3_Read_MotorAdjustmentPitch(void);
static void V3S_U3_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch);
void Gimbal_V3S_U3_init_motor(void)
{
V3S_U3_motor_precise_adjustment_pitch = V3S_U3_Read_MotorAdjustmentPitch();//获取微调角度-读文件获取
Gimbal_V3S_U3_set_angle(0);
}
int Gimbal_V3S_U3_set_angle(int angle)
{
//微调角度值
printf("V3S_U3_angle:%d\n",angle);
if(angle >= 0 )
{
angle = 0;
}
else if(angle <= -900)
{
angle = -900;
}
else if( (angle > -900) && (angle < 0) )
{
//angle不变
}
//发送角度给串口2
JZsdk_Uart_Send_SetGimbalPitch(UART_DEV_2, angle);
}
//云台微调
T_JZsdkReturnCode Gimbal_V3S_U3_set_PitchFineTuning(int Pitch)
{
//微调的角度值 提高Pitch
V3S_U3_motor_precise_adjustment_pitch += Pitch;
//写入本地文件
V3S_U3_Write_MotorAdjustmentPitch(V3S_U3_motor_precise_adjustment_pitch);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
//从文件中读出电机微调值
static int V3S_U3_Read_MotorAdjustmentPitch(void)
{
FILE *motor_file;
int MotorAdjustmentPitch = 0;
motor_file = fopen(MOTOR_FILE_PATH, "rb+");
if (motor_file == NULL)
{
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
if (motor_file == NULL)
{
return 0;
}
}
else
{
int ret = fseek(motor_file, 0, SEEK_SET);
if (ret != 0) {
printf("Seek log count file error, ret: %d.\r\n", ret);
}
ret = fread((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int), motor_file);
if (ret != sizeof(unsigned int)) {
printf("Read motor weitiao error.\r\n");
}
else{
printf("Read motor weitiao=%d\n",MotorAdjustmentPitch);
}
}
fclose(motor_file);
return MotorAdjustmentPitch;
}
//写入电机微调值刀文件中
static void V3S_U3_Write_MotorAdjustmentPitch(int MotorAdjustmentPitch)
{
//写入文件
FILE *motor_file;
motor_file = fopen(MOTOR_FILE_PATH, "wb+");
int ret = fwrite((unsigned int *) &MotorAdjustmentPitch, 1, sizeof(unsigned int),motor_file);
if (ret != sizeof(unsigned int)) {
printf("Write motor weitiao error.\r\n");
}
else{
printf("Write motor weitiao=%d\n",MotorAdjustmentPitch);
}
fclose(motor_file);
}
int Gimbal_V3S_U3_CheckStatus_GimbalFineTuning(int *AdjustmentPitch)
{
*AdjustmentPitch = V3S_U3_motor_precise_adjustment_pitch;
}
//U3范围
T_JZsdkReturnCode V3S_U3_SetGimbalRange(int Range)
{
if (Range == 0xFF)
{
printf("设置u3云台最大值\n");
JZsdk_Uart_Send_SetGimbalRange(UART_DEV_2, 0, Range);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else if (Range == 0x00)
{
printf("设置u3云台最小值\n");
JZsdk_Uart_Send_SetGimbalRange(UART_DEV_2, 0, Range);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
\ No newline at end of file
/**
********************************************************************
* @file Gimbal_V3S_U3.h
* v3s板子的u3云台头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_V3S_U3_H
#define GIMBAL_V3S_U3_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
void Gimbal_V3S_U3_init_motor(void);
int Gimbal_V3S_U3_set_angle(int angle);
T_JZsdkReturnCode V3S_U3_SetGimbalRange(int Range);
T_JZsdkReturnCode Gimbal_V3S_U3_set_PitchFineTuning(int Pitch);
int Gimbal_V3S_U3_CheckStatus_GimbalFineTuning(int *AdjustmentPitch);
#ifdef __cplusplus
}
#endif
#endif
... ... @@ -56,6 +56,17 @@ T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch(int value)
{
JZsdk_RawBadPixelCheck_Flag = value; //原始盲点记录标志
JZsdk_GrayBadPixelCheck_flag = value; //灰度图坏点纠正标志
}
//单点纠正开关
/********************
*
* 该功能为一次性功能
*
*
* **************************/
T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(int value)
{
JZsdk_SPCCheck_flag = value; //单点纠正标志
}
... ...
... ... @@ -54,6 +54,8 @@ typedef enum GasEnhancementColor
T_JZsdkReturnCode JZsdk_Camera_ShutterSwitch(int value);
T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *value);
T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch(int value);
T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(int value);
T_JZsdkReturnCode JZsdk_H150ST_CameraInit(int width, int height, int frame_num);
#ifdef __cplusplus
}
... ...
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include "JZsdkLib.h"
#include "version_choose.h"
#include "BaseConfig.h"
#include "../V4L2_camera/V4L2_Record.h"
#include "../../StreamProc/StreamProc.h"
#include "../../MediaParm.h"
#include "../../VideoMgmt/VideoMgmt.h"
#include "../../StreamProc/StreamProc.h"
#include "Ircut/ircut.h"
#include "../Camera.h"
#include "UI_control/UI_control.h"
static int CameraFd = 0;
//光学相机数据读取线程
static void *JZsdk_Cam_Data_Thread(void *args)
{
while (1)
{
unsigned int buf_size = 0;
unsigned char *buf = NULL;
//从相机中读取一张照片
V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size);
if (buf == NULL)
{
JZSDK_LOG_ERROR("相机数据读取失败");
continue;
}
//放入缓冲池
VideoMgmt_write_data(&VideoMgmt_FirstVideo_index, buf, buf_size);
//归还图片
V4L2_CameraFrameRecord_OnlyReturnFrame();
}
}
//150st相机初始化
T_JZsdkReturnCode JZsdk_H150ST_CameraInit(int width, int height, int frame_num)
{
T_JZsdkReturnCode ret;
//初始化摄像头
ret = V4l2_Camarainit2(&CameraFd,width,height,frame_num);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
return ret;
}
//初始化数据接收线程
pthread_t ReadDataTask;
pthread_attr_t task_attribute; //线程属性
pthread_attr_init(&task_attribute); //初始化线程属性
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Cam_Data_Thread,NULL); //线程
if(opus_Protection != 0)
{
JZSDK_LOG_ERROR("创建v4l2线程失败!");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file GIMBAL_H3.h
* GIMBAL_H3的头文件
* @file H150ST_Cam.h
* H150ST_Cam.h 的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef GIMBAL_H3_H
#define GIMBAL_H3_H
#ifndef H150ST_CAM_H
#define H150ST_CAM_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
... ... @@ -18,12 +19,13 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#include "Gimbal_H3_H150ST/Gimbal_H3_H150ST.h"
#include "Gimbal_H3_H10/Gimbal_H3_H10.h"
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_H150ST_CameraInit(int width, int height, int frame_num);
#ifdef __cplusplus
... ...
... ... @@ -349,7 +349,7 @@ static void *JZsdk_Kt_Cam_Data_Thread(void *args)
continue;
}
//放入缓冲池
VideoMgmt_write_data(&VideoMgmt_SecondRaw_index, buf, buf_size);
... ...
... ... @@ -29,6 +29,8 @@ extern int g_CameraRegionBox_ClickTime;
int g_temp_GasValueMax = 160;
int g_temp_GasValueMin = 30;
#define BAD_PIXEL_MODE JZ_FLAGCODE_OFF
static T_JZsdkReturnCode Kt_Irc_TempCalibrate_Read(int flag, U16_t *Image, unsigned int maxLen);
static T_JZsdkReturnCode Kt_Irc_TempCalibrate_Save(int flag, U16_t *Image, unsigned int maxLen);
static T_JZsdkReturnCode Kt_Irc_ReadAndSave_threshold(int flag, int order,unsigned int *num);
... ... @@ -1336,6 +1338,7 @@ T_JZsdkReturnCode Kt_Irc_14bitGrayData_to_RawData(U8_t *data, int data_len, U8_t
//盲元纠正
JZsdk_CutBadPixel_U16(u16_RawData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, dealInfo->BadPixelNum,dealInfo->BadPixelExtern, 1);
/***************************************************************************
*
* 图像标定记录
... ... @@ -1432,8 +1435,9 @@ T_JZsdkReturnCode Kt_Irc_14bitGrayData_to_RawData(U8_t *data, int data_len, U8_t
JZsdk_GrayCheckisBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, &dealInfo->GrayPixelNum);
JZsdk_GrayBadPixelCheck_flag = JZ_FLAGCODE_OFF;
}
JZsdk_CutBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, dealInfo->GrayPixelNum,dealInfo->GrayPixelExtern, 1);
//JZsdk_CutBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, dealInfo->GrayPixelNum,dealInfo->GrayPixelExtern, 1);
//灰度图转rgb888
Kt_Irc_GrayTo_RGB(GrayImage, &RgbImage, &RgbImageLen,dealInfo);
}
... ... @@ -1450,7 +1454,8 @@ T_JZsdkReturnCode Kt_Irc_14bitGrayData_to_RawData(U8_t *data, int data_len, U8_t
JZsdk_GrayCheckisBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, &dealInfo->GrayPixelNum);
JZsdk_GrayBadPixelCheck_flag = JZ_FLAGCODE_OFF;
}
JZsdk_CutBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, dealInfo->GrayPixelNum,dealInfo->GrayPixelExtern, 1);
//JZsdk_CutBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, dealInfo->GrayPixelNum,dealInfo->GrayPixelExtern, 1);
//灰度图转伪彩rgb888
ret = PseudoColor_Gray2Rgb(GrayImage, &RgbImage, &RgbImageLen, dealInfo->PixelNum);
... ...
... ... @@ -11,6 +11,8 @@
#define MEDIA_PARM_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "BaseConfig.h"
#ifdef __cplusplus
extern "C" {
... ... @@ -22,13 +24,38 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
#if DEVICE_VERSION == JZ_C1
#define FIRST_WIDTH 320
#define FIRST_HEIGHT 256
#define FIRST_FRAME_NUM 30
#define SECOND_WIDTH 1920
#define SECOND_HEIGHT 1080
#define SECOND_FRAME_NUM 30
#elif DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
#define FIRST_WIDTH 1280
#define FIRST_HEIGHT 720
#define FIRST_FRAME_NUM 25
#define SECOND_WIDTH 0
#define SECOND_HEIGHT 0
#define SECOND_FRAME_NUM 25
#else
#define FIRST_WIDTH 1280
#define FIRST_HEIGHT 720
#define FIRST_FRAME_NUM 25
#define SECOND_WIDTH 1280
#define SECOND_HEIGHT 720
#define SECOND_FRAME_NUM 25
#endif
#ifdef __cplusplus
... ...
... ... @@ -13,7 +13,6 @@
#include "./MediaParm.h"
#include "./Camera/Camera.h"
static int Kt_irc_flag = JZ_FLAGCODE_ON;
//视频流模块初始化
... ... @@ -45,23 +44,28 @@ T_JZsdkReturnCode MediaProc_Init()
//5、打开默认选项
VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND); //默认推送光学摄像头
JZsdk_Kt_Irc_ShutterSwitch(JZ_FLAGCODE_ON);
//6、修改部分参数
int value = 8;
Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value);
value = 1;
Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value);
}
//如果是150S相机 150T相机
if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T)
{
// //1、启动视频流缓冲区模块
// VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index);
// VideoMgmt_init_buffer(&VideoMgmt_FirstRaw_index);
// //3、相机初始化
// JZsdk_Kt_Irc_Camera_Init();
//1、启动视频流缓冲区模块
VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index);
// //4、启用推流模块
// VideoMgmt_VideoStreamFlow_Init(25, &VideoMgmt_FirstVideo_index, VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST);
//2、相机初始化
JZsdk_H150ST_CameraInit(FIRST_WIDTH, FIRST_HEIGHT, FIRST_FRAME_NUM);
//3、启用推流模块
VideoMgmt_VideoStreamFlow_Init(FIRST_FRAME_NUM, &VideoMgmt_FirstVideo_index, VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST);
VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送光学摄像头
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
... ... @@ -39,9 +39,11 @@ static void *FilePlay_data_pthread(void *arg)
int loop = JZ_FLAGCODE_OFF;
do
{
Megaphone_param(JZ_FLAGCODE_GET, MEGAPHONE_LOOP, &loop);
//音频文件播放接口
AudioFile_StartPlay_Interface(FilePath);
Megaphone_param(JZ_FLAGCODE_GET, MEGAPHONE_LOOP, &loop);
} while ( (loop == JZ_FLAGCODE_ON) && (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_ON));
//释放掉结构体和标志位
... ...
... ... @@ -209,12 +209,15 @@ static T_JZsdkReturnCode TTS_FILE_GenerateAndPlay(struct t_Megaphone_tts_param *
int loop;
do
{
Megaphone_param(JZ_FLAGCODE_GET, MEGAPHONE_LOOP, &loop);
TTS_Synthesis(argv, session_begin_params);
if (tts_add_mode != 0)
{
TTS_Synthesis(argv, tts_add_params);
}
Megaphone_param(JZ_FLAGCODE_GET, MEGAPHONE_LOOP, &loop);
} while ( (loop == JZ_FLAGCODE_ON) && (Megaphone_MegDataGenFlag(JZ_FLAGCODE_GET, 0) == JZ_FLAGCODE_ON));
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
... ...
... ... @@ -11,7 +11,7 @@
#include "MediaProc/VideoMgmt/VideoMgmt.h"
#include "./WidegMgmt/JZsdk_Widget.h"
#include "Gimbal_InAndOut.h"
#include "Gimbal/Gimbal.h"
#include "DeviceInfo/DeviceInfo.h"
#if APP_VERSION == APP_PSDK
... ... @@ -1371,6 +1371,29 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Camera_BadPixelSwitch(int wheather_ChangeWidg
/*********
*
* 开次单次spc重计
*
**********/
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Camera_SPC_ResetSwitch(int wheather_ChangeWidget, int wheather_control, int value)
{
//如果修改控件
if (wheather_ChangeWidget == JZ_FLAGCODE_ON)
{
//无控件变化
}
//如果进行控制
if (wheather_control == JZ_FLAGCODE_ON)
{
UIcontrol_Camera_SPC_ResetSwitch(DEVICE_PSDK, value);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/*********
*
* 冻结视频流
*
**********/
... ...
... ... @@ -125,8 +125,6 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightFirstColor(int wheather_contr
//警灯颜色2
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_WarningLightSecondColor(int wheather_control, int value);
//获取云台状态标志位
int Get_JZsdk_GimbalStatusFlag();
//对外供电开关
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_OutputPowerStatus(int wheather_control,int value);
... ... @@ -150,6 +148,8 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_PseudoColor(int wheather_ChangeWidget, in
// psdk 像素色彩模式
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_PixelColorMode(int wheather_ChangeWidget, int wheather_control, int value);
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Camera_BadPixelSwitch(int wheather_ChangeWidget, int wheather_control, int value);
T_JZsdkReturnCode JZsdk_Psdk_UI_io_Camera_SPC_ResetSwitch(int wheather_ChangeWidget, int wheather_control, int value);
T_JZsdkReturnCode JZsdk_Psdk_UI_io_FreezeVideo(int wheather_ChangeWidget, int wheather_control, int value);
T_JZsdkReturnCode JZsdK_SetFocusTarget(int PointX, int PointY);
T_JZsdkReturnCode JZsdk_Psdk_UI_io_CameraCorrectMode(int wheather_ChangeWidget, int wheather_control, int value);
... ...
... ... @@ -4,7 +4,7 @@
#include "Megaphone/Megaphone.h"
#include "Lighting_InAndOut.h"
#include "Gimbal_InAndOut.h"
#include "Gimbal/Gimbal.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"
#include "JZsdk_uart/Uart_Config.h"
#include "Psdk_UI_io.h"
... ... @@ -837,7 +837,7 @@ T_JZsdkReturnCode UIcontrol_Set_GimbalPitchAngle(int DeviceName,int value)
T_JZsdkReturnCode UIcontrol_SetGimbalRange(int DeviceName,int value)
{
//调用喊话器的接口
T_JZsdkReturnCode ret = Gimbal_SetGimbalRange(value);
T_JZsdkReturnCode ret = Gimbal_SetGimbalRange(0, value);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
printf("%s:%s\n",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret));
... ... @@ -851,7 +851,7 @@ T_JZsdkReturnCode UIcontrol_SetGimbalRange(int DeviceName,int value)
T_JZsdkReturnCode UIcontrol_Set_GimbalPitchFineTuning(int DeviceName,int value)
{
//调用接口
T_JZsdkReturnCode ret = Gimbal_Set_PitchFineTuning(DeviceName, value);
T_JZsdkReturnCode ret = Gimbal_Set_PitchFineTuning(value);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
printf("%s:%s\n",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret));
... ... @@ -887,20 +887,20 @@ T_JZsdkReturnCode UIcontrol_Set_GimbalPitchFineTuning(int DeviceName,int value)
//查询云台角度
T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalAngle(int *PitchValue, int *YawValue)
{
Gimbal_CheckStatus_Angle(PitchValue, YawValue);
Gimbal_CheckStatus_Angle(PitchValue, YawValue, NULL);
}
//查询云台微调值
T_JZsdkReturnCode UIcontrol_CheckStatus_GimbalPitchFineTuning(int *PitchValue, int *YawValue)
{
Gimbal_CheckStatus_GimbalFineTuning(PitchValue, YawValue);
Gimbal_CheckStatus_GimbalFineTuning(PitchValue, YawValue, NULL);
}
//获得云台俯仰微调值
T_JZsdkReturnCode UIcontrol_Obtain_GimbalPitchFineTuninng(int DeviceName, int Pitch)
{
//调用接口
T_JZsdkReturnCode ret = Gimbal_Obtain_GimbalFineTuning(Pitch);
T_JZsdkReturnCode ret = Gimbal_Obtain_GimbalFineTuning(Pitch, 0, 0);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
printf("%s:%s\n",UI_CONTROL_ERROR,JZsdk_GetReturnCodeMessage(ret));
... ... @@ -2063,6 +2063,22 @@ T_JZsdkReturnCode UIcontrol_Camera_BadPixelSwitch(int DeviceName, int value)
#endif
}
/*********
*
* 开次spc重计
*
**********/
T_JZsdkReturnCode UIcontrol_Camera_SPC_ResetSwitch(int DeviceName, int value)
{
#if MEDIA_PROC_CONFIG_STATUS == VERSION_SWITCH_ON
T_JZsdkReturnCode ret;
ret = JZsdk_CameraSPC_ResetSwitch(JZ_FLAGCODE_ON);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
return ret;
}
#endif
}
/****************************************************************************************************************************************
*
... ...
... ... @@ -105,6 +105,7 @@ T_JZsdkReturnCode UIcontrol_Send_CameraStatus(int status);
T_JZsdkReturnCode UIcontrol_Set_VideoMgmtPushIndex(int DeviceName, int Pushindex);
T_JZsdkReturnCode UIcontrol_Set_ShutterSwitch(int DeviceName, int value);
T_JZsdkReturnCode UIcontrol_Camera_BadPixelSwitch(int DeviceName, int value);
T_JZsdkReturnCode UIcontrol_Camera_SPC_ResetSwitch(int DeviceName, int value);
T_JZsdkReturnCode UIcontrol_FreezeVideo(int DeviceName, int value);
T_JZsdkReturnCode UIcontrol_Set_PseudoColor(int DeviceName, int value);
T_JZsdkReturnCode UIcontrol_Set_PixelColorMode(int DeviceName, int value);
... ...
... ... @@ -68,6 +68,10 @@ static int WidgetMgMT_Control_WorkFuntion(int Inscode, int value)
JZsdk_Psdk_UI_io_Camera_BadPixelSwitch(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
break;
case JZSDK_WIDGET_SPC_RESET:
JZsdk_Psdk_UI_io_Camera_SPC_ResetSwitch(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
break;
case JZSDK_WIDGET_FREEZE_VIDEO:
JZsdk_Psdk_UI_io_FreezeVideo(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value);
break;
... ...
... ... @@ -35,10 +35,13 @@ typedef enum JZsdk_Widget_Control
JZSDK_WIDGET_CAMERA_CORRECT_MODE = 0x0015, //相机纠正模式
JZSDK_WIDGET_GAS_ENHANCEMENT_COLOR = 0x0016, //气体增强颜色
JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT = 0x0017, //气体增强纠正
JZSDK_WIDGET_SPC_RESET = 0x0019, //spc重置
JZSDK_WIDGET_FREEZE_VIDEO = 0x0018, //冻结视频流
JZSDK_WIDGET_SIDE_LASER_MODE = 0x0020,
}JZsdk_Widget_Control;
/* Exported types ------------------------------------------------------------*/
... ...
... ... @@ -165,31 +165,34 @@ static const T_DjiWidgetHandlerListItem s_widgetHandlerList[] = {
{7, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//纠正选项
{8, DJI_WIDGET_TYPE_LIST, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//气体增强颜色选项
{9, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//坏点纠正
{10, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//记录盲点_亮点
{11, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//记录盲点_黑点
{12, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//移除上一个盲点
{13, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//系统部分
{14, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{15, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{16, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{10, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//重计单点纠正
{11, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{12, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{13, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{14, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//系统部分
{15, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{16, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{17, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
{18, DJI_WIDGET_TYPE_BUTTON, DjiTestWidget_SetWidgetValue, DjiTestWidget_GetWidgetValue, NULL},//
};
static const uint32_t s_widgetHandlerListCount = sizeof(s_widgetHandlerList) / sizeof(T_DjiWidgetHandlerListItem);
int32_t s_widgetValueList[18] = {VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND,
int32_t s_widgetValueList[19] = {VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND,
OFF,
ON,
OFF,
1,
OFF,
OFF,
OFF,
8,
1,
0,
OFF,
OFF,
OFF,
OFF,
OFF,
OFF, //系统部分
OFF,
OFF,
... ... @@ -857,18 +860,29 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
break;
}
case 10://气体增强纠正
case 10:
{
if (value == 1 && num_flag == 3)
{
printf("重新进行单点纠正\n");
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_SPC_RESET, value);
}
break;
}
case 11://气体增强纠正
{
if (value == 1)
{
printf("气体增强纠正\n");
JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT, value);
}
break;
}
case 11:
case 12:
{
if (value == 1 && num_flag == 3)
{
... ... @@ -881,7 +895,7 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
break;
}
case 12:
case 13:
{
if (value == 1 && num_flag == 3)
{
... ... @@ -893,7 +907,7 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
break;
}
case 13://版本信息
case 14://版本信息
{
if(value==1){
num_flag+=1;
... ... @@ -915,7 +929,7 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
break;
}
case 14:
case 15:
{
if (value == 1)
{
... ... @@ -926,7 +940,7 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
break;
}
case 15:
case 16:
{
if (value == 1)
{
... ... @@ -937,7 +951,7 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
break;
}
case 16:
case 17:
{
if (value == 1)
{
... ... @@ -948,7 +962,7 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
break;
}
case 17:
case 18:
{
if (value == 1)
{
... ... @@ -959,6 +973,7 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value)
break;
}
default:
break;
}
... ...