收到一字节数据后,SIGIO应该立即启动。

这是在带驱动程序的Linux上测试的最小示例ftdi_sio:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define tty "/dev/ttyUSB0"

#define baudrate B9600

void byteCallback(int status); // interrupt function

int main(){

int ttyDev = open(tty, O_RDWR | O_NOCTTY | O_NONBLOCK);

if (!ttyDev)

{

printf("couldn't open serial device");

return -1;

}

struct sigaction byteAction; // set the serial interrupt handler

struct termios oldtio, newtio;

//create signal handler

byteAction.sa_handler = byteCallback;

sigemptyset(&byteAction.sa_mask); //sa_mask = 0

byteAction.sa_flags = SA_RESTART;

sigaction(SIGIO, &byteAction, NULL);

//Allow process to detect SIGIO

fcntl(ttyDev, F_SETOWN, getpid());

fcntl(ttyDev, F_SETFL, FASYNC);

tcgetattr(ttyDev, &oldtio); //backup current settings

newtio.c_cflag = baudrate | CS8 | CLOCAL | CREAD;

newtio.c_cflag &= ~CRTSCTS; //disable hw flow control

newtio.c_iflag &= ~(IXON | IXOFF | IXANY); //disable flow control

newtio.c_iflag |= IGNPAR; //ignore parity

newtio.c_oflag = 0;

newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); //raw mode

newtio.c_cc[VMIN] = 1;

newtio.c_cc[VTIME] = 0;

tcflush(ttyDev, TCIFLUSH);

tcsetattr(ttyDev, TCSANOW, &newtio);

while(1){

//Wait for SIGIO to fire

}

}

void byteCallback(int status){

printf("SIGIO fired!\r\n");

}

linux ftdi 虚拟,linux ftdi 驱动相关推荐

  1. 【Linux】虚拟Pinctrl Demo驱动(二) -- Debug FS之Pinctrl分析

    1. 前言 我们在调试Pinctrl子系统时,会使用到Debug Filesystem.在/sys/kernel/debug/目录下就会有pinctrl目录,如果该目录下没有任何目录或文件,说明deb ...

  2. linux ftdi 虚拟,linux ftdi驱动

    收到一字节数据后,SIGIO应该立即启动. 这是在带驱动程序的Linux上测试的最小示例ftdi_sio: #include #include #include #include #include # ...

  3. USB虚拟总线驱动开发扩展之(利用虚拟USB总线驱动实现U盘模拟)

    by fanxiushu 2020-03-25 转载或引用请注明原始作者. USB虚拟总线驱动的使用范围是非常广泛的,可以使用它来模拟各种通用的USB设备. 以前的文章阐述过基于windows平台和基 ...

  4. 基于linux的驱动设计,《基于LINUX的虚拟驱动设计》-毕业论文.doc

    PAGE 40 l 摘 要 驱动程序是当前最热门.最有发展前途的IT应用技术之一.目前的驱动程序的开发主要应用在包括键盘 .鼠标.扫描仪.打印机以及存储设备等日益普及的设备之间的通讯上.但是要使这些设 ...

  5. linux 深入理解I2C内核驱动

    系列文章 I.MX6ULL 手册查找使用方法 实战点亮LED(寄存器版) I.MX6ULL 手册查找使用方法 实战点亮LED(固件库版本) linux 字符设备驱动实战 linux LED设备驱动文件 ...

  6. linux内核结构介绍及驱动引入

    目录 一.Linux内核结构框图 二.图解linux系统架构 三.驱动认知 3.1 为什么要学习写驱动 3.2 文件名与设备号 3.3 open函数打通上层到底层硬件的详细过程 四.shell she ...

  7. 一篇长文叙述Linux内核虚拟地址空间的基本概括

    x86-32位虚拟地址空间 就我们所知,Linux内核一般将处理器的虚拟地址空间划分为两个部分.底部比较大的部分用于用户进程,顶部则专用于内核.虽然(在两个用户进程之间的)上下文切换期间会改变下半部分 ...

  8. Linux总线、设备、驱动模型

    一.Linux总线设备驱动模型框架 从Linux2.6开始Linux加入了一套驱动管理和注册机制-platform平台总线驱动模型.platform平台总线是一条虚拟总线,platform_devic ...

  9. linux 控制虚拟串口,linux虚拟串口控制器实现-适用于无开发板学习tty driver-好向圈...

    在前面几章,我们介绍了tty子系统的框架.数据结构.tty驱动的注册与注销等内容,本章我们借助 之前学习的内容开发一个虚拟的串口控制器驱动,以便我们理解开发串口驱动的步骤及驱动开发实践. 本次实现的虚 ...

最新文章

  1. 华师大计算机网络中心,华东师范大学 单点登录共享校际资源
  2. Arch linux
  3. Linux 源码编译安装过程-以安装XZ解压为例
  4. Linux操作系统CentOS7安装
  5. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)
  6. 11年潜心研究产品 全屋智能品牌Aqara终于要开发布会了
  7. 【Python】os库的使用
  8. SPF邮件伪造漏洞测试脚本
  9. DataSet与DataTable与DataRow的关系
  10. Python函数相关笔记
  11. Spine 3.8.75报错不能打开:Sorry, an unexpected error has occured. 日志显示Version cannot be null
  12. VB中连接access数据库的几种方法
  13. linux软链接的创建、修改、删除(硬链接hard link、软链接soft link或symbolic link、死链接dangling link)(软连接、硬连接)
  14. freemarker英文日期显示成中文问题
  15. 记使用腾讯TIM开发聊天通讯遇到的问题及解决方案
  16. FIIDO 王志凯:共享单车走到了尽头?电动自行车这才开始!
  17. 益交易德勤 区块链在全球公司的战略中 根深蒂固
  18. [vue3] 富文本
  19. 为了一窥究竟,我抓取了全校学生的毕设信息
  20. python dataframe增加一行_python - 在pandas.DataFrame中添加一行

热门文章

  1. Windows添加route
  2. 从endnote导出参考文献发现没有参考文献信息
  3. python 爬手机号_python手机号前7位归属地爬虫代码实例
  4. 神经网络的基本结构介绍
  5. PCB设计:传输线模型理论
  6. 萘酞菁(VONcs),齐岳生物供应各种酞菁化合物材料
  7. android 斜边_android自定义控件之中间是斜线的占比条
  8. iOS 修改苹果开发者公司账号(Apple ID 更换)
  9. 国腾GM7123C:功能RGB转VGA芯片方案简介
  10. 编写第一个JSP文件