智能家居


目录


主流程设计框架及某一功能框架编写

头文件:
	contrlDevices.h
	InputCommand.h
源文件:
	mainPro.c
	bathroomLight.c
	Camera.c
	fire.c
	livingroomLight.c
	lock.c
	restaurantLight.c
	socketContrl.c
	upstairLight.c
	usartContrl.c
	voiceContrl.c

InputCommand.h框架

struct InputCommander{
	char commandName[128];	//名字
	char command[32];		//指令
	int (*Init)(char* name, char* ipAddress, char* port);	//操作函数
	int (*getCommand)(char* cmd);	//获得数据

	char log[1024];
	
	struct InputCommander* next;};

contrlDevices.h框架

struct Devices{
	char devicesName[128];
	int status;				//状态

	int (*open)();			//打开
	int (*close)();			//关闭
	int (*devicesInit)();	//初始化
	
	int (*readStatus)();	//读状态
	int(*changeStatus)(int status);		//改变状态

	struct Devices* next;};

bathroomLight.c框架

#include "contrlDevices.h"int bathroomLightOpen(){
	}int bathroomLightClose(){}int bathroomLightCloseInit(){}int bathroomLightCloseStatus(int status){}struct Devices bathroomLight{
	.name = "bathLight",
	.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	}};

四盏灯、火焰传感器及主程序代码(继电器输入控制)

bathroomLight.c

#include "contrlDevices.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 ={
	.devicesName = "bathLight",
	.pinNum = 22,
	.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;
	}};

upstairLight.c

#include "contrlDevices.h"int upstairsLightOpen(int pinNum)	//打开{
	digitalWrite(pinNum, LOW);	//低电平开启}int upstairsLightClose(int pinNum)	//关闭{
	digitalWrite(pinNum, HIGH);	//高电平关闭}int upstairsLightCloseInit(int pinNum)	//初始化{
	pinMode(pinNum, OUTPUT);
	digitalWrite(pinNum, HIGH);}int upstairsLightCloseStatus(int status)	//保存{}struct Devices upstairsLight ={
	.devicesName = "upstairsLight",
	.pinNum = 21,
	.open = upstairsLightOpen,
	.close = upstairsLightClose,
	.deviceInit = upstairsLightCloseInit,
	.changeStatus = upstairsLightCloseStatus};struct Devices* addUpstairsLightToDeviceLink(struct Devices* phead){
	if (phead == NULL) {
		return &upstairsLight;
	}
	else {
		upstairsLight.next = phead;	//	头插法
		phead = &upstairsLight;
	}};

livingroomLight.c

#include "contrlDevices.h"int livingroomLightOpen(int pinNum)	//打开{
	digitalWrite(pinNum, LOW);	//低电平开启}int livingroomLightClose(int pinNum)	//关闭{
	digitalWrite(pinNum, HIGH);	//高电平关闭}int livingroomLightCloseInit(int pinNum)	//初始化{
	pinMode(pinNum, OUTPUT);
	digitalWrite(pinNum, HIGH);}int livingroomLightCloseStatus(int status)	//保存{}struct Devices livingroomLight ={
	.devicesName = "livingroomLight",
	.pinNum = 23,
	.open = livingroomLightOpen,
	.close = livingroomLightClose,
	.deviceInit = livingroomLightCloseInit,
	.changeStatus = livingroomLightCloseStatus};struct Devices* addLivingroomLightToDeviceLink(struct Devices* phead){
	if (phead == NULL) {
		return &livingroomLight;
	}
	else {
		livingroomLight.next = phead;	//	头插法
		phead = &livingroomLight;
	}};

restaurantLight.c

