完善并调试摄像机拍照,完善并调试云台控制指令,解决在拍照过程中插入云台控制指令造成命令逻辑顺序紊乱的问题

serial
huyizhong 12 months ago
parent 8856013295
commit 11e6072896

@ -2,7 +2,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.xinyingpower.testcomm">
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
@ -16,6 +18,7 @@
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

@ -27,9 +27,9 @@ add_library( # Sets the name of the library.
SpiLib.cpp
native-lib.cpp
GPIOControl.cpp
#WeatherComm.cpp
serialComm.cpp
SensorsProtocol.cpp
WeatherComm.cpp
#serialComm.cpp
#SensorsProtocol.cpp
)
# Searches for a specified prebuilt library and stores the path as a

@ -36,6 +36,17 @@
#define CMD_SET_CAM_3V3_EN_STATE 132
#define CMD_SET_12V_EN_STATE 133
#define CMD_SET_SYSTEM_RESET 202
#define CMD_SET_WTH_POWER 490
#define CMD_SET_PULL_POWER 491
#define CMD_SET_ANGLE_POWER 492
#define CMD_SET_OTHER_POWER 493
#define CMD_SET_PIC1_POWER 494
#define CMD_SET_485_en0 301
#define CMD_SET_485_en1 302
#define CMD_SET_485_en2 303
#define CMD_SET_485_en3 304
#define CMD_SET_485_en4 305
class GpioControl
{

File diff suppressed because it is too large Load Diff

@ -58,6 +58,7 @@ typedef unsigned char BYTE;
#define PTZ_MOVETIME 1 // 云台移动等待时间为1秒
#define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/
#define MAX_PHOTO_FRAME_LEN 1024 /* 图片数据一包最大长度*/
#define MAX_PHOTO_PACKET_NUM 1024 /* 图片最大包数图片最大定为1MB*/
#define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/
#define TIMER_CNT 50 // Poll命令定时器时间 5 ms
@ -94,6 +95,19 @@ typedef unsigned char BYTE;
#define D_MOVE_LEFT 0x00042d00 /* 向左移动镜头(1 有效)*/
#define D_MOVE_RIGHT 0x00022d00 /* 向右移动镜头(1 有效)*/
/* 摄像机下发命令宏定义*/
#define Auto_Scan 10006 /* 自动扫描功能控制(1/0 打开/关闭该功能)*/
#define IRIS_CLOSE 10007 /* 光圈缩小(1 有效)*/
#define IRIS_OPEN 10008 /* 光圈放大(1 有效)*/
#define FOCUS_NEAR 10009 /* 近距离聚焦(1 有效)*/
#define FOCUS_FAR 10010 /* 远距离聚焦(1 有效)*/
#define ZOOM_WIDE 10011 /* 远离物体(1 有效)*/
#define ZOOM_TELE 10012 /* 接近物体(1 有效)*/
#define MOVE_DOWN 10013 /* 向下移动镜头(1 有效)*/
#define MOVE_UP 10014 /* 向上移动镜头(1 有效)*/
#define MOVE_LEFT 10015 /* 向左移动镜头(1 有效)*/
#define MOVE_RIGHT 10016 /* 向右移动镜头(1 有效)*/
#define SPEED_DOME_CAMERA 0 /* 球机摄像机*/
#define SERIAL_CAMERA 2 /* 串口摄像机a*/
@ -139,6 +153,16 @@ typedef struct
float EuValue; // 遥测工程值
} AI_DEF;
typedef struct
{
int imagelen; // 整个图片大小
int imagenum; // 整个图片的总包数
int phototime; // 拍照时间
u_char presetno; // 拍照预置点
u_char buf[MAX_PHOTO_PACKET_NUM][MAX_PHOTO_FRAME_LEN]; // 图片数据缓存
int ilen[MAX_PHOTO_PACKET_NUM]; // 相对应的每包图片数据的长度
} PHOTO_DEF;
// 上层调用采集传感器参数
typedef struct
{
@ -159,7 +183,7 @@ typedef struct
{
unsigned int baudrate; /* 波特率*/
int databit; /* 数据位*/
char stopbit[8]; /* 停止位*/
int stopbit; /* 停止位*/
char parity; /* 校验位*/
char pathname[64]; /* 串口文件名及路径*/
int commid; /* 串口序号 注意从0开始*/
@ -234,13 +258,10 @@ typedef struct
0x3X;
0x4X;
0x5X;*/
int m_iRevStatus; /* 接收数据缓冲区状态*/
int m_iRecvLen; /* 接收数据长度*/
int m_iNeedRevLength; /* 还需要接收的数据长度*/
int recvdatacnt; /* 接收到有效数据*/
u_char SameTypeDevIdx; /* 相同类型装置顺序排列序号(从0开始)*/
int iRecvTime; /* 最近一次收到数据的绝对时间*/
u_char uOpenPowerFlag; /* 传感器上电标志(0:不需要打开; 1:需要打开)*/
int recvdatacnt; /* 接收到有效数据*/
PHOTO_DEF image; /* 临时存储图片数据*/
AI_DEF aiValue[MAX_DEV_VALUE_NUM]; /* 传感器采样值*/
} SERIAL_DEV_DEF;
@ -284,29 +305,11 @@ typedef struct
int sendphotocmdcnt; /* 一次拍照过程中发送拍照指令计数*/
int photographtime; /* 图片拍摄的时间*/
int iLastGetPhotoNo; /* 设置串口摄像机参数时暂存拍照命令序号*/
u_char bImageSize; /* 用于临时存储接收上层命令的图片大小*/
u_char presetno; /* 用于临时存储接收上层命令的预置点*/
#endif
u_char errorPhotoNoCnt; /* 串口摄像机拍照时回应错误包号计数(如:召第6包回应第3包)*/
u_char RephotographCnt; /* 串口摄像机重拍计数(只在读照片数据应答出错时才重拍)*/
int restartflag; /* 升级重启标识*/
int selfflag; /* 是否检测传感器故障和关闭485电源标志*/
BYTE bEncryptstate; /* 加密状态
0:;1:;
2:;3:*/
#if ENCRYPTION_CHIP
CERTIFICATE cert; /* 本端证书*/
BYTE Randomnumber[18]; /* 临时存储加密芯片产生的随机数据*/
BYTE KeyRandonum[18]; /* 临时存储对端的随机数据及会话密钥DK*/
BYTE Sm2publickey[64]; /* 临时存储本端Sm2公钥*/
BYTE Sm2encrypt[128]; /* 临时存储使用本端Sm2公钥加密后的数据*/
BYTE Sm3hashdata[32]; /* 临时存储Sm3 Hash后数据*/
BYTE Safetycertification[32];/* 临时存储安全认证因子*/
char ticr[64]; /* 临时存储证书请求的主题信息*/
WORD wframeno; /* 帧序号*/
BYTE encry_chipstate; /* 加密芯片复位状态*/
int enchipstartnum; /* 加密芯片复位次数*/
#endif
} SRDT_DEF;
static void PortDataProcess( void );
@ -325,7 +328,7 @@ static void setCam3V3Enable(bool enabled);
void Gm_OpenSerialPower(void);
// 打开传感器电源
void Gm_OpenSensorsPower(int port);
void Gm_OpenSensorsPower();
// 关闭传感器电源
void Gm_CloseSensorsPower(int port);
@ -427,8 +430,8 @@ int Gm_SetSerialPortBaud(int commid);
//T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate);
void Gm_CloseSerialCamera();
void CameraPhoto(SENSOR_PARAM *sensorParam, unsigned char channel, int cmdidx);
void CameraPhotoCmd(SENSOR_PARAM *sensorParam, u_char channel, int cmdidx, u_char bImageSize, u_char presetno);
int SaveImageDataTofile(int devno);
// 生成一个随机整数
int GeneratingRandomNumber();

