SE955 激光扫描头设置 通过SSI串口进行设置
扫描头是能够进行配置的,使其支持与禁用某些条码类型,设置有两种方式,一种是扫一下相应的设置条码,还有一种是通过SSI(simple serial interface)来设置,以下就讲一下SSI的设置方式。
扫描头在上电以后,就能够对其发送相应參数设置了,摩托罗拉建议设置暂时參数。设置永久生效的參数会损害扫描头内部的flash,flash损坏后扫描头将无法使用,比方出现一个点的激光,正常情况是一条线。flash寿命有限,请谨慎。暂时设置会在扫描头断电以后丢失。每次上电的时候都要设置一次,所以建议将须要设置的參数写入到注冊表中。每次上电以后从注冊表读取。
附上设置的基本代码,细致阅读凝视部分(请依据自身平台改动部分实现):
static CHAR wakeup[] = {0x00};
//2's complement sum of message contents excluding checksum.
static size_t __CheckSum(CHAR data[],size_t d_size)
{
size_t count=0;
size_t sum=0;
if(data == NULL || d_size <= 0)
{
return 0;
}
while(d_size--)
{
sum+=(data[d_size] & 0xFF);
}
return ((~sum)+1);
}
//store params to register,when power off
int SetScannerSetValueToLocal(void *data,size_t len)
{
#ifdef WINCE
HKEY hk;
ULONG dw=REG_BINARY,dwDisp;
ULONG dwSize=sizeof(dw);
CHAR param[1024]={0};
size_t iRetVal=0;
assert(data!=NULL && len>0);
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"),0,0,&hk))
{
if(RegQueryValueEx(hk,_T("Value"),0,&dw,(LPBYTE)param,&dwSize)==ERROR_SUCCESS)
{
RegDeleteValue(hk,_T("Value"));
RegSetValueEx(hk,_T("Value"),0,dw,(LPBYTE)data,len);
}else
{
iRetVal=-1;
}
}else
{
if(ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"), 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hk, &dwDisp))
{
RegSetValueEx(hk,_T("Value"),0,dw,(LPBYTE)data,len);
}else
{
iRetVal=-1;
}
}
RegCloseKey(hk);
return iRetVal;
#endif
}
static void __GetScannerSetValueFromLocal(void *data,size_t in_len,size_t * out_len)
{
#ifdef WINCE
HKEY hk;
ULONG dw=REG_BINARY;
ULONG dwSize=sizeof(dw);
CHAR param[1024]={0};
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"),0,0,&hk))
{
if(RegQueryValueEx(hk,_T("Value"),0,&dw,(LPBYTE)param,&dwSize)==ERROR_SUCCESS)
{
if(dwSize <=0)
{
return;
}else
{
memcpy(data,param,dwSize);
*out_len=dwSize;
}
}
}
RegCloseKey(hk);
#endif /*end of macro WINCE*/
}
//when scanner engine power on,you can call this function
static size_t SetParamValues(void)
{
#ifdef WINCE
size_t check_sum=0;
CHAR param_list[1024]={0};
size_t count=0;
size_t len=0,i=0;
CHAR buffer[4096]={0};
//Attention!!! Temporary change - lost when power removed
//Failure to meet these conditions can corrupt the scan engine's memory.
//must be 0x00,0xFF,not is 0x01,0xFF
CHAR temp[]={0xC6,0x04,0x00,0xFF};
__GetScannerSetValueFromLocal(param_list,sizeof(param_list),&count);
if(param_list == NULL || count <= 0)
{
return -1;
}
len=sizeof(temp)/sizeof(CHAR);
buffer[0]=((count+len+1)&0xFF); //length
memcpy(buffer+1,temp,len);
memcpy(buffer+len+1,param_list,count);
check_sum=__CheckSum(buffer,len+count+1);
buffer[len+count+1]=((check_sum>>8)&0xFF); //height byte
buffer[len+count+2]=(check_sum&0xFF); //low byte
write_com_data(wakeup,sizeof(wakeup));
_Sleep(100); //change from 70 to 100ms waiting for scanner wakeup
write_com_data(buffer,len+count+3); //Length: 1 byte,CheckSum: 2 byte
return 0;
#endif /*end of macro WINCE*/
}
write_com_data的API是平台相关性的,请依据自身平台不同改动实现。
SE955 激光扫描头设置 通过SSI串口进行设置的更多相关文章
- linux串口编程设置(转载)
(转载)在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件 的操作类似,只需打开相应的设备文件即可操作.串口编程特殊在于串 口通信时相关参数与属性的设置.嵌入式Linux的串 ...
- STM32串口的设置和库函数的介绍
串口设置的一般步骤可以总结为如下几个: 1) 串口时钟使能, GPIO时钟使能 2) 串口复位 3)GPIO 端口模式设置 4) 串口参数初始化 5) 开启中断并且初始化 NVIC(如果需要开启中 ...
- Linux串口参数设置
linux串口编程参数配置详解 1.linux串口编程需要的头文件 #include <stdio.h> //标准输入输出定义#include <stdlib.h&g ...
- 设置vim默认参数 例如设置默认背景颜色
因个人喜好问题,本人使用vim的时候喜欢将背景颜色设为dark. 但是每次打开一个vim的时候都要重新设置一次,感觉非常麻烦. 总要输入[Esc] :set bg=dark很不方便 粗暴的办法是直接进 ...
- paip.环境设置 mybatis ibatis cfg 环境设置
paip.环境设置 mybatis ibatis cfg 环境设置 三部分 //////////1. 电泳.... ............2. 猪配置文件 com/mijie/homi/searc ...
- Java json设置时间格式,Jackson设置时间格式,json设置单引号
Java json设置时间格式,Jackson设置时间格式,json设置单引号 >>>>>>>>>>>>>>> ...
- 超链接字体颜色设置(通过html/css的设置方法)
超链接字体颜色设置是通过css来设置,a链接的颜色设置常用的有以下两种,1.超链接a的初始状态颜色,2.超链接字体的鼠标滑过颜色,还有两种病不常用:3.超链接字体的已访问颜色,4.超链接字体在按下鼠标 ...
- Internet设置->连接选项卡->局域网(LAN)设置 某些设置由系统管理员进行管理
今天突然发现ss不能使用了.经过一系列排查发现 Internet设置->连接选项卡->局域网(LAN)设置 某些设置由系统管理员进行管理,如上图. 修改注册表值HKEY_LOCAL_MAC ...
- android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用
android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用,只要把Imageview的src给去掉就成了,src捕获了bac ...
随机推荐
- 关于函数提升在if语句中的表现
函数声明创建的函数在现代浏览器,在if语句中函数的声明不会提升,但是在老的IE版本中,if语句中的函数声明会提升 函数表达式在不同浏览器中函数声明都不会被提升,解决了不同浏览器的兼容性问题 关于函数提 ...
- 前端常见面试题总结part2
今天总结了几道,感觉非常有意思的题,有感兴趣的可以看下,有疑问请留言~ (答案在最后) 考察自执行函数的this指向 审题要细心 var n = 2, obj = { n:2, fn:(functio ...
- POJ 1118 求平面上最多x点共线
题意:给你n个点的坐标.求一条直线最多能穿过多少个点. 思路:枚举(n^2)+求斜率+排序 (复杂度n^2logn)大功告成 //By: Sirius_Ren #include <cmath&g ...
- Rabbit--ack机制
消息应答时执行一个任务可能需要花费几秒钟,你可能会担心如果一个消费者在执行任务过程中挂掉了. 一旦RabbitMQ将消息分发给了消费者,就会从内存中删除.在这种情况下,如果正在执行任务的消费者宕机,会 ...
- Azure Service Bus
Azure Service Bus 是类似Rabbit的一个队列的应用. 找了两个基本的教程 First(但是这个,没有写怎么去链接账户) Sec:这个有 Third(讲的也很好) Windo ...
- [实战经验][SQL Sever 2008 (R)解决方法累积
SQL Sever 2008 (R)的安装图解及配置 http://www.soft6.com/v9/2009/jcsj_1030/115821.html 产品密钥,选择“输入产品密钥”,输入:PTT ...
- MVC控制器返回值
public ActionResult Index(string id)//主页 //参数string searchString 访问方式为index?searchString=xxxx .参数str ...
- AndroidStudio 内存泄漏的分析过程
前言部分这次泄漏是自己代码写的太随意引起的,讲道理,代码写的太为所欲为了,导致有些问题根本就很难发现. 泄漏产生的原因,由于activity未被回收导致.这里给我们提出的一个警示,在使用上下文的时候, ...
- 死磕itchat源码--config.py
itchat的配置文件,源码: import os, platform # 版本及微信的url,二维码等 VERSION = '1.3.10' BASE_URL = 'https://login.we ...
- 【剑指Offer】18、二叉树的镜像
题目描述: 操作给定的二叉树,将其变换为原二叉树的镜像. 解题思路: 求一棵树的镜像的过程:先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点.当交换完所有的非 ...