Commit 7bedd67c authored by Skye Yu's avatar Skye Yu

feat: send schedule info

parent 8fb2ee8b
import { Jensen as Jen } from './src/jensen';
import { Logger } from './src/utils/utils';
import { Jensen as Jen } from "./src/jensen";
import { Logger } from "./src/utils/utils";
export type DeviceInfo = {
sn: string;
versionNumber: number;
versionCode: string;
sn: string;
versionNumber: number;
versionCode: string;
};
export type ReturnStruct = {
common: { result: 'failed' | 'success' };
common: { result: "failed" | "success" };
};
export type FileInfo = {
name: string;
createDate: string;
createTime: string;
time: Date;
duration: number;
length: number;
signature: string;
name: string;
createDate: string;
createTime: string;
time: Date;
duration: number;
length: number;
signature: string;
};
export type ScheduleInfo = {
startDate: Date;
endDate: Date;
keyAnswer?: string;
keyHangup?: string;
keyReject?: string;
keyMicMute?: string;
};
declare class JensenType {
constructor(log?: typeof Logger)
onconnect: Function;
onmessage: (data: any) => void | null;
connect: () => Promise<void>;
init: () => Promise<boolean>;
getDeviceInfo: (time?: number) => Promise<DeviceInfo>;
listFiles: (time?: number) => Promise<FileInfo[]>;
tryconnect: (disableOnConnect?:boolean) => Promise<boolean>;
getFile: (
fileName: string,
length: number,
on?: (msg: Uint8Array | 'fail') => void,
onprogress?: (size: number) => void
) => void;
getFileBlock: (
fileName: string,
length: number,
on?: (msg: Uint8Array | 'fail') => void
) => Promise<ReturnStruct['common']>;
requestFirmwareUpgrade: (
vn: number,
length: number,
time?: number
) => Promise<{
result: 'accepted' | 'fail';
}>;
beginBNC: (time?: number) => Promise<ReturnStruct['common']>;
endBNC: (time?: number) => Promise<ReturnStruct['common']>;
setTime: (date: Date, timeout?: number) => Promise<ReturnStruct['common']>;
deleteFile: (fileName: string) => Promise<{ result: string }>;
uploadFirmware: (
data: number[],
seconds?: number,
onProgress?: (cur: number, total: number) => void
) => Promise<ReturnStruct['common']>;
getTime: (time?: number) => Promise<{
time: string;
}>;
getSettings: (
time?: number
) => Promise<{ autoRecord: boolean; autoPlay: boolean; notification?: boolean } | null>;
setAutoRecord: (enable: boolean, time?: number) => Promise<ReturnStruct['common']>;
setAutoPlay: (enable: boolean, time?: number) => Promise<ReturnStruct['common']>;
isConnected: () => boolean;
setNotification: (state: boolean, time?: number) => Promise<ReturnStruct['common']>;
ondisconnect?: Function;
isStopConnectionCheck: boolean;
getRecordingFile: () => Promise<{
recording: null | string;
createTime: string;
createDate: string;
}>;
getCardInfo: (
seconds?: number
) => Promise<{ used: number; capacity: number; status: string }>;
formatCard: (seconds?: number) => Promise<ReturnStruct['common']>;
factoryReset: (seconds?: number) => Promise<ReturnStruct['common']>;
restoreFactorySettings: (seconds?: number) => Promise<ReturnStruct['common']>;
getModel: () => string;
getFileCount: (seconds?: number) => Promise<{ count: number } | null>;
recordTestStart: (type: number, seconds?: number) => Promise<ReturnStruct['common']>;
recordTestEnd: (type: number, seconds?: number) => Promise<ReturnStruct['common']>;
test: (seconds?: number) => Promise<ReturnStruct['common']>;
setBluetoothPromptPlay: (
state: boolean,
seconds?: number
) => Promise<ReturnStruct['common']>;
writeSerialNumber: (sn: string) => Promise<ReturnStruct['common']>
constructor(log?: typeof Logger);
onconnect: Function;
onmessage: (data: any) => void | null;
connect: () => Promise<void>;
init: () => Promise<boolean>;
getDeviceInfo: (time?: number) => Promise<DeviceInfo>;
listFiles: (time?: number) => Promise<FileInfo[]>;
tryconnect: (disableOnConnect?: boolean) => Promise<boolean>;
getFile: (
fileName: string,
length: number,
on?: (msg: Uint8Array | "fail") => void,
onprogress?: (size: number) => void,
) => void;
getFileBlock: (
fileName: string,
length: number,
on?: (msg: Uint8Array | "fail") => void,
) => Promise<ReturnStruct["common"]>;
requestFirmwareUpgrade: (
vn: number,
length: number,
time?: number,
) => Promise<{
result: "accepted" | "fail";
}>;
beginBNC: (time?: number) => Promise<ReturnStruct["common"]>;
endBNC: (time?: number) => Promise<ReturnStruct["common"]>;
setTime: (date: Date, timeout?: number) => Promise<ReturnStruct["common"]>;
deleteFile: (fileName: string) => Promise<{ result: string }>;
uploadFirmware: (
data: number[],
seconds?: number,
onProgress?: (cur: number, total: number) => void,
) => Promise<ReturnStruct["common"]>;
getTime: (time?: number) => Promise<{
time: string;
}>;
getSettings: (time?: number) => Promise<{
autoRecord: boolean;
autoPlay: boolean;
notification?: boolean;
} | null>;
setAutoRecord: (
enable: boolean,
time?: number,
) => Promise<ReturnStruct["common"]>;
setAutoPlay: (
enable: boolean,
time?: number,
) => Promise<ReturnStruct["common"]>;
isConnected: () => boolean;
setNotification: (
state: boolean,
time?: number,
) => Promise<ReturnStruct["common"]>;
ondisconnect?: Function;
isStopConnectionCheck: boolean;
getRecordingFile: () => Promise<{
recording: null | string;
createTime: string;
createDate: string;
}>;
getCardInfo: (
seconds?: number,
) => Promise<{ used: number; capacity: number; status: string }>;
formatCard: (seconds?: number) => Promise<ReturnStruct["common"]>;
factoryReset: (seconds?: number) => Promise<ReturnStruct["common"]>;
restoreFactorySettings: (seconds?: number) => Promise<ReturnStruct["common"]>;
getModel: () => string;
getFileCount: (seconds?: number) => Promise<{ count: number } | null>;
recordTestStart: (
type: number,
seconds?: number,
) => Promise<ReturnStruct["common"]>;
recordTestEnd: (
type: number,
seconds?: number,
) => Promise<ReturnStruct["common"]>;
test: (seconds?: number) => Promise<ReturnStruct["common"]>;
setBluetoothPromptPlay: (
state: boolean,
seconds?: number,
) => Promise<ReturnStruct["common"]>;
writeSerialNumber: (sn: string) => Promise<ReturnStruct["common"]>;
sendScheduleIngo: (info: ScheduleInfo) => Promise<ReturnStruct["common"]>;
}
//@ts-ignore
const Jensen = Jen as new (log?: typeof Logger) => JensenType
const Jensen = Jen as new (log?: typeof Logger) => JensenType;
export default Jensen;
......@@ -13,6 +13,7 @@ const READ_CARD_INFO = 0x10;
const FORMAT_CARD = 0x11;
const GET_RECORDING_FILE = 0x12;
const RESTORE_FACTORY_SETTINGS = 0x13;
const SCHEDULE_INFO = 0x14;
const DEVICE_MSG_TEST = 0x0a;
const BNC_DEMO_TEST = 0x0a;
const GET_SETTINGS = 0x0b;
......@@ -879,6 +880,18 @@ Jensen.prototype.writeSerialNumber = async function (sn) {
const commonMessageParser = (msg) => {
return { result: msg.body[0] === 0x00 ? 'success' : 'failed' };
};
Jensen.prototype.sendSchedule = function (info) {
const startDate = this.to_bcd(getTimeStr(info.startDate));
const endDate = this.to_bcd(getTimeStr(info.endDate));
const keyAnswer = [3, 7, 4, 0, 0, 0, 0, 0];
const keyHangup = [3, 7, 5, 0, 0, 0, 0, 0];
const keyReject = [3, 7, 6, 0, 0, 0, 0, 0];
const keyMicMute = [3, 7, 7, 0, 0, 0, 0, 0];
const body = [...startDate, ...endDate, 0, 0, ...keyAnswer, ...keyHangup, ...keyReject, ...keyMicMute];
return this.send(new Command(SCHEDULE_INFO).body(body));
};
Jensen.registerHandler(SET_DEVICE_TIME, commonMessageParser);
Jensen.registerHandler(BNC_DEMO_TEST, commonMessageParser);
Jensen.registerHandler(DELETE_FILE, (msg) => {
......@@ -1016,6 +1029,7 @@ Jensen.registerHandler(RECORD_TEST_END, commonMessageParser);
Jensen.registerHandler(DEVICE_MSG_TEST, commonMessageParser);
Jensen.registerHandler(GET_FILE_BLOCK, commonMessageParser);
Jensen.registerHandler(TEST_SN_WRITE, commonMessageParser)
Jensen.registerHandler(SCHEDULE_INFO, commonMessageParser)
export { Jensen };
const Level = {
debug: 'debug',
info: 'info',
error: 'error',
debug: "debug",
info: "info",
error: "error",
};
export const Logger = {
messages: [],
consoleOutput: true,
info(module, procedure, message) {
this._append(Level.info, module, procedure, message);
},
debug(module, procedure, message) {
this._append(Level.debug, module, procedure, message);
},
error(module, procedure, message) {
this._append(Level.error, module, procedure, message);
},
_append(level, module, procedure, message) {
let log = {
level,
module,
procedure,
message: String(message),
time: new Date().getTime(),
};
this.messages.push(log);
if (this.consoleOutput) {
this._print(log);
}
if (this.messages.length > 15000) this.messages.shift();
},
_print(log) {
let time = new Date(log.time);
console.info(
'[' +
(log.level === 'error' ? 'x' : '*') +
'][' +
time.toLocaleString() +
'](' +
log.module +
' - ' +
log.procedure +
') ' +
log.message,
);
},
filter(module, procedure) {
return this.messages.filter((i) => i.module === module && i.procedure === procedure);
},
enableConsoleOutput() {
this.consoleOutput = true;
},
disableConsoleOutput() {
this.consoleOutput = false;
},
peek(rows) {
return this.messages.slice(-rows);
},
search(module, procedure, keyword) {
return this.messages.filter((i) => {
let r = i.module === module;
if (!r) return false;
if (procedure) {
if (i.procedure !== procedure) return false;
}
if (keyword) {
if (i.message.indexOf(keyword) === -1) return false;
}
return true;
});
},
messages: [],
consoleOutput: true,
info(module, procedure, message) {
this._append(Level.info, module, procedure, message);
},
debug(module, procedure, message) {
this._append(Level.debug, module, procedure, message);
},
error(module, procedure, message) {
this._append(Level.error, module, procedure, message);
},
_append(level, module, procedure, message) {
let log = {
level,
module,
procedure,
message: String(message),
time: new Date().getTime(),
};
this.messages.push(log);
if (this.consoleOutput) {
this._print(log);
}
if (this.messages.length > 15000) this.messages.shift();
},
_print(log) {
let time = new Date(log.time);
console.info(
"[" +
(log.level === "error" ? "x" : "*") +
"][" +
time.toLocaleString() +
"](" +
log.module +
" - " +
log.procedure +
") " +
log.message,
);
},
filter(module, procedure) {
return this.messages.filter(
(i) => i.module === module && i.procedure === procedure,
);
},
enableConsoleOutput() {
this.consoleOutput = true;
},
disableConsoleOutput() {
this.consoleOutput = false;
},
peek(rows) {
return this.messages.slice(-rows);
},
search(module, procedure, keyword) {
return this.messages.filter((i) => {
let r = i.module === module;
if (!r) return false;
if (procedure) {
if (i.procedure !== procedure) return false;
}
if (keyword) {
if (i.message.indexOf(keyword) === -1) return false;
}
return true;
});
},
};
export const getTimeStr = (date: Date) => {
let str =
date.getFullYear() +
"-0" +
(date.getMonth() + 1) +
"-0" +
date.getDate() +
"-0" +
date.getHours() +
"-0" +
date.getMinutes() +
"-0" +
date.getSeconds();
str = str.replace(
/(\d{4})\-0*(\d{2})\-0*(\d{2})\-0*(\d{2})\-0*(\d{2})\-0*(\d{2})/gi,
"$1$2$3$4$5$6",
);
return str;
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment