diff --git a/entry/src/main/ets/utils/SerialPort.ets b/entry/src/main/ets/utils/SerialPort.ets index 1577112..c530a8c 100644 --- a/entry/src/main/ets/utils/SerialPort.ets +++ b/entry/src/main/ets/utils/SerialPort.ets @@ -3,6 +3,9 @@ import HiSerialSDK from '@ohos.hiserialsdk'; import { SerialPortTag } from '../config'; // 打开串口工具 +/* + * @param serialPort 串口名称 + */ export const OpenSerialPort = (serialPort: string) => { return new Promise((resolve, reject) => { testNapi.SerialOpenAsync(serialPort, (value: number) => { @@ -17,6 +20,11 @@ export const OpenSerialPort = (serialPort: string) => { } //初始化串口数据 +/* + * @param fd 串口文件描述符 + * @param speed 波特率 + * @returns Promise 成功返回true,失败返回false + */ export const InitSerialPortData = async (fd: number, speed: number) => { return new Promise((resolve, reject) => { @@ -35,6 +43,11 @@ export const InitSerialPortData = } //发送数据 +/* + * @param fd 串口文件描述符 + * @param data 要发送的数据数组 + * @returns Promise 成功返回发送的字节数,失败返回-1 + */ export const SendSerialPortData = (fd: number, data: number[]) => { console.log(SerialPortTag, "wzj-----发送数据") return new Promise((resolve, reject) => { @@ -49,6 +62,11 @@ export const SendSerialPortData = (fd: number, data: number[]) => { } // 接受数据 +/* + * @param fd 串口文件描述符 + * @param timeout 超时时间,单位毫秒 + * @returns Promise 成功返回接收到的数据,失败返回-1 + */ export const ReceiveSerialPortData = (fd: number, timeout: number,) => { console.log(SerialPortTag, "wzj-----接受数据") return new Promise((resolve) => { diff --git a/entry/src/main/ets/utils/business/SerialPortService.ets b/entry/src/main/ets/utils/business/SerialPortService.ets new file mode 100644 index 0000000..ef34d1b --- /dev/null +++ b/entry/src/main/ets/utils/business/SerialPortService.ets @@ -0,0 +1,72 @@ +// 串口业务逻辑 + +import { + CancelReceiveSerialPortData, + InitSerialPortData, + OpenSerialPort, + ReceiveSerialPortDataBySelf +} from '../SerialPort'; +import Prompt from '@system.prompt'; +import { SerialPortTag } from '../../config'; + +class serialPortService { + private fd: number = -1 + private serialPort: string = "/dev/ttyS3" + // 波特率 + private baudRate: string = "115200" + private events: Array = [] + // 尝试次数 + private tryCount: number = 0 + + async init() { + const res = await OpenSerialPort(this.serialPort) + if (res === -1) { + Prompt.showToast({ + message: "串口打开失败" + }) + // 失败了重试,最大次数为5次 + this.tryCount++; + if (this.tryCount < 5) { + console.log(SerialPortTag, "串口打开失败,尝试第", this.tryCount, "次重试") + setTimeout(() => { + this.init(); + }, 1000); + return; + } else { + console.error(SerialPortTag, "串口打开失败,重试次数已达上限") + return; + } + } else { + this.fd = res; + } + } + + async canInit() { + if (this.fd !== -1) { + await InitSerialPortData(this.fd, Number(this.baudRate)) + ReceiveSerialPortDataBySelf(this.fd, (res1: number, res2: number, res3: number[]) => { + this.events.forEach((callback) => { + callback(res3); + }); + }) + } + } + + onMsg(callback: Function) { + if (this.events.indexOf(callback) === -1) { + this.events.push(callback); + } + } + + async closed() { + const res = await CancelReceiveSerialPortData(this.fd); + this.events = []; + if (res) { + console.log(SerialPortTag, "串口关闭成功") + } else { + console.error(SerialPortTag, "串口关闭失败") + } + } +} + +export const SerialPortService = new serialPortService(); \ No newline at end of file