Loading

韦东山-数码相框(1)

做工程的步骤

  1. 弄清需求
  2. 设计框架
  3. 编写代码
  4. 测试

项目需求

  1. 上电,LCD显示一副图片;

  2. 然后根据默认配置,决定停留还是自动显示下一副;

  3. 点击一下,出现对话框,选择手动显示或者自动显示;

  4. 根据手势的上下左右设计对应的执行逻辑:向上放大,向下缩小,左右是显示上/下一副图像。

  5. 当左右移动速度很快时,显示下下一副图像。

设计框架

输入进程

可以通过触摸屏或者按键对屏幕的事件、时间、类型、数据进行封装,通过socket发送给服务器。事件有点击事件、移动事件;数据的类型有方向、幅度、速度,以及位置数据。

graph TB A[触摸屏/按键输入] --> B[事件检测] B --> C{事件类型} C --> D[点击事件] C --> E[移动事件] D --> F[封装事件数据] E --> F F --> G[数据封装完成] G --> H[通过Socket发送] H --> I[数据发送到服务器]

分为三个线程:

  • 主控线程:得到上报的事件,通过socket发送数据
  • ts线程:使用tslib读取触摸TS屏幕,封装事件,上报数据
  • 按键线程:读取按键数据,封装事件,上报数据

显示进程

  1. 一个线程,接受socket数据,根据数据进入哪个进程。数据放入全局变量里面,属于同一个进程的线程可以使用这个变量。

  2. 然后分五个线程,当前、左、右、上、下线程,将对应功能的数据提前准备好。通过这样的方式,可以更快的加载数据,优化用户体验。

  3. 通过libjpeg库,将图片解压出来,存入到驱动分配的对应的内存。使用mmap可以直接让线程操作内存数据。

    image

  4. 最后通过主控线程,控制图片的显示,如果要显示图片,用DMA传输到显存,通过LCD驱动显示。用DMA的原因是因为DMA传输数据很快。

posted @ 2024-03-27 14:43  阿四与你  阅读(46)  评论(0编辑  收藏  举报