一、语音控制
1、指令结构体编写
这个结构体定义了一个命令输入的模型。在这个模型中,包含以下几个部分:
- cmdName:一个长度为128的字符串,用于存储命令名称。
- dvicesName:一个长度为128的字符串,用于存储设备名称。
- cmd:一个长度为32的字符串,用于存储具体的命令。
- Init:一个函数指针,该函数接受三个参数:指向
InputCmd
结构体实例的指针(可以读取所有字段)、IP地址和端口号,并返回一个整数值。 - getCmd:一个函数指针,该函数接受一个参指向
InputCmd
结构体实例的指针(可以读取所有字段)并返回一个整数值。 - log:一个长度为1024的字符数组,用于存储日志信息。
- fd:一个整数,文件描述符。
- next:一个指向结构体本身的指针,用于操控链表。
imputCmd.h
#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
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)结构体变量初始化
一个结构体变量初始化的例子,声明并初始化了一个`InputCmd`类型的变量`voice`,并将每个字段分别赋值。
- cmdName字段被赋值为字符串"voice"。
- devicesName字段被赋值为字符串"/dev/ttyAMA0"。
- cmd字段被赋值为空字符串。
- init字段被赋值为`voice_init`函数的地址。
- getCmd字段被赋值为`voice_getCmd`函数的地址。
- log字段被赋值为空字符串。
(2)对应字段函数编写
初始化串口,获取文件描述符
fd=serialOpen(voice->devicesName,9600)
它将尝试以9600波特率打开名为 voice->devicesName
的串行端口,并将返回的文件描述符(File Descriptor)赋值给变量 fd
。这里的 voice->devicesName
是指向一个字符串的指针,该字符串包含要打开的串行端口的名称或路径。例如,在Linux系统上,这可能是类似于 "/dev/ttyS0" 或 "/dev/ttyUSB0" 的设备文件路径。
9600
是波特率,它决定了数据传输的速度,表示每秒传输9600个数据位。如果 serialOpen
函数成功打开串行端口,它将返回一个非负整数。如果打开失败,函数通常会返回 -1
。
读取指令
从voicer->fd
指向的串行端口读取数据,并将这些数据存储在voicer->command
缓冲区中。
插入链表等待被调用