当前位置: 首页 > news >正文

做淘客应该知道的网站网络培训总结与反思

做淘客应该知道的网站,网络培训总结与反思,安徽六安发现一例新冠阳性检测者,阿里巴巴集团控股有限公司一.什么是串口屏 串口屏#xff0c;可组态方式二次开发的智能串口控制显示屏#xff0c;是指带有串口通信的TFT彩色液晶屏显示控制模组。利用显示屏显示相关数据#xff0c;通过触摸屏、按键、鼠标等输入单元写入参数或者输入操作指令#xff0c;进而实现用户与机器进行信…一.什么是串口屏 串口屏可组态方式二次开发的智能串口控制显示屏是指带有串口通信的TFT彩色液晶屏显示控制模组。利用显示屏显示相关数据通过触摸屏、按键、鼠标等输入单元写入参数或者输入操作指令进而实现用户与机器进行信息交互。 主要特点  通讯方式简单线少: 串口屏只需通过几根线与主控器连接大大简化了硬件设计和布线复杂度。 多种尺寸和分辨率可选大屏: 从1英寸的小屏幕到20多英寸的大屏幕可以根据应用需求选择不同的尺寸和分辨率。 内置图形库和触控驱动能触摸: 串口屏通常内置了一些常用的图形库和触控驱动使得开发者无需编写复杂的显示和触控代码。 易于编程简单: 通过指令集或协议发送简单的命令即可实现丰富的显示效果如绘制图形、显示文本、切换页面等。 强大的功能扩展: 有些高级串口屏还支持播放视频、显示动态图表、联网功能等。 缺点 成本相对较高: 由于集成了更多功能价格相对较高。 依赖性强: 依赖屏幕厂商提供的协议和命令集灵活性较低。 二.串口屏驱动示例 这里是将串口作为一个serio总线设备利用linux内核提供serio总线驱动通过设置对应的串口调用serport提供的函数将串口当做serio总线设备在驱动里面需要按照serio总线设备驱动的框架来实现在内核源码drivers/input/touchscreen下提供了两个例子,touchright.c和touchit123.c可以参考这两个例子编写驱动。 #include linux/errno.h #include linux/kernel.h #include linux/module.h #include linux/slab.h #include linux/input.h #include linux/serio.h #include linux/init.h#define DRIVER_DESC EETI Egalax serial touchscreen driverMODULE_AUTHOR(Zolt??n B??sz??rm??nyi zboszorxxxxx); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE(GPL);/** Definitions global arrays.*/ #define SERIO_EGALAX 0x3f #define EGALAX_FORMAT_MAX_LENGTH 6 #define EGALAX_RESPONSE_BEGIN_BYTE 0x80 #define EGALAX_FORMAT_PRESSURE_BIT 0x40 #define EGALAX_FORMAT_TOUCH_BIT 0x01 #define EGALAX_FORMAT_RESOLUTION 0x06#define EGALAX_MIN_XC 0 #define EGALAX_MAX_XC 0x4000 #define EGALAX_MIN_YC 0 #define EGALAX_MAX_YC 0x4000#define EGALAX_GET_XC(data, resbits, shift) ((((data[1] (resbits)) 7) | (data[2] 0x7f)) shift) #define EGALAX_GET_YC(data, resbits, shift) ((((data[3] (resbits)) 7) | (data[4] 0x7f)) shift) #define EGALAX_GET_TOUCHED(data) (EGALAX_FORMAT_TOUCH_BIT data[0])/** Per-touchscreen data.*/struct egalax {struct input_dev *dev;struct serio *serio;int idx;int bytes;int resbits;int shift;unsigned char data[EGALAX_FORMAT_MAX_LENGTH];char phys[32]; };static void egalax_process_data(struct egalax *pegalax) {struct input_dev *dev pegalax-dev;if (pegalax-idx pegalax-bytes) {input_report_abs(dev, ABS_X, EGALAX_GET_XC(pegalax-data, pegalax-resbits, pegalax-shift));input_report_abs(dev, ABS_Y, EGALAX_GET_YC(pegalax-data, pegalax-resbits, pegalax-shift));//input_report_key(dev, BTN_TOUCH, EGALAX_GET_TOUCHED(pegalax-data));input_report_abs(dev, ABS_PRESSURE, EGALAX_GET_TOUCHED(pegalax-data));input_sync(dev);pegalax-idx 0;} }static irqreturn_t egalax_interrupt(struct serio *serio,unsigned char data, unsigned int flags) {struct egalax *pegalax serio_get_drvdata(serio);pegalax-data[pegalax-idx] data;if (EGALAX_RESPONSE_BEGIN_BYTE pegalax-data[0]) {pegalax-bytes (EGALAX_FORMAT_PRESSURE_BIT pegalax-data[0] ? 6 : 5);switch ((EGALAX_FORMAT_RESOLUTION pegalax-data[0]) 1) {case 0:pegalax-resbits 0x0f;pegalax-shift 3;break;case 1:pegalax-resbits 0x1f;pegalax-shift 2;break;case 2:pegalax-resbits 0x3f;pegalax-shift 1;break;default:pegalax-resbits 0x7f;pegalax-shift 0;break;}egalax_process_data(pegalax);}elsedev_dbg(serio-dev, unknown/unsynchronized data: %x\n,pegalax-data[0]);return IRQ_HANDLED; }static void egalax_disconnect(struct serio *serio) {struct egalax *pegalax serio_get_drvdata(serio);input_get_device(pegalax-dev);input_unregister_device(pegalax-dev);serio_close(serio);serio_set_drvdata(serio, NULL);input_put_device(pegalax-dev);kfree(pegalax); }/** egalax_connect() is the routine that is called when someone adds a* new serio device that supports egalax protocol and registers it as* an input device. This is usually accomplished using inputattach.*/static int egalax_connect(struct serio *serio, struct serio_driver *drv) {struct egalax *pegalax;struct input_dev *input_dev;int err;pegalax kzalloc(sizeof(struct egalax), GFP_KERNEL);input_dev input_allocate_device();if (!pegalax || !input_dev) {err -ENOMEM;goto fail1;}pegalax-serio serio;pegalax-dev input_dev;snprintf(pegalax-phys, sizeof(pegalax-phys),%s/input1, serio-phys);input_dev-name EETI eGalaxTouch Serial TouchScreen;input_dev-phys pegalax-phys;input_dev-id.bustype BUS_RS232;input_dev-id.vendor SERIO_EGALAX;input_dev-id.product 0;input_dev-id.version 0x0001;input_dev-dev.parent serio-dev;input_dev-evbit[0] BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);//input_dev-keybit[BIT_WORD(BTN_TOUCH)] BIT_MASK(BTN_TOUCH);input_set_abs_params(pegalax-dev, ABS_X,EGALAX_MIN_XC, EGALAX_MAX_XC, 0, 0);input_set_abs_params(pegalax-dev, ABS_Y,EGALAX_MIN_YC, EGALAX_MAX_YC, 0, 0);input_set_abs_params(pegalax-dev, ABS_PRESSURE, 0, 1, 0, 0);serio_set_drvdata(serio, pegalax);err serio_open(serio, drv);if (err)goto fail2;err input_register_device(pegalax-dev);if (err)goto fail3;return 0;fail3: serio_close(serio); fail2: serio_set_drvdata(serio, NULL); fail1: input_free_device(input_dev);kfree(pegalax);return err; }/** The serio driver structure.*/static struct serio_device_id egalax_serio_ids[] {{.type SERIO_RS232,.proto SERIO_EGALAX,.id SERIO_ANY,.extra SERIO_ANY,},{ 0 } };MODULE_DEVICE_TABLE(serio, egalax_serio_ids);static struct serio_driver egalax_drv {.driver {.name egalax,},.description DRIVER_DESC,.id_table egalax_serio_ids,.interrupt egalax_interrupt,.connect egalax_connect,.disconnect egalax_disconnect, };/** The functions for inserting/removing us as a module.*/static int __init egalax_init(void) {return serio_register_driver(egalax_drv); }static void __exit egalax_exit(void) {serio_unregister_driver(egalax_drv); }module_init(egalax_init); module_exit(egalax_exit); 只是修改了最后一点,其中egalax_serio_ids中的几个参数在应用程序中需要用到加上驱动编译内核更新后此时这个驱动是没有起作用的需要通过应用程序将串口与之绑定后才能正常工作。 应用程序如下 #include stdio.h #include unistd.h #include stdlib.h #include sys/types.h #include sys/stat.h #include sys/ioctl.h #include fcntl.h #include linux/fs.h #include errno.h #include string.h #include linux/fb.h #include malloc.h #include sys/mman.h #include termio.h #include linux/serio.h#define SERIO_ANY 0xff #define SERIO_EGALAX 0x3fint main(int argc, char* argv[]) {int dev,ret;char comdev[20];int ldisc;unsigned long type;struct termios option;int fd -1;if(argc ! 2){printf(-----------------------------------------\n);printf(\nUsage: %s [serial device(1-5)]\n, argv[0]);printf(Example: %s 5 n, argv[0]);printf(-----------------------------------------\n);return 0;}dev strtol(argv[1],NULL,10);sprintf(comdev,/dev/ttyAMA%d,dev);fd open(comdev,O_RDWR|O_NONBLOCK|O_NOCTTY);if (fd 0) {perror(comdev);exit(1);}tcgetattr(fd, option);option.c_iflag IGNPAR | IGNBRK;option.c_cflag HUPCL | CS8 | CREAD | CLOCAL | B9600;option.c_cc[VMIN] 1;option.c_cc[VTIME] 0;cfsetispeed(option,B9600);cfsetospeed(option,B9600);ret tcsetattr(fd, TCSANOW, option);if(ret 0) {perror(TCSANOW);exit(1);}ldisc N_MOUSE;ret ioctl(fd,TIOCSETD,ldisc);if(ret) {perror(TIOCSETD);}type SERIO_EGALAX | (SERIO_ANY 8) | (SERIO_ANY 16);ret ioctl(fd,SPIOCSTYPE, type);if(ret) {perror(SPIOCSTYPE);}read(fd,NULL,0);//close(fd);return 0; } 需要注意的是应用程序最后这个read一定要执行不然驱动里不会进行连接. 编译生成可执行文件seriotouch 应用程序配制完串口后需要与之前的驱动连接看设置spiocstype的设置需要保证这里的几个参数与驱动进行对应。 系统启动后执行seriotouch 5 后面这个对应的是串口号,执行这个后会看到驱动里的connect执行了同时会生成一个input节点。
http://www.dnsts.com.cn/news/121461.html

