如何在键盘上输入A,就将Apython 发送键盘事件给串口

下次自动登录
现在的位置:
& 综合 & 正文
c语言从键盘上输入一串字符串,输入两个数字a和b,截取字符串第a个到第b个字母,并输出截取后的字符串
#include &stdio.h&
#include &string.h&
int main(int argc,
const char * argv[])
char a[100],b[100];
int m=0,n=0,i;
scanf("%d",&m);
scanf("%d",&n);
if((strlen(a)&=m)&&(strlen(a)-m+1)&=n)
for (i=0; i&=n; i++)
printf("%s\n",a);
printf("%s",b);
【上篇】【下篇】网站已改版,请使用新地址访问:
1 用8251实现串行口异步通信,自发自收,波特率1200bps。采用查询方式发送与接收。从键 SCM 单片机开发 238万源代码下载- www.pudn.com
&文件名称: 1
& & & & &&]
&&所属分类:
&&开发工具: Asm
&&文件大小: 1 KB
&&上传时间:
&&下载次数: 72
&&提 供 者:
&详细说明:用8251实现串行口异步通信,自发自收,波特率1200bps。采用查询方式发送与接收。从键盘输入发送字符。发送与接收的字符均在屏幕上显示。按esc键返回dos-Achieved with the 8251 serial asynchronous communication, spontaneous self-income, the baud rate 1200bps. Way to send and receive using queries. To send characters from the keyboard. Send and receive characters are displayed on the screen. Press esc key to return to dos
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 用<font color=#CCa实现串行口异步通信,自发自收,波特率1200bps,采用查询方式发送,中断方式接受。自收结果显示于屏幕。按esc返回dos
&[] - 用<font color=#CCa实现串行口异步方式双机通信,波特率1200bps,采用查询方式发送,中断方式接收。双方平时处在查询键盘、等待中断接收状态,并显示相关提示
&[] - 串行接口应用实验-发送端程序
串行通信发送程序source file
<font color=#CC 综合实验
&[] - Active Contour without Edges Matlab Code
李春明版 一种新的水平集方法由Chunming Li教授开发
&[] - 人脸识别匹配的源代码,并配有部分人脸照片,欢迎下载学习
&[] - 用汇编语言通过串行芯片16550实现的PC通信。
&[] - 从输入文件如in.txt读取数据(可以是当前目录,最好是可以由用户指定),经com1端口发送(自发自收),收到的内容存入输出文件如out.txt(可以是当前目录,最好是可以由用户指定)。要求在按键后启动发送,并开始计时,发送完毕后,结束计时,并显示发送所花时间(分钟:秒:毫秒)。
&[] - 使用<font color=#CC进行串行通信,在主机键盘打入的字符可以显示在终端屏幕上,在终端屏幕上打入的字符显示在主机屏幕上。
&[] - <font color=#CC自发自收实验。从键盘输入一个字符,将其ASCII码加1后发送出去,再接收回来在屏幕上显示,实现自发自收。& & & 最近遇到一个需求:需要在网站的文本输入栏上输入条码和回车; 查了一下资料,记录如下:
& & &最后的方案: 两台电脑用串口连接,从A机器发送信息到串口, B机器从串口读到信息,并模拟键盘输出。&
[csharp]&&
public&class&CKeyController&&
&&&&&&&[System.Runtime.InteropServices.DllImport("user32")]&&
&&&&&&&static&extern&void&keybd_event(&&
&&&&&&&&&&&byte&bVk,&&
&&&&&&&&&&&byte&bScan,&&
&&&&&&&&&&&uint&dwFlags,&&
&&&&&&&&&&&uint&dwExtraInfo&&
&&&&&&&&&&&);&&
&&&&&&&const&uint&KEYEVENTF_EXTENDEDKEY&=&0x1;&&
&&&&&&&const&uint&KEYEVENTF_KEYUP&=&0x2;&&
&&&&&&&private&static&Dictionary&string,&byte&&keycode&=&new&Dictionary&string,&byte&();&&
&&&&&&&[DllImport("user32.dll")]&&
&&&&&&&public&static&extern&int&SendMessage(IntPtr&hWnd,&int&Msg,&int&wParam,&int&lParam);&&
&&&&&&&[DllImport("User32.DLL")]&&
&&&&&&&public&static&extern&int&SendMessage(IntPtr&hWnd,uint&Msg,&int&wParam,&string&lParam);&&
&&&&&&&[DllImport("User32.DLL")]&&
&&&&&&&public&static&extern&int&SendMessage(IntPtr&hWnd,&uint&Msg,&int&wParam,&int&lParam);&&
&&&&&&&[DllImport("User32.DLL")]&&
&&&&&&&public&static&extern&IntPtr&FindWindowEx(IntPtr&hwndParent,&&
&&&&&&&&&&&IntPtr&hwndChildAfter,&string&lpszClass,&string&lpszWindow);&&
&&&&&&&public&const&uint&WM_SETTEXT&=&0x000C;&&
&&&&&&&public&const&uint&WM_CHAR&=&0x0102;&&
&&&&&&&public&static&int&WM_KEYDOWN&=&0x0100;&&
&&&&&&&public&static&int&WM_KEYUP&=&0x0101;&&
&&&&&&&public&void&InitKey()&&
&&&&&&&{&&
&&&&&&&&&&&keycode&=&new&Dictionary&string,&byte&();&&
&&&&&&&&&&&keycode.Add("A",&65);&&
&&&&&&&&&&&keycode.Add("B",&66);&&
&&&&&&&&&&&keycode.Add("C",&67);&&
&&&&&&&&&&&keycode.Add("D",&68);&&
&&&&&&&&&&&keycode.Add("E",&69);&&
&&&&&&&&&&&keycode.Add("F",&70);&&
&&&&&&&&&&&keycode.Add("G",&71);&&
&&&&&&&&&&&keycode.Add("H",&72);&&
&&&&&&&&&&&keycode.Add("I",&73);&&
&&&&&&&&&&&keycode.Add("J",&74);&&
&&&&&&&&&&&keycode.Add("K",&75);&&
&&&&&&&&&&&keycode.Add("L",&76);&&
&&&&&&&&&&&keycode.Add("M",&77);&&
&&&&&&&&&&&keycode.Add("N",&78);&&
&&&&&&&&&&&keycode.Add("O",&79);&&
&&&&&&&&&&&keycode.Add("P",&80);&&
&&&&&&&&&&&keycode.Add("Q",&81);&&
&&&&&&&&&&&keycode.Add("R",&82);&&
&&&&&&&&&&&keycode.Add("S",&83);&&
&&&&&&&&&&&keycode.Add("T",&84);&&
&&&&&&&&&&&keycode.Add("U",&85);&&
&&&&&&&&&&&keycode.Add("V",&86);&&
&&&&&&&&&&&keycode.Add("W",&87);&&
&&&&&&&&&&&keycode.Add("X",&88);&&
&&&&&&&&&&&keycode.Add("Y",&89);&&
&&&&&&&&&&&keycode.Add("Z",&90);&&
&&&&&&&&&&&keycode.Add("0",&48);&&
&&&&&&&&&&&keycode.Add("1",&49);&&
&&&&&&&&&&&keycode.Add("2",&50);&&
&&&&&&&&&&&keycode.Add("3",&51);&&
&&&&&&&&&&&keycode.Add("4",&52);&&
&&&&&&&&&&&keycode.Add("5",&53);&&
&&&&&&&&&&&keycode.Add("6",&54);&&
&&&&&&&&&&&keycode.Add("7",&55);&&
&&&&&&&&&&&keycode.Add("8",&56);&&
&&&&&&&&&&&keycode.Add("9",&57);&&
&&&&&&&&&&&keycode.Add(".",&0x6E);&&
&&&&&&&&&&&keycode.Add("LEFT",&0x25);&&
&&&&&&&&&&&keycode.Add("UP",&0x26);&&
&&&&&&&&&&&keycode.Add("RIGHT",&0x27);&&
&&&&&&&&&&&keycode.Add("DOWN",&0x28);&&
&&&&&&&&&&&keycode.Add("-",&0x6D);&&
&&&&&&&&&&&keycode.Add("{ENTER}",&13);&&
&&&&&&&}&&
&&&&&&&public&static&void&KeyBoardDo(string&key)&&
&&&&&&&{&&
&&&&&&&&&&&keybd_event(keycode[key],&0x45,&KEYEVENTF_EXTENDEDKEY&|&0,&0);&&
&&&&&&&&&&&keybd_event(keycode[key],&0x45,&KEYEVENTF_EXTENDEDKEY&|&KEYEVENTF_KEYUP,&0);&&
&&&&&&&}&&
&&&&&&&public&void&SendBarcode(string&barcode)&&
&&&&&&&{&&
&&&&&&&&&&&for&(int&k&=&0;&k&&&barcode.L&k++)&&
&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&string&ak&=&barcode.Substring(k,&1);&&
&&&&&&&&&&&&&&&KeyBoardDo(ak);&&
&&&&&&&&&&&}&&
&&&&&&&&&&&KeyBoardDo("{ENTER}");&&
&&&&&&&}&&
&&&&&&&public&void&SendKeys(string&barcode)&&
&&&&&&&{&&
&&&&&&&&&&&System.Windows.Forms.SendKeys.Send(barcode);&&
&&&&&&&&&&&System.Windows.Forms.SendKeys.Send("{ENTER}");&&
&&&&&&&}&&
&&&&&&&public&void&SendKeyByMessage(string&hello)&&
&&&&&&&{&&
&&&&&&&&&&&System.Diagnostics.Process[]&GamesProcess&=&System.Diagnostics.Process.GetProcessesByName("notepad");&&
&&&&&&&&&&&if&(GamesProcess.Length&==&0)&&&
&&&&&&&&&&&IntPtr&hWnd&=&FindWindowEx(GamesProcess[0].MainWindowHandle,&&
&&&&&&&&&&&IntPtr.Zero,&"Edit",&null);&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&int&key&=&0;&&
&&&&&&&&&&&for&(int&k&=&0;&k&&&hello.L&k++)&&
&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&string&ak&=&hello.Substring(k,&1);&&
&&&&&&&&&&&&&&&key&=&keycode[ak];&&
&&&&&&&&&&&&&&&SendMessage(hWnd,&WM_CHAR,&key,&0);&&
&&&&&&&&&&&}&&
&&&&&&&&&&&key&=&keycode["{ENTER}"];&&
&&&&&&&&&&&SendMessage(hWnd,&WM_CHAR,&key,&0);&&&&&&
&&&&&&&}&&
& 类中有3中将字符串输出的功能:
[csharp]&&
keybd_event:&不能指定输出对象&&
[csharp]&&
2.&&pre&name="code"&class="csharp"&&pre&name="code"&class="csharp"&SendMessage(hWnd,&WM_CHAR,&key,&0);&&&
[csharp]&&
输出一个字符到指定的窗口。&&
[csharp]&&
&pre&name="code"&class="csharp"&SendMessage(hWnd,&WM_SETTEXT,&0,&hello);&&
[csharp]&&
清空记事本中内容;写入字符;并且光标回到第一行第一个位置。&&&
[csharp]&&
3.&&pre&name="code"&class="csharp"&SendKeys&&
[csharp]&&
这个一直没有实验成功,一直会有软件不响应;除非使用手动激活其他窗口。&具体原因没有细查。&&
[csharp]&&
[csharp]&&
串口控制代码&&
[csharp]&&
&pre&name="code"&class="csharp"&&public&class&CComController&&
&&&&&&&&private&SerialPort&sp&=&&&
&&&&&&&&public&bool&OpenCom(string&protName,&int&baudRate,&int&dataBit,&float&stopBits,&int&parity)&&
&&&&&&&&{&&
&&&&&&&&&&&&bool&flag&=&&&
&&&&&&&&&&&&if&(sp&==&null)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp&=&new&SerialPort();&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&sp.PortName&=&protN
&&&&&&&&&&&&sp.BaudRate&=&baudR
&&&&&&&&&&&&sp.ReadTimeout&=&10;&&
&&&&&&&&&&&&float&f&=&stopB
&&&&&&&&&&&&if&(f&==&0)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp.StopBits&=&StopBits.N&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&else&if&(f&==&1.5)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp.StopBits&=&StopBits.OnePointF&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&else&if&(f&==&1)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp.StopBits&=&StopBits.O&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&else&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp.StopBits&=&StopBits.T&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&sp.DataBits&=&dataB
&&&&&&&&&&&&if&(parity&==&0)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp.Parity&=&Parity.N&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&else&if&(parity&==&1)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp.Parity&=&Parity.O&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&else&if&(parity&==&2)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp.Parity&=&Parity.E&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&else&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sp.Parity&=&Parity.N&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&&
&&&&&&&&&&&&try&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&if&(!sp.IsOpen)&&
&&&&&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&&&&&sp.Open();&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&catch&(Exception)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&flag&=&&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&&&&public&bool&CloseCom()&&
&&&&&&&&{&&
&&&&&&&&&&&&try&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&if&(sp.IsOpen)&&
&&&&&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&&&&&sp.Close();&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&catch&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&public&string&ReadLine()&&
&&&&&&&&{&&
&&&&&&&&&&&&try&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&string&receive&=&sp.ReadLine();&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&catch&(Exception&ex)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&return&"";&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&public&bool&WriteLine(string&barcode)&&
&&&&&&&&{&&
&&&&&&&&&&&&sp.WriteLine(barcode);&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
[csharp]&&
客户端代码:&&
[csharp]&&
&public&partial&class&Form1&:&Form&&
&&&&&&&&CComController&&&
&&&&&&&&public&Form1()&&
&&&&&&&&{&&
&&&&&&&&&&&&InitializeComponent();&&
&&&&&&&&&&&&com&=&new&CComController();&&
&&&&&&&&&&&&com.OpenCom("COM1",&,&1,&0);&&
&&&&&&&&}&&
&&&&&&&&public&void&SendBarcode()&&
&&&&&&&&{&&
&&&&&&&&&&&&&&
&&&&&&&&}&&
&&&&&&&&private&void&btnSend_Click(object&sender,&EventArgs&e)&&
&&&&&&&&{&&&&&&&&&&&&&
&&&&&&&&&&&&string&barcode&=&txtBarcode.T&&
&&&&&&&&&&&&com.WriteLine(barcode);&&
&&&&&&&&}&&
[csharp]&&
[csharp]&&
服务端:&&
[csharp]&&
namespace&ComServer&&
&&&&public&partial&class&Form1&:&Form&&
&&&&&&&&CComController&comC&&
&&&&&&&&CKeyController&keyC&&
&&&&&&&&public&Form1()&&
&&&&&&&&{&&
&&&&&&&&&&&&InitializeComponent();&&
&&&&&&&&&&&&
&&&&&&&&&&&&comController&=&new&CComController();&&
&&&&&&&&&&&&comController.OpenCom("COM1",&,&1,&0);&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&keyController&=&new&CKeyController();&&
&&&&&&&&&&&&keyController.InitKey();&&
&&&&&&&&&&&&Thread&readThread&=&new&Thread(new&ThreadStart(ThreadReadBarcode));&&
&&&&&&&&&&&&readThread.Start();&&
&&&&&&&&}&&
&&&&&&&&public&void&ThreadReadBarcode()&&
&&&&&&&&{&&
&&&&&&&&&&&&while&(true)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&string&barcode&=&comController.ReadLine();&&
&&&&&&&&&&&&&&&&if&(barcode&!=&""&&&&barcode&!=&null)&&
&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&keyController.SendKeyByMessage(barcode);&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&Thread.Sleep(200);&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
[csharp]&&
[csharp]&&
[csharp]&&
阅读(...) 评论()博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客访问: 167330
博文数量: 102
博客积分: 0
博客等级: 民兵
技术积分: 942
注册时间:
分类: 嵌入式 16:10:10
最近调试u-boot的readline,对一些特殊按键键值有些疑惑,比如↑↓←→四个键,在linux的minicom敲下这几个键,串口会输出什么数据。
其实不需要用串口测试,我们可以写个小程序测试一下:
#include <stdio.h>
#include <curses.h>
int main(int argc, char **argv)
&&&&char a;
&&&&char b[80];
&&&&int i;
&&&&printf("Please input a string
&&&&:\n");
//&&&&a = getc(stdin);
&&&&scanf("%s",b);&&&&
//&&&&printf("The input a string is : 0x%x\n", a);
&&&&printf("The input char is:\n");
&&&&for(i = 0; b[i] !='\0' && i < 80; i++ )
&&&&&&&&printf("0x%x ",b[i]);
&&&&printf("\n");
&&&&return 0;
richard@richard-H81M-DS2:~/work/driver/test$ ./test
Please input a string:
^[[A^[[B^[[D^[[C
The input char is:
0x1b 0x5b 0x41 0x1b 0x5b 0x42 0x1b 0x5b 0x44 0x1b 0x5b 0x43
可以看到,当输入↑键,我们得到3个字节:0x1b 0x5b 0x41。
或者执行cat -v,然后输入↑↓←→(其他键也可以F1~F12)。
参考知乎一位大侠的说法:
这下就明白了。再联系cread_line的代码片段:
static int cread_line(const char *const prompt, char *buf, unsigned int *len,
&&&&&&&&int timeout)
&&&&unsigned long num = 0;
&&&&unsigned long eol_num = 0;
&&&&unsigned long wlen;
&&&&char ichar;
&&&&int insert = 1;
&&&&int esc_len = 0;
&&&&char esc_save[8];
&&&&int init_len = strlen(buf);
&&&&int first = 1;
&&&&if (init_len)
&&&&&&&&cread_add_str(buf, init_len, 1, &num, &eol_num, buf, *len);
&&&&while (1) {
#ifdef CONFIG_BOOT_RETRY_TIME
&&&&&&&&while (!tstc()) {&&&&/* while no incoming data */
&&&&&&&&&&&&if (retry_time >= 0 && get_ticks() > endtime)
&&&&&&&&&&&&&&&&return (-2);&&&&/* timed out */
&&&&&&&&&&&&WATCHDOG_RESET();
&&&&&&&&if (first && timeout) {
&&&&&&&&&&&&uint64_t etime = endtick(timeout);
&&&&&&&&&&&&while (!tstc()) {&&&&/* while no incoming data */
&&&&&&&&&&&&&&&&if (get_ticks() >= etime)
&&&&&&&&&&&&&&&&&&&&return -2;&&&&/* timed out */
&&&&&&&&&&&&&&&&WATCHDOG_RESET();
&&&&&&&&&&&&}
&&&&&&&&&&&&first = 0;
&&&&&&&&ichar = getcmd_getch();
&&&&&&&&if ((ichar == '\n') || (ichar == '\r')) {
&&&&&&&&&&&&putc('\n');
&&&&&&&&&&&&break;
&&&&&&&&/*
&&&&&&&& * handle standard linux xterm esc sequences for arrow key, etc.
&&&&&&&& */
&&&&&&&&if (esc_len != 0) {
&&&&&&&&&&&&if (esc_len == 1) {
&&&&&&&&&&&&&&&&if (ichar == '[') {
&&&&&&&&&&&&&&&&&&&&esc_save[esc_len] = ichar;
&&&&&&&&&&&&&&&&&&&&esc_len = 2;
&&&&&&&&&&&&&&&&} else {
&&&&&&&&&&&&&&&&&&&&cread_add_str(esc_save, esc_len, insert,
&&&&&&&&&&&&&&&&&&&&&&&&
&num, &eol_num, buf, *len);
&&&&&&&&&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&continue;
&&&&&&&&&&&&}
&&&&&&&&&&&&switch (ichar) {
&&&&&&&&&&&&case 'D':&&&&/* <- key */
&&&&&&&&&&&&&&&&ichar = CTL_CH('b');
&&&&&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&case 'C':&&&&/* -> key */
&&&&&&&&&&&&&&&&ichar = CTL_CH('f');
&&&&&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&&&&&break;&&&&/* pass off to ^F handler */
&&&&&&&&&&&&case 'H':&&&&/* Home key */
&&&&&&&&&&&&&&&&ichar = CTL_CH('a');
&&&&&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&&&&&break;&&&&/* pass off to ^A handler */
&&&&&&&&&&&&case 'A':&&&&/* up arrow */
&&&&&&&&&&&&&&&&ichar = CTL_CH('p');
&&&&&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&&&&&break;&&&&/* pass off to ^P handler */
&&&&&&&&&&&&case 'B':&&&&/* down arrow */
&&&&&&&&&&&&&&&&ichar = CTL_CH('n');
&&&&&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&&&&&break;&&&&/* pass off to ^N handler */
&&&&&&&&&&&&default:
&&&&&&&&&&&&&&&&esc_save[esc_len++] = ichar;
&&&&&&&&&&&&&&&&cread_add_str(esc_save, esc_len, insert,
&&&&&&&&&&&&&&&&&&&&
&num, &eol_num, buf, *len);
&&&&&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&&&&&continue;
&&&&&&&&&&&&}
&&&&&&&&switch (ichar) {
&&&&&&&&case 0x1b:
&&&&&&&&&&&&if (esc_len == 0) {
&&&&&&&&&&&&&&&&esc_save[esc_len] = ichar;
&&&&&&&&&&&&&&&&esc_len = 1;
&&&&&&&&&&&&} else {
&&&&&&&&&&&&&&&&puts("impossible condition #876\n");
&&&&&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&}
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('a'):
&&&&&&&&&&&&BEGINNING_OF_LINE();
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('c'):&&&&/* ^C - break */
&&&&&&&&&&&&*buf = '\0';&&&&/* discard input */
&&&&&&&&&&&&return (-1);
&&&&&&&&case CTL_CH('f'):
&&&&&&&&&&&&if (num < eol_num) {
&&&&&&&&&&&&&&&&getcmd_putch(buf[num]);
&&&&&&&&&&&&&&&&num++;
&&&&&&&&&&&&}
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('b'):
&&&&&&&&&&&&if (num) {
&&&&&&&&&&&&&&&&getcmd_putch(CTL_BACKSPACE);
&&&&&&&&&&&&&&&&num--;
&&&&&&&&&&&&}
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('d'):
&&&&&&&&&&&&if (num < eol_num) {
&&&&&&&&&&&&&&&&wlen = eol_num - num - 1;
&&&&&&&&&&&&&&&&if (wlen) {
&&&&&&&&&&&&&&&&&&&&memmove(&buf[num], &buf[num+1], wlen);
&&&&&&&&&&&&&&&&&&&&putnstr(buf + num, wlen);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&getcmd_putch(' ');
&&&&&&&&&&&&&&&&do {
&&&&&&&&&&&&&&&&&&&&getcmd_putch(CTL_BACKSPACE);
&&&&&&&&&&&&&&&&} while (wlen--);
&&&&&&&&&&&&&&&&eol_num--;
&&&&&&&&&&&&}
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('k'):
&&&&&&&&&&&&ERASE_TO_EOL();
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('e'):
&&&&&&&&&&&&REFRESH_TO_EOL();
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('o'):
&&&&&&&&&&&&insert = !insert;
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('x'):
&&&&&&&&case CTL_CH('u'):
&&&&&&&&&&&&BEGINNING_OF_LINE();
&&&&&&&&&&&&ERASE_TO_EOL();
&&&&&&&&&&&&break;
&&&&&&&&case DEL:
&&&&&&&&case DEL7:
&&&&&&&&case 8:
&&&&&&&&&&&&if (num) {
&&&&&&&&&&&&&&&&wlen = eol_num - num;
&&&&&&&&&&&&&&&&num--;
&&&&&&&&&&&&&&&&memmove(&buf[num], &buf[num+1], wlen);
&&&&&&&&&&&&&&&&getcmd_putch(CTL_BACKSPACE);
&&&&&&&&&&&&&&&&putnstr(buf + num, wlen);
&&&&&&&&&&&&&&&&getcmd_putch(' ');
&&&&&&&&&&&&&&&&do {
&&&&&&&&&&&&&&&&&&&&getcmd_putch(CTL_BACKSPACE);
&&&&&&&&&&&&&&&&} while (wlen--);
&&&&&&&&&&&&&&&&eol_num--;
&&&&&&&&&&&&}
&&&&&&&&&&&&break;
&&&&&&&&case CTL_CH('p'):
&&&&&&&&case CTL_CH('n'):
&&&&&&&&&&&&char * hline;
&&&&&&&&&&&&esc_len = 0;
&&&&&&&&&&&&if (ichar == CTL_CH('p'))
&&&&&&&&&&&&&&&&hline = hist_prev();
&&&&&&&&&&&&else
&&&&&&&&&&&&&&&&hline = hist_next();
&&&&&&&&&&&&if (!hline) {
&&&&&&&&&&&&&&&&getcmd_cbeep();
&&&&&&&&&&&&&&&&continue;
&&&&&&&&&&&&}
&&&&&&&&&&&&/* nuke the current line */
&&&&&&&&&&&&/* first, go home */
&&&&&&&&&&&&BEGINNING_OF_LINE();
&&&&&&&&&&&&/* erase to end of line */
&&&&&&&&&&&&ERASE_TO_EOL();
&&&&&&&&&&&&/* copy new line into place and display */
&&&&&&&&&&&&strcpy(buf, hline);
&&&&&&&&&&&&eol_num = strlen(buf);
&&&&&&&&&&&&REFRESH_TO_EOL();
&&&&&&&&&&&&continue;
#ifdef CONFIG_AUTO_COMPLETE
&&&&&&&&case '\t': {
&&&&&&&&&&&&int num2, col;
&&&&&&&&&&&&/* do not autocomplete when in the middle */
&&&&&&&&&&&&if (num < eol_num) {
&&&&&&&&&&&&&&&&getcmd_cbeep();
&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&}
&&&&&&&&&&&&buf[num] = '\0';
&&&&&&&&&&&&col = strlen(prompt) + eol_num;
&&&&&&&&&&&&num2 = num;
&&&&&&&&&&&&if (cmd_auto_complete(prompt, buf, &num2, &col)) {
&&&&&&&&&&&&&&&&col = num2 - num;
&&&&&&&&&&&&&&&&num += col;
&&&&&&&&&&&&&&&&eol_num += col;
&&&&&&&&&&&&}
&&&&&&&&&&&&break;
&&&&&&&&default:
&&&&&&&&&&&&cread_add_char(ichar, insert, &num, &eol_num, buf, *len);
&&&&&&&&&&&&break;
&&&&*len = eol_num;
&&&&buf[eol_num] = '\0';&&&&/* lose the newline */
&&&&if (buf[0] && buf[0] != CREAD_HIST_CHAR)
&&&&&&&&cread_add_to_hist(buf);
&&&&hist_cur = hist_add_idx;
&&&&return 0;
这些都是ANSI 控制码,以ESC起始为标记,百度就知道了。
在测试这个问题的时候,需要使用virtual box虚拟机中的xp串口进行测试,百度半天也没找到能完全说清楚的文章,下面介绍我个人的试验结果和理解:
第一种是裸文件,这种模式只能让虚拟机串口输出信息到宿主机(我的是ubuntu)的某个文件中,打开可以查看虚拟机串口发来的文字信息,基本没什么用。
第二种是主机管道,这个模式可以让主机和虚拟机进行串口通信,相当于建立一个模拟的串口通道,主机和虚拟机互联,这个模式非常有用,对于测试串口提供了很方便的测试条件,即使你电脑没有真是串口也没关系。再也不需要想办法去破解windows那些收费的虚拟串口软件了。
注意使用主机管道模式时,应在管道路径前加上前缀unix#,例如virtual box中设置了串口位置为/dev/xpserial,那么minicom中应设置Serial Device 为& unix#/dev/xpserial
第三种是主机设备,这个就相当于将真实主机绑定到虚拟机了,这时候真串口只能给虚拟机用,但是有延迟,有时候会丢数据,实际上个人认为如果只是简单数据收发没必要用这个模式,真串口给宿主机用就可以了。
ASCII 码:^[[19~
十六进制0x1b 0x5b 0x31 0x39 0x7e
第一个字节0x1b是"^[",第二个字节0x5b是'[',第3个字节是0x31,第4字节就得到'9',&同理,0x39得到'9',最后0x7e是'~'
\033\133\061\071\176
在securecrt做映射时可以使用&"\e[\061\071\176"
^[是第一个字节0x1b,第二个字节0x5b是[,最后的0x41是A
0x1b 0x5b 0x41
\033\133\101
Shift + F8:
0x1b 0x5b 0x31 0x39 0x3b 0x32 0x7e
"\e[\061\071\073\062\176"
关于控制码还可以参考:
http://bbs.csdn.net/topics/
阅读(421) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 ios 键盘发送按钮 的文章

 

随机推荐