@ -424,6 +424,16 @@ static int weather_comm(SERIAL_PARAM weatherport)
set12VEnable(true);
setCam3V3Enable(true);
setRS485Enable(true);
setInt(CMD_SET_WTH_POWER, 1);
setInt(CMD_SET_PULL_POWER, 1);
setInt(CMD_SET_ANGLE_POWER, 1);
setInt(CMD_SET_OTHER_POWER, 1);
setInt(CMD_SET_PIC1_POWER, 1);
setInt(CMD_SET_485_en0, 1);
setInt(CMD_SET_485_en1, 1);
setInt(CMD_SET_485_en2, 1);
setInt(CMD_SET_485_en3, 1);
setInt(CMD_SET_485_en4, 1);
sleep(3);
//ictime = (int)time(NULL);
ictime = get_msec();
@ -435,10 +445,12 @@ static int weather_comm(SERIAL_PARAM weatherport)
//fd = open(weatherport.pathname, O_RDWR | O_NOCTTY);
if(fd < 0)
{
LOGE("_test_ open serial error \n");
perror(weatherport.pathname);
LOGE("open serial %s fail!", weatherport.pathname);
//perror(weatherport.pathname);
return -1;
}
} else
LOGE("open serial %s success!", weatherport.pathname);
ret= set_port_attr (fd, weatherport.baudrate,weatherport.databit,weatherport.stopbit,weatherport.parity,0,0 );/*9600 8n1 */
if(ret < 0)
@ -554,10 +566,11 @@ int serial_port_comm()
#if 1
memset(portparm.pathname, 0, sizeof(portparm.pathname));
sprintf(portparm.pathname, "/dev/ttyS0");
sprintf(portparm.pathname, "/dev/ttyS1");
//sprintf(portparm.pathname, "/dev/ttysWK3");
portparm.parity = 'N';
portparm.databit = 8;
portparm.baudrate = B38400;
portparm.baudrate = B9600;
memset(portparm.stopbit, 0, sizeof(portparm.stopbit));
sprintf(portparm.stopbit, "1");
#endif

