前言
本次学习了百问网的七天物联网直播课收获很多,写下笔记记录一下。
结构体/类
在LInux开发、LinuxAPP开发中,类/结构体是核心,能抽象出这些类/结构体,就体现了你的编程能力。
原因是:
- 面向对象:用结构体来表示一个功能,比如输入、输出、网络传输、数据处理;
- 编程优势:程序可以使用模块化涉及,容易维护、容易扩展、容易升级;
- 例如:
输入事件
按键、触摸屏、网络数据,数据完全不一样,我们需要一个结构体把他们的类型统一
typedef struct InputEvent{
TIME_T time;
INPUT_EVENT_TYPE eType;
int iX;
int iY;
int iKey;
int iPressure;
char str[INTPU_BUF_LEN];
}InputEvent,*PInputEvent;
以上的代码,变量eType被赋予的值为输入事件的类型。不同类型输入进结构体不同的信息,按键事件输入iKey信息,触摸屏事件输入iX,iY,iPressure信息,网络数据事件输入str[INTPU_BUF_LEN]信息;这样能兼容各种输入事件。
输入设备
输入设备产生输入事件,我们需要输入设备中的使用函数,初始化函数,获得数据函数,把它们写成结构体。
typedef struct InputDevice{
char *name;
int (*GetInputEvent)(PInputEvent ptInputEvent);
int (*DeviceInit)(void);
int (*DeviceExit)(void);
struct InputDevice *pNext;
}InputDevice,*PInputDevice;
输入缓冲区
多个输入设备产生的数锯会统一放在一个地方,通常我们用环形缓冲区来保存,有的使用数组,有的使用链表。
#define BUFFER_SIZE 10 /*环形缓冲区的大小*/
typedef struct{
InputEvent buffer[BUFFER_SIZE]; /*缓冲区空间*/
volatile unsigned int pW; /*写地址*/
volatile unsigned int pR; /*读地址*/
}InputEventBuffer;