阅读:1487回复:6
问unix下串口通讯的白痴问题,麻烦高手站稳别faint
就是想知道,终端辅口(也就是串口啦)通讯的时候,怎么把指令发送到串口上,用什么函数啊?还有怎么把外设(比如密码键盘)返回的数据读回来呢。
我知道很白痴啦,各位高高高手没不要faint啊,也不要不屑一顾的就走了,告诉偶一下吧,麻烦各位了,至多耽误你一点点小时间啦,你在心里骂偶一句白痴就行了,帖子里骂也行:(,不过要给答案偶才让你骂 ;) |
|
|
沙发#
发布于:2005-03-15 11:05
VB,Delphi都有控件,VC须调用SDK Api实现,而且肯定得用多线程
|
|
|
板凳#
发布于:2005-03-15 16:47
VB,Delphi都有控件,VC须调用SDK Api实现,而且肯定得用多线程 我用的是Unix下c,不用vc。 不知道可不可以用ioctl这个函数,但是,这个函数的具体用法我不太清楚,E文太差 :( |
|
|
地板#
发布于:2005-03-29 21:18
ioctl函数指示查看端口相关的属性、参数,
真正的操作应该用write/read吧! |
|
|
地下室#
发布于:2005-03-30 10:53
unix下的设备都是文件,跟读写文件是一样的 用ioctl这个函数是用来控制设备的,需要时也用 |
|
|
5楼#
发布于:2005-04-01 10:00
ioctl函数指示查看端口相关的属性、参数, 果然是大佬,景仰一下 :P 我现在用ioctl和read读普通密码键盘的时候没有问题 但是,如果是加密的密码键盘的时候,就不通了。 还有,我读磁条读写器的时候,可以读到卡号(分别读2 3磁道可以,但是同时读的话,我就不知道,怎么能够将两个磁道的信息分开,是按字节区分吗?),但是如果写的时候,就无法写入。 读加密密码键盘的时候,连最初的“请输入密码”的语音都听不到,也就是说,我读密码的指令都没有发送出去。我的代码是: flag=ioctl(0, TCGETA, &tty1); if(flag==-1) { printf(\"1111111111111\\n\"); return -1; } tty2=tty1; tty1.c_iflag |= IXOFF|IXON; tty1.c_lflag &= ~ISIG&~ICANON&~ECHO; tty1.c_cc[4] = 0; tty1.c_cc[5] = 6; tty1.c_iflag |= CLOCAL|CREAD; flag = ioctl(0, TCSETAF, &tty1); printf(\"\\033!3;0;0;0Z\\033[/53h\\033[/50h\\033[/51h\"); printf(\"\\033F00\"); printf(\"\\x0d\"); printf(\"\\x0a\"); fflush(stdout); while(l<15) { j = read(0, &pass,1); if (j < 0 ) break; } if (j == 0) { l ++; sleep(1); } else { if(pass == 002) continue; if(pass == 003) { pass = \'\\0\'; break; } i++; } } des(pass,key,deskey,1); printf(\"\\x83\\033[/51l\\033[/50l\"); |
|
|
6楼#
发布于:2005-04-01 10:03
写磁条读卡器的代码如下,不知为何总也不能让磁条读卡器的灯点亮(好像根本就没有驱动起来 :()
flag=ioctl(0, TCSETA, &tty1); printf(\"%d\\n\",flag); if(flag==-1) { return -1; } tty2=tty1; tty1.c_oflag |= ~OPOST&~OFILL; tty1.c_lflag &= ~ISIG&~ICANON&~ECHO; tty1.c_cc[4] = 0; tty1.c_cc[5] = 6; tty1.c_iflag |= CLOCAL|CREAD; ioctl(0, TCSETAW, &tty1); printf(\"\\033!0;0;0;0Y\\033[/50h\\033[/51h\"); printf(\"\\033t\"); write(0,\"9493\",4); printf(\"\\035\"); printf(\"\\033\"); fflush(stdout); printf(\"\\033%A\\033[/51l\\033[/50l\"); [编辑 - 4/1/05 by Jenova] |
|
|