国惠光电相机SDK调用——相机命令协议格式和实现

系列文章目录

国惠光电相机SDK调用——相机命令协议格式和实现



前言

本节介绍国惠光电相机SDK控制命令,主要介绍协议格式,常用命令及C++示例代码实现。


一、命令协议格式

相机控制命令格式如下,共16字节在这里插入图片描述
首部: 总是0xFF 0xFF 0xAA
地址: 范围是0x00~0xff (十进制是0 ~ 255),其中0xff为广播地址
数据长度: 总是0x00,代表数据由8字节组成
命令号: 范围为0x0001~0xffff,命令号的低字节在前,用于区分不同的命令
数据: 8字节可变数据,低字节在前。
校验和: 占一个字节,将前面除首部外的所有字节(第4~15字节)按字节异或计算结果的值,赋值本字节

二、常用命令集

下面展示三个主要命令集,
注: 1. 对应的数据位根据实际情况设置 2. 校验位需要实时生成
以上两条的修改可参照代码区实现

命令名称命令号数据校验和
快门校正0x09, 0x000x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x000x**
增益0x19, 0x000x**, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x000x**
积分时间0x22, 0x000x**, 0x**, 0x**, 0x00, 0x00, 0x00, 0x00, 0x000x**

三、C++示例实现

GHDEV_HND m_DeviceHandle; //64位系统,定义设备句柄,进行命令发送前需先打开设备
//定义命令
unsigned char SHUTTER[16] = {0xFF, 0xFF, 0xAA, 0xFF, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

unsigned char GAIN[MAX_STR_LENGTH] = {0xFF, 0xFF, 0xAA, 0xFF, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

unsigned char INT_TIME[MAX_STR_LENGTH] = {0xFF, 0xFF, 0xAA, 0xFF, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

  1. 打快门
void OnButtonShutter() 
{
    if(m_DeviceHandle)
    {
		SHUTTER[7] = 0x00;
        SHUTTER[15] = 0x00;
        for (int i=3; i<=14; i++) 
        {
            SHUTTER[15] = SHUTTER[15] ^ SHUTTER[i]; //生成最后的校验字节
        }
        IR_SendSeriaPortCmd(m_DeviceHandle, SHUTTER, sizeof(SHUTTER));
        //SDK函数发送命令
    }		
}
  1. 配置增益
void OnSetGain(int m_SensorGain) 
{
	if(m_DeviceHandle)  
	{
		GAIN[7] = m_ SensorGain ; //0->高增益;1->中增益;2->低增益
		GAIN[15] = 0x00;
		for (int i=3; i<=14; i++) 
		{
			GAIN[15] = GAIN[15] ^ GAIN[i];//生成最后的校验字节
		}
		IR_SendSeriaPortCmd(m_DeviceHandle, GAIN, sizeof(GAIN));
		//SDK函数发送命令
	}
}
  1. 配置积分时间
void OnSetIntTime(int m_SensorIntTime) 
{
	if(m_DeviceHandle)  
	{
		//下面三行根据积分时间值生成对应字节的数据
		INT_TIME[7] = (m_SensorIntTime & 0x00ff);
		INT_TIME[8] = (m_SensorIntTime & 0xff00) >> 8;
		INT_TIME[9] = (m_SensorIntTime & 0xff0000) >> 16;		
		INT_TIME[15] = 0x00;
		for (int i=3; i<=14; i++) 
		{
			INT_TIME[15] = INT_TIME[15] ^ INT_TIME[i];//生成最后的校验字节
		}
		IR_SendSeriaPortCmd(m_DeviceHandle, INT_TIME, sizeof(INT_TIME));
		//SDK函数发送命令
	}
}

总结

本文介绍了国惠相机SDK的命令协议,实现方法。如采用其他开发工具(非VS),同样可以用SDK函数IR_SendSeriaPortCmd进行命令的发送,但要特别注意不同的工具与SDK(C++)数据类型的对应。
注:如果您不使用国惠相机SDK,控制命令可通过串口直接发送,与SDK唯一不同之处是您不可使用IR_SendSeriaPortCmd()函数,您需要通过串口直接发送对应命令的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值