【智能家居】5、主流程设计以及外设框架编写

 一、主流程设计

#include <stdio.h>

int main(){

	//指令工厂初始化

	//控制外设工厂初始化

	//线程池
	
	return 0;
}

1、工厂模式结构体定义

 (1)指令工厂 inputCmd.h

struct InputCmd{
	char cmdName[128];//指令名称
	char cmd[32];//指令

	int (*Init)(char *name,char *ipAdresschar *port);//初始化函数
	int (*getCmd)(char *cmd);//获取指令函数
	char *log[1024];//日志

	struct InputCmd *next;
}

定义一个名为 `InputCmd` 的结构体,包含以下成员:

  1. char cmdName[128]:一个长度为128的字符数组,用于存储指令名称。
  2. char cmd[32]:一个长度为32的字符数组,用于存储指令。
  3. int (*Init)(char *name, char *ipAdress, char *port):一个初始化相关指令操作的函数指针,它指向一个返回值为整型,接受三个字符指针类型的参数(名称、IP地址、端口号)的函数。
  4. int (*getCmd)(char *cmd):一个用于获取指令的函数指针,它指向一个返回值为整型,接受一个字符指针类型的参数(指令)的函数。
  5. char *log[1024]:一个长度为1024的字符指针数组,用于存储日志信息。
  6. struct InputCmd *next:一个指向 `struct InputCmd` 类型的指针,用于链表的连接。

(2)外设工厂 controlDevices.h

struct Devices{
	char devicesName[128];//设备名称
	int status;//状态:开&关
	
	int (*open)();//打开设备
	int (*close)();//关闭设备
	int (*devicesInit)();//设备初始化
	int (*readStatus)();//读取设备状态
	int (*changeStatus)(int status);//改变设备状态

	struct Devices *next;
}

定义一个名为 `Devices` 的结构体,包含以下成员:

  1. char devicesName[128]:一个长度为128的字符数组,用于存储设备名称。
  2. int status:一个整型变量,用于存储设备的状态(如开/关等)。
  3. int (*open)():一个用于打开相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
  4. int (*close)():一个用于关闭相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
  5. int (*devicesInit)():一个用于初始化相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
  6. int (*readStatus)():一个用于读取设备当前状态的函数指针,它指向一个返回值为整型、无参数的函数。
  7. int (*changeStatus)(int status):一个用于更改设备状态的函数指针,它指向一个返回值为整型,接受一个字符指针类型的参数(设备状态)的函数。
  8. struct Devices *next:一个指向 `struct Devices` 类型的指针,通常链表的连接。

二、外设框架编写

以浴室灯模块为例

bathroomLight.c

1、创建外设工厂对象bathroomLight

struct Devices BathroomLight{
	.name="bathroomLight",
	.open=bathroomLight_open,
	.close=bathroomLight_close,
	.devicesInit=bathroomLight_init,
	.changeStatus=bathroomLight_status
}

2、编写相关函数框架


int bathroomLight_open(){
	

}

int bathroomLight_close(){

	
}

int bathroomLight_init(){
	
}

int bathroomLight_status(int status){

}

3、将浴室灯相关操作插入外设工厂链表等待被调用

