扫描头是能够进行配置的,使其支持与禁用某些条码类型,设置有两种方式,一种是扫一下相应的设置条码,还有一种是通过SSI(simple serial interface)来设置,以下就讲一下SSI的设置方式。

扫描头在上电以后,就能够对其发送相应參数设置了,摩托罗拉建议设置暂时參数。设置永久生效的參数会损害扫描头内部的flash,flash损坏后扫描头将无法使用,比方出现一个点的激光,正常情况是一条线。flash寿命有限,请谨慎。暂时设置会在扫描头断电以后丢失。每次上电的时候都要设置一次,所以建议将须要设置的參数写入到注冊表中。每次上电以后从注冊表读取。

附上设置的基本代码,细致阅读凝视部分(请依据自身平台改动部分实现):

  1. static CHAR wakeup[] = {0x00};
  2.  
  3. //2's complement sum of message contents excluding checksum.
  4. static size_t __CheckSum(CHAR data[],size_t d_size)
  5. {
  6. size_t count=0;
  7. size_t sum=0;
  8.  
  9. if(data == NULL || d_size <= 0)
  10. {
  11. return 0;
  12. }
  13.  
  14. while(d_size--)
  15. {
  16. sum+=(data[d_size] & 0xFF);
  17. }
  18. return ((~sum)+1);
  19. }
  20. //store params to register,when power off
  21. int SetScannerSetValueToLocal(void *data,size_t len)
  22. {
  23. #ifdef WINCE
  24.     HKEY hk;
  25.     ULONG dw=REG_BINARY,dwDisp;
  26.     ULONG dwSize=sizeof(dw);
  27.     CHAR param[1024]={0};
  28.     size_t iRetVal=0;
  29.  
  30.     assert(data!=NULL && len>0);
  31.  
  32.     if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"),0,0,&hk))
  33.     {
  34.         if(RegQueryValueEx(hk,_T("Value"),0,&dw,(LPBYTE)param,&dwSize)==ERROR_SUCCESS)
  35.         {
  36.             RegDeleteValue(hk,_T("Value"));
  37.             RegSetValueEx(hk,_T("Value"),0,dw,(LPBYTE)data,len);
  38.         }else
  39.         {
  40.             iRetVal=-1;
  41.         }
  42.     }else
  43.     {
  44.         if(ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"), 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hk, &dwDisp))
  45.         {
  46.             RegSetValueEx(hk,_T("Value"),0,dw,(LPBYTE)data,len);
  47.         }else
  48.         {
  49.             iRetVal=-1;
  50.         }
  51.     }
  52.  
  53.     RegCloseKey(hk);
  54.  
  55.     return iRetVal;
  56. #endif
  57. }
  58.  
  59. static void __GetScannerSetValueFromLocal(void *data,size_t in_len,size_t * out_len)
  60. {
  61. #ifdef WINCE
  62. HKEY hk;
  63. ULONG dw=REG_BINARY;
  64. ULONG dwSize=sizeof(dw);
  65. CHAR param[1024]={0};
  66.  
  67. if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"),0,0,&hk))
  68. {
  69. if(RegQueryValueEx(hk,_T("Value"),0,&dw,(LPBYTE)param,&dwSize)==ERROR_SUCCESS)
  70. {
  71. if(dwSize <=0)
  72. {
  73. return;
  74. }else
  75. {
  76. memcpy(data,param,dwSize);
  77. *out_len=dwSize;
  78. }
  79. }
  80. }
  81.  
  82. RegCloseKey(hk);
  83. #endif /*end of macro WINCE*/
  84. }
  85.  
  86. //when scanner engine power on,you can call this function
  87. static size_t SetParamValues(void)
  88. {
  89. #ifdef WINCE
  90. size_t check_sum=0;
  91. CHAR param_list[1024]={0};
  92. size_t count=0;
  93. size_t len=0,i=0;
  94. CHAR buffer[4096]={0};
  95. //Attention!!! Temporary change - lost when power removed
  96. //Failure to meet these conditions can corrupt the scan engine's memory.
  97. //must be 0x00,0xFF,not is 0x01,0xFF
  98. CHAR temp[]={0xC6,0x04,0x00,0xFF};
  99.  
  100. __GetScannerSetValueFromLocal(param_list,sizeof(param_list),&count);
  101.  
  102. if(param_list == NULL || count <= 0)
  103. {
  104. return -1;
  105. }
  106.  
  107. len=sizeof(temp)/sizeof(CHAR);
  108.  
  109. buffer[0]=((count+len+1)&0xFF); //length
  110.  
  111. memcpy(buffer+1,temp,len);
  112. memcpy(buffer+len+1,param_list,count);
  113.  
  114. check_sum=__CheckSum(buffer,len+count+1);
  115. buffer[len+count+1]=((check_sum>>8)&0xFF); //height byte
  116. buffer[len+count+2]=(check_sum&0xFF); //low byte
  117.  
  118. write_com_data(wakeup,sizeof(wakeup));
  119.  
  120. _Sleep(100); //change from 70 to 100ms waiting for scanner wakeup
  121.  
  122. write_com_data(buffer,len+count+3); //Length: 1 byte,CheckSum: 2 byte
  123. return 0;
  124. #endif /*end of macro WINCE*/
  125. }

write_com_data的API是平台相关性的,请依据自身平台不同改动实现。

SE955 激光扫描头设置 通过SSI串口进行设置的更多相关文章

  1. linux串口编程设置(转载)

    (转载)在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件 的操作类似,只需打开相应的设备文件即可操作.串口编程特殊在于串 口通信时相关参数与属性的设置.嵌入式Linux的串 ...

  2. STM32串口的设置和库函数的介绍

    串口设置的一般步骤可以总结为如下几个: 1) 串口时钟使能, GPIO时钟使能  2) 串口复位 3)GPIO 端口模式设置 4) 串口参数初始化  5) 开启中断并且初始化 NVIC(如果需要开启中 ...

  3. Linux串口参数设置

    linux串口编程参数配置详解 1.linux串口编程需要的头文件 #include <stdio.h>         //标准输入输出定义#include <stdlib.h&g ...

  4. 设置vim默认参数 例如设置默认背景颜色

    因个人喜好问题,本人使用vim的时候喜欢将背景颜色设为dark. 但是每次打开一个vim的时候都要重新设置一次,感觉非常麻烦. 总要输入[Esc] :set bg=dark很不方便 粗暴的办法是直接进 ...

  5. paip.环境设置 mybatis ibatis cfg 环境设置

    paip.环境设置 mybatis ibatis cfg 环境设置 三部分 //////////1. 电泳.... ............2. 猪配置文件  com/mijie/homi/searc ...

  6. Java json设置时间格式,Jackson设置时间格式,json设置单引号

    Java json设置时间格式,Jackson设置时间格式,json设置单引号 >>>>>>>>>>>>>>> ...

  7. 超链接字体颜色设置(通过html/css的设置方法)

    超链接字体颜色设置是通过css来设置,a链接的颜色设置常用的有以下两种,1.超链接a的初始状态颜色,2.超链接字体的鼠标滑过颜色,还有两种病不常用:3.超链接字体的已访问颜色,4.超链接字体在按下鼠标 ...

  8. Internet设置->连接选项卡->局域网(LAN)设置 某些设置由系统管理员进行管理

    今天突然发现ss不能使用了.经过一系列排查发现 Internet设置->连接选项卡->局域网(LAN)设置 某些设置由系统管理员进行管理,如上图. 修改注册表值HKEY_LOCAL_MAC ...

  9. android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用

    android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用,只要把Imageview的src给去掉就成了,src捕获了bac ...

随机推荐

  1. Shredding Company(dfs)

    http://poj.org/problem?id=1416 题意:将一个数分成几部分,使其分割的各个数的和最大并且小于所给的数. 凌乱了..参考的会神的代码..orz... #include < ...

  2. 关于sublime代码格式化

    就我接触到的,html,css,js,json,php语言来介绍. html,css,json,js这些,我感觉pretty是比较好用的,ctrl+shift+h快捷键,给人不一样的感受,不过这个插件 ...

  3. Vue项目打包部署到apache服务器

    vue项目在开发环境下,让项目运行起来,是通过npm run dev命令,原理是在本地搭建了一个express服务器. 但是在服务器上就不是这样的,必须要通npm run build命令来对整个项目进 ...

  4. Oracle配置说明

    当Oracle安装完成后,为后续能够顺利得导出空表,特做一下配置(重点关注2.1) 1.1.查询空表select table_name from user_tables where NUM_ROWS= ...

  5. wap网测一道题目

    1. 给定一个字符串s, 1 <= len(s) <= 3000, 定义odd palindrome string为长度为奇数的回文串, 求s中该奇回文串的个数. 比如axbcba , 结 ...

  6. Android第三方登陆之新浪微博Weibo篇(原生登陆授权)

    前言 Android第三方登录可以说是非常的常见,今天主要先说一下新浪微博第三方登陆授权. SDK版本支持 SDK v3.0已经发布了支持iPhone和Android的版本. 须将你的应用的包名签名信 ...

  7. HTML 5的基本标签

    1.  文件开始标签<html> 在任何的一个HTML文件里,最先出现的HTML标签就是<html>,它用于表示该文件是以超文本标识语言(HTML)编写的.<html&g ...

  8. 解决无法移除tomcat中的项目

    问题:启动myeclipse,tomcat提示报错,blind,但是你移除的时候无法移除,只会显示一个黄色的感叹号,此时你直接在webapp中删除时,也提示呗占用无法删除. 办法:关掉myeclips ...

  9. Java内存机制,内存地址

    问题一:String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); // ...

  10. Functor and Monad in Swift

    I have been trying to teach myself Functional Programming since late 2013. Many of the concepts are ...