@ -18,9 +18,9 @@
#include <termios.h>
#include <time.h>
#include "GPIOControl.h"
#include "serialComm.h"
#include "SensorsProtocol.h"
//#include "WeatherComm.h"
//#include "serialComm.h"
//#include "SensorsProtocol.h"
#include "WeatherComm.h"
#if 0
#define BYTE u_char;
@ -634,7 +634,7 @@ Java_com_xinyingpower_testcomm_MainActivity_stringFromJNI(
extern "C" JNIEXPORT jstring JNICALL
Java_com_xinyingpower_testcomm_MainActivity_testSpi(
JNIEnv* env,
jobject /* this */, jint port) {
jobject /*this*/, jint port) {
//testSpi();
SpiLIb a;
unsigned char newkey[32]={0xaf,0x0c,0xa9,0x40,0x1f,0xe6,0xee,0x0f,0x4c,
@ -662,9 +662,9 @@ Java_com_xinyingpower_testcomm_MainActivity_testSpi(
//setRS485Enable(true);
//set12VEnable(true);
//serial_port_comm();
serial_port_comm();
//GM_StartSerialComm();
Gm_InitSerialComm();
//Gm_InitSerialComm();
//GM_StartSerialCameraPhoto(1, 0);
//lxy modify modify
//LOGE("_test_ setRS485Enable false");
@ -751,7 +751,7 @@ Java_com_xinyingpower_testcomm_MainActivity_testSpi(
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//// lxy add
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#if 0
static speed_t getBaudrate(jint baudrate)
{
switch(baudrate) {
@ -916,3 +916,4 @@ extern "C" JNIEXPORT jint JNICALL Java_com_xinyingpower_testcomm_MainActivity_re
env->ReleaseByteArrayElements(out, outData, 0);
return res;
}
#endif

@ -71,27 +71,26 @@ static void set_parity (struct termios *opt, char parity)
}
}
static void set_stopbit (struct termios *opt, const char *stopbit)
static void set_stopbit (struct termios *opt, const int stopbit)
{
if (strcmp(stopbit, "1") == 0)
switch (stopbit)
{
opt->c_cflag &= ~CSTOPB;/*1 位停止位 t */
}
else if(0 == strcmp(stopbit, "1.5"))
{
opt->c_cflag &= ~CSTOPB;/*1.5 位停止位 */
}
else if(0 == strcmp (stopbit,"2"))
{
opt->c_cflag |= CSTOPB; /*2 位停止位 */
}
else
{
opt->c_cflag &= ~CSTOPB; /*1 位停止位 */
case 10:
opt->c_cflag &= ~CSTOPB;/*1 位停止位 t */
break;
case 15:
opt->c_cflag &= ~CSTOPB;/*1.5 位停止位 */
break;
case 20:
opt->c_cflag |= CSTOPB; /*2 位停止位 */
break;
default:
opt->c_cflag &= ~CSTOPB; /*1 位停止位 */
break;
}
}
int set_port_attr (int fd, unsigned int baudrate, int databit, const char *stopbit, char parity, int vtime, int vmin )
int set_port_attr (int fd, unsigned int baudrate, int databit, const int stopbit, char parity, int vtime, int vmin )
{
struct termios opt;
tcgetattr(fd, &opt);

@ -14,6 +14,6 @@
#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, "serial_port_comm", fmt, ##args)
int set_port_attr (int fd, unsigned int baudrate, int databit, const char *stopbit, char parity, int vtime, int vmin );
int set_port_attr (int fd, unsigned int baudrate, int databit, const int stopbit, char parity, int vtime, int vmin );
#endif //SERIAL_COMM_BASE89656_H

@ -1,6 +1,5 @@
package com.xinyingpower.testcomm;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
@ -36,7 +35,7 @@ public class MainActivity extends AppCompatActivity {
public void onClick(View v) {
String s = binding.edtPort.getText().toString();
// Integer integer = Integer.valueOf(s);
String str = testSpi(0,"ghghghh");
String str = testSpi(0);
binding.sampleText.setText(s);
}
});
@ -58,5 +57,5 @@ public class MainActivity extends AppCompatActivity {
*/
public native String stringFromJNI();
public native String testSpi(int port,String ss);
public native String testSpi(int port);
}

File diff suppressed because it is too large Load Diff

@ -58,6 +58,7 @@ typedef unsigned char BYTE;
#define PTZ_MOVETIME 1 // 云台移动等待时间为1秒
#define MAX_CHANNEL_NUM 2 /* 视频通道最大通道*/
#define MAX_PHOTO_FRAME_LEN 1024 /* 图片数据一包最大长度*/
#define MAX_PHOTO_PACKET_NUM 1024 /* 图片最大包数图片最大定为1MB*/
#define RECVDATA_MAXLENTH 2048 /* 接收数据缓冲区最大值*/
#define TIMER_CNT 50 // Poll命令定时器时间 5 ms
@ -94,6 +95,19 @@ typedef unsigned char BYTE;
#define D_MOVE_LEFT 0x00042d00 /* 向左移动镜头(1 有效)*/
#define D_MOVE_RIGHT 0x00022d00 /* 向右移动镜头(1 有效)*/
/* 摄像机下发命令宏定义*/
#define Auto_Scan 10006 /* 自动扫描功能控制(1/0 打开/关闭该功能)*/
#define IRIS_CLOSE 10007 /* 光圈缩小(1 有效)*/
#define IRIS_OPEN 10008 /* 光圈放大(1 有效)*/
#define FOCUS_NEAR 10009 /* 近距离聚焦(1 有效)*/
#define FOCUS_FAR 10010 /* 远距离聚焦(1 有效)*/
#define ZOOM_WIDE 10011 /* 远离物体(1 有效)*/
#define ZOOM_TELE 10012 /* 接近物体(1 有效)*/
#define MOVE_DOWN 10013 /* 向下移动镜头(1 有效)*/
#define MOVE_UP 10014 /* 向上移动镜头(1 有效)*/
#define MOVE_LEFT 10015 /* 向左移动镜头(1 有效)*/
#define MOVE_RIGHT 10016 /* 向右移动镜头(1 有效)*/
#define SPEED_DOME_CAMERA 0 /* 球机摄像机*/
#define SERIAL_CAMERA 2 /* 串口摄像机a*/
@ -139,6 +153,16 @@ typedef struct
float EuValue; // 遥测工程值
} AI_DEF;
typedef struct
{
int imagelen; // 整个图片大小
int imagenum; // 整个图片的总包数
int phototime; // 拍照时间
u_char presetno; // 拍照预置点
u_char buf[MAX_PHOTO_PACKET_NUM][MAX_PHOTO_FRAME_LEN]; // 图片数据缓存
int ilen[MAX_PHOTO_PACKET_NUM]; // 相对应的每包图片数据的长度
} PHOTO_DEF;
// 上层调用采集传感器参数
typedef struct
{
@ -159,7 +183,7 @@ typedef struct
{
unsigned int baudrate; /* 波特率*/
int databit; /* 数据位*/
char stopbit[8]; /* 停止位*/
int stopbit; /* 停止位*/
char parity; /* 校验位*/
char pathname[64]; /* 串口文件名及路径*/
int commid; /* 串口序号 注意从0开始*/
@ -234,13 +258,10 @@ typedef struct
0x3X;
0x4X;
0x5X;*/
int m_iRevStatus; /* 接收数据缓冲区状态*/
int m_iRecvLen; /* 接收数据长度*/
int m_iNeedRevLength; /* 还需要接收的数据长度*/
int recvdatacnt; /* 接收到有效数据*/
u_char SameTypeDevIdx; /* 相同类型装置顺序排列序号(从0开始)*/
int iRecvTime; /* 最近一次收到数据的绝对时间*/
u_char uOpenPowerFlag; /* 传感器上电标志(0:不需要打开; 1:需要打开)*/
int recvdatacnt; /* 接收到有效数据*/
PHOTO_DEF image; /* 临时存储图片数据*/
AI_DEF aiValue[MAX_DEV_VALUE_NUM]; /* 传感器采样值*/
} SERIAL_DEV_DEF;
@ -284,29 +305,11 @@ typedef struct
int sendphotocmdcnt; /* 一次拍照过程中发送拍照指令计数*/
int photographtime; /* 图片拍摄的时间*/
int iLastGetPhotoNo; /* 设置串口摄像机参数时暂存拍照命令序号*/
u_char bImageSize; /* 用于临时存储接收上层命令的图片大小*/
u_char presetno; /* 用于临时存储接收上层命令的预置点*/
#endif
u_char errorPhotoNoCnt; /* 串口摄像机拍照时回应错误包号计数(如:召第6包回应第3包)*/
u_char RephotographCnt; /* 串口摄像机重拍计数(只在读照片数据应答出错时才重拍)*/
int restartflag; /* 升级重启标识*/
int selfflag; /* 是否检测传感器故障和关闭485电源标志*/
BYTE bEncryptstate; /* 加密状态
0:;1:;
2:;3:*/
#if ENCRYPTION_CHIP
CERTIFICATE cert; /* 本端证书*/
BYTE Randomnumber[18]; /* 临时存储加密芯片产生的随机数据*/
BYTE KeyRandonum[18]; /* 临时存储对端的随机数据及会话密钥DK*/
BYTE Sm2publickey[64]; /* 临时存储本端Sm2公钥*/
BYTE Sm2encrypt[128]; /* 临时存储使用本端Sm2公钥加密后的数据*/
BYTE Sm3hashdata[32]; /* 临时存储Sm3 Hash后数据*/
BYTE Safetycertification[32];/* 临时存储安全认证因子*/
char ticr[64]; /* 临时存储证书请求的主题信息*/
WORD wframeno; /* 帧序号*/
BYTE encry_chipstate; /* 加密芯片复位状态*/
int enchipstartnum; /* 加密芯片复位次数*/
#endif
} SRDT_DEF;
static void PortDataProcess( void );
@ -325,7 +328,7 @@ static void setCam3V3Enable(bool enabled);
void Gm_OpenSerialPower(void);
// 打开传感器电源
void Gm_OpenSensorsPower(int port);
void Gm_OpenSensorsPower();
// 关闭传感器电源
void Gm_CloseSensorsPower(int port);
@ -427,8 +430,8 @@ int Gm_SetSerialPortBaud(int commid);
//T_baudrate Gm_GetSerialPortBaud(UART_baudrate Baudrate);
void Gm_CloseSerialCamera();
void CameraPhoto(SENSOR_PARAM *sensorParam, unsigned char channel, int cmdidx);
void CameraPhotoCmd(SENSOR_PARAM *sensorParam, u_char channel, int cmdidx, u_char bImageSize, u_char presetno);
int SaveImageDataTofile(int devno);
// 生成一个随机整数
int GeneratingRandomNumber();

@ -71,27 +71,26 @@ static void set_parity (struct termios *opt, char parity)
}
}
static void set_stopbit (struct termios *opt, const char *stopbit)
static void set_stopbit (struct termios *opt, const int stopbit)
{
if (strcmp(stopbit, "1") == 0)
switch (stopbit)
{
opt->c_cflag &= ~CSTOPB;/*1 位停止位 t */
}
else if(0 == strcmp(stopbit, "1.5"))
{
opt->c_cflag &= ~CSTOPB;/*1.5 位停止位 */
}
else if(0 == strcmp (stopbit,"2"))
{
opt->c_cflag |= CSTOPB; /*2 位停止位 */
}
else
{
opt->c_cflag &= ~CSTOPB; /*1 位停止位 */
case 10:
opt->c_cflag &= ~CSTOPB;/*1 位停止位 t */
break;
case 15:
opt->c_cflag &= ~CSTOPB;/*1.5 位停止位 */
break;
case 20:
opt->c_cflag |= CSTOPB; /*2 位停止位 */
break;
default:
opt->c_cflag &= ~CSTOPB; /*1 位停止位 */
break;
}
}
int set_port_attr (int fd, unsigned int baudrate, int databit, const char *stopbit, char parity, int vtime, int vmin )
int set_port_attr (int fd, unsigned int baudrate, int databit, const int stopbit, char parity, int vtime, int vmin )
{
struct termios opt;
tcgetattr(fd, &opt);

@ -14,6 +14,6 @@
#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, "serial_port_comm", fmt, ##args)
int set_port_attr (int fd, unsigned int baudrate, int databit, const char *stopbit, char parity, int vtime, int vmin );
int set_port_attr (int fd, unsigned int baudrate, int databit, const int stopbit, char parity, int vtime, int vmin );
#endif //SERIAL_COMM_BASE89656_H

Loading…
Cancel
Save