【智能家居】5、主流程设计以及外设框架编写

 一、主流程设计

#include 

int main(){

	//指令工厂初始化

	//控制外设工厂初始化

	//线程池
	
	return 0;
}

1、工厂模式结构体定义

 (1)指令工厂 inputCmd.h

struct InputCmd{
	char cmdName[128];//指令名称
	char cmd[32];//指令

	int (*Init)(char *name,char *ipAdresschar *port);//初始化函数
	int (*getCmd)(char *cmd);//获取指令函数
	char *log[1024];//日志

	struct InputCmd *next;
}

定义一个名为 `InputCmd` 的结构体,包含以下成员:

  1. char cmdName[128]:一个长度为128的字符数组,用于存储指令名称。
  2. char cmd[32]:一个长度为32的字符数组,用于存储指令。
  3. int (*Init)(char *name, char *ipAdress, char *port):一个初始化相关指令操作的函数指针,它指向一个返回值为整型,接受三个字符指针类型的参数(名称、IP地址、端口号)的函数。
  4. int (*getCmd)(char *cmd):一个用于获取指令的函数指针,它指向一个返回值为整型,接受一个字符指针类型的参数(指令)的函数。
  5. char *log[1024]:一个长度为1024的字符指针数组,用于存储日志信息。
  6. struct InputCmd *next:一个指向 `struct InputCmd` 类型的指针,用于链表的连接。

(2)外设工厂 controlDevices.h

struct Devices{
	char devicesName[128];//设备名称
	int status;//状态:开&关
	
	int (*open)();//打开设备
	int (*close)();//关闭设备
	int (*devicesInit)();//设备初始化
	int (*readStatus)();//读取设备状态
	int (*changeStatus)(int status);//改变设备状态

	struct Devices *next;
}

定义一个名为 `Devices` 的结构体,包含以下成员:

  1. char devicesName[128]:一个长度为128的字符数组,用于存储设备名称。
  2. int status:一个整型变量,用于存储设备的状态(如开/关等)。
  3. int (*open)():一个用于打开相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
  4. int (*close)():一个用于关闭相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
  5. int (*devicesInit)():一个用于初始化相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
  6. int (*readStatus)():一个用于读取设备当前状态的函数指针,它指向一个返回值为整型、无参数的函数。
  7. int (*changeStatus)(int status):一个用于更改设备状态的函数指针,它指向一个返回值为整型,接受一个字符指针类型的参数(设备状态)的函数。
  8. struct Devices *next:一个指向 `struct Devices` 类型的指针,通常链表的连接。

二、外设框架编写

以浴室灯模块为例

bathroomLight.c

1、创建外设工厂对象bathroomLight

struct Devices BathroomLight{
	.name="bathroomLight",
	.open=bathroomLight_open,
	.close=bathroomLight_close,
	.devicesInit=bathroomLight_init,
	.changeStatus=bathroomLight_status
}

2、编写相关函数框架


int bathroomLight_open(){
	

}

int bathroomLight_close(){

	
}

int bathroomLight_init(){
	
}

int bathroomLight_status(int status){

}

3、将浴室灯相关操作插入外设工厂链表等待被调用

sturct  Devices *addbathroomLightToDevicesLink(stuuct Devices *phead){
	if(phead==NULL){
		ruturn &bathroomLight;
	}else{
		bathroomLight.next=phead;
		phead=&bathroomLight;
		}
}

你可能感兴趣的:(算法,单片机,嵌入式硬件,mcu)