@iot9x.com/ipc-utils
Version:
九星云、九星小程序、九星配置工具所共用的库方法
260 lines (259 loc) • 8.11 kB
JavaScript
;
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;