程序功能模块
#include <pthread.h>
#include "config.h"
#include "sys_ipc.h"
#include "link_pro.h"
#include "dev_pro.h"
#include "net_pro.h"
#include "sw_pro.h"
全局数据的使用
struct sys_all g_dev[1]; //系统配置结构体全局变量
struct sys_dev *head_node=NULL; // 系统设备动态链表头指针
struct dev_fd g_dev_fd;//系统设备文件
int area_update_flag =0;
系统初始化函数
int init_sys(void)
{
int i;
printf("init system ...\n");
load_dev(g_dev);//初始化g_dev
head_node = stu_to_link(head_node);
dev_print(head_node);
return 0;
}
main函数
int main(int argc,char* argv[])
{
pthread_t pth_ipc,pth_dev,pth_sw,pth_net;
init_sys();
pthread_create(&pth_dev,NULL,dev_pro,NULL);
pthread_create(&pth_ipc,NULL,ipcs_pro,NULL);
pthread_create(&pth_sw,NULL,sw_pro,NULL);
pthread_create(&pth_net,NULL,net_pro,NULL);
pthread_join(pth_dev,NULL);
pthread_join(pth_ipc,NULL);
pthread_join(pth_sw,NULL);
pthread_join(pth_net,NULL);
return 0;
}
数据结构 | 说明 |
---|---|
sys_all | 全局使用,配置文件存储 |
sys_dev | 保存设备节点信息 |
sys_area | 保存系统设备的区域设备 |
dev_fd | 全局使用,保存对应设备文件描述符 |
#ifndef __SL2000_H_
#define __SL2000_H_
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#define CONFIG_FILE "sl2000.cfg"
#define ON 1
#define OFF 0
//消息队列接收时索引值
#define TEMP_SMG_INDEX_BASE 10
#define WEB_SMG_INDEX 2
#define WEB_UPDATE_SMG_INDEX 3
#define UPDATE_TIME_SMG_INDEX 4
//系统设置类型定义
#define DEV_T_MAIN 1 //主控
#define DEV_T_SUB 2 //分控
#define DEV_T_RAY 3 //光线感应
#define DEV_T_PIR 4 //人体感应
#define DEV_T_MIC 5 //声音感应
#define DEV_T_LIGHT1 6 //灯光(继电器)
#define DEV_T_LIGHT2 7 //灯光(继电器)
#define DEV_T_LIG_NET 8
#define MAX_DEV 8 //系统最大设备容量
#define MAX_NET 2
#define J1_OFF 0x00
#define J1_ON 0x01
#define J2_OFF 0x10
#define J2_ON 0x11
#define LIGHT_DEV "/dev/2451_light"
#define MIC_DEV "/dev/2451_mic"
#define PIR_DEV "/dev/2451_pir"
#define RELAY1_DEV "/dev/2451_relay1"
#define RELAY2_DEV "/dev/2451_relay2"
#define SEARCH_DEV "/dev/2451_search"
#define ID_BASE 1;
struct node_info{
int id; //设备编号
char ip[16]; //设备IP
char type; //设备类型
};
struct dev_fd{
int relay1_fd;
int relay2_fd;
int pir_fd;
int mic_fd;
int light_fd;
int net_fd[MAX_NET];
};
struct sys_dev{
char name[16]; //设备名
struct node_info node; //节点信息
char connect_sta; //连接状态
char join_sta; //是否加入系统
char sw_sta; //开关状态
int delay;
char bind_dev;
struct sys_dev* next;
};
struct sys_area{
char name[16];
char dev_id[MAX_DEV];
char sw_sta;
char enable_flag;
};
struct sys_all{
struct sys_dev sys_dev[MAX_DEV];//系统设备存储列表
struct sys_area sys_area[MAX_DEV];//区域列表
int net_user[MAX_NET];//网络节点
int count_dev;//连接设备计数
};
struct st_sys_time{
int yaer;
char month;
char day;
char hour;
char minute;
char second;
};
struct st_msg_req{
long int index;
char req;
};
int make_default_config(struct sys_all * dev);
int save_dev(struct sys_all * dev);
int load_dev(struct sys_all * dev);
#endif
#include <string.h>
#include <stdio.h>
#include "config.h"
int make_default_config(struct sys_all * dev)
{
int i;
printf("Make default configuration.\n");
memset(dev,0,sizeof(struct sys_all));
dev->count_dev=1;//系统初始化时只有一个主控设备
for(i=0;i<MAX_DEV;i++)
{
strcpy(dev->sys_dev[i].name,"未知设备-");
dev->sys_dev[i].node.id = 0;
dev->sys_dev[i].node.type = 0;
dev->sys_dev[i].connect_sta=OFF;//系统全部设备设置没有连接
dev->sys_dev[i].sw_sta=OFF;//系统全部设备关闭
dev->sys_dev[i].bind_dev=0;
dev->sys_dev[i].delay=0;
dev->sys_dev[i].next=NULL;
dev->sys_area[i].enable_flag=0;
}
dev->sys_dev[0].connect_sta = ON;//主控设备设置连接
strcpy(dev->sys_dev[0].name,"主控制器");
dev->sys_dev[0].join_sta = ON;
dev->sys_dev[0].node.id = ID_BASE;
dev->sys_dev[0].node.type = DEV_T_MAIN;
return save_dev(dev);
}
void print_all(struct sys_all * dev)
{
int i;
for(i=0;i<dev->count_dev;i++)
{
printf("#%d#name=%s,id=%d,type=%d,connect_sta=%d,sw_sta=%d,bind_dev=%d,
delya=%d\n",i+1,dev->sys_dev[i].name,dev->sys_dev[i].node.id,dev->sys_dev[i].node.type,
dev->sys_dev[i].connect_sta,dev->sys_dev[i].sw_sta,
dev->sys_dev[i].bind_dev,dev->sys_dev[i].delay);
}
for(i=0;i<MAX_DEV;i++)
{
printf("#%d#name=%s,flag=%d,sw_sta=%d,dev_id=%d\n",i+1,dev->sys_area[i].name,
dev->sys_area[i].enable_flag,dev->sys_area[i].sw_sta,dev->sys_area[i].dev_id[0]);
}
}
int save_dev(struct sys_all * dev)
{
FILE * fp;
if (NULL == (fp=fopen(CONFIG_FILE, "wb"))){
printf("Config file open null...\n");
return -1;
}
printf("\nSave system data!\n");
fwrite(dev, sizeof(*dev),1,fp); //write file
fclose(fp);
print_all(dev);
return 0;
}
int load_dev(struct sys_all * dev)
{
FILE * fp;
memset(dev, 0, sizeof(*dev));
if (NULL == (fp=fopen(CONFIG_FILE, "rb"))){
printf("[load_dev]fopen null....\n");
return make_default_config(dev);
}
if ( sizeof(*dev) != fread(dev,1,sizeof(*dev),fp) ){
printf("[load_dev+]sizeof error...\n");
fclose(fp);
return -1;
}
fclose(fp);
return 0;
}
Copyright © 2016 www.91arm.com 【91创客学堂】