|
对于扫描方式:
0:激光/按键
1:激光
2:按键
实现功能:根据扫描方式的不同实现条码扫描功能.
我参照了一下evc++里面自带的一个例子(它里面并没有用到OBR相关函数去获取扫描数据,只是通过KEY相关函数):
代码如下:
//激光扫描,或者手动输入条码(这是我修改的例子,不过并没有实现,只激光扫描的功能.)
int casio_read(int line,int colum,int mode,char *sdata,int lenth,char *bartype)
{
/*** OBR DATA BUFFER ************/
M_TBL obr_md;
KEY_INPS key_str;
ER ret;
/*** 初始化条码存储区域 ***/
sdata[0] = 0x00;
/*** KEY INITIALIZE ROUTINE ***/
key_str.ext = KEY_OBR_EXT|KEY_CLR_EXT;
key_str.echo = ECHO_ON;
key_str.font_size = LCD_ANK_STANDARD;
key_str.type = LCD_ATTR_NORMAL;
key_str.len=lenth; /* input lenth */
key_str.column_pos = colum;
key_str.line_pos = line;
key_str.column_len=0;
/* OBR scanning set */
OBR_moderd(&obr_md);
obr_md.Ledc = OBR_VIBLEDON;
obr_md.Code = OBR_ALL;
obr_md.Idsf[4] = 0;
obr_md.Itrf[4] = 0;
obr_md.Cd93[4] = 0;
obr_md.Cd39[4] = 0;
obr_md.Cd128[4] = 0;
OBR_modewt(&obr_md);
/*buf(OBR_STOFF);*/
OBR_chgbuf(OBR_STOFF);
switch(mode) /* 判断工作模式 */
{
case 0: /* BOR and key */
ret = OBR_open( 0x00000000 ); /* OBR OPEN */
OBR_flush();
if((key_check()!=E_KEY_MD) && (key_check()!=E_NG) )
{
ret = key_string(&key_str,(UB *)sdata);
if(ret==E_OK)
{
casio_good(3);
ret=0;
break;
}
if(ret==E_KEY_CLR)
{
ret=2;
break;
}
if(ret!=E_KEY_OBR)
{
ret=0;
break;
}
}
break;
case 1: /* OBR only */
ret = OBR_open( 0x00000000 ); /* OBR OPEN */
OBR_flush();
if((key_check()!=E_KEY_MD) && (key_check()!=E_NG) )
{
ret = key_string(&key_str,(UB *)sdata);
if(ret==E_OK)
{
ret=0;
break;
}
if(ret==E_KEY_CLR)
{
ret=2;
break;
}
if(ret!=E_KEY_OBR)
{
ret=0;
break;
}
}
break;
case 2: /* key only */
ret=key_string(&key_str,(UB *)sdata);
if(ret==E_OK)
{
ret=0;
break;
}
if(ret==E_KEY_CLR)
{
ret=12;
break;
}
break;
default: /* error */
ret=2;
break;
}
OBR_close();
return ret;
}
---------------------------------------------------------分界线--------------------------------------------
我在论坛里也看了其他几位朋友写的例子,里面对于OBR扫描是用的OBR_stat(),OBR_gets()等OBR函数去获取的扫描数据,那个函数例子我也试着写了一个,不过并没有达到想要的效果,郁闷了几天,实在解决不了,希望有经验的朋友指点一下...
|
|