一、实现难点

  1. 树莓派双hdmi分屏展示
    1. 打开任意应用时指定输出屏幕(浏览器,ppt)
  2. 屏幕透明图层绘图

二、硬件结构

实现一款基于Tall标准协议的投屏客户端及其控制系统。基本框图如图2-1所示,项目核心包括两部分:

  • cc-d2v 投屏客户端
  • cc-d2v-control 投屏客户端云控制器

image.png
图2-1

产品内部结构如图2-2所示:
image.png
图2-2

三、软件架构

image.png

  • 实现树莓派守护程序raspi-daemon-control(C),主要功能包括:1.通过进程间通讯手段接收外部命令及参数;2.PPT操作(打开、关闭);3.浏览器操作(打开浏览器并跳转到指定url、关闭浏览器);4. 键盘按键模拟(F5、left、right、home、end等)
  • 实现树莓派图层程序raspi-daemon-paint(QT),主要功能包括:1.通过进程间通讯手段接收外部命令及参数;2. 在桌面最顶层覆盖一层透明图层; 3. 画图功能(画点、矩形、圆等); 4. 橡皮擦功能; 5.截图保存功能;6. 画笔设置(粗细、颜色) 功能
  • 实现树莓派客户端程序tall-raspi-main(C),主要功能包括:1. 内部通过信号量等手段与raspi-daemon-x进行通讯;2. 外部通过2.4G(串口)和wifi与cc-control遥控器和tall服务器进行通讯;3. 实现tall任务调度。
  • 实现客户端配置程序tall-raspi-setting(Web),主要功能包括:1. 用户登录;2.项目信息配置(URL路径、ID);3.亮分等URL配置;4.资源上传、下载、预览(ppt);5.客户端启动和关闭

四、功能列表

image.png

五、各模块间通讯手段及协议

5.1 tall-raspi-main与raspi-daemon-xx模块之间通信

5.1.1 通信手段

采用IPC中“消息队列”方式进行通讯。

  • tall-raspi-main 作为生产者,往“消息队列中发送消息”
  • raspi-daemon-control和raspi-daemon-paint作为消费者,分别使用不同的msgtype区分消息
    1. #define MSG_TYPE_CC_CONTROL 201
    2. #define MSG_TYPE_CC_PAINT 202

5.1.2 通信协议

Filter0 Filter1 Num Device Oper Data[] CRC-16
1byte 1byte 1byte 1byte 1byte X bytes 1byte 1byte
0xFF 0xFE 0xXX 0xXX 0xXX 0xXXXX LSB MSB
字段 长度**(字节)** 说明
Filter0 1 固定为0xFF
Filter1 1 固定为0xFE
Num 1 后续字节的长度(device - crc)
Device 1 设备代码
Oper 1 操作代码
Data[] 不定 参数域。在实际命令中,可以不存在。
LSB-CRC16 1 CRC16低字节。CRC是从Device到Data[]的CRC16值
MSB-CRC16 1 CRC16高字节。
#define D_s_PH3_ccmodbus_max 255
typedef struct 
{
    U8     filter0;
    U8     filter1;
    U8     num; 
    U8  device;
    U8  oper;
    U8     buf[D_s_PH3_ccmodbus_max - 5];
    U8  crc[2];
}TS_PH3_ccmodbus;

Device 和 oper 可能的值如下:

设备代码 设备 操作代码 操作 参数类型
0x80 PPT设备 0x00 打开PPT char
0x01 关闭PPT
0x81 Chrome浏览器 0x00 打开chrome char
0x01 关闭chrome
0x82 按键 0x00 按下并弹起 U8 按键值(0-255)
0x01 按下 U8 按键值(0-255)
0x02 弹起 U8 按键值(0-255)
0x90 画板 0x00 暂未定义 暂未定义

5.1.3 通信协议举例

FF FE 0C 80 00 ["c++.pptx"] crc1 crc2     //打开c++.pptx
FF FE 05 80 01 crc1 crc2    //关闭ppt

5.2 tall-raspi-main与cc-control模块之间通信

5.2.1 通信手段

866模块->uart

5.2.2 通信协议

Filter0 Filter1 Num Device Oper Data[] CRC-16
1byte 1byte 1byte 1byte 1byte X bytes 1byte 1byte
0xFF 0xFE 0xXX 0xXX 0xXX 0xXXXX LSB MSB

5.3 tall-raspi-main与tall-server之间通信

采用标准的http协议,api由服务器端定义