资源简介
基于linux-4.9内核的tty模拟驱动。无需串口芯片。ubuntu/嵌入式linux系统上均可运行。
代码片段和文件信息
#include ject.h>
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “simu_uart.h“
/*
通过对sys属性文件的读写,来模拟对tty硬件FIFO的读写
1.rx属性文件
对应模拟TTY硬件的TX-FIFO
2.tx属性文件
对应模拟TTY硬件的RX-FIFO
*/
/*计算有效数据size*/
int calc_valid_fifo(struct v_fifo* fifo)
{
if((fifo->head)==(fifo->tail))
return 0;
if((fifo->head) >= (fifo->tail))
return ((fifo->head) - (fifo->tail));
else{
return ((fifo->head) + (V_FIFO_SIZE-fifo->tail));
}
}
/*计算空闲空间*/
int calc_free_fifo(struct v_fifo* fifo)
{
int valid = calc_valid_fifo(fifo);
return (V_FIFO_SIZE-valid-1);
}
int writechar_2_fifo(struct v_fifo* fifochar cc)
{
fifo->dat[fifo->head] = cc;
fifo->head = (fifo->head+1)&(V_FIFO_SIZE-1);
return 0;
}
/*读fifo*/
int readchar_from_fifo(struct v_fifo* fifochar *cc)
{
cc[0] = fifo->dat[fifo->tail];
fifo->tail = (fifo->tail+1)&(V_FIFO_SIZE-1);
return 0;
}
static int init_fifo(struct v_fifo* fifo)
{
if(!fifo)
return -1;
fifo->head = fifo->tail = 0;
return 0;
}
/*定义TX-FIFO RX-FIFO*/
static struct vuart_dev *my_vuart_dev;
struct vuart_dev * get_udev(void)
{
return my_vuart_dev;
}
/*sysfs属性文件操作方法*/
static ssize_t curr_fifotail_show(struct device * dev struct device_attribute *attrchar *buf)
{
int sizei;
struct vuart_dev * vdev = (struct vuart_dev *)dev_get_drvdata(dev);
/*同步*/
if(down_interruptible(&vdev->sem_rx))
return -ERESTARTSYS;
/*计算fifo中有效数据size*/
size = calc_valid_fifo(&vdev->v_RX_FIFO);
/*copy数据*/
for(i=0;i buf[i] = vdev->v_RX_FIFO.dat[vdev->v_RX_FIFO.tail];
vdev->v_RX_FIFO.tail = (vdev->v_RX_FIFO.tail+1)&(V_FIFO_SIZE-1);
}
up(&vdev->sem_rx);
return size;
}
static ssize_t curr_fifohead_store(struct device *dev struct device_attribute * attr const char *buf size_t count)
{
int sizei;
struct vuart_dev * vdev = (struct vuart_dev *)dev_get_drvdata(dev);
/*同步*/
if(down_interruptible(&vdev->sem_tx))
return -ERESTARTSYS;
/*计算fifo中空闲size*/
size = calc_free_fifo(&vdev->v_TX_FIFO);
if(size <= 0){
printk(“Failed to store data: TX FIFO is FULL
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5424 2017-11-01 15:22 vuart_code\simu_uart.c
文件 825 2017-11-01 09:46 vuart_code\simu_uart.h
文件 7898 2017-11-01 15:29 vuart_code\simu_uart_2.c
目录 0 2018-04-20 16:52 vuart_code\
相关资源
- PuTTY+PuTTYGen打包
- stm8 IO口模拟串口程序
- Netty同步等待数据返回代码
- 使用netty使用http协议开发文件服务器
- proteus仿真的单片机串口通信,请使用
- STM8S模拟串口,双串口,虚拟串口
- STM8S003模拟串口程序
- STM8S003F使用I/O口模拟串口一发送数据
- STM32的GPIO口模拟串口通信.rar
- putty绿色版.zip
- Netty 入门与实战:仿写微信 IM 即时通
- stdint.h.rar
- 8253可编程定时/计数器实验
- stdint.h和inttypes.h127747
- resteasy使用netty
- 远程登入软件PuTTY.zip
- cowpatty-4.6
- STM32的GPIO口模拟串口通信
- putty支持保存用户名和密码
- springboot与netty整合
- inttypes.h
- 串口(uart)TelnetSSH调试工具putty
- “inttypes.h\“\“stdint.h\“ 这两个头文
- Netty4.1实战-手写RPC框架.pdf
- mitty多普达smartphone刷机工具
- 用netty实现文件传输
- putty中文版69950
- 基于netty编写的socket服务端
- 自己动手写基于动态代理,使用ZooK
- STM8S003模拟串口中断接收
评论
共有 条评论