免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6646 | 回复: 2
打印 上一主题 下一主题

[SCO UNIX] zzsunix:给你找了一个密码键盘驱动程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-16 15:19 |只看该作者 |倒序浏览
按实达终端编的

该例子密码小键盘接到终端的辅口2上,密码小键盘的通讯参数为:波特率为9600、停止位1位、数据位8位、不校验。在密码小键盘输入过程中,<Enter>;为确认键,<Clear>;为更正键,其余各键均为发送对应ASCII码。在SETUP中“辅口仿真”选项为本终端或实达终端。建议使用密码小键盘的同时锁定终端大键盘,命令如下:
ESC [ 2 h  键盘锁定(终端大键盘不接收输入)
ESC [ 2 l  键盘解锁(终端大键盘工作正常)

C语言程序例子如下:

#include<stdio.h>;
#include<termio.h>;
#include<fcntl.h>;
#include<time.h>;

/*送密码小键盘的数据*/
#define ERR 1
#define OK 2
#define RED ″\x81″   /*红灯亮,请再输入一次*/
#define GREEN ″\x82″ /*绿灯亮,您好请输入密码*/
#define DARK ″\x83″  /*密码小键盘二灯全灭*/
#define QUITKEY 0x7f

/*终端辅口命令*/
#define SELAUX2 ″\x1b!0;0;0;0Z″
/*选择辅口2:波特率为9600、停止位1位、数据位8位、不校验*/
#define INITAUX ″\x1b[/50h\x1b[/54h\x1b[53h″
/*打开辅口、辅口数据集中发送、辅口数据前后不加识别码*/
#define KEYLOCK ″\x1b[2h″            /*锁定终端大键盘*/
#define CLOSEAUX ″\x1b[/501\x1b[2l″ /*关闭辅口、解锁终端大键盘*/
#define AUXLEAD ″\x1b[/51h″          /*主机发送到终端的数据全部送给辅口*/
#define AUXEND ″\x1b[/51l″           /*结束主机往辅口送数据*/


static struct termio oterm,term;
static int term_fd;

main()
{
int i;
char ch,passwd_buf[20];
setterm(0);     /*设置终端状态*/
selaux2();      /*初始化辅口2*/
sendaux(GREEN); /*密码键盘绿灯亮,发声:您好请输入密码*/
i=0;
while(1){
  read(term_fd,&ch,1);
  passwd_buf[i++]=ch;
  if(ch==0x0a)  /*确认键退出*/
    break;
}
printf(″The input passward is %s\n″,passwd_buf);
sendaux(DARK);   /*灭密码键盘红、绿灯*/
closeaux();      /*关闭辅口*/
resetterm();     /*恢复终端状态*/
return;
}


/*设置终端状态
 参数:fstat
 返回:-1,出错
*/
setterm(int fstat)
{
term_fd=open((char*)ttyname(1),0_RDWR|fstat);
if(term_fd<0)return-1;
if(ioct1(term_fd,TCGETA,&term)<0) return ERR;

oterm=term;
term.c_iflag&=~IXON;
term.c_1flag&=~ECHO;
term.c_1flag&=~ICANON;
term.c_cc[VMIN]=1;
term.c_cc[VTIME]=1;
term.c_cc[VQUIT]=QUITKEY;
if(ioct1(term_fd,TCSETA,&term)<0)return ERR;
return term_fd;
}

/*恢复终端状态
 参数:term_fd:终端文件句柄
 返回:ERR:出错
OK:正确
*/
resetterm()
{
if(term_fd<0) return-1;
if(ioct1(term_fd,TCSETA,&oterm)<0)return ERR;
close(term_fd);
return OK;
}

*/设置终端辅口2*/
selaux2()
{
write(term_fd,SELAUX2,strlen(SELAUX2));
write(term_fd,INITAUX,strlen(INITAUX));
write(term_fd,KEYLOCK,strlen(KEYLOCK));
return OK;
}

/*向辅口发送字符串*/
sendaux(s)
char*s;
{
write(term_fd,AUXLEAD,strlen(AUXLEAD));
write(term_fd,s,strlen(s));
write(term_fd,AUXEND,strlen(AUXEND));
}

/*关闭辅口*/
closeaux()
{
write(term_fd,CLOSEAUX,strlen(CLOSEAUX));
}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-09-16 15:57 |只看该作者

zzsunix:给你找了一个密码键盘驱动程序

顶一下,支持!

论坛徽章:
0
3 [报告]
发表于 2012-03-27 13:58 |只看该作者
顶 一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP