UNPKG

@iot9x.com/ipc-utils

Version:

九星云、九星小程序、九星配置工具所共用的库方法

260 lines (259 loc) 8.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JL800 = void 0; const constant_1 = require("./constant"); const util_1 = require("./util"); /** * 播放完毕应答处理逻辑 * @author 张冰 2024-12-20 * @param data 数据内容 * @returns 播放文件信息 */ const playEndResResolve = (data) => { return { fileNumber: data[1], }; }; /** * 应答错误编码处理逻辑 * @author 张冰 2024-12-20 * @param data 数据内容 * @returns 错误信息 */ const errResResolve = (data) => data[1]; /** 串口应答解析处理映射关系 */ const resolveMap = new Map([ [constant_1.JL800_CMD_CODE.ResPlayEnd, playEndResResolve], [constant_1.JL800_CMD_CODE.ResErr, errResResolve], ]); class JL800 { //#region 控制指令部分 /** * 生成下一曲指令 * @author 张冰 2024-12-19 * @returns 下一曲指令 */ static nextCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.Next); } /** * 生成上一曲指令 * @author 张冰 2024-12-19 * @returns 上一曲指令 */ static prevCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.Prev); } /** * 生成播放指定曲目指令 * @description 曲目不可超过255 * @author 张冰 2024-12-19 * @param fileNumber 文件编号 * @returns 播放指定曲目指令 */ static playByNumberCMD(fileNumber) { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.PlayByNumber, [fileNumber >> 8, fileNumber % 0xff]); } /** * 生成音量+指令 * @author 张冰 2024-12-19 * @returns 音量+指令 */ static volUpCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.VolUp); } /** * 生成音量-指令 * @author 张冰 2024-12-19 * @returns 音量-指令 */ static volDownCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.VolDown); } /** * 生成指定音量指令 * @description 音量取值范围:0-30 * @author 张冰 2024-12-19 * @param volume 音量值 * @param storage 是否保存音量 * @returns 指定音量指令 */ static volSetCMD(volume, storage = false) { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.VolSet, [storage ? 1 : 0, volume]); } /** * 生成播放指定曲目(单曲循环模式)指令 * @author 张冰 2024-12-19 * @param fileNumber 文件编号 * @returns 播放指定曲目(单曲循环模式)指令 */ static playByNumberRepeatCMD(fileNumber) { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.PlayByNumberRepeat, [fileNumber >> 8, fileNumber % 0xff]); } /** * 生成设置串口波特率指令 * @author 张冰 2024-12-19 * @returns 设置串口波特率指令 */ static setBaudrateCMD(baudrate) { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.SetBaudrate, [baudrate >> 8, baudrate % 0xff]); } /** * 生成芯片复位(重启)指令 * @author 张冰 2024-12-19 * @returns 芯片复位(重启)指令 */ static rebootCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.Reboot); } /** * 生成播放指令 * @author 张冰 2024-12-19 * @returns 播放指令 */ static playCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.Play); } /** * 生成暂停指令 * @author 张冰 2024-12-19 * @returns 暂停指令 */ static pauseCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.Pause); } /** * 生成全部循环播放指令 * @author 张冰 2024-12-19 * @returns 全部循环播放指令 */ static repeatAllCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.RepeatAll); } /** * 生成停止指令 * @author 张冰 2024-12-19 * @returns 停止指令 */ static stopCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.Stop); } /** * 生成全部随机播放指令 * @author 张冰 2024-12-19 * @returns 全部随机播放指令 */ static randomAllCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.RandomAll); } /** * 生成当前播放的曲目设置为循环播放指令,要在播放时发送才有效! * @author 张冰 2024-12-19 * @returns 当前播放的曲目设置为循环播放指令 */ static repeatCurrentCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.RepeatCurrent); } /** * 生成组合播放指令 * @description 曲目不可超过255 * @author 张冰 2024-12-19 * @param fileNumberList 文件编号列表 * @returns 组合播放指令 */ static playCombineCMD(fileNumberList) { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.PlayCombine, fileNumberList); } /** * 生成恢复出厂设置指令 * @author 张冰 2024-12-19 * @returns 恢复出厂设置指令 */ static defaultFactoryCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.DefaultFactory); } //#endregion //#region 查询指令部分 /** * 生成查询当前状态(音频播放状态)指令 * @author 张冰 2024-12-20 * @returns 查询当前状态指令 */ static getStatusCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.GetStatus); } /** * 生成查询当前音量指令 * @author 张冰 2024-12-20 * @returns 查询当前音量指令 */ static getVolCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.GetVol); } /** * 生成查询软件版本指令 * @author 张冰 2024-12-20 * @returns 查询软件版本指令 */ static getVersionCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.GetVersion); } /** * 生成查询内置的 spi flash 总文件数指令 * @author 张冰 2024-12-20 * @returns 查询内置的 spi flash 总文件数指令 */ static getSpiFlashFileCountCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.GetSpiFlashFileCount); } /** * 生成查询当前设备的文件总数指令 * @author 张冰 2024-12-20 * @returns 查询当前设备的文件总数指令 */ static getFileCountCMD() { return util_1.Util.generateCMD(constant_1.JL800_CMD_CODE.GetFileCount); } //#endregion //#region 指令解析部分 /** * 应答指令解析 * @description 注意这里有粘包的处理逻辑!!!因此返回的是一个数组 * @author 张冰 2024-12-20 * @param payload 应答内容 * @returns 应答指令解析结果 */ static resolve(payload) { const result = []; // Step1. 根据首位字符分割出命令列表 const cmd_list = []; let i = 0; for (const value of payload) { if (value == constant_1.PAYLOAD_START_CODE) { cmd_list[i] = []; } else if (value == constant_1.PAYLOAD_END_CODE) { i++; } else { if (cmd_list[i] instanceof Array) cmd_list[i].push(value); } } // Step2. 命令列表解析 for (const cmd of cmd_list) { const cmd_code = cmd[0]; if (cmd_code == constant_1.JL800_CMD_CODE.ResShakeHand) { result.push({ code: cmd_code }); } else if (resolveMap.has(cmd_code)) { result.push({ code: cmd_code, data: resolveMap.get(cmd_code)(new Uint8Array(cmd.slice(3))), }); } } return result; } } exports.JL800 = JL800;