⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.cpp

📁 用于DSP下摄像机的图像抓取、图像处理和传输、以及与上位机TCP/IP通信的工程文件。基于Texas Instruments Code Composer Studio实现。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -