📄 config.cpp
字号:
#include "OCRConfigcfg.h"
#include "Phocus1820BSP.h"
#include "Phocus1820IMG.h"
#include "CommonDef.h"
#include "Protocal.h"
#include "Net.h"
#include "Communication.h"
#include "Config.h"
#include "Protocal.h"
#include "Sync.h"
#include <stdlib.h>
#include <string.h>
#include <csl.h>
#include <csl_dat.h>
#include <std.h>
#include <atm.h>
#include "UN_AutoCameraControl.h"
#include "tijpeg.h"
//int CConfigure::m_nIfSoftYuv;
static int g_nIsFeed = 0;
static char cBuffer[2][FF_WIDTH * FF_HEIGHT * 3];
static int g_nStopSerialImage = 1;
static int g_nBrightness = 0;
static int g_nAgeMode = 0;
static int g_nMaxcnt = 10;
static int g_nStrobeEnable = 0;
static int g_nJpegQuality = 100;
static unsigned int g_nGainValue = 200;
static unsigned int g_nExposureValue = 1000;
static int g_nSensorDataType = -1;
static int g_nTrigerMode = 0;
//2009.2.17 rs232&485触发信号
static int g_nDouble = 0;
static struct RS_SEND
{
int nDataLen;
char *pData;
}rs_send;
static unsigned char nSoft_Rs = 0;
static SERIALPARAM g_stSerialParam;
extern int intHeap, extHeap;
UAGE_PARAM g_stAgeParam =
{
50, /*min gain*/
240, /*max gain*/
1, /*min exposure time (>0)*/
10000, /*max exposure time*/
118, /*target average brightness*/
10, /*target brightness threshold*/
10, /*gain step (>=1 && <(nMaxGain-nMinGain))*/
100 /*exposure time step (>=1 && <(nMaxExposure-nMinExposure))*/
};
//global symbols definition
CConfigure* g_pConfigure = NULL;
//CConfigure implement
CConfigure::CConfigure()
{
//by hans 2009.2.17
// g_nIsFeed = true;
Phocus1820_read_net_info(&m_stEthInfo);
Phocus1820_read_rs232_info(&m_nBaudRate);
Phocus1820_rs232_set_baudrate(m_nBaudRate);
Phocus1820_rs485_set_baudrate(m_nBaudRate);
Phocus1820_read_mode_info(&m_stModeInfo);
//采集格式
Phocus1820_sensor_set_format(SENSOR_FORMAT_RAW);
//采集模式
Phocus1820_sensor_set_mode(SENSOR_CAP_FULLFRAME | SENSOR_CAP_SOFTTRIGGER);
//曝光
Phocus1820_sensor_set_shutter(g_nExposureValue);
//增益
Phocus1820_sensor_set_red_gain(119);
Phocus1820_sensor_set_green1_gain(32);
Phocus1820_sensor_set_green2_gain(32);
Phocus1820_sensor_set_blue_gain(168);
Phocus1820_sensor_set_afe_pga(g_nGainValue);
//If uart settings is invalid, use the default settings to initailize uart
m_stImageInfo.nWidth = FF_WIDTH;
m_stImageInfo.nHeight = FF_HEIGHT;
m_stImageInfo.nXStart = 0;
m_stImageInfo.nYStart = 0;
memset(m_strVersion, 0, sizeof(m_strVersion));
strcpy(m_strVersion, "Phocus1821");
m_nProgType = 0; //程序类型,0-应用程序,1-升级程序
Phocus1820_sensor_open(O_RESET);
Phocus1820_rs232_open(O_RESET);
// Phocus1820_dog_enable(500);
}
CConfigure::~CConfigure()
{
}
//Just for powerdown exceptions restore
int CConfigure::RestoreInfo()
{
return 0;
}
//Config schedule
int CConfigure::DoConfig(int nCommand, void* pData, int nLen)
{
int rc = ENO;
switch(nCommand)
{
case CFGNETINFO:
{
rc = SetEthernetInfo(pData, nLen);
break;
}
case CFGMODEINFO:
{
rc = SetModeInfo(pData, nLen);
break;
}
case CFGRESET:
{
Phocus1820_reset(); //复位命令
Phocus1820_waitusec(1000000);
rc = EINVPARAM; //如果正常复位,程序不会执行到这里,应用程序等待超时;如果复位失败,应用程序接收到该错误码,说明复位失败
break;
}
case CFGSPINFO:
{
rc = SetSerialPortInfo(pData, nLen);
break;
}
// case CFGCAMINFODYN:
// {
// rc = SetCameraInfo(pData, nLen);
// break;
// }
case CFGUPDATE:
{
rc = UpdateProgram((char*)pData, nLen);
break;
}
case CFGREDGAIN:
{
Phocus1820_sensor_set_red_gain(*(unsigned int*)pData);
rc = ENO;
break;
}
case CFGGREEN1GAIN:
{
Phocus1820_sensor_set_green1_gain(*(unsigned int*)pData);
rc = ENO;
break;
}
case CFGGREEN2GAIN:
{
Phocus1820_sensor_set_green2_gain(*(unsigned int*)pData);
rc = ENO;
break;
}
case CFGBLUEGAIN:
{
Phocus1820_sensor_set_blue_gain(*(unsigned int*)pData);
rc = ENO;
break;
}
case CFGAFEPGA:
{
Phocus1820_sensor_set_afe_pga(*(unsigned int*)pData);
ATM_setu(&g_nGainValue, *(unsigned int *)pData);
rc = ENO;
break;
}
case CFGBRIGHTNESS:
{
Phocus1820_sensor_set_brightness(*(unsigned int*)pData);
rc = ENO;
break;
}
case CFGSHUTTER:
{
Phocus1820_sensor_set_shutter(*(unsigned int*)pData);
ATM_setu(&g_nExposureValue, *(unsigned int*)pData);
rc = ENO;
break;
}
case CFGSETMODE:
{
// Phocus1820_sensor_set_mode(*(unsigned int*)pData);
if(SENSOR_CAP_HARDTRIGGER & Phocus1820_sensor_get_mode())
{
Phocus1820_sensor_cancel_wait_image();
}
ATM_seti(&g_nTrigerMode, *(unsigned int*)pData);
rc = ENO;
break;
}
case CFGIO1:
{
Phocus1820_pio_write(IO_OUTPUT_PIN1, *(unsigned int*)pData);
rc = ENO;
break;
}
case CFGIO2:
{
Phocus1820_pio_write(IO_OUTPUT_PIN2, *(unsigned int*)pData);
rc = ENO;
break;
}
case CFGCAPTUREMODE:
{
rc = Phocus1820_sensor_set_mode(*(unsigned int*)pData);
break;
}
//06-27 zhming
case CFGENABLESTROBE:
{
ATM_seti(&g_nStrobeEnable, 1);
Phocus1820_sensor_enable_strobe();
rc = ENO;
break;
}
case CFGDISABLESTROBE:
{
ATM_cleari(&g_nStrobeEnable);
Phocus1820_sensor_disable_strobe();
rc = ENO;
break;
}
case CFGSTROBEOFFSET:
{
Phocus1820_sensor_set_strobeoffset(*(unsigned int*)pData);
rc = ENO;
break;
}
case CFGFORMAT:
{
// Phocus1820_sensor_set_format(*(unsigned int*)pData);
ATM_seti(&g_nSensorDataType, *(unsigned int*)pData);
rc = ENO;
break;
}
case CFGENABLESATURATION:
{
Phocus1820_sensor_enable_saturation(*(unsigned int*)pData);
rc = ENO;
break;
}
case CFGSATURATION:
{
Phocus1820_sensor_set_saturation(*(float*)pData);
rc = ENO;
break;
}
case CFGTIME:
{
Phocus1820_rtc_set_time((RTC_TIME *)pData);
rc = ENO;
break;
}
case CFGENABLEDOG:
{
Phocus1820_dog_enable(*(int *)pData);
rc = ENO;
break;
}
case CFGDISABLEDOG:
{
Phocus1820_dog_disable();
rc = ENO;
break;
}
case CFGSTARTFEEDDOG:
{
g_nIsFeed = true;
rc = ENO;
break;
}
case CFGSTOPFEEDDOG:
{
g_nIsFeed = false;
rc = ENO;
break;
}
case CFGSTARTSERIALIMAGE:
{
MBX_MESSAGE msg;
TSK_disable();
memcpy(&g_stSerialParam , (SERIALPARAM *)pData, sizeof(g_stSerialParam));
TSK_enable();
msg.pData = (char *)&g_stSerialParam;
if(g_nStopSerialImage == 0)
{
rc = ENO;
}
else if(MBX_post(hMbxStartSerial, &msg, 5000))
{
rc = ENO;
}
else
{
rc = ECAPIMAGE;
}
break;
}
case CFGSTOPSERIALIMAGE:
{
ATM_seti(&g_nStopSerialImage, 1);
rc = ENO;
break;
}
case CFGSTROBELEVEL:
{
Phocus1820_sensor_set_strobelevel(*(int *)pData);
rc = ENO;
break;
}
case CFGSTRIGGERLEVEL:
{
Phocus1820_sensor_set_triggerlevel(*(int*)pData);
rc = ENO;
break;
}
case CFGAGEMODE:
{
ATM_seti(&g_nAgeMode, *(int *)pData);
AutoGain(g_nAgeMode & AGE_AUTOGAIN);
AutoExposure(g_nAgeMode & AGE_AUTOEXPOSURE);
rc = ENO;
break;
}
case CFGAGEPARAM:
{
/*UAGE_PARAM *pParam = (UAGE_PARAM *)pData;
ATM_seti(&g_stAgeParam.nMinGain, pParam->nMinGain);
ATM_seti(&g_stAgeParam.nMaxGain, pParam->nMaxGain);
ATM_seti(&g_stAgeParam.nMinExposure, pParam->nMinExposure);
ATM_seti(&g_stAgeParam.nMaxExposure, pParam->nMaxExposure);
ATM_seti(&g_stAgeParam.nTargetBrightness, pParam->nTargetBrightness);
ATM_seti(&g_stAgeParam.nBrightnessTh, pParam->nBrightnessTh);
rc = ENO;*/
break;
}
case CFGAGEPRD:
{
ATM_seti(&g_nMaxcnt, *(int *)pData);
rc = ENO;
break;
}
case CFGJPEGQUALITY:
{
rc = *(int *)pData;
if(rc < 0 || rc > 100)
{
rc = EINVPARAM;
}
else
{
ATM_seti(&g_nJpegQuality, rc);
rc = ENO;
}
break;
}
case CFGENABLERSMODE:
{
g_nDouble = *(int *)pData;
break;
}
default:
rc = EINVREQUEST;
}
return rc;
}
//Get schedule
int CConfigure::DoGet(int nCommand, char** pBuffer, int* pLen)
{
int rc = ENO;
switch(nCommand)
{
case GETNETINFO:
{
*pBuffer = (char*)GetEthInfo();
*pLen = sizeof(ETH_INFO);
rc = ENO;
break;
}
case GETIMAGE:
{
static MBX_MESSAGE stMsg;
stMsg.nCommand = 0;
MBX_post(hMbxSoftTriger, &stMsg, 0);
rc = ENO;
*pLen = 0;
break;
}
case GETMODEINFO:
{
*pBuffer = (char *)GetModeInfo();
*pLen = 2;
rc = ENO;
break;
}
case GETPROGTYPE:
{
*pBuffer = (char *)&m_nProgType;
*pLen = sizeof(int);
rc = ENO;
break;
}
case GETVERINFO:
{
*pBuffer = (char*)GetVersionInfo();
*pLen = 32;
rc = ENO;
break;
}
case GETSPINFO:
{
*pBuffer = (char*)GetSerialPortInfo();
*pLen = sizeof(UART_PARAM);
rc = ENO;
break;
}
case GETGLOBALGAIN:
{
break;
}
case GETREDGAIN:
{
break;
}
case GETBLUEGAIN:
{
break;
}
case GETGREEN1GAIN:
{
break;
}
case GETSHUTTER:
{
break;
}
case GETIO:
{
unsigned char c = 0;
c = Phocus1820_pio_read(IO_INPUT_PIN2);
c <<= 1;
c = c | Phocus1820_pio_read(IO_INPUT_PIN1);
*(unsigned char*)dataBuf = c;
*pBuffer = dataBuf;
*pLen = sizeof(unsigned char);
rc = ENO;
break;
}
case GETTIME:
{
Phocus1820_rtc_get_time((RTC_TIME *) (*pBuffer));
*pLen = sizeof(RTC_TIME);
rc = ENO;
break;
}
case GETTEMPERATURE:
{
*(int *)(*pBuffer) = Phocus1820_thermometer_get_temperature();
*pLen = sizeof(int);
rc = ENO;
break;
}
case GETAVERAGEPIXELVALUE:
{
*pBuffer = (char *)&g_nBrightness;
*pLen = sizeof(int);
rc = ENO;
break;
}
case GETLINKSTATUS:
{
*(int*)(*pBuffer) = g_nNetLinkStatus;
*pLen = sizeof(int);
rc = ENO;
break;
}
default:
rc = EINVREQUEST;
}
return rc;
}
int CConfigure::SetEthernetInfo(void* pData, int nLen)
{
int rc = ENO;
if(pData == NULL || nLen != sizeof(ETH_INFO))
rc = EINVPARAM;
else
{
if((unsigned int)pData != (unsigned int)&m_stEthInfo)
memcpy(&m_stEthInfo, pData, sizeof(ETH_INFO));
rc = Phocus1820_write_net_info(&m_stEthInfo);
}
return rc;
}
int CConfigure::SetModeInfo(void* pData, int nLen)
{
if(pData == NULL || nLen != sizeof(MODE_INFO))
return EINVPARAM;
else
return Phocus1820_write_mode_info((MODE_INFO *)pData);
}
int CConfigure::SetSerialPortInfo(void* pData, int nLen)
{
int *ps = (int *)pData;
int rc = ENO;
//Validate the parameter
if(ps == NULL || nLen != sizeof(int))
rc = EINVPARAM;
else
{
memcpy(&m_nBaudRate, pData, sizeof(int));
Phocus1820_rs232_set_baudrate(*ps);
Phocus1820_write_rs232_info(m_nBaudRate);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -