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


     一、主流程设计

    1. #include
    2. int main(){
    3. //指令工厂初始化
    4. //控制外设工厂初始化
    5. //线程池
    6. return 0;
    7. }

    1、工厂模式结构体定义

     (1)指令工厂 inputCmd.h

    1. struct InputCmd{
    2. char cmdName[128];//指令名称
    3. char cmd[32];//指令
    4. int (*Init)(char *name,char *ipAdresschar *port);//初始化函数
    5. int (*getCmd)(char *cmd);//获取指令函数
    6. char *log[1024];//日志
    7. struct InputCmd *next;
    8. }

    定义一个名为 `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

    1. struct Devices{
    2. char devicesName[128];//设备名称
    3. int status;//状态:开&关
    4. int (*open)();//打开设备
    5. int (*close)();//关闭设备
    6. int (*devicesInit)();//设备初始化
    7. int (*readStatus)();//读取设备状态
    8. int (*changeStatus)(int status);//改变设备状态
    9. struct Devices *next;
    10. }

    定义一个名为 `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

    1. struct Devices BathroomLight{
    2. .name="bathroomLight",
    3. .open=bathroomLight_open,
    4. .close=bathroomLight_close,
    5. .devicesInit=bathroomLight_init,
    6. .changeStatus=bathroomLight_status
    7. }

    2、编写相关函数框架

    1. int bathroomLight_open(){
    2. }
    3. int bathroomLight_close(){
    4. }
    5. int bathroomLight_init(){
    6. }
    7. int bathroomLight_status(int status){
    8. }

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

    1. sturct Devices *addbathroomLightToDevicesLink(stuuct Devices *phead){
    2. if(phead==NULL){
    3. ruturn &bathroomLight;
    4. }else{
    5. bathroomLight.next=phead;
    6. phead=&bathroomLight;
    7. }
    8. }

  • 相关阅读:
    重塑感知,荣耀金洋!金洋奖两项用户体验奖项公布
    制造企业如何使用APS高级排产做好数据资产管理?
    Matlab(数值微积分)
    RK3568开发笔记-SATA接口调试
    vscode快捷键
    N点标定-坐标系变换
    数据结构与算法课后题-第六章(图的存储及基本操作)
    CSS3 grid 网格/栅格布局
    PAE-PEG-HSA 聚(β-氨基酯)-聚乙二醇-人血清白蛋白,BSA/OVA修饰聚(β-氨基酯)
    java基础——泛型
  • 原文地址:https://blog.csdn.net/weixin_53062144/article/details/134459377