【智能家居】6、语音控制及网络控制代码实现

一、语音控制

1、指令结构体编写

【智能家居】6、语音控制及网络控制代码实现_第1张图片

这个结构体定义了一个命令输入的模型。在这个模型中,包含以下几个部分:

  • cmdName:一个长度为128的字符串,用于存储命令名称。
  • dvicesName:一个长度为128的字符串,用于存储设备名称。
  • cmd:一个长度为32的字符串,用于存储具体的命令。
  • Init:一个函数指针,该函数接受三个参数:指向InputCmd结构体实例的指针(可以读取所有字段)、IP地址和端口号,并返回一个整数值。
  • getCmd:一个函数指针,该函数接受一个参指向InputCmd结构体实例的指针(可以读取所有字段)并返回一个整数值。
  • log:一个长度为1024的字符数组,用于存储日志信息。
  • fd:一个整数,文件描述符。
  • next:一个指向结构体本身的指针,用于操控链表。

imputCmd.h

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

struct InputCmd{
	char cmdName[128];
	char devicesName[128];
	char cmd[32];
	int (*Init)(struct InputCmd *cmd,char *ipAdress,char *port);
	int (*getCmd)(struct InputCmd *cdm);
	char *log[1024];
	int fd;
	char port[12];
	char ipAddress[32];
	int s_fd;
	struct InputCmd *next;
};

2、实例化对象

(1)结构体变量初始化

【智能家居】6、语音控制及网络控制代码实现_第2张图片

一个结构体变量初始化的例子,声明并初始化了一个`InputCmd`类型的变量`voice`,并将每个字段分别赋值。

  • cmdName字段被赋值为字符串"voice"。
  • devicesName字段被赋值为字符串"/dev/ttyAMA0"。
  • cmd字段被赋值为空字符串。
  • init字段被赋值为`voice_init`函数的地址。
  • getCmd字段被赋值为`voice_getCmd`函数的地址。
  • log字段被赋值为空字符串。

(2)对应字段函数编写

初始化串口,获取文件描述符

【智能家居】6、语音控制及网络控制代码实现_第3张图片

fd=serialOpen(voice->devicesName,9600)它将尝试以9600波特率打开名为 voice->devicesName 的串行端口,并将返回的文件描述符(File Descriptor)赋值给变量 fd。这里的 voice->devicesName 是指向一个字符串的指针,该字符串包含要打开的串行端口的名称或路径。例如,在Linux系统上,这可能是类似于 "/dev/ttyS0" 或 "/dev/ttyUSB0" 的设备文件路径。

9600 是波特率,它决定了数据传输的速度,表示每秒传输9600个数据位。如果 serialOpen 函数成功打开串行端口,它将返回一个非负整数。如果打开失败,函数通常会返回 -1

读取指令

【智能家居】6、语音控制及网络控制代码实现_第4张图片

voicer->fd指向的串行端口读取数据,并将这些数据存储在voicer->command缓冲区中。

插入链表等待被调用

【智能家居】6、语音控制及网络控制代码实现_第5张图片

你可能感兴趣的:(智能家居)