1.主流程框架设计

1. mainPro.c

#include <stdio.h>
#include "contrlDevice.h"
#include "inputCommand.h"

int main(){

	//指令工厂初始化


	//设备工厂初始化


	//创建线程池
		//socket
		//语音
		//摄像头
		//火灾检测
	
	return 0;
}

2.inputCommand.h(指令工厂)

struct InputCommander{
	char commandName[128];
	char command[32];
	int (*Init)(char *name,char *ipAdress,char *port);
	int (*getCommand)(char *cmd);

	char log[1024];

	struct InputCommander *next;
	


};

3.contrlDevice.h(设备工厂)

struct Devices{
	char deviceName[32];
	int status;
	
	int (*open)();
	int (*close)();
	int (*deviceInit)();
	int (*readStatus)();//火灾
	int (*changeStatus)(int status);
	struct Devices *next;

};

4.bathroomLight.c

#include <stdio.h>
#include "contrlDevice.h"
#include "inputCommand.h"



int bathroomLightOpen(){


}
int bathroomLightClose(){


}
int bathroomLightCloseInit(){

}
int bathroomLightCloseStatus(int status){

}
struct Devices bathroomLight={
	.name="bathroomLight",

	.open=bathroomLightOpen,
	.close=bathroomLightClose,
	
	.deviceInit=bathroomLightCloseInit,
	.changeStatus=bathroomLightCloseStatus
		
};


struct Devices*  addBathroomLightToDeviceLink(struct Devices *phead){
	if(phead==NULL){
		return &bathroomLight;
	}else{
		bathroomLight.next=phead;
		phead=&bathroomLight;
		return phead;
	}
}

2.实现浴室灯亮

把设备加入到设备列表
通过对设备链表的遍历查找相关的设备
找到设备后初始化设备,实现对设备的操作。

1. mainPro.c

#include <stdio.h>
#include <string.h>
#include "contrlDevice.h"
#include "inputCommand.h"
#include <wiringPi.h>
struct Devices *findDeviceByName(char *name,struct Devices *phead){
	struct Devices *ptmp=phead;
	if(ptmp==NULL){
		printf("none\n");
		return NULL;
	}else{
		while(ptmp!=NULL){
			if(strcmp(ptmp->deviceName,name)==0){

				return ptmp;
			}
			ptmp=ptmp->next;
		}
		return NULL;
	}

}


int main(){
	if(wiringPiSetup()==-1){
		return -1;
	}
	char *name="bathroomLight";


	struct Devices *pDeviceHead=NULL;
	struct Devices *tmp=NULL;
	pDeviceHead=addBathroomLightToDeviceLink(pDeviceHead);
	tmp=findDeviceByName(name,pDeviceHead);
	//指令工厂初始化
	if(tmp!=NULL){
		tmp->deviceInit(tmp->pinNum);
		tmp->open(tmp->pinNum);
	}

	//设备工厂初始化


	//创建线程池
		//socket
		//语音
		//摄像头
		//火灾检测
	
	return 0;
}

2.inputCommand.h(指令工厂)

#include <wiringPi.h>

struct InputCommander{
	char commandName[128];
	char command[32];
	int (*Init)(char *name,char *ipAdress,char *port);
	int (*getCommand)(char *cmd);

	char log[1024];

	struct InputCommander *next;
	


};

3.contrlDevice.h(设备工厂)

#include <wiringPi.h>
struct Devices{
	char deviceName[32];
	int status;
	int pinNum;
	int (*open)(int pinNum);
	int (*close)(int pinNum);
	int (*deviceInit)(int pinNum);
	int (*readStatus)(int pinNum);//火灾
	
	int (*changeStatus)(int status);


	struct Devices *next;

};
struct Devices*  addBathroomLightToDeviceLink(struct Devices *phead);

4.bathroomLight.c

#include <stdio.h>
#include "contrlDevice.h"
#include "inputCommand.h"



int bathroomLightOpen(int pinNum){
	digitalWrite(pinNum,LOW);

}
int bathroomLightClose(int pinNum){
	digitalWrite(pinNum,HIGH);

}
int bathroomLightCloseInit(int pinNum){
	pinMode(pinNum,OUTPUT);

	digitalWrite(pinNum,HIGH);
}
int bathroomLightCloseStatus(int status){
	

}
struct Devices bathroomLight={
	.deviceName="bathroomLight",
	.pinNum=0,
	.open=bathroomLightOpen,
	.close=bathroomLightClose,
	
	.deviceInit=bathroomLightCloseInit,
	.changeStatus=bathroomLightCloseStatus
		
};

//把浴室灯加入链表
struct Devices*  addBathroomLightToDeviceLink(struct Devices *phead){
	if(phead==NULL){
		return &bathroomLight;
	}else{
		bathroomLight.next=phead;
		phead=&bathroomLight;
		return phead;
	}
}

其余的灯的代码编写与浴室灯几乎一样,改改名称就好了,在mainPro中添相关的调试信息即可

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