#include "contrlDevices.h"int livingroomLightOpen(int pinNum)	//打开{
	digitalWrite(pinNum, LOW);	//低电平开启}int livingroomLightClose(int pinNum)	//关闭{
	digitalWrite(pinNum, HIGH);	//高电平关闭}int livingroomLightCloseInit(int pinNum)	//初始化{
	pinMode(pinNum, OUTPUT);
	digitalWrite(pinNum, HIGH);}int livingroomLightCloseStatus(int status)	//保存{}struct Devices livingroomLight ={
	.devicesName = "livingroomLight",
	.pinNum = 23,
	.open = livingroomLightOpen,
	.close = livingroomLightClose,
	.deviceInit = livingroomLightCloseInit,
	.changeStatus = livingroomLightCloseStatus};struct Devices* addLivingroomLightToDeviceLink(struct Devices* phead){
	if (phead == NULL) {
		return &livingroomLight;
	}
	else {
		livingroomLight.next = phead;	//	头插法
		phead = &livingroomLight;
	}};

fire.c

#include "contrlDevices.h"int fireStatusRead(int pinNum){
	return digitalWrite(pinNum, HIGH);}int fireInit(int pinNum)	//初始化{
	pinMode(pinNum, INPUT);
	digitalWrite(pinNum, HIGH);}struct Devices fire ={
	.devicesName = "fire",
	.pinNum = 25,
	.deviceInit = fireInit,
	.readStatus = fireStatusRead};struct Devices* addFireToDeviceLink(struct Devices* phead){
	if (phead == NULL) {
		return &fire;
	}
	else {
		fire.next = phead;	//	头插法
		phead = &fire;
	}};

mainPro.c

#include #include #include "contrlDevices.h"struct Devices* findDeviceByName(char* name, struct Devices* phead){
	struct Devices* tmp = phead;
	if (phead == NULL) {
		return NULL;
	}
	else {
		while (tmp != NULL) {
			if (strcmp(tmp->devicesName, name) == 0) {
				return tmp;
			}
			tmp = tmp->next;
		}
		return NULL;
	}}int main(){
	//char* name = "bathroomLight";
	char name[128];
	struct Devices* tmp = NULL;

	if (wiringPiSetup() == -1) {
		return -1;
	}
	struct Devices* pdeviceHead = NULL;
	pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);
	pdeviceHead = addUpstairsLightToDeviceLink(pdeviceHead);
	pdeviceHead = addLivingroomLightToDeviceLink(pdeviceHead);
	pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);
	pdeviceHead = addFireToDeviceLink(pdeviceHead)

	//struct Devices* tmp = findDeviceByName(name, pdeviceHead);
	while(1){
		printf("Inupt:\n");
		scanf("%s", name);
		tmp = findDeviceByName(name, pdeviceHead);

		if (tmp != NULL) {
			tmp->deviceInit(tmp->pinNum);
			tmp->open(tmp->pinNum);
	}

	// 1.指令工厂初始化
	
	// 2.设备控制工厂初始化

	// 3.线程池建立
	// 3.1 语音线程
	// 3.2 socket线程
	// 3.3 摄像头线程
	// 3.4 火灾线程
	
	return 0;}

contrlDevices.h

#include #include struct Devices{
	char devicesName[128];
	int status;				//状态
	int pinNum;

	int (*open)(int pinNum);			//打开
	int (*close)(int pinNum);			//关闭
	int (*deviceInit)(int pinNum);	//初始化
	
	int (*readStatus)();	//读状态
	int(*changeStatus)(int status);		//改变状态

	struct Devices* next;};struct Devices* addRestaurantLightToDeviceLink(struct Devices* phead);struct Devices* addLivingroomLightToDeviceLink(struct Devices* phead);struct Devices* addBathroomLightToDeviceLink(struct Devices* phead);struct Devices* addUpstairsLightToDeviceLink(struct Devices* phead);struct Devices* addFireToDeviceLink(struct Devices* phead)

添加声音识别模块的串口读取功能

voiceContrl.c

