123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- // 工作模式
- // 默认工作模式
- // #define LIGHT_MODE_DEFAULT 0
- // 全亮模式(色温无效)
- // #define LIGHT_MODE_FULL 1
- // // 灯光控制命令起始码
- // typedef enum {
- // // 下发命令
- // START_CODE_CMD = 0x6c,
- // // 响应命令
- // START_CODE_RES = 0xc6,
- // // 通知命令
- // START_CODE_NOTIFY = 0x66
- // }light_cmd_start_code;
- // // 灯光控制命令码
- // typedef enum{
- // CMD_OPEN = 0x01,
- // CMD_CLOSE = 0x02,
- // CMD_QUERY = 0x03,
- // CMD_LIGTH = 0x04,
- // CMD_TEMP = 0x05,
- // CMD_FUN = 0x06,
- // CMD_MODE = 0x07,
- // CMD_CH = 0x08,
- // CMD_HZ = 0x09,
- // }light_cmd_code;
- // // 灯光数据 色温, 亮度, 工作模式, 风扇
- // typedef struct {
- // bool open;
- // int temp;
- // int light;
- // int mode;
- // int fan;
- // } light_data_t;
- // 命令结构体
- // typedef struct {
- // light_cmd_start_code startCode;
- // uint8_t len;
- // light_cmd_code cmd;
- // uint8_t sn;
- // uint8_t *data;
- // } light_cmd_t;
- import { hex2ab, buf2hex, dec2hex, hexStr2Arr } from './mjs_buffer.js'
- export const light_cmd_start_code = {
- START_CODE_CMD: 0x6c,
- START_CODE_RES: 0xc6,
- START_CODE_NOTIFY: 0x66
- }
- export const light_cmd_code = {
- CMD_OPEN: 0x01,
- CMD_CLOSE: 0x02,
- CMD_QUERY: 0x03,
- CMD_LIGTH: 0x04,
- CMD_TEMP: 0x05,
- CMD_FAN: 0x06,
- CMD_MODE: 0x07,
- CMD_CH: 0x08,
- CMD_HZ: 0x09,
- }
- export const light_worker_mode = {
- DEFAULT: 0,
- FULL: 1
- }
- const CMD_ACTION = {
- }
- /**
- * 数据结构体
- * @param {number} cmd 命令码
- * @param {number} sn 序列号
- * 发送时间
- */
- const cmdList = []
- // 解析命令码
- export function parseCmdData(data){
- // 数据分割为 hex字符串数组
- let hexArr = [];
- if(!data){
- return -1;
- }
- hexArr = hexStr2Arr(data);
- // 起始码
- let startCode = parseInt(hexArr[0], 16);
- // 长度
- let len = parseInt(hexArr[1], 16);
- // 命令码
- let cmd = parseInt(hexArr[2], 16);
- // 序列号
- let sn = parseInt(hexArr[3], 16);
- let cmdData = hexArr.slice(4);
- switch (cmd) {
- case light_cmd_code.CMD_OPEN:
- console.log("开灯");
- break;
- case light_cmd_code.CMD_CLOSE:
- console.log("关灯");
- break;
- case light_cmd_code.CMD_QUERY:
- console.log("查询");
- break;
- case light_cmd_code.CMD_LIGTH:
- console.log("设置亮度");
- break;
- case light_cmd_code.CMD_TEMP:
- console.log("设置色温");
- break;
- case light_cmd_code.CMD_FAN:
- console.log("设置风扇");
- break;
- case light_cmd_code.CMD_MODE:
- console.log("设置模式");
- break;
- case light_cmd_code.CMD_CH:
- console.log("设置通道");
- break;
- case light_cmd_code.CMD_HZ:
- console.log("设置频率");
- break;
- default:
- break;
- }
- // 触发对应的监听函数
- if(CMD_ACTION[cmd]){
- CMD_ACTION[cmd] && CMD_ACTION[cmd](cmdData);
- }else{
- console.log(`未找到命令${cmd}对应的监听函数`);
- }
-
- // 移除命令
- let index = cmdList.findIndex(item=>item.sn == sn);
- if(index > -1){
- cmdList.splice(index, 1);
- }
- // 返回数据
- return {
- startCode,
- len,
- cmd,
- sn,
- cmdData
- }
- }
- /**
- * 命令构建
- * @param {function} sendFn 发送函数,从外部传入
- * @param {*} cmd 对应命令
- * @param {*} data hex数据字符串
- */
- export function generateCmdData(cmd, data){
- let cmdStr = ``;
- let cmdLen = data? data.length : 0;
- let sn = cmdList.length + 1;
- // 拼接起始码
- cmdStr += dec2hex(light_cmd_start_code.START_CODE_CMD);
- // 拼接长度 转hex
- cmdStr += dec2hex(cmdLen + 2);
- // 拼接命令码
- cmdStr += dec2hex(cmd);
- // 拼接序列号
- cmdStr += dec2hex(sn);
- // 拼接数据
- if(data) cmdStr += data;
- // 记录命令
- cmdList.push({
- cmd,
- sn,
- })
- return cmdStr;
- }
- /**
- * 开灯
- * @param {function} sendFn 发送函数,从外部传入
- * @returns
- */
- export function open_light(){
- console.log('开灯');
- let data = generateCmdData(light_cmd_code.CMD_OPEN);
- return data;
- }
- /**
- * 关灯
- * @param {function} sendFn 发送函数,从外部传入
- * @returns
- */
- export function close_light(){
- let data = generateCmdData(light_cmd_code.CMD_CLOSE);
- return data;
- }
- /**
- * 查询灯光状态
- * @param {function} sendFn 发送函数,从外部传入
- * @returns
- */
- export function query_light(){
- let data = generateCmdData(light_cmd_code.CMD_QUERY);
- return data;
- }
- /**
- * 设置灯光
- * @param {function} sendFn 发送函数,从外部传入
- * @param {number} light 亮度
- * @returns
- */
- export function set_light( light){
- console.log("亮度调节");
- let data = generateCmdData(light_cmd_code.CMD_LIGTH, dec2hex(light));
- console.log(data);
- return data;
- }
- /**
- * 设置色温
- * @param {function} sendFn 发送函数,从外部传入
- * @param {number} temp 色温
- * @returns
- */
- export function set_temp( temp){
- let data = generateCmdData(light_cmd_code.CMD_TEMP, dec2hex(temp));
- return data;
- }
- /**
- * 调整风扇转速
- * @param {function} sendFn 发送函数,从外部传入
- * @param {number} fun 功能
- * @returns
- */
- export function set_fun( fanSpeed){
- let data = generateCmdData(light_cmd_code.CMD_FAN, dec2hex(fanSpeed));
- return data;
- }
- /**
- * 设置工作模式
- * @param {function} sendFn 发送函数,从外部传入
- * @param {number} mode 模式
- * @returns
- */
- export function set_mode( mode){
- let data = generateCmdData(light_cmd_code.CMD_MODE, dec2hex(mode));
- return data;
- }
- export function registerHandle(cmd, handle){
- CMD_ACTION[cmd] = handle;
- }
- export default {
- light_worker_mode,
- light_cmd_start_code,
- light_cmd_code,
- parseCmdData,
- generateCmdData,
- open_light,
- close_light,
- query_light,
- set_light,
- set_temp,
- set_fun,
- set_mode,
- registerHandle
- }
|