相关文章:

  • 中山电子商务网站建设2024新冠又来了吗
  • 手机网站什么意思哪里可以做宝盈网站
  • 辽宁网站建设墨子前端框架有哪些
  • 企业网站首页flash哪家做网站公司好
  • 各种类型网站建设asp最新版本
  • 提示网站建设中建设网app下载安装
  • 免费网站建设价格网络营销调研名词解释
  • 北京做网站设计招聘农产品期货交易平台app
  • 永州冷水滩网站建设手机最全的网站
  • 企业在什么网站推广html手机网页制作
  • 荣耀商城官网网站如何搭建局域网服务器
  • 环评在那个网站做做外贸网站设计上需要注意什么
  • 广元建设厅官方网站长春服务好的网站建设
  • linux做网站好北京做网站价格
  • 五莲县财源建设网站专业网站建设好不好
  • 枣庄网站开发搜什么关键词能搜到好片
  • 秦皇岛网站建设哪家好微网站内容
  • 北京网站建设技术托管潍坊做网站教程
  • 搜狗收录辽宁seo推广软件
  • 网页设计与制作做网站可以做微课PPT模板 网站
  • 南阳哪里做网站初期网站开发费会计分录
  • 网站建设项目实施计划书中国建筑材料网官网
  • 网站建设收费标准效果记事本做网站表格
  • 农村电商网站设计与发展现状手机网站开发模板
  • wordpress内核权限seo整站优化吧
  • 计算机毕设网站建设怎么改短网址api
  • 温州红酒网站建设可以做微课ppt模板 网站有哪些
  • 做个网站网站需要多少钱北京搜索引擎优化主管
  • 分销商城小程序阳城seo排名
  • 制作营销网站模板网站建设属于技术活吗