#include "InputCommand.h"#include #include #include #include #include int voiceInit(struct InputCommander *voicer, char* ipAddress, char* port){
	int fd;

	if ((fd = serialOpen(voicer->deviceName, 9600)) == -1) {	//初始化串口,波特率9600
		exit(-1);
	}
	voicer->fd = fd;
	return fd;}int voiceGetCommand(struct InputCommander* voicer){
	int nread = 0;
	nread = read(voicer->fd, voicer->command, sizeof(voicer->command));
	if (nread == 0) {
		printf("usart for voice read over time\n");
	}
	else {
		return nread;
	}}struct InputCommander voiceContrl = {
	.commandName = "voice",
	.deviceName = "/dev/ttyAMAO",
	.command = {'\0'},
	.Init = voiceInit,
	.getCommand = voiceGetCommand,
	.log = {'\0'},
	.next = NULL};struct InputCommander* addVoiceContrlToCommandLink(struct InputCommander* phead){
	if (phead == NULL) {
		return &voiceContrl;
	}
	else {
		voiceContrl.next = phead;	//	头插法
		phead = &voiceContrl;
	}}

InputCommand.h

#include "InputCommand.h"#include #include #include #include #include int voiceInit(struct InputCommander *voicer, char* ipAddress, char* port){
	int fd;

	if ((fd = serialOpen(voicer->deviceName, 9600)) == -1) {	//初始化串口,波特率9600
		exit(-1);
	}
	voicer->fd = fd;
	return fd;}int voiceGetCommand(struct InputCommander* voicer){
	int nread = 0;
	nread = read(voicer->fd, voicer->command, sizeof(voicer->command));
	if (nread == 0) {
		printf("usart for voice read over time\n");
	}
	else {
		return nread;
	}}struct InputCommander voiceContrl = {
	.commandName = "voice",
	.deviceName = "/dev/ttyAMAO",
	.command = {'\0'},
	.Init = voiceInit,
	.getCommand = voiceGetCommand,
	.log = {'\0'},
	.next = NULL};struct InputCommander* addVoiceContrlToCommandLink(struct InputCommander* phead){
	if (phead == NULL) {
		return &voiceContrl;
	}
	else {
		voiceContrl.next = phead;	//	头插法
		phead = &voiceContrl;
	}}

mainPro.c

#include #include #include "contrlDevices.h"#include "InputCommand.h"struct Devices* findDeviceByName(char* name, struct Devices* phead){
	struct Devices* tmp = phead;
	if (phead == NULL) {
		return NULL;
	}
	else {
		while (tmp != NULL) {
			if (strcmp(tmp->devicesName, name) == 0) {
				return tmp;
			}
			tmp = tmp->next;
		}
		return NULL;
	}}int main(){
	//char* name = "bathroomLight";
	char name[128];
	struct Devices* tmp = NULL;

	if (wiringPiSetup() == -1) {
		return -1;
	}
	struct Devices* pdeviceHead = NULL;
	struct InputCommander* pcommandHead = NULL;
	pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);
	pdeviceHead = addUpstairsLightToDeviceLink(pdeviceHead);
	pdeviceHead = addLivingroomLightToDeviceLink(pdeviceHead);
	pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);
	pdeviceHead = addFireToDeviceLink(pdeviceHead);
	pcommandHead = addVoiceContrlToCommandLink(pcommandHead);

	//struct Devices* tmp = findDeviceByName(name, pdeviceHead);
	while(1){
		printf("Inupt:\n");
		scanf("%s", name);
		tmp = findDeviceByName(name, pdeviceHead);

		if (tmp != NULL) {
			tmp->deviceInit(tmp->pinNum);
			tmp->open(tmp->pinNum);
	}

	// 1.指令工厂初始化
	
	// 2.设备控制工厂初始化

	// 3.线程池建立
	// 3.1 语音线程
	// 3.2 socket线程
	// 3.3 摄像头线程
	// 3.4 火灾线程
	
	return 0;}

添加socket服务器功能

socketContrl.c

