资源简介
基于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\
相关资源
- eclipse_jetty9离线插件
- Investigation of the Absorption Mechanism of G
- puttygen
- PuTTY Connection Manager ( puttyCM )
- putty and puttygen
- ssh登录工具 putty 和 生成.ppk文件的p
- putty-64bit-0.70-installer
- 精通并发与Netty 涉及到的代码
- netty-高并发编程-视频教程张龙-90讲完
- netty的视频90集
- 安卓基于netty4.x心跳,断线重连,状态
- Netty网络框架实战中文版
- eclipse jetty9.0 插件
- cowpatty-4.6.lzm
- STM32 GPIO和定时器 模拟串口
- STM8S103系列IO模拟串口通信实现真正串
- springmvc+netty实现聊天功能
- spring mvc中启动netty
- Netty实战 Netty In Action
- netty权威指南官方源码netty5
- netty+protobuf 整合源代码
- 《Netty in Action》最新中文版和英文版
- Netty 实战(精髓) 中文 高清完整.p
- 《netty权威指南》私有协议栈开发完整
- STM8 模拟串口 IO口模拟
- Netty 4.x 用户指南 中文
- idea的jetty-runner1.2.1插件
- netty-api-4.1 中文版
- Netty权威指南源码-maven版
- Netty权威指南第二版的源码
评论
共有 条评论