定义一个名为 `InputCmd` 的结构体,包含以下成员:
char cmdName[128]:一个长度为128的字符数组,用于存储指令名称。char cmd[32]:一个长度为32的字符数组,用于存储指令。int (*Init)(char *name, char *ipAdress, char *port):一个初始化相关指令操作的函数指针,它指向一个返回值为整型,接受三个字符指针类型的参数(名称、IP地址、端口号)的函数。int (*getCmd)(char *cmd):一个用于获取指令的函数指针,它指向一个返回值为整型,接受一个字符指针类型的参数(指令)的函数。char *log[1024]:一个长度为1024的字符指针数组,用于存储日志信息。struct InputCmd *next:一个指向 `struct InputCmd` 类型的指针,用于链表的连接。 (2)外设工厂 controlDevices.h struct Devices{ char devicesName[128];//设备名称 int status;//状态:开&关 int pinNum;//引脚号 int (*open)(int pinNum);//打开设备 int (*close)(int pinNum);//关闭设备 int (*devicesInit)(int pinNum);//设备初始化 int (*readStatus)();//读取设备状态 int (*changeStatus)(int status);//改变设备状态 struct Devices *next; }定义一个名为 `Devices` 的结构体,包含以下成员:
char devicesName[128]:一个长度为128的字符数组,用于存储设备名称。int status:一个整型变量,用于存储设备的状态(如开/关等)。int pinNum:一个整型变量,用于存储设备的引脚号。int (*open)(int pinNum):一个用于打开相关设备的函数指针,它指向一个返回值为整型、接受一个整型的参数(引脚号)的函数。int (*close)(int pinNum):一个用于关闭相关设备的函数指针,它指向一个返回值为整型、接受一个整型的参数(引脚号)的函数。int (*devicesInit)(int pinNum):一个用于初始化相关设备的函数指针,它指向一个返回值为整型、接受一个整型的参数(引脚号)的函数。int (*readStatus)():一个用于读取设备当前状态的函数指针,它指向一个返回值为整型、无参数的函数。int (*changeStatus)(int status):一个用于更改设备状态的函数指针,它指向一个返回值为整型,接受一个字符指针类型的参数(设备状态)的函数。struct Devices *next:一个指向 `struct Devices` 类型的指针,通常链表的连接。 二、外设框架编写以浴室灯模块为例
bathroomLight.c
1、创建外设工厂对象bathroomLight struct Devices BathroomLight{ .name="bathroomLight", .pinNum=你选择的引脚号, .open=bathroomLight_open, .close=bathroomLight_close, .devicesInit=bathroomLight_init, .changeStatus=bathroomLight_status } 2、编写相关函数框架 int bathroomLight_open(int pinNum){ } int bathroomLight_close(int pinNum){ } int bathroomLight_init(int pinNum){ } int bathroomLight_status(int status){ } 3、将浴室灯相关操作插入外设工厂链表等待被调用 sturct Devices *addbathroomLightToDevicesLink(stuuct Devices *phead){ if(phead==NULL){ ruturn &bathroomLight; }else{ bathroomLight.next=phead; phead=&bathroomLight; } }