#include "InputCommand.h"#include #include #include #include #include #include #include #include int socketInit(struct InputCommander* socketMes, char* ipAddress, char* port){
	int s_fd;
	int c_fd;

	struct sockaddr_in s_addr;
	/*struct sockaddr_in c_addr;*/

	//做初始化
	memset(&s_addr, 0, sizeof(struct sockaddr_in));
	/*memset(&c_addr, 0, sizeof(struct sockaddr_in));*/

	// socket
	s_fd = socket(AF_INET, SOCK_STREAM, 0);
	if (s_fd == -1) {
		perror("socket");
		exit(-1);
	}

	s_addr.sin_family = AF_INET;
	s_addr.sin_port = htons(atoi(socketMes->port));
	inet_aton(socketMes->ipAddress, &s_addr.sin_addr);

	// bind
	bind(s_fd, (struct sockaddr*) & s_addr, sizeof(struct sockaddr_in));

	//listen
	listen(s_fd, 10);
	socketMes->sfd = s_fd;
	return s_fd;}int socketGetCommand(struct InputCommander* socketMes){
	int c_fd;
	int n_read;
	struct sockaddr_in c_addr;
	memset(&c_addr, 0, sizeof(struct sockaddr_in));
	int clen = sizeof(struct sockaddr_in);
	c_fd = accept(socketMes->sfd, (struct sockaddr*) & c_addr, &clen);

	n_read = read(c_fd, socketMes->command, sizeof(socketMes->command));
	if (n_read == -1) {
		perror("read");
	}
	else if (n_read > 0) {
		printf("\get:%d\n", n_read);
	}
	else {
		printf("client quit\n");
		
	}

	return n_read;}struct InputCommander socketContrl ={
	.commandName = "socketServer",
	.command = {'\0'},
	.port = "8088",
	.ipAddress = "192.168.4.126",
	.Init = socketInit,
	.getCommand = socketGetCommand,
	.log = {'\0'},
	.next = NULL};struct InputCommander* addSocketContrlToCommandLink(struct InputCommander* phead){
	if (phead == NULL) {
		return &socketContrl;
	}
	else {
		socketContrl.next = phead;	//	头插法
		phead = &socketContrl;
	}}

InputCommand.h

#include #include struct InputCommander{
	char commandName[128];	//名字
	char deviceName[128];
	char command[32];		//指令
	int (*Init)(struct InputCommander* voicer, char* ipAddress, char* port);	//操作函数
	int (*getCommand)(struct InputCommander* voicer);	//获得数据
	char log[1024];
	int fd;
	char  port[12];
	char ipAddress[32];
	int sfd;
	struct InputCommander* next;};struct InputCommander* addVoiceContrlToCommandLink(struct InputCommander* phead);struct InputCommander* addSocketContrlToCommandLink(struct InputCommander* phead);

mainPro.c

#include #include #include "contrlDevices.h"#include "InputCommand.h"struct Devices* findDeviceByName(char* name, struct Devices* phead){
	struct Devices* tmp = phead;
	if (phead == NULL) {
		return NULL;
	}
	else {
		while (tmp != NULL) {
			if (strcmp(tmp->devicesName, name) == 0) {
				return tmp;
			}
			tmp = tmp->next;
		}
		return NULL;
	}}int main(){
	//char* name = "bathroomLight";
	char name[128];
	struct Devices* tmp = NULL;

	if (wiringPiSetup() == -1) {
		return -1;
	}
	struct Devices* pdeviceHead = NULL;
	struct InputCommander* pcommandHead = NULL;
	pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);
	pdeviceHead = addUpstairsLightToDeviceLink(pdeviceHead);
	pdeviceHead = addLivingroomLightToDeviceLink(pdeviceHead);
	pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);
	pdeviceHead = addFireToDeviceLink(pdeviceHead);
	pcommandHead = addVoiceContrlToCommandLink(pcommandHead);
	pcommandHead = addSocketContrlToCommandLink(pcommandHead);

	//struct Devices* tmp = findDeviceByName(name, pdeviceHead);
	while(1){
		printf("Inupt:\n");
		scanf("%s", name);
		tmp = findDeviceByName(name, pdeviceHead);

		if (tmp != NULL) {
			tmp->deviceInit(tmp->pinNum);
			tmp->open(tmp->pinNum);
	}

	// 1.指令工厂初始化
	
	// 2.设备控制工厂初始化

	// 3.线程池建立
	// 3.1 语音线程
	// 3.2 socket线程
	// 3.3 摄像头线程
	// 3.4 火灾线程
	
	return 0;}

主程序代码编写,实现语音和网络线程

socketContrl.c