sturct  Devices *addbathroomLightToDevicesLink(stuuct Devices *phead){
	if(phead==NULL){
		ruturn &bathroomLight;
	}else{
		bathroomLight.next=phead;
		phead=&bathroomLight;
		}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/156591.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决margin-top导致的塌陷

什么是margin-top塌陷 若要使子元素距离父元素顶部有一定距离&#xff0c;如果只给子元素设置margin-top属性&#xff0c;结果发现父元素顶部出现位移&#xff0c;子元素相对父元素没位移&#xff0c;这就是margin-top导致的塌陷。 .fatherplus{width: 600px;height: 600px;b…

筋膜炎怎么治疗才能除根

筋膜炎的引起原因&#xff0c;常见的有以下几种&#xff1a; 1.职业因素。经常牵拉某些肌肉容易导致肌肉出现劳损&#xff0c;如司机、教师、运动员等&#xff0c;发生筋膜炎的几率会明显比正常人要高。 2.疾病因素。例如扁平足、糖尿病的人群&#xff0c;发生足底筋膜炎的几…

为了 Vue 组件测试,你需要为每个事件绑定的方法加上括号吗?

本文由华为云体验技术团队松塔同学分享 先说结论&#xff0c;当然不是&#xff01;Vue 组件测试&#xff0c;尤其是组件触发事件的测试&#xff0c;有成熟的示例。我们同样要关注测试的原则&#xff0c;例如将组件当成黑盒&#xff0c;不关心其内部实现&#xff0c;而只关心与其…

java集合,栈

只有栈是类 列表是个接口 栈是个类 队列 接口有双链表,优先队列(堆) add会报错 offer是一个满了不会报错 set集合 有两个类实现了这个接口

剑指Offer || 105.岛屿的最大面积

题目 给定一个由 0 和 1 组成的非空二维数组 grid &#xff0c;用来表示海洋岛屿地图。 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#x…

div中一个div怎么在高度上居中,小div在大div的高度的中间

实现效果: 让这个去分享在高度上的居中 答案: 直接设置 margin:auto;

Draco Win10编译

1. 工具 CMake 3.2.8&#xff0c;Visual Studio 2019 2. 步骤 2.1 拷贝代码 git clone https://github.com/google/draco.gitgit clone https://github.com/google/draco.git 下载第三方依赖 git submodule sync git submodule update --init --recursive 2.2 CMake编译…

Linux Shell脚本的10个有用的“面试问题和解答”

Shell 是什么&#xff1f; 在 Linux 中&#xff0c;Shell 是一个应用程序 &#xff0c;它是用户与 Linux 内核沟通的桥梁。 它负责接收用户输入的命令&#xff0c;根据用户的输入找到其他程序并运行&#xff0c;Shell负责将应用层或者用户输入的命令传递给系统内核&#xff0…

《全程软件测试 第三版》拆书笔记

第一章 对软件测试的全面认识&#xff0c;测试不能是穷尽的 软件测试的作用&#xff1a; 1.产品质量评估&#xff1b;2.持续质量反馈&#xff1b;3.客户满意度提升&#xff1b;4.缺陷的预防 正反思维&#xff1a;正向思维&#xff08;广度&#xff0c;良好覆盖面&#xff09;逆…

利用IP地址查询优化保险理赔与业务风控的实用方法

随着数字化时代的到来&#xff0c;保险行业正逐渐采用先进的技术来改善理赔流程和强化业务风控。其中&#xff0c;通过IP地址查询成为一种有效的手段&#xff0c;为保险公司提供更精准的信息&#xff0c;以便更好地管理风险和提高服务效率。本文将探讨如何利用IP地址查询优化保…

AD教程 (十七)3D模型的创建和导入

AD教程 &#xff08;十七&#xff09;3D模型的创建和导入 对于设计者来讲&#xff0c;现在3DPCB比较流行&#xff0c;3DPCB&#xff0c;除了美观之外&#xff0c;做3D的最终的一个目的&#xff0c;是为了去核对结构&#xff0c;就是我们去做了这么一个PCB之后&#xff0c;如果说…

外汇天眼:什么是非农?非农数据对外汇市场的重要性!

非农数据在外汇市场中扮演着何等关键的角色&#xff1f; 美国非农数据&#xff0c;简称“非农”&#xff0c;具体指排除农业部门、个体户和非盈利机构雇员后的就业相关数据&#xff0c;是反映美国经济实际就业和整体经济状况的关键指标。该数据由美国劳工部劳动统计局每月发布…

GZ038 物联网应用开发赛题第9套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 &#xff08;第9套卷&#xff09; 工位号&#xff1a;______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具&#xff0c;操作安全规范&#xff1b; 2、竞赛过程中如有异议&#xff0c;可向现场考评…

深度学习实战60-基于深度学习模型搭建人脸识别系统,用最简单的方式实现人脸识别。

大家好,我是微学AI,今天给大家介绍一下深度学习实战60-基于深度学习模型搭建人脸识别系统,用最简单的方式实现人脸识别。本项目是一个基于人脸识别技术的应用项目。它旨在构建一个可靠、高效的人脸识别系统,以应用于安全、身份验证和人员管理等领域。项目的核心原理包括人脸…

二叉树题目:统计二叉树中好结点的数目

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;统计二叉树中好结点的数目 出处&#xff1a;1448. 统计二叉树中好结点的数目 难度 5 级 题目描述 要求 给定一…

【AI编程助手】Devchat解析:深入了解、快速配置与实际应用

AI编程助手已经成为现代软件开发的重要工具之一。本文将深入探讨Devchat这一AI编程助手&#xff0c;包括其工作原理、快速配置以及实际应用案例。了解Devchat&#xff0c;将使开发人员更高效地编写和优化代码&#xff0c;提升软件开发过程的质量和速度。 引言 人工智能的迅速发…

【LeetCode刷题-滑动窗口】--159.至多包含两个不同字符的最长子串

159.至多包含两个不同字符的最长子串 方法&#xff1a;滑动窗口 定义两个指针left和right作为窗口的边界&#xff0c;将两个指针都设定在位置0&#xff0c;然后向右移动right指针&#xff0c;直到窗口内不超过两个不同的字符&#xff0c;如果某一点我们得到了3个不同的字符&am…

中文撰稿好用软件推荐TexPage(似于Overleaf)

由于本人用惯了overleaf所以找到了一个与他功相似的也同样是利用tex写文章。唯一的区别可能也就是overleaf只支持英文&#xff0c;而TexPage中英文都支持。关键是不花钱&#xff0c;好用好用好用&#xff0c;用起来&#xff01; 平台网址&#xff1a;https://www.texpage.com/…

git撤销未git commit的文件

目录 一、问题描述 二、方式1&#xff1a;git命令撤销&#xff08;更专业&#xff09; 1、文件已git add&#xff0c;未git commit 2、本地修改&#xff0c;未git add &#xff08;1&#xff09;撤销处于unstage的文件&#xff0c;即删除已有变动 &#xff08;2&#xff…

全套完整版实战型Java云HIS系统源码

一、云HIS系统框架简介 1、技术框架 &#xff08;1&#xff09;总体框架&#xff1a; SaaS应用&#xff0c;全浏览器访问 前后端分离&#xff0c;多服务协同 服务可拆分&#xff0c;功能易扩展 &#xff08;2&#xff09;技术细节&#xff1a; 前端&#xff1a;AngularN…
最新文章