修改串口

main
jxjajs 6 months ago
parent a346f1906f
commit 813d9f6485

@ -6,6 +6,16 @@
#define MICROPHOTO_GPIOCONTROL_H
#include <string>
#include <chrono>
#include <thread>
#include <mutex>
#include <vector>
#include <utility>
#define USING_N938 1
#ifndef USING_N938
#ifndef USING_PLZ // MicroPhoto
#define CMD_GET_LIGHT_ADC 101
#define CMD_SET_LIGHT_ADC 102
@ -31,50 +41,79 @@
#define CMD_SET_SPI_MAXSPEEDHZ 125
#define CMD_SET_PWM_BEE_STATE 126
#define CMD_SET_ALM_MODE 128
#define CMD_SET_SPI_POWER 129
#define CMD_SET_SYSTEM_RESET 202
#define CMD_SET_485_EN_STATE 131
#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
#if 1
#define CMD_SET_SPI_POWER 129
#define CMD_SET_CAM_3V3_EN_STATE 132
#endif
#define CMD_SET_ADC_ENABLE 500
#define CMD_SET_MIPI_SWITCH 501
#define CMD_SET_CAM_RSTN1 502
#define CMD_SET_CAM_RSTN0 503
#else // defined(USING_PLZ)
#define CMD_SET_485_ENABLE 512
#define CMD_SET_3V3_PWR_ENABLE 516
#define CMD_SET_5V_PWR_ENABLE 517
#define CMD_SET_SENSOR_ENABLE 504
#define CMD_SET_SENSOR_PWR_ENABLE 505
#define CMD_SET_SENSOR2_ENABLE 506
#define CMD_SET_SD_DECT 507
#define CMD_SET_PTZ_PWR_ENABLE 508
#define CMD_SET_SENSOR3_PWR_ENABLE 509
#define CMD_SET_SENSOR4_ENABLE 510
#define CMD_SET_RTC_ENABLE 511
#define CMD_SET_485_ENABLE 512
#define CMD_SET_SENSOR1_PWR_ENABLE 513
#define CMD_SET_SENSOR2_PWR_ENABLE 514
#define CMD_SET_SENSOR3_PWR_ENABLE 509
#define CMD_SET_SENSOR4_PWR_ENABLE 525
#define CMD_SET_PHOTO_IN 520
#define CMD_SET_PHOTO_OUT 515
#define CMD_SET_3V3_PWR_ENABLE 516
#define CMD_SET_5V_PWR_ENABLE 517
#define CMD_SET_ADC_ENABLE 500
#define CMD_SET_MIPI_SWITCH 501
#define CMD_SET_CAM_RSTN1 502
#define CMD_SET_CAM_RSTN0 503
#define CMD_SET_SD_DECT 507
#define CMD_SET_PTZ_PWR_ENABLE 508
#define CMD_SET_RTC_ENABLE 511
#define CMD_SET_100M_ENABLE 518
#define CMD_SET_100M_SWITCH_PWR_ENABLE 519
#define CMD_SET_PHOTO_IN 520
#define CMD_SET_AM_POWER_ENABLE 521
#define CMD_SET_NRSEC_POWER_ENABLE 522
#define CMD_SET_AMP_ENABLE 523
#define CMD_SET_LIGHT1_RESISTOR_ENABLE 524
#define CMD_SET_SENSOR4_PWR_ENABLE 525
#define CMD_SET_100M_RESET 526
#endif // USING_PLZ
#else // defined(USING_N938)
#define CMD_SET_SYSTEM_RESET 202
#define CMD_SET_485_EN1 302
#define CMD_SET_CAM_3V3_EN_STATE 360
#define CMD_SET_UART0_EN 361
#define CMD_SET_485_EN0 301
#define CMD_SET_NETWORK_POWER_EN 362
#define CMD_SET_485_EN3 304
#define CMD_SET_485_EN2 303
#define CMD_SET_SPI_POWER 129
#define CMD_SET_5V_EN 363
#define CMD_SDCARD_DETECT_EN 364
#define CMD_SET_PIC1_POWER 494
#define CMD_SET_OTHER_POWER 493
#define CMD_SET_ANGLE_POWER 492
#define CMD_SET_PULL_POWER 491
#define CMD_SET_WTH_POWER 490
#define CMD_SET_485_EN4 305
#define CMD_LED_CTRL 365
#define CMD_BD_EN 366
#define CMD_ADC_EN 367
#define CMD_SPI2SERIAL_POWER_EN 368
#define CMD_RS485_3V3_EN 369
// Others
#define CMD_SET_485_EN_STATE 131
#define CMD_SET_OTG_STATE 107
#endif // USING_N938
#define GPIO_NODE_MP "/dev/mtkgpioctrl"
class GpioControl
{
public:
@ -93,7 +132,11 @@ public:
static bool getOtgState()
{
return getInt(CMD_SET_OTG_STATE) != 0;
#if USING_N938
return false;
#else
return getInt(CMD_GET_OTG_STATE) != 0;
#endif
}
static void setCam3V3Enable(bool enabled)
@ -108,14 +151,23 @@ public:
static void setLightAdc(int i)
{
#if USING_N938
;
#else
setInt(CMD_SET_LIGHT_ADC, i);
#endif
}
static int getLightAdc()
{
#if USING_N938
return 0;
#else
return getInt(CMD_GET_LIGHT_ADC);
#endif
}
#if USING_N938
#else
static int getChargingVoltage()
{
return getInt(CMD_GET_CHARGING_VOL_STATE);
@ -198,7 +250,7 @@ public:
static void set12VEnable(bool z) {
setInt(CMD_SET_12V_EN_STATE, z ? 1 : 0);
}
#endif
};

@ -22,12 +22,15 @@
#include "GPIOControl.h"
#include "serialComm.h"
#include <sys/time.h>
#include <pthread.h>
//#include <AndroidHelper.h>
#include "SensorsProtocol.h"
//#include "Eint.h"
#include <algorithm>
pthread_mutex_t serial_mutex = PTHREAD_MUTEX_INITIALIZER; // 定义一个互斥锁
pthread_mutex_t camera_mutex = PTHREAD_MUTEX_INITIALIZER; // 定义一个互斥锁
SIO_PARAM_SERIAL_DEF serialport[MAX_SERIAL_PORT_NUM];
@ -75,17 +78,6 @@ static void setRS485Enable(bool z) {
setInt(CMD_SET_485_EN_STATE, z ? 1 : 0);
}
static void set485WriteMode() {
setInt(CMD_SET_485_STATE, 1);
}
static void set485ReadMode() {
setInt(CMD_SET_485_STATE, 0);
}
static void set12VEnable(bool z) {
setInt(CMD_SET_12V_EN_STATE, z ? 1 : 0);
}
static void setCam3V3Enable(bool enabled)
{
setInt(CMD_SET_CAM_3V3_EN_STATE, enabled ? 1 : 0);
@ -535,7 +527,7 @@ static speed_t getBaudrate(unsigned int baudrate)
}
}
static int64_t get_msec()
int64_t get_msec()
{
struct timeval tv;
int64_t time_in_msec = 0;
@ -573,7 +565,7 @@ void Gm_CloseSensorsPower()
/* 关闭电源*/
//switch(port)
/* 根据硬件具体布置最后调整,目前是微拍板子的来控制*/
set12VEnable(false);
/* set12VEnable(false);
setCam3V3Enable(false);
setRS485Enable(false);
@ -593,46 +585,43 @@ void Gm_CloseSensorsPower()
#endif
#if 1
setInt(CMD_SET_SPI_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);
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);
#else
setInt(CMD_SET_SPI_POWER, 0);
setInt(CMD_SET_485_en0, 0);
setInt(CMD_SET_485_en1, 0);
setInt(CMD_SET_485_en2, 0);
setInt(CMD_SET_485_en3, 0);
setInt(CMD_SET_485_en4, 0);
setInt(CMD_SET_485_EN0, 0);
setInt(CMD_SET_485_EN1, 0);
setInt(CMD_SET_485_EN2, 0);
setInt(CMD_SET_485_EN3, 0);
setInt(CMD_SET_485_EN4, 0);
sleep(3);
igpio = getInt(CMD_SET_SPI_POWER);
igpio = getInt(CMD_SET_485_en0);
igpio = getInt(CMD_SET_485_en1);
igpio = getInt(CMD_SET_485_en2);
igpio = getInt(CMD_SET_485_en3);
igpio = getInt(CMD_SET_485_en4);
igpio = getInt(CMD_SET_485_EN0);
igpio = getInt(CMD_SET_485_EN1);
igpio = getInt(CMD_SET_485_EN2);
igpio = getInt(CMD_SET_485_EN3);
igpio = getInt(CMD_SET_485_EN4);
#endif
*/
}
// 打开传感器电源
void Gm_OpenSensorsPower()
{
//char iIoNo;
int igpio;
/* int igpio;
char szbuf[128];
//if(0 == port)
// return;
//sprintf(szbuf, "Open Sensors port %d Power!", port);
set12VEnable(true);
//set12VEnable(true);
setCam3V3Enable(true);
setRS485Enable(true);
setInt(CMD_SET_485_ENABLE, 1); // 打开RS485电源
setInt(CMD_SET_3V3_PWR_ENABLE, 1); // 打开3.3V电压
setInt(CMD_SET_PTZ_PWR_ENABLE, 1);
#if 0
setInt(CMD_SET_WTH_POWER, 0);
@ -656,31 +645,31 @@ void Gm_OpenSensorsPower()
#endif
#if 1
setInt(CMD_SET_SPI_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);
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);
igpio = getInt(CMD_SET_SPI_POWER);
igpio = getInt(CMD_SET_485_en0);
igpio = getInt(CMD_SET_485_en1);
igpio = getInt(CMD_SET_485_en2);
igpio = getInt(CMD_SET_485_en3);
igpio = getInt(CMD_SET_485_en4);
igpio = getInt(CMD_SET_485_EN0);
igpio = getInt(CMD_SET_485_EN1);
igpio = getInt(CMD_SET_485_EN2);
igpio = getInt(CMD_SET_485_EN3);
igpio = getInt(CMD_SET_485_EN4);
#else
setInt(CMD_SET_485_en0, 0);
setInt(CMD_SET_485_en1, 0);
setInt(CMD_SET_485_en2, 0);
setInt(CMD_SET_485_en3, 0);
setInt(CMD_SET_485_en4, 0);
setInt(CMD_SET_485_EN0, 0);
setInt(CMD_SET_485_EN1, 0);
setInt(CMD_SET_485_EN2, 0);
setInt(CMD_SET_485_EN3, 0);
setInt(CMD_SET_485_EN4, 0);
#endif
// 打开电源
//switch(port)
*/
}
// 查询传感器电源状态
@ -699,7 +688,7 @@ char Gm_GetSensorsPowerState(int port)
void BytestreamLOG(int commid, char* describe, u_char* buf, int len, char flag)
{
int i;
char szbuf[4096];
char szbuf[8192];
memset(szbuf, 0, sizeof(szbuf));
if (NULL != describe)
@ -764,7 +753,7 @@ void Gm_CloseSerialPort()
{
int i;
for (i = 0; i < MAX_SERIAL_PORT_NUM; i++)
for (i = 1; i < MAX_SERIAL_PORT_NUM; i++)
{
if (serialport[i].fd > 0)
{
@ -866,7 +855,7 @@ void Gm_InitSerialComm_Test()
sensorParam[0].IsNoInsta = 1;
sensorParam[0].devaddr = 4;
memset(sensorParam[0].pathname, 0, sizeof(sensorParam[0].pathname));
sprintf(sensorParam[0].pathname, "/dev/ttysWK3");
strcpy(sensorParam[0].pathname, "/dev/ttysWK3");
sensorParam[1].SensorsType = WEATHER_PROTOCOL;
sensorParam[1].baudrate = 9600;
@ -878,7 +867,7 @@ void Gm_InitSerialComm_Test()
sensorParam[1].IsNoInsta = 1;
sensorParam[1].devaddr = 1;
memset(sensorParam[1].pathname, 0, sizeof(sensorParam[1].pathname));
sprintf(sensorParam[1].pathname, "/dev/ttysWK3");
strcpy(sensorParam[1].pathname, "/dev/ttysWK3");
sensorParam[2].SensorsType = RALLY_PROTOCOL;
sensorParam[2].baudrate = 9600;
@ -892,7 +881,7 @@ void Gm_InitSerialComm_Test()
//sensorParam[2].devaddr = 13;
sensorParam[2].devaddr = 13;
memset(sensorParam[2].pathname, 0, sizeof(sensorParam[2].pathname));
sprintf(sensorParam[2].pathname, "/dev/ttysWK1");
strcpy(sensorParam[2].pathname, "/dev/ttysWK1");
sensorParam[5].SensorsType = RALLY_PROTOCOL;
sensorParam[5].baudrate = 9600;
@ -904,7 +893,7 @@ void Gm_InitSerialComm_Test()
sensorParam[5].IsNoInsta = 1;
sensorParam[5].devaddr = 10;
memset(sensorParam[5].pathname, 0, sizeof(sensorParam[3].pathname));
sprintf(sensorParam[5].pathname, "/dev/ttysWK1");
strcpy(sensorParam[5].pathname, "/dev/ttysWK1");
sensorParam[4].SensorsType = RALLY_PROTOCOL;
sensorParam[4].baudrate = 9600;
@ -918,7 +907,7 @@ void Gm_InitSerialComm_Test()
//sensorParam[2].devaddr = 13;
sensorParam[4].devaddr = 12;
memset(sensorParam[4].pathname, 0, sizeof(sensorParam[4].pathname));
sprintf(sensorParam[4].pathname, "/dev/ttysWK1");
strcpy(sensorParam[4].pathname, "/dev/ttysWK1");
sensorParam[6].SensorsType = SLANT_PROTOCOL;
sensorParam[6].baudrate = 9600;
@ -931,7 +920,7 @@ void Gm_InitSerialComm_Test()
sensorParam[6].IsNoInsta = 1;
sensorParam[6].devaddr = 2;
memset(sensorParam[6].pathname, 0, sizeof(sensorParam[6].pathname));
sprintf(sensorParam[6].pathname, "/dev/ttysWK0");
strcpy(sensorParam[6].pathname, "/dev/ttysWK0");
sensorParam[7].SensorsType = SLANT_PROTOCOL;
@ -945,7 +934,7 @@ void Gm_InitSerialComm_Test()
sensorParam[7].IsNoInsta = 1;
sensorParam[7].devaddr = 3;
memset(sensorParam[7].pathname, 0, sizeof(sensorParam[7].pathname));
sprintf(sensorParam[7].pathname, "/dev/ttysWK0");
strcpy(sensorParam[7].pathname, "/dev/ttysWK0");
sensorParam[13].SensorsType = SLANT_PROTOCOL;
sensorParam[13].baudrate = 9600;
@ -958,7 +947,7 @@ void Gm_InitSerialComm_Test()
sensorParam[13].IsNoInsta = 1;
sensorParam[13].devaddr = 5;
memset(sensorParam[13].pathname, 0, sizeof(sensorParam[13].pathname));
sprintf(sensorParam[13].pathname, "/dev/ttysWK0");
strcpy(sensorParam[13].pathname, "/dev/ttysWK0");
#if 0
devparam[14].ProtocolIdx = SLANT_PROTOCOL;
devparam[14].baudrate = 1200;
@ -992,11 +981,15 @@ void Gm_InitSerialComm_Test()
sensorParam[3].CameraChannel = 1;
sensorParam[3].devaddr = 0;
memset(sensorParam[3].pathname, 0, sizeof(sensorParam[3].pathname));
sprintf(sensorParam[3].pathname, "/dev/ttyS1");
strcpy(sensorParam[3].pathname, "/dev/ttyS1");
//#endif
Gm_InitSerialComm(sensorParam, "/sdcard/photo/");
}
uint8_t getdevtype(int devno)
{
return devparam[devno].ProtocolIdx;
}
// 初始化所有串口及所接传感器的配置
void Gm_InitSerialComm(SENSOR_PARAM *sensorParam, char *filedir)
{
@ -1076,7 +1069,7 @@ void Gm_InitSerialComm(SENSOR_PARAM *sensorParam, char *filedir)
sprintf(szbuf, "%s 地址%d!", szbuf, sensorParam[i].devaddr);
if (0 == sensorParam[i].IsNoInsta)
sprintf(szbuf, "没有启用!");
sprintf(szbuf, "%s", "没有启用!");
else
{
sprintf(szbuf, "%s 已启用!", szbuf);
@ -1312,6 +1305,8 @@ void GM_StartSerialComm()
#endif
for (i = 0; i < MAX_SERIAL_DEV_NUM; i++)
{
memset(srdt.ms_dev[i].aiValue, 0, sizeof(AI_DEF)*MAX_DEV_VALUE_NUM);
memset(weatherpntmsg, 0, sizeof(AI_DEF)*WEATHER_DATA_NUM);
if (0 == devparam[i].IsNoInsta)
{
srdt.ms_dev[i].IsNeedSerial = 0;
@ -1321,15 +1316,18 @@ void GM_StartSerialComm()
switch (devparam[i].ProtocolIdx)
{
case WEATHER_PROTOCOL: // 气象
sprintf(szbuf, "气象");
sprintf(szbuf, "%s", "气象");
srdt.ms_dev[i].IsNeedSerial = 1;
srdt.ms_dev[i].FirstCmdTimeCnt = get_msec();
srdt.ms_dev[i].recvdatacnt = 0;
for (j = 0; j < WEATHER_DATA_NUM; j++)
{
srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE;
weatherpntmsg[j].AiState = SER_STARTSAMPLE;
}
break;
case RALLY_PROTOCOL: /* 拉力*/
sprintf(szbuf, "拉力");
sprintf(szbuf, "%s", "拉力");
srdt.ms_dev[i].IsNeedSerial = 1;
srdt.ms_dev[i].FirstCmdTimeCnt = get_msec();
srdt.ms_dev[i].recvdatacnt = 0;
@ -1337,14 +1335,17 @@ void GM_StartSerialComm()
srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE;
break;
case WIND_PROTOCOL: /* 风速风向*/
sprintf(szbuf, "风速风向");
sprintf(szbuf, "%s", "风速风向");
srdt.ms_dev[i].IsNeedSerial = 1;
srdt.ms_dev[i].FirstCmdTimeCnt = get_msec();
for (j = 0; j < WEATHER_DATA_NUM; j++)
{
srdt.ms_dev[i].aiValue[j].AiState = SER_STARTSAMPLE;
weatherpntmsg[j].AiState = SER_STARTSAMPLE;
}
break;
case SLANT_PROTOCOL: /* 倾角*/
sprintf(szbuf, "倾角");
sprintf(szbuf, "%s", "倾角");
srdt.ms_dev[i].IsNeedSerial = 1;
srdt.ms_dev[i].FirstCmdTimeCnt = get_msec();
srdt.ms_dev[i].recvdatacnt = 0;
@ -1354,11 +1355,12 @@ void GM_StartSerialComm()
case PELCO_D_PROTOCOL: /* 摄像机协议*/
case PELCO_P_PROTOCOL: /* 摄像机协议*/
case SERIALCAMERA_PROTOCOL: /* 串口摄像机协议*/
sprintf(szbuf, "摄像机");
sprintf(szbuf, "%s", "摄像机");
srdt.ms_dev[i].IsNeedSerial = 0;
break;
default:
srdt.ms_dev[i].IsNeedSerial = 0;
sprintf(szbuf, "无效传感器");
sprintf(szbuf, "%s", "无效传感器");
break;
}
// 测试查询传感器电源状态
@ -1617,11 +1619,11 @@ int GM_CloseTimer()
else // 关闭所有串口及电源
{
Gm_CloseSerialPort();
for (j = 0; j < MAX_SERIAL_DEV_NUM; j++)
Gm_CloseSensorsPower();
for (j = 0; j < MAX_SERIAL_PORT_NUM; j++)
//for (j = 0; j < MAX_SERIAL_DEV_NUM; j++)
//Gm_CloseSensorsPower();
for (j = 1; j < MAX_SERIAL_PORT_NUM; j++)
ClearCmdFormPollCmdBuf(j);
sprintf(buf, "关闭串口定时器!");
sprintf(buf, "%s", "关闭串口定时器!");
DebugLog(8, buf, 'I');
return -1;
}
@ -1692,7 +1694,7 @@ int SaveLogTofile(int commid, char *szbuf)
gettimeofday(&tv, NULL);
memset(filedir, 0, sizeof(filedir));
sprintf(filedir, "/sdcard/log/");
strcpy(filedir, "/sdcard/log/");
if (access(filedir, 0) == 0)
;//LOGI("文件路径已经存在!");
@ -1709,11 +1711,11 @@ int SaveLogTofile(int commid, char *szbuf)
if (NULL == fp)
return -1;
memset(buf, 0, sizeof(buf));
sprintf(buf, "%d-%d-%d %d:%d:%d-%d ", t0.tm_year + 1900, t0.tm_mon + 1, t0.tm_mday, t0.tm_hour, t0.tm_min, t0.tm_sec, tv.tv_usec / 1000);
sprintf(buf, "%d-%d-%d %d:%d:%d-%d ", t0.tm_year + 1900, t0.tm_mon + 1, t0.tm_mday, t0.tm_hour, t0.tm_min, t0.tm_sec, (int)(tv.tv_usec / 1000));
fwrite(buf, 1, strlen(buf), fp);
fwrite(szbuf, 1, strlen(szbuf), fp);
memset(buf, 0, sizeof(buf));
sprintf(buf, "\n");
strcpy(buf, "\n");
fwrite(buf, 1, strlen(buf), fp);
fclose(fp);
@ -1953,10 +1955,10 @@ void CameraPhotoPortDataProcess(SIO_PARAM_SERIAL_DEF *curserial)
if ((1 == SaveImageDataTofile(curserial)) && (SER_SAMPLE == curserial->image.state))
{
curserial->image.state = PHOTO_SAVE_SUCC;
memset(&serialport[0].image, 0, sizeof(PHOTO_DEF));
memmove((void *)&serialport[0].image, (void*)&curserial->image, sizeof(PHOTO_DEF));
}
recvend = 1;
memset(&serialport[0].image, 0, sizeof(PHOTO_DEF));
memmove((void *)&serialport[0].image, (void*)&curserial->image, sizeof(PHOTO_DEF));
}
}
else
@ -2013,7 +2015,7 @@ void CameraPhotoPortDataProcess(SIO_PARAM_SERIAL_DEF *curserial)
if (0xFF == rtumsg.MsgData[6])
{
curserial->SerialCmdidx = -1;
sprintf(szbuf, "没有历史图片!结束读取图片!");
strcpy(szbuf, "没有历史图片!结束读取图片!");
DebugLog(0, szbuf, 'I');
break;
}
@ -2040,7 +2042,7 @@ void CameraPhotoPortDataProcess(SIO_PARAM_SERIAL_DEF *curserial)
if (0xFF == rtumsg.MsgData[10])
{
curserial->SerialCmdidx = -1;
sprintf(szbuf, "摄像机图片保存失败!");
strcpy(szbuf, "摄像机图片保存失败!");
DebugLog(0, szbuf, 'E');
}
curserial->SerialCmdidx = -1;
@ -2147,13 +2149,13 @@ void SendCmdFormPollCmdBuf(int port)
serialport[devparam[srdt.curdevidx[port]].commid].m_iRevStatus = 0;
if (serialport[port].fd < 0)
return;
//ret = Gm_SetSerialPortParam(port);
//if (ret < 0)
// return;
ret = Gm_SetSerialPortParam(port);
if (ret < 0)
return;
len = GM_SerialComSend(&pPortParam->PollCmd[2], pPortParam->cmdlen - 2, port);
if (len < 1)
{
sprintf(buf, "串口%d, 发送命令失败!", port + 1);
sprintf(buf, "串口%d, 发送命令失败! fd = %d", port + 1, serialport[port].fd);
DebugLog(port, buf, 'E');
}
else
@ -2264,7 +2266,7 @@ int FindNextCameraPhotoCommand(SIO_PARAM_SERIAL_DEF *pPortParam)
if (lcurtime - pPortParam->FirstCmdTimeCnt > 35 * 1000)
{
pPortParam->SerialCmdidx = -1;
sprintf(szbuf, "串口摄像机未接或故障!结束拍照!");
strcpy(szbuf, "串口摄像机未接或故障!结束拍照!");
DebugLog(0, szbuf, 'I');
return -1;
}
@ -2742,7 +2744,7 @@ void Gm_SendPelco_DCommand(SIO_PARAM_SERIAL_DEF *pPortParam, uint32_t cmdtype)
}
else
{
sprintf(buf, "发送像机Pelco_D命令:");
strcpy(buf, "发送像机Pelco_D命令:");
BytestreamLOG(0, buf, commandbuf, len, 'D');
}
ClearCameraCmdFormPollCmdBuf(pPortParam);
@ -2767,7 +2769,7 @@ uint8_t Gm_Pelco_DCheck(uint8_t *msg, int len)
**********************************************************************************/
int FindNextShxyProtocolCommand(int devidx)
{
int cmdno = 0;
int cmdno = 1;
//如果命令缓冲区仍有命令,则退出本函数
if ((devparam[devidx].commid + 1 < 1) || (devparam[devidx].commid + 1 > MAX_SERIAL_PORT_NUM))
@ -3104,7 +3106,7 @@ void ShxyProtocolDataProcess(int devno)
//g_SelfTest.SensorsFault |= (0x01);
//if ((gDisSunRain & 0x80) == 0x80)
{
sprintf(szbuf, "ID:%d 温度:%0.3f ", devparam[devno].devaddr, fvalue);
sprintf(szbuf, "ID:%d 温度:%0.3f state=%d", devparam[devno].devaddr, fvalue, weatherpntmsg[AirTempNo]);
//DebugLog(devparam[devno].commid, szbuf, 'V');
}
break;
@ -3282,7 +3284,7 @@ void delete_old_files(const char *path, int days)
if (stat(fullpath, &file_stat) == -1)
{
perror("stat");
sprintf(szbuf, "stat");
strcpy(szbuf, "stat");
DebugLog(8, szbuf, 'E');
continue;
}
@ -3402,12 +3404,17 @@ void Collect_sensor_data()
}
#endif
#if 1
pthread_mutex_lock(&serial_mutex); // 加锁
static int ideletefile = 0;
char logbuf[64];
time_t now;
struct tm t0;
const char *path = "/sdcard/log"; // 指定目录路径
int days = 15; // 删除15天前的log文件
sprintf(logbuf, "进入程序时间:%lld, ideletefile=%d", get_msec(), ideletefile);
DebugLog(8, logbuf, 'I');
now = time(NULL);
localtime_r(&now, &t0);
if ((0 == t0.tm_hour) && (0 == ideletefile))
@ -3419,6 +3426,7 @@ void Collect_sensor_data()
ideletefile = 0;
#endif
GM_StartSerialComm();
pthread_mutex_unlock(&serial_mutex); // 解锁
}
int Gm_SetCameraSerialPortParam(int fd, unsigned int baud)
@ -3430,7 +3438,7 @@ int Gm_SetCameraSerialPortParam(int fd, unsigned int baud)
if (ret < 0)
{
memset(szbuf, 0, sizeof(szbuf));
sprintf(szbuf, "摄像机串口波特率等参数设置错误!");
strcpy(szbuf, "摄像机串口波特率等参数设置错误!");
DebugLog(0, szbuf, 'E');
return -1;
}
@ -3453,7 +3461,7 @@ int Gm_OpenCameraSerial(SIO_PARAM_SERIAL_DEF *pPortParam, char *serfile, unsigne
DebugLog(0, szbuf, 'E');
return -1;
}
sprintf(szbuf, "摄像机打开串口%s成功fd=%d", serfile, fd);
sprintf(szbuf, "摄像机打开串口%s成功fd=%d 波特率:%d", serfile, fd, baud);
DebugLog(0, szbuf, 'I');
pPortParam->fd = fd;
serbaud = getBaudrate(baud);
@ -3474,7 +3482,7 @@ int GM_CameraComSend(unsigned char * cSendBuf, size_t nSendLen, int fd)
len = write(fd, cSendBuf, (size_t)nSendLen);/* 向串囗发送字符串 */
if (len < 0)
{
sprintf(szbuf, "write data error ");
strcpy(szbuf, "write data error ");
DebugLog(0, szbuf, 'E');
return -1;
}
@ -3563,15 +3571,15 @@ void SendCameraCmdFormPollCmdBuf(SIO_PARAM_SERIAL_DEF *pPortParam)
len = GM_CameraComSend(&pPortParam->PollCmd[2], pPortParam->cmdlen - 2, pPortParam->fd);
if (len < 1)
{
sprintf(buf, "摄像机串口, 发送命令失败!");
strcpy(buf, "摄像机串口, 发送命令失败!");
DebugLog(0, buf, 'E');
}
else
{
sprintf(buf, "摄像机串口命令:");
strcpy(buf, "摄像机串口命令:");
BytestreamLOG(0, buf, &pPortParam->PollCmd[2], len, 'D');
sprintf(buf, "sendtimeconst= %lld", lctime - pPortParam->lsendtime);
sprintf(buf, "sendtimeconst= %lld", (long long)(lctime - pPortParam->lsendtime));
DebugLog(0, buf, 'W');
pPortParam->lsendtime = lctime;
}
@ -3619,24 +3627,41 @@ int GM_IsCloseCamera(SIO_PARAM_SERIAL_DEF *pPortParam)
pPortParam->image.state = SER_SAMPLEFAIL;
else if (PHOTO_SAVE_SUCC == pPortParam->image.state)
pPortParam->image.state = SAMPLINGSUCCESS;
sprintf(buf, "通道1摄像机使用完毕!可以关闭摄像机电源!");
strcpy(buf, "通道1摄像机使用完毕!可以关闭摄像机电源!");
DebugLog(0, buf, 'I');
if(pPortParam->fd >= 0)
{
close(pPortParam->fd);
pPortParam->fd = -1;
}
}
return pPortParam->SerialCmdidx;
}
void GM_CameraSerialComRecv(SIO_PARAM_SERIAL_DEF *pPortParam)
{
int recvlen;
int i, recvlen;
u_char recvbuf[RECVDATA_MAXLENTH];
char buf[256];
int64_t t0, t1;
t0 = get_msec();
memset(recvbuf, 0, sizeof(recvbuf));
if (pPortParam->fd <= 0)
return;
//for(;;)
recvlen = read(pPortParam->fd, recvbuf, sizeof(recvbuf));/* 在串口读取字符串 */
i=0;
recvlen = 0;
for(;;)
{
i += recvlen;
recvlen = read(pPortParam->fd, &recvbuf[i], sizeof(recvbuf)-i);/* 在串口读取字符串 */
t1 = get_msec();
if(t1-t0 >= 350)
break;
}
recvlen = i;
if (recvlen < 1)
return;
#if 1
@ -3653,47 +3678,48 @@ int GM_CameraSerialTimer(SIO_PARAM_SERIAL_DEF *pPortParam)
GM_CameraSerialComRecv(pPortParam);
Gm_FindCameraCommand(pPortParam);
GM_CameraSerialComRecv(pPortParam);
//GM_CameraSerialComRecv(pPortParam);
flag = GM_IsCloseCamera(pPortParam);
return flag;
}
#if 1
// 启动使用串口拍照
int GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx, u_char bImageSize, int phototime, u_char presetno, char *serfile, unsigned int baud, int addr)
int GM_StartSerialCameraPhoto(int phototime, unsigned char channel, int cmdidx, unsigned char bImageSize, unsigned char presetno, char *serfile, unsigned int baud, int addr)
{
int flag = 0;
char szbuf[128], logbuf[128];
SIO_PARAM_SERIAL_DEF cameraport;
SIO_PARAM_SERIAL_DEF *cameraport;
cameraport = (SIO_PARAM_SERIAL_DEF*)malloc(sizeof(SIO_PARAM_SERIAL_DEF));
srdt.RephotographCnt = 0;
cameraport.cameraaddr = addr;
cameraport.Retry = 0;
cameraport.RetryTime = 2000;
cameraport.WaitTime = 0;
cameraport.m_iRevStatus = 0;
cameraport.m_iRecvLen = 0;
cameraport.m_iNeedRevLength = 0;
cameraport.fd = -1;
memset(cameraport.m_au8RecvBuf, 0, RECVDATA_MAXLENTH); // 接收数据缓存区
ClearCameraCmdFormPollCmdBuf(&cameraport);
cameraport->cameraaddr = addr;
cameraport->Retry = 0;
cameraport->RetryTime = 2000;
cameraport->WaitTime = 0;
cameraport->m_iRevStatus = 0;
cameraport->m_iRecvLen = 0;
cameraport->m_iNeedRevLength = 0;
cameraport->fd = -1;
memset(cameraport->m_au8RecvBuf, 0, RECVDATA_MAXLENTH); // 接收数据缓存区
ClearCameraCmdFormPollCmdBuf(cameraport);
Gm_OpenSensorsPower();
flag = Gm_OpenCameraSerial(&cameraport, serfile, baud);
flag = Gm_OpenCameraSerial(cameraport, serfile, baud);
#if 1
memset(szbuf, 0, sizeof(szbuf));
srdt.iLastGetPhotoNo = -1;
if (0 == cmdidx)
cameraport.image.state = SER_STARTSAMPLE;
cameraport->image.state = SER_STARTSAMPLE;
if ((0 == cmdidx) && (srdt.presetno > 0))
{
cameraport.SerialCmdidx = 10017;
cameraport->SerialCmdidx = 10017;
srdt.iLastGetPhotoNo = cmdidx;
}
else
cameraport.SerialCmdidx = cmdidx;
cameraport.FirstCmdTimeCnt = get_msec();
cameraport->SerialCmdidx = cmdidx;
cameraport->FirstCmdTimeCnt = get_msec();
srdt.sendphotocmdcnt = 0;
//sprintf(szbuf, "摄像机");
//flag = 1;
@ -3707,7 +3733,14 @@ int GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx, u_char bImageSize, in
#endif
if(-1 == flag)
{
if(NULL != cameraport)
{
free(cameraport);
cameraport = NULL;
}
return -1;
}
if (0x00 == flag)
{
@ -3718,7 +3751,7 @@ int GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx, u_char bImageSize, in
usleep(10);
//LOGW("polltime=%ldms", get_msec()-polltime);
//polltime = get_msec();
if (GM_CameraSerialTimer(&cameraport) < 0)
if (GM_CameraSerialTimer(cameraport) < 0)
{
//LOGE("12V state=%d", getInt(CMD_SET_12V_EN_STATE));
DebugLog(8, "退出操作摄像机流程!", 'V');
@ -3727,18 +3760,25 @@ int GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx, u_char bImageSize, in
}
}
}
if(NULL != cameraport)
{
free(cameraport);
cameraport = NULL;
}
return 0;
}
#endif
int CameraPhotoCmd(int phototime, u_char channel, int cmdidx, u_char bImageSize, u_char presetno, char *serfile, unsigned int baud, int addr)
int CameraPhotoCmd(int phototime, unsigned char channel, int cmdidx, unsigned char bImageSize, unsigned char presetno, char *serfile, unsigned int baud, int addr)
{
pthread_mutex_lock(&camera_mutex);
int flag = 0;
srdt.bImageSize = bImageSize;
srdt.presetno = presetno;
srdt.sendphototime = phototime;
flag = GM_StartSerialCameraPhoto(channel, cmdidx, bImageSize, phototime, presetno, serfile, baud, addr);
flag = GM_StartSerialCameraPhoto(phototime, channel, cmdidx, bImageSize, presetno, serfile, baud, addr);
pthread_mutex_unlock(&camera_mutex); // 解锁
return flag;
}
/* 串口启动接口函数 结束*/
@ -3747,6 +3787,7 @@ int CameraPhotoCmd(int phototime, u_char channel, int cmdidx, u_char bImageSize,
int GetWeatherData(Data_DEF *data, int datano)
{
int i;
char logbuf[512], szbuf[128];
if (NULL == data)
return -1;
@ -3754,6 +3795,36 @@ int GetWeatherData(Data_DEF *data, int datano)
return -1;
data->EuValue = weatherpntmsg[datano].EuValue;
data->AiState = weatherpntmsg[datano].AiState;
memset(szbuf, 0, sizeof(szbuf));
switch (datano)
{
case AirTempNo:
sprintf(szbuf, "温度");
break;
case HumidityNo:
sprintf(szbuf, "湿度");
break;
case WindSpeedNo:
sprintf(szbuf, "风速");
break;
case WindDirectionNo:
sprintf(szbuf, "风向");
break;
case RainfallNo:
sprintf(szbuf, "雨量");
break;
case AtmosNo:
sprintf(szbuf, "大气压");
break;
case OpticalRadiationNo:
sprintf(szbuf, "大气压");
break;
default:
sprintf(szbuf, "未知");
break;
}
sprintf(logbuf, "data_state=%d, %svalue=%0.3f", data->AiState, szbuf,data->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState))
{
weatherpntmsg[datano].AiState = SER_IDLE;
@ -3764,10 +3835,14 @@ int GetWeatherData(Data_DEF *data, int datano)
int GetAirTempData(Data_DEF *airt)
{
char logbuf[512];
if (NULL == airt)
return -1;
airt->EuValue = weatherpntmsg[AirTempNo].EuValue;
airt->AiState = weatherpntmsg[AirTempNo].AiState;
sprintf(logbuf, "data_state=%d, 温度value=%0.3f", airt->AiState, airt->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState))
{
weatherpntmsg[AirTempNo].AiState = SER_IDLE;
@ -3778,10 +3853,14 @@ int GetAirTempData(Data_DEF *airt)
int GetHumidityData(Data_DEF *airt)
{
char logbuf[512];
if (NULL == airt)
return -1;
airt->EuValue = weatherpntmsg[HumidityNo].EuValue;
airt->AiState = weatherpntmsg[HumidityNo].AiState;
sprintf(logbuf, "data_state=%d, 湿度value=%0.3f", airt->AiState, airt->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState))
{
weatherpntmsg[HumidityNo].AiState = SER_IDLE;
@ -3792,10 +3871,14 @@ int GetHumidityData(Data_DEF *airt)
int GetWindSpeedData(Data_DEF *airt)
{
char logbuf[512];
if (NULL == airt)
return -1;
airt->EuValue = weatherpntmsg[WindSpeedNo].EuValue;
airt->AiState = weatherpntmsg[WindSpeedNo].AiState;
sprintf(logbuf, "data_state=%d, 风速value=%0.3f", airt->AiState, airt->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState))
{
weatherpntmsg[WindSpeedNo].AiState = SER_IDLE;
@ -3806,10 +3889,14 @@ int GetWindSpeedData(Data_DEF *airt)
int GetWindDirectionData(Data_DEF *airt)
{
char logbuf[512];
if (NULL == airt)
return -1;
airt->EuValue = weatherpntmsg[WindDirectionNo].EuValue;
airt->AiState = weatherpntmsg[WindDirectionNo].AiState;
sprintf(logbuf, "data_state=%d, 风向value=%0.3f", airt->AiState, airt->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState))
{
weatherpntmsg[WindDirectionNo].AiState = SER_IDLE;
@ -3820,10 +3907,14 @@ int GetWindDirectionData(Data_DEF *airt)
int GetRainfallData(Data_DEF *airt)
{
char logbuf[512];
if (NULL == airt)
return -1;
airt->EuValue = weatherpntmsg[RainfallNo].EuValue;
airt->AiState = weatherpntmsg[RainfallNo].AiState;
sprintf(logbuf, "data_state=%d, 雨量value=%0.3f", airt->AiState, airt->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState))
{
weatherpntmsg[RainfallNo].AiState = SER_IDLE;
@ -3834,10 +3925,14 @@ int GetRainfallData(Data_DEF *airt)
int GetAtmosData(Data_DEF *airt)
{
char logbuf[512];
if (NULL == airt)
return -1;
airt->EuValue = weatherpntmsg[AtmosNo].EuValue;
airt->AiState = weatherpntmsg[AtmosNo].AiState;
sprintf(logbuf, "data_state=%d, 大气压value=%0.3f", airt->AiState, airt->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState))
{
weatherpntmsg[AtmosNo].AiState = SER_IDLE;
@ -3848,10 +3943,14 @@ int GetAtmosData(Data_DEF *airt)
int GetOpticalRadiationData(Data_DEF *airt)
{
char logbuf[512];
if (NULL == airt)
return -1;
airt->EuValue = weatherpntmsg[OpticalRadiationNo].EuValue;
airt->AiState = weatherpntmsg[OpticalRadiationNo].AiState;
sprintf(logbuf, "data_state=%d, 日照value=%0.3f", airt->AiState, airt->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == airt->AiState) || (SAMPLINGSUCCESS == airt->AiState))
{
weatherpntmsg[OpticalRadiationNo].AiState = SER_IDLE;
@ -3862,6 +3961,8 @@ int GetOpticalRadiationData(Data_DEF *airt)
int GetPullValue(int devno, Data_DEF *data)
{
char logbuf[512];
if (NULL == data)
return -1;
if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno))
@ -3870,6 +3971,8 @@ int GetPullValue(int devno, Data_DEF *data)
return -1;
data->EuValue = srdt.ms_dev[devno].aiValue[0].EuValue;
data->AiState = srdt.ms_dev[devno].aiValue[0].AiState;
sprintf(logbuf, "装置%d, ID=%d, data_state=%d, 拉力value=%0.3f", devno + 1, devparam[devno].devaddr, data->AiState, data->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState))
{
srdt.ms_dev[devno].aiValue[0].AiState = SER_IDLE;
@ -3880,6 +3983,8 @@ int GetPullValue(int devno, Data_DEF *data)
int GetAngleValue(int devno, Data_DEF *data, int Xy)
{
char logbuf[512];
if (NULL == data)
return -1;
if ((0 > devno) || (MAX_SERIAL_DEV_NUM < devno))
@ -3891,6 +3996,8 @@ int GetAngleValue(int devno, Data_DEF *data, int Xy)
data->EuValue = srdt.ms_dev[devno].aiValue[Xy].EuValue;
data->AiState = srdt.ms_dev[devno].aiValue[Xy].AiState;
sprintf(logbuf, "装置%d, ID=%d, data_state=%d, 倾角value[%d]=%0.3f", devno + 1, devparam[devno].devaddr, data->AiState, Xy, data->EuValue);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == data->AiState) || (SAMPLINGSUCCESS == data->AiState))
{
srdt.ms_dev[devno].aiValue[Xy].AiState = SER_IDLE;
@ -3901,6 +4008,8 @@ int GetAngleValue(int devno, Data_DEF *data, int Xy)
int GetImage(int devno, IMAGE_DEF *photo)
{
char logbuf[512];
if (NULL == photo)
return -1;
photo->presetno = serialport[0].image.presetno;
@ -3909,6 +4018,9 @@ int GetImage(int devno, IMAGE_DEF *photo)
memmove(photo->photoname, serialport[0].image.photoname, sizeof(photo->photoname));
photo->imagelen = serialport[0].image.imagelen;
photo->state = serialport[0].image.state;
sprintf(logbuf, "装置%d, image_state=%d, 预置点:%d,拍照时间:%d, pic_name:%s", devno + 1, photo->state, photo->presetno, photo->phototime, photo->photoname);
DebugLog(8, logbuf, 'I');
if ((SER_SAMPLEFAIL == photo->state) || (SAMPLINGSUCCESS == photo->state))
{
serialport[0].image.state = SER_IDLE;

@ -168,7 +168,7 @@ typedef struct
typedef struct
{
uint8_t AiState; // 数据标识(-1采样失败0:没有采样1正在采样2采样结束3启动采样
int AiState; // 数据标识(-1采样失败0:没有采样1正在采样2采样结束3启动采样
float EuValue; // 数据工程值
} Data_DEF;
@ -318,7 +318,7 @@ typedef struct
} SRDT_DEF;
static void PortDataProcess( void );
static int64_t get_msec();
int64_t get_msec();
int serial_port_comm();
static int weather_comm(SERIAL_PARAM weatherport);
@ -331,6 +331,7 @@ static void setCam3V3Enable(bool enabled);
// 串口相关的所有函数定义
/* 打开串口电源*/
void Gm_OpenSerialPower();
uint8_t getdevtype(int devno);
// 打开传感器电源
void Gm_OpenSensorsPower();
@ -350,7 +351,7 @@ void Gm_InitSerialComm(SENSOR_PARAM *sensorParam, char *filedir);
// 启动串口通讯
void GM_StartSerialComm();
// 启动使用串口拍照
int GM_StartSerialCameraPhoto(uint8_t channel, int cmdidx, u_char bImageSize, int phototime, u_char presetno, char *serfile, unsigned int baud, int addr);
int GM_StartSerialCameraPhoto(int phototime, unsigned char channel, int cmdidx, unsigned char bImageSize, unsigned char presetno, char *serfile, unsigned int baud, int addr);
void delete_old_files(const char *path, int days);
// 串口轮询通讯定时器
@ -432,7 +433,7 @@ void ShxyProtocolDataProcess( int commid);
int SaveImageDataTofile(int devno);
void Collect_sensor_data();
int CameraPhotoCmd(int phototime, u_char channel, int cmdidx, u_char bImageSize, u_char presetno, char *serfile, unsigned int baud, int addr);
int CameraPhotoCmd(int phototime, unsigned char channel, int cmdidx, unsigned char bImageSize, unsigned char presetno, char *serfile, unsigned int baud, int addr);
/* 数据和图片采集数据返回函数 开始*/
int GetWeatherData(Data_DEF *data, int datano);
@ -459,6 +460,7 @@ int GetImage(int devno, IMAGE_DEF *photo);
/* 数据和图片采集数据返回函数 结束*/
// 生成一个随机整数
int GeneratingRandomNumber();
int Gm_SetSerialPortParam(int commid);
void ClearCameraCmdAllFlag(SIO_PARAM_SERIAL_DEF *pPortParam);

@ -16,6 +16,7 @@
#include <fcntl.h>
#include <string.h>
#include <termios.h>
#include "pthread.h"
#include <time.h>
#include "GPIOControl.h"
#include "serialComm.h"
@ -227,15 +228,23 @@ static void setRS485Enable(bool z) {
}
static void set485WriteMode() {
setInt(CMD_SET_485_STATE, 1);
setInt(CMD_SET_5V_EN, 1);
}
static void set485ReadMode() {
#if USING_N938
;
#else
setInt(CMD_SET_485_STATE, 0);
#endif
}
static void set12VEnable(bool z) {
#if USING_N938
;
#else
setInt(CMD_SET_12V_EN_STATE, z ? 1 : 0);
#endif
}
static void setCam3V3Enable(bool enabled)
@ -286,7 +295,8 @@ static bool LoadSensorConfig()
for (const auto& sensor : sensorsArray)
{
if (sensor.isMember("SensorsType") && sensor["SensorsType"].asInt() == 6)
//if (sensor.isMember("SensorsType") && sensor["SensorsType"].asInt() == 6)
if (sensor.isMember("SensorsType") )
{
sensorParam[i].baudrate = sensor["baudrate"].asInt();
sensorParam[i].databit = sensor["databit"].asInt();
@ -863,37 +873,63 @@ Java_com_xinyingpower_testcomm_MainActivity_setInt(
setInt(cmd, val);
}
extern "C" JNIEXPORT void JNICALL
Java_com_xinyingpower_testcomm_MainActivity_turnOn(
JNIEnv* env,
jobject /*this*/) {
void Open_All_Power()
{
setRS485Enable(true);
set12VEnable(true);
setCam3V3Enable(true);
setInt(CMD_SET_485_ENABLE, 1);
setInt(CMD_SET_3V3_PWR_ENABLE, 1);
setInt(CMD_SET_PTZ_PWR_ENABLE, 1);
setInt(CMD_SET_PIC1_POWER, 1);
setInt(CMD_SET_485_en4, 1);
setInt(CMD_SET_5V_EN, 1);
setInt(CMD_SET_SPI_POWER, 1);
LoadSensorConfig();
// InitPLZ CameraPhotoCmd(0, 1, OPEN_TOTAL, 0, 0);();
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);
setInt(CMD_RS485_3V3_EN, 1);
// setInt(CMD_SET_PTZ_PWR_ENABLE, 1);
setInt(CMD_SET_PIC1_POWER, 1);
setInt(CMD_SET_WTH_POWER, 1);
setInt(CMD_SET_PULL_POWER, 1);
setInt(CMD_SET_ANGLE_POWER, 1);
setInt(CMD_SET_OTHER_POWER, 1);
}
extern "C" JNIEXPORT void JNICALL
Java_com_xinyingpower_testcomm_MainActivity_turnOff(
Java_com_xinyingpower_testcomm_MainActivity_turnOn(
JNIEnv* env,
jobject /*this*/) {
Open_All_Power();
// setInt(CMD_SET_485_en4, 1);
LoadSensorConfig();
// InitPLZ CameraPhotoCmd(0, 1, OPEN_TOTAL, 0, 0);();
}
void Close_All_Power()
{
setRS485Enable(false);
set12VEnable(false);
setCam3V3Enable(false);
setInt(CMD_SET_485_ENABLE, 0);
setInt(CMD_SET_3V3_PWR_ENABLE, 0);
setInt(CMD_SET_PTZ_PWR_ENABLE, 0);
setInt(CMD_SET_PIC1_POWER, 0);
setInt(CMD_SET_485_en4, 0);
setInt(CMD_SET_5V_EN, 0);
setInt(CMD_SET_SPI_POWER, 0);
setInt(CMD_SET_485_EN0, 0);
setInt(CMD_SET_485_EN1, 0);
setInt(CMD_SET_485_EN2, 0);
setInt(CMD_SET_485_EN3, 0);
setInt(CMD_SET_485_EN4, 0);
setInt(CMD_RS485_3V3_EN, 0);
// setInt(CMD_SET_PTZ_PWR_ENABLE, 0);
setInt(CMD_SET_PIC1_POWER, 0);
setInt(CMD_SET_WTH_POWER, 0);
setInt(CMD_SET_PULL_POWER, 0);
setInt(CMD_SET_ANGLE_POWER, 0);
setInt(CMD_SET_OTHER_POWER, 0);
}
extern "C" JNIEXPORT void JNICALL
Java_com_xinyingpower_testcomm_MainActivity_turnOff(
JNIEnv* env,
jobject /*this*/) {
Close_All_Power();
}
extern "C" JNIEXPORT void JNICALL
@ -945,10 +981,10 @@ Java_com_xinyingpower_testcomm_MainActivity_setSpeed(
//CameraPhotoCmd(0, 1, ZOOM_WIDE, 0, 0);
CameraPhotoCmd(time(NULL), 1, 0, (u_char)(speed/10), speed%10, "/dev/ttyS1", 38400, 0);
return;
CameraPhotoCmd(0, 1, OPEN_TOTAL, 0, 0, "/dev/ttyS0", 38400, 1);
usleep(200000);
CameraPhotoCmd(0, 1, OPEN_MODULE_POWER, 0, 0, "/dev/ttyS0", 38400, 1);
//return;
//CameraPhotoCmd(0, 1, OPEN_TOTAL, 0, 0, "/dev/ttyS0", 38400, 1);
//usleep(200000);
//CameraPhotoCmd(0, 1, OPEN_MODULE_POWER, 0, 0, "/dev/ttyS0", 38400, 1);
}
@ -966,11 +1002,59 @@ Java_com_xinyingpower_testcomm_MainActivity_gotoPreset(
CameraPhotoCmd(0, 1, MOVE_PRESETNO, 0, preset, "/dev/ttyS1", 38400, 0);
}
#if 1
void photo_function()
{
int i, j;
int64_t t0,t1;
char logbuf[512];
IMAGE_DEF *photo=NULL;
photo = (IMAGE_DEF*)malloc(sizeof(IMAGE_DEF));
for(i=0;i<20;i++)
{
//Collect_sensor_data();
for(j=0; j<=8; j++)
{
t0 = get_msec();
CameraPhotoCmd(time(NULL), 1, 0, (u_char)(j), j%3+1, "/dev/ttyS1", 38400, 0);
GetImage(0, photo);
t1 = get_msec();
sprintf(logbuf, "拍照时长:%lld, 预置点:%d, pic_name:%s", t0-t1, photo->presetno, photo->photoname);
DebugLog(8, logbuf, 'I');
sleep(3);
}
}
if(NULL != photo)
{
free(photo);
photo = NULL;
}
}
#else
void photo_function()
{
Collect_sensor_data();
CameraPhotoCmd(time(NULL), 1, 0, 2, 3, "/dev/ttyS1", 38400, 0);
}
#endif
extern "C" JNIEXPORT void JNICALL
Java_com_xinyingpower_testcomm_MainActivity_turnOnWipers(
JNIEnv* env,
jobject /*this*/) {
int i =0;
/* 采集拉力倾角线程*/
//photo_function();
std::thread th(photo_function);
//std::thread th2(photo_function);
th.detach();
//th2.detach();
//pthread_t thread;
//pthread_create(&thread, NULL, photo_function, NULL);
//pthread_join(thread, NULL);
}
extern "C" JNIEXPORT void JNICALL
@ -981,12 +1065,77 @@ Java_com_xinyingpower_testcomm_MainActivity_turnOffWipers(
int i =0;
}
void weather_function()
{
int j;
Data_DEF *data=NULL;
data = (Data_DEF*)malloc(sizeof(Data_DEF));
for(int i=0;i<3;i++)try-catch();
{
Open_All_Power();
usleep(200);
Collect_sensor_data();
for(j=AirTempNo; j<=OpticalRadiationNo; j++)
{
GetWeatherData(data, j);
GetAirTempData(data);
GetHumidityData(data);
GetWindSpeedData(data);
GetWindDirectionData(data);
GetRainfallData(data);
GetAtmosData(data);
GetOpticalRadiationData(data);
}
Close_All_Power();
sleep(3);
}
if(NULL != data)
{
free(data);
data = NULL;
}
}
extern "C" JNIEXPORT void JNICALL
Java_com_xinyingpower_testcomm_MainActivity_turnOnLight(
JNIEnv* env,
jobject /*this*/) {
/* 启动气象采样线程*/
//pthread_t thread;
//pthread_create(&thread, NULL, weather_function, NULL);
weather_function();
}
void* pull_angle_function(void *wdate)
{
int j;
Data_DEF *data=NULL;
data = (Data_DEF*)malloc(sizeof(Data_DEF));
for(int i=0;i < 3; i++)
{
Open_All_Power();
usleep(200);
Collect_sensor_data();
for(j=0; j<MAX_SERIAL_DEV_NUM; j++)
{
if(RALLY_PROTOCOL == getdevtype(j))
GetPullValue(j, data);
if(SLANT_PROTOCOL == getdevtype(j))
{
GetAngleValue(j, data, 0);
GetAngleValue(j, data, 1);
}
}
Close_All_Power();
sleep(3);
}
if(NULL != data)
{
free(data);
data = NULL;
}
}
extern "C" JNIEXPORT void JNICALL
@ -994,6 +1143,10 @@ Java_com_xinyingpower_testcomm_MainActivity_turnOffLight(
JNIEnv* env,
jobject /*this*/) {
/* 采集拉力倾角线程*/
pthread_t thread;
pthread_create(&thread, NULL, pull_angle_function, NULL);
pull_angle_function(NULL);
}

Loading…
Cancel
Save