#include "InputCommand.h"#include #include #include #include #include #include #include #include #include #include int socketInit(struct InputCommander* socketMes, char* ipAddress, char* port){
	int s_fd;
	int c_fd;

	struct sockaddr_in s_addr;
	/*struct sockaddr_in c_addr;*/

	//做初始化
	memset(&s_addr, 0, sizeof(struct sockaddr_in));
	/*memset(&c_addr, 0, sizeof(struct sockaddr_in));*/

	// socket
	s_fd = socket(AF_INET, SOCK_STREAM, 0);
	if (s_fd == -1) {
		perror("socket");
		exit(-1);
	}

	s_addr.sin_family = AF_INET;
	s_addr.sin_port = htons(atoi(socketMes->port));
	inet_aton(socketMes->ipAddress, &s_addr.sin_addr);

	// bind
	bind(s_fd, (struct sockaddr*) & s_addr, sizeof(struct sockaddr_in));

	//listen
	listen(s_fd, 10);
	printf("socket Server listening\n");
	socketMes->sfd = s_fd;
	return s_fd;}int socketGetCommand(struct InputCommander* socketMes){
	int c_fd;
	int n_read=0;
	struct sockaddr_in c_addr;
	memset(&c_addr, 0, sizeof(struct sockaddr_in));
	int clen = sizeof(struct sockaddr_in);
	c_fd = accept(socketMes->sfd, (struct sockaddr*) & c_addr, &clen);

	n_read = read(c_fd, socketMes->command, sizeof(socketMes->command));
	if (n_read == -1) {
		perror("read");
	}
	else if (n_read > 0) {
		printf("\get:%d\n", n_read);
	}
	else {
		printf("client quit\n");
		
	}

	return n_read;}struct InputCommander socketContrl ={
	.commandName = "socketServer",
	.command = {'\0'},
	.port = "8088",
	.ipAddress = "192.168.4.126",
	.Init = socketInit,
	.getCommand = socketGetCommand,
	.log = {'\0'},
	.next = NULL};struct InputCommander* addSocketContrlToCommandLink(struct InputCommander* phead){
	if (phead == NULL) {
		return &socketContrl;
	}
	else {
		socketContrl.next = phead;	//	头插法
		phead = &socketContrl;
	}}

voiceContrl.c

#include "InputCommand.h"#include #include #include #include #include #include int voiceInit(struct InputCommander* voicer, char* ipAddress, char* port){
	int fd;

	if ((fd = serialOpen(voicer->deviceName, 9600)) == -1) {	//初始化串口,波特率9600
		exit(-1);
	}
	voicer->fd = fd;
	return fd;}int voiceGetCommand(struct InputCommander* voicer){
	int nread = 0;

	memset(voicer->command, '\0',sizeof(voicer->command));
	nread = read(voicer->fd, voicer->command, sizeof(voicer->command));
	if (nread == 0) {
		printf("voice no datas\n");
	}
	else {
		return nread;
	}
	}struct InputCommander voiceContrl = {
	.commandName = "voice",
	.deviceName = "/dev/ttyAMAO",
	.command = {'\0'},
	.Init = voiceInit,
	.getCommand = voiceGetCommand,
	.log = {'\0'},
	.next = NULL};struct InputCommander* addVoiceContrlToCommandLink(struct InputCommander* phead){
	if (phead == NULL) {
		return &voiceContrl;
	}
	else {
		voiceContrl.next = phead;	//	头插法
		phead = &voiceContrl;
	}}

mainPro.c

