Jenova
驱动牛犊
驱动牛犊
  • 注册日期2005-03-10
  • 最后登录2005-04-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1474回复:6

问unix下串口通讯的白痴问题,麻烦高手站稳别faint

楼主#
更多 发布于:2005-03-14 16:01
就是想知道,终端辅口(也就是串口啦)通讯的时候,怎么把指令发送到串口上,用什么函数啊?还有怎么把外设(比如密码键盘)返回的数据读回来呢。

我知道很白痴啦,各位高高高手没不要faint啊,也不要不屑一顾的就走了,告诉偶一下吧,麻烦各位了,至多耽误你一点点小时间啦,你在心里骂偶一句白痴就行了,帖子里骂也行:(,不过要给答案偶才让你骂  ;)
红颜弹指老 刹那芳华
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-15 11:05
VB,Delphi都有控件,VC须调用SDK Api实现,而且肯定得用多线程
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Jenova
驱动牛犊
驱动牛犊
  • 注册日期2005-03-10
  • 最后登录2005-04-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-15 16:47
VB,Delphi都有控件,VC须调用SDK Api实现,而且肯定得用多线程


我用的是Unix下c,不用vc。
不知道可不可以用ioctl这个函数,但是,这个函数的具体用法我不太清楚,E文太差 :(
红颜弹指老 刹那芳华
heshen
驱动老牛
驱动老牛
  • 注册日期2002-04-19
  • 最后登录2014-01-26
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-29 21:18
ioctl函数指示查看端口相关的属性、参数,
真正的操作应该用write/read吧!
不要啊!
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-30 10:53

unix下的设备都是文件,跟读写文件是一样的
用ioctl这个函数是用来控制设备的,需要时也用
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Jenova
驱动牛犊
驱动牛犊
  • 注册日期2005-03-10
  • 最后登录2005-04-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-01 10:00
ioctl函数指示查看端口相关的属性、参数,
真正的操作应该用write/read吧!


果然是大佬,景仰一下 :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\");
红颜弹指老 刹那芳华
Jenova
驱动牛犊
驱动牛犊
  • 注册日期2005-03-10
  • 最后登录2005-04-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
红颜弹指老 刹那芳华
游客

返回顶部