基于ARM的智能灯光控制系统(4)数据结构

嵌入式开发培训(阶段2)底层系统开发 视频地址
智能灯光控制系统 视频地址

主控后台服务程序

daemon.c

程序功能模块

#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;

系统初始化函数

Created with Raphaël 2.1.0加载配置文件 初始化设备链表打印设备列表信息
int init_sys(void)
{   int i;  printf("init system ...\n");load_dev(g_dev);//初始化g_devhead_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;
}

系统数据结构头文件(config.h)

数据结构 说明
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

配置文件实现程序(config.c)

#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 filefclose(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;
}

基于ARM的智能灯光控制系统(4)数据结构相关推荐

  1. 基于ARM的智能灯光控制系统-----需求分析

    基于ARM的智能灯光控制系统-----需求分析 项目实践流程: 1.设计项目需求文档 说明项目设计目的,项目功能,项目模块,实现技术. 2.项目编码设计 程序要求模块结构化(函数),编码风格良好,多文 ...

  2. 基于ARM的智能灯光控制系统(1)项目介绍

    基于ARM的智能灯光控制系统(1)项目介绍 项目实践说明: 本实践项目是嵌入式开发培训(阶段2)底层系统开发视频课程的综合实践项目. 项目开发使用的技术知识点包括:C语言编程,文件编程,串口编程,网络 ...

  3. 基于ARM的智能灯光控制系统总结(3-主程序及全局数据结构)

    主程序包含了全局数据结构定义.系统配置文件生成或加载.建立四个独立线程并运行. 一.全局数据结构类型 封装每个设备的属性形成设备结构体类型(包含了:设备名.设备号.连接状态.开关状态.指向的下一个设备 ...

  4. 毕业/课程设计——基于STM32的智能灯光控制系统(物联网、智能家居、手机APP控制、语音控制)

    文章首先介绍本系统所包含的功能,主要包含六方面功能,之后逐步分享开发过程,其流程如下:点亮灯带(三极管)→调节灯光亮度(PWM)→为系统添加远程控制功能→为系统添加语音识别功能→添加超声波姿态监测功能 ...

  5. 基于arduino的校园灯光控制_基于51单片机智能灯光控制系统(人体感应)

    硬件组成: 由51单片机最小系统.红外热释电模块.光强度检测模块.继电器灯光控制模块和电源模块组成. 功能介绍: 1.单片机AT89S51.AT89S52.AT89C51.AT89C52.STC89C ...

  6. 基于单片机的智能路灯控制系统人体感应灯光控制系统的设计与实现

    功能介绍 以51单片机作为主控系统: LCD1602液晶显示当前时间.年月日.时分秒: 按键看看有设置自动手动模式: 3路红外探头用来感应当前3个区域是否有人: 按键可以设置当前时间.开启和关闭教室灯 ...

  7. 基于微信的智能家居控制系统的设计与实现

    基于微信的智能家居控制系统的设计与实现 目 录 1 绪论 6 1.1 课题研究的背景 6 1.2 智能家居系统的研究现状和发展前景 6 1.3 课题研究的意义 7 1.4 设计的研究内容 8 2 相关 ...

  8. 基于单片机的智能教室控制系统的设计

     word完整版可点击如下下载>>>>>>>> 基于单片机的智能教室控制系统的设计_c++课程设计题目汇总-硬件开发文档类资源-CSDN下载内容包括详细 ...

  9. 基于云计算的智能楼宇控制系统

    基于云计算的智能楼宇控制系统 本人原创文章,知网可见,转载表明原处 摘要:针对目前楼宇系统只有简单控制功能,不能对用户行为数据进行深入挖掘的普遍状况,提出了基于云计算的智能楼宇控制系统.该系统利用云服 ...

最新文章

  1. 3D神经接口系统可以感知和操纵“微型脑“
  2. 严定贵:互联网金融的速度与激情
  3. vue 监控元素宽度_Vue入门系列之Vue实例详解与生命周期
  4. php本地环境搭建软件下载,用EasyPHP本地搭建PHP环境的步骤分享
  5. P4199-万径人踪灭【FFT】
  6. 数据库基础知识——视图
  7. 2014 网选 5024 Wang Xifeng's Little Plot
  8. javascript专题汇总
  9. GitHub 在热门 Node.js changelog 开源库Standard Version中发现 RCE 漏洞
  10. 六、矩阵键盘的扫描原理与基本应用
  11. js每日一题(11)
  12. mysql 备份 发送邮件_mysql 自动备份发邮件 到指定邮箱
  13. 思科的服务器困局:投资增长,还是退出?
  14. 《机动车交通事故责任强制保险费率浮动暂行办法》媒体见面会实录
  15. 蓝桥杯练习-位平方和
  16. 计算机原理课设,计算机组成原理课设文档
  17. 2021上海最新购房政策指南!买房、贷款、限购究竟有哪些变化?
  18. 京东监控下单助手代码编写
  19. 微信支付—— 扫码支付
  20. KDB+ database

热门文章

  1. 用AkShare获取沪深京A股所有股票历史数据
  2. 华为认证HCIA-Datacom知识点
  3. Silver Efex Pro 2 for Mac(黑白处理调试滤镜)
  4. 创建git仓库(简易局域网版)
  5. 【计算机408--计算机学科专业基础】
  6. 842计算机基础考试大纲,(842)考试大纲-计算机专业基础.docx
  7. 解读百度权重是怎么计算的
  8. 12306从上海到湖南境内的终点站车次或从湖南境内始发到上海的车次
  9. 如何下载企业微信上课直播回放
  10. acm总结——多源BFS