封装火灾报警线程实现智能家居中的火灾报警功能
mainPro.c(主函数)
c
#include <stdio.h>
#include "controlDevice.h"
#include "inputCommand.h"
#include <pthread.h>
struct Devices *pdeviceHead = NULL; //设备工厂链表头
struct Devices* findDeviceByName(struct Devices *phead,char *name) //在设备链表中查找设备(语音和socket均可使用)
{
struct Devices *tmp = phead;
if(tmp == NULL){
printf("The devicesLink is NULL");
return NULL;
}else{
while(tmp != NULL){
if(strcmp(tmp->deviceName,name) == 0){
return tmp;
}
tmp = tmp->next;
}
return NULL;
}
}
void* fire_pthread(void *data) //火灾报警线程处理函数
{
struct Devices *fire;
struct Devices *beep;
int status;
fire = findDeviceByName(pdeviceHead,"fire"); //从设备链表找出火灾检测和蜂鸣器
beep = findDeviceByName(pdeviceHead,"beep");
fire->deviceInit(fire->pinNum);
beep->deviceInit(beep->pinNum);
while(1){ //检测到火灾通过蜂鸣器报警
status = fire->readStatus(fire->pinNum);
if(status == 0){
beep->open(beep->pinNum);
printf("fire warning\n");
delay(20000);
}else
beep->close(beep->pinNum);
}
int main()
{
pthread_t fire_pth;
if(wiringPiSetup()<0){//初始化wiringPi外设库
printf("wiringPi Init failed\n");
return -1;
}
//1.指令工厂初始化
//2.设备控制工厂初始化
pdeviceHead = addFireToDeviceLink(pdeviceHead); //将火灾检测加入设备链表
pdeviceHead = addBeepToDeviceLink(pdeviceHead); //将蜂鸣器加入设备链表
//3.线程池建立
//3.3火灾线程
ret = pthread_create(&fire_pth,NULL,fire_pthread,NULL);
if (ret != 0) {
printf("Failed to create firethread.\n");
return -1;
}
//等待线程退出
pthread_join(fire_pth,NULL);
return 0;
}