目录
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中添相关的调试信息即可