#include #include #include "contrlDevices.h"#include "InputCommand.h"#include #include #include #include #include #include //全局变量struct InputCommander* pcommandHead = NULL;struct Devices* pdeviceHead = NULL;struct InputCommander* socketHandler = NULL;int c_fd;struct Devices* findDeviceByName(char* name, struct Devices* phead){
	struct Devices* tmp = phead;
	if (phead == NULL) {
		return NULL;
	}
	else {
		while (tmp != NULL) {
			if (strcmp(tmp->devicesName, name) == 0) {
				return tmp;
			}
			tmp = tmp->next;
		}
		return NULL;
	}}struct InputCommander* findCommandByName(char* name, struct InputCommander* phead){
	struct InputCommander* tmp = phead;
	if (phead == NULL) {
		return NULL;
	}
	else {
		while (tmp != NULL) {
			if (strcmp(tmp->commandName, name) == 0) {
				return tmp;
			}
			tmp = tmp->next;
		}
		return NULL;
	}}void* voice_thread(void* datas){
	struct InputCommander* voiceHandler;
	int nread;

	voiceHandler = findCommandByName("voice", pCommandHead);

	if (voiceHandler == NULL) {
		printf("find voiceHandler error");
		pthread_exit(NULL);
		//return NULL;
	}
	else {
		if (voiceHandler->Init(voiceHandler,NULL,NULL) < 0) {
			printf("voice init error\n");
			pthread_exit(NULL);
			//return NULL;
		}
		else {
			printf("%s init success\n", voiceHandler->commandName);
		}
		while (1) {
			nread = voiceHandler->getCommand(voiceHandler);
			if (nread == 0) {
				printf("nodata from voice\n");
			}
			else {
				printf("do divece contrl:%s\n", voiceHandler->command);

			}
		}
	}}void* read_thread(void* datas){
	int n_read;
	memset(socketHandler->command,'\0', sizeof(socketHandler->command));
	n_read = read(c_fd, socketHandler->command, sizeof(socketHandler->command));

	if (n_read == -1) {
		perror("read");
	}
	else if (n_read > 0) {
		printf("\nget:%d,%s\n", n_read, socketHandler->command);
	}
	else {
		printf("client quit\n");

	}

	return n_read;}void* socket_thread(void* datas){
	
	int n_read=0;
	pthread_t* readThread;

	struct sockaddr_in c_addr;
	memset(&c_addr, 0, sizeof(struct sockaddr_in));
	int clen = sizeof(struct sockaddr_in);

	
	//int nread;

	socketHandler = findCommandByName("socketServer", pdeviceHead);

	if (socketHandler == NULL) {
		printf("find socketHandler error");
		pthread_exit(NULL);
		//return NULL;

	}
	else {
		printf("%s init success\n", socketHandler->commandName);
	}
	socketHandler->Init(socketHandler,NULL,NULL);
	while (1) {
		c_fd = accept(socketHandler->sfd, (struct sockaddr*) & c_addr, &clen);
		pthread_create(&readThread, NULL, read_thread, NULL);
	}}int main(){
	//char* name = "bathroomLight";
	char name[128];
	struct Devices* tmp = NULL;

	pthread_t* voiceThread;
	pthread_t* socketThread;

	if (wiringPiSetup() == -1) {
		return -1;
	}

	// 1.指令工厂初始化
	
	pcommandHead = addVoiceContrlToCommandLink(pcommandHead);
	pcommandHead = addSocketContrlToCommandLink(pcommandHead);

	// 2.设备控制工厂初始化
	
	pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);
	pdeviceHead = addUpstairsLightToDeviceLink(pdeviceHead);
	pdeviceHead = addLivingroomLightToDeviceLink(pdeviceHead);
	pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);
	pdeviceHead = addFireToDeviceLink(pdeviceHead);
	
	// 3.线程池建立
	// 3.1 语音线程
	pthread_create(&voiceThread,NULL, voice_thread,NULL);
	// 3.2 socket线程
	pthread_create(&socketThread, NULL, socket_thread, NULL);
	
	// 3.3 摄像头线程
	// 3.4 火灾线程

	//struct Devices* tmp = findDeviceByName(name, pdeviceHead);
	/*
	while (1) {
		printf("Inupt:\n");
		scanf("%s", name);
		tmp = findDeviceByName(name, pdeviceHead);

		if (tmp != NULL) {
			tmp->deviceInit(tmp->pinNum);
			tmp->open(tmp->pinNum);
		}
	}*/

	//不退出,等待线程
	pthread_join(voiceThread,NULL);
	pthread_join(socketThread, NULL);

	
	return 0;}

               

上一篇:openstack私有云布署实践【5 数据库MariaDB 集群】


下一篇:python爬取网页图片(二)