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

feat: send schedule info

parent 8fb2ee8b
import { Jensen as Jen } from './src/jensen'; import { Jensen as Jen } from "./src/jensen";
import { Logger } from './src/utils/utils'; import { Logger } from "./src/utils/utils";
export type DeviceInfo = { export type DeviceInfo = {
sn: string; sn: string;
versionNumber: number; versionNumber: number;
versionCode: string; versionCode: string;
}; };
export type ReturnStruct = { export type ReturnStruct = {
common: { result: 'failed' | 'success' }; common: { result: "failed" | "success" };
}; };
export type FileInfo = { export type FileInfo = {
name: string; name: string;
createDate: string; createDate: string;
...@@ -18,52 +21,72 @@ export type FileInfo = { ...@@ -18,52 +21,72 @@ export type FileInfo = {
signature: string; signature: string;
}; };
export type ScheduleInfo = {
startDate: Date;
endDate: Date;
keyAnswer?: string;
keyHangup?: string;
keyReject?: string;
keyMicMute?: string;
};
declare class JensenType { declare class JensenType {
constructor(log?: typeof Logger) constructor(log?: typeof Logger);
onconnect: Function; onconnect: Function;
onmessage: (data: any) => void | null; onmessage: (data: any) => void | null;
connect: () => Promise<void>; connect: () => Promise<void>;
init: () => Promise<boolean>; init: () => Promise<boolean>;
getDeviceInfo: (time?: number) => Promise<DeviceInfo>; getDeviceInfo: (time?: number) => Promise<DeviceInfo>;
listFiles: (time?: number) => Promise<FileInfo[]>; listFiles: (time?: number) => Promise<FileInfo[]>;
tryconnect: (disableOnConnect?:boolean) => Promise<boolean>; tryconnect: (disableOnConnect?: boolean) => Promise<boolean>;
getFile: ( getFile: (
fileName: string, fileName: string,
length: number, length: number,
on?: (msg: Uint8Array | 'fail') => void, on?: (msg: Uint8Array | "fail") => void,
onprogress?: (size: number) => void onprogress?: (size: number) => void,
) => void; ) => void;
getFileBlock: ( getFileBlock: (
fileName: string, fileName: string,
length: number, length: number,
on?: (msg: Uint8Array | 'fail') => void on?: (msg: Uint8Array | "fail") => void,
) => Promise<ReturnStruct['common']>; ) => Promise<ReturnStruct["common"]>;
requestFirmwareUpgrade: ( requestFirmwareUpgrade: (
vn: number, vn: number,
length: number, length: number,
time?: number time?: number,
) => Promise<{ ) => Promise<{
result: 'accepted' | 'fail'; result: "accepted" | "fail";
}>; }>;
beginBNC: (time?: number) => Promise<ReturnStruct['common']>; beginBNC: (time?: number) => Promise<ReturnStruct["common"]>;
endBNC: (time?: number) => Promise<ReturnStruct['common']>; endBNC: (time?: number) => Promise<ReturnStruct["common"]>;
setTime: (date: Date, timeout?: number) => Promise<ReturnStruct['common']>; setTime: (date: Date, timeout?: number) => Promise<ReturnStruct["common"]>;
deleteFile: (fileName: string) => Promise<{ result: string }>; deleteFile: (fileName: string) => Promise<{ result: string }>;
uploadFirmware: ( uploadFirmware: (
data: number[], data: number[],
seconds?: number, seconds?: number,
onProgress?: (cur: number, total: number) => void onProgress?: (cur: number, total: number) => void,
) => Promise<ReturnStruct['common']>; ) => Promise<ReturnStruct["common"]>;
getTime: (time?: number) => Promise<{ getTime: (time?: number) => Promise<{
time: string; time: string;
}>; }>;
getSettings: ( getSettings: (time?: number) => Promise<{
time?: number autoRecord: boolean;
) => Promise<{ autoRecord: boolean; autoPlay: boolean; notification?: boolean } | null>; autoPlay: boolean;
setAutoRecord: (enable: boolean, time?: number) => Promise<ReturnStruct['common']>; notification?: boolean;
setAutoPlay: (enable: boolean, time?: number) => Promise<ReturnStruct['common']>; } | null>;
setAutoRecord: (
enable: boolean,
time?: number,
) => Promise<ReturnStruct["common"]>;
setAutoPlay: (
enable: boolean,
time?: number,
) => Promise<ReturnStruct["common"]>;
isConnected: () => boolean; isConnected: () => boolean;
setNotification: (state: boolean, time?: number) => Promise<ReturnStruct['common']>; setNotification: (
state: boolean,
time?: number,
) => Promise<ReturnStruct["common"]>;
ondisconnect?: Function; ondisconnect?: Function;
isStopConnectionCheck: boolean; isStopConnectionCheck: boolean;
getRecordingFile: () => Promise<{ getRecordingFile: () => Promise<{
...@@ -72,25 +95,31 @@ declare class JensenType { ...@@ -72,25 +95,31 @@ declare class JensenType {
createDate: string; createDate: string;
}>; }>;
getCardInfo: ( getCardInfo: (
seconds?: number seconds?: number,
) => Promise<{ used: number; capacity: number; status: string }>; ) => Promise<{ used: number; capacity: number; status: string }>;
formatCard: (seconds?: number) => Promise<ReturnStruct['common']>; formatCard: (seconds?: number) => Promise<ReturnStruct["common"]>;
factoryReset: (seconds?: number) => Promise<ReturnStruct['common']>; factoryReset: (seconds?: number) => Promise<ReturnStruct["common"]>;
restoreFactorySettings: (seconds?: number) => Promise<ReturnStruct['common']>; restoreFactorySettings: (seconds?: number) => Promise<ReturnStruct["common"]>;
getModel: () => string; getModel: () => string;
getFileCount: (seconds?: number) => Promise<{ count: number } | null>; getFileCount: (seconds?: number) => Promise<{ count: number } | null>;
recordTestStart: (type: number, seconds?: number) => Promise<ReturnStruct['common']>; recordTestStart: (
recordTestEnd: (type: number, seconds?: number) => Promise<ReturnStruct['common']>; type: number,
test: (seconds?: number) => Promise<ReturnStruct['common']>; seconds?: number,
) => Promise<ReturnStruct["common"]>;
recordTestEnd: (
type: number,
seconds?: number,
) => Promise<ReturnStruct["common"]>;
test: (seconds?: number) => Promise<ReturnStruct["common"]>;
setBluetoothPromptPlay: ( setBluetoothPromptPlay: (
state: boolean, state: boolean,
seconds?: number seconds?: number,
) => Promise<ReturnStruct['common']>; ) => Promise<ReturnStruct["common"]>;
writeSerialNumber: (sn: string) => Promise<ReturnStruct['common']> writeSerialNumber: (sn: string) => Promise<ReturnStruct["common"]>;
sendScheduleIngo: (info: ScheduleInfo) => Promise<ReturnStruct["common"]>;
} }
//@ts-ignore //@ts-ignore
const Jensen = Jen as new (log?: typeof Logger) => JensenType const Jensen = Jen as new (log?: typeof Logger) => JensenType;
export default Jensen; export default Jensen;
...@@ -13,6 +13,7 @@ const READ_CARD_INFO = 0x10; ...@@ -13,6 +13,7 @@ const READ_CARD_INFO = 0x10;
const FORMAT_CARD = 0x11; const FORMAT_CARD = 0x11;
const GET_RECORDING_FILE = 0x12; const GET_RECORDING_FILE = 0x12;
const RESTORE_FACTORY_SETTINGS = 0x13; const RESTORE_FACTORY_SETTINGS = 0x13;
const SCHEDULE_INFO = 0x14;
const DEVICE_MSG_TEST = 0x0a; const DEVICE_MSG_TEST = 0x0a;
const BNC_DEMO_TEST = 0x0a; const BNC_DEMO_TEST = 0x0a;
const GET_SETTINGS = 0x0b; const GET_SETTINGS = 0x0b;
...@@ -879,6 +880,18 @@ Jensen.prototype.writeSerialNumber = async function (sn) { ...@@ -879,6 +880,18 @@ Jensen.prototype.writeSerialNumber = async function (sn) {
const commonMessageParser = (msg) => { const commonMessageParser = (msg) => {
return { result: msg.body[0] === 0x00 ? 'success' : 'failed' }; 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(SET_DEVICE_TIME, commonMessageParser);
Jensen.registerHandler(BNC_DEMO_TEST, commonMessageParser); Jensen.registerHandler(BNC_DEMO_TEST, commonMessageParser);
Jensen.registerHandler(DELETE_FILE, (msg) => { Jensen.registerHandler(DELETE_FILE, (msg) => {
...@@ -1016,6 +1029,7 @@ Jensen.registerHandler(RECORD_TEST_END, commonMessageParser); ...@@ -1016,6 +1029,7 @@ Jensen.registerHandler(RECORD_TEST_END, commonMessageParser);
Jensen.registerHandler(DEVICE_MSG_TEST, commonMessageParser); Jensen.registerHandler(DEVICE_MSG_TEST, commonMessageParser);
Jensen.registerHandler(GET_FILE_BLOCK, commonMessageParser); Jensen.registerHandler(GET_FILE_BLOCK, commonMessageParser);
Jensen.registerHandler(TEST_SN_WRITE, commonMessageParser) Jensen.registerHandler(TEST_SN_WRITE, commonMessageParser)
Jensen.registerHandler(SCHEDULE_INFO, commonMessageParser)
export { Jensen }; export { Jensen };
const Level = { const Level = {
debug: 'debug', debug: "debug",
info: 'info', info: "info",
error: 'error', error: "error",
}; };
export const Logger = { export const Logger = {
...@@ -33,20 +33,22 @@ export const Logger = { ...@@ -33,20 +33,22 @@ export const Logger = {
_print(log) { _print(log) {
let time = new Date(log.time); let time = new Date(log.time);
console.info( console.info(
'[' + "[" +
(log.level === 'error' ? 'x' : '*') + (log.level === "error" ? "x" : "*") +
'][' + "][" +
time.toLocaleString() + time.toLocaleString() +
'](' + "](" +
log.module + log.module +
' - ' + " - " +
log.procedure + log.procedure +
') ' + ") " +
log.message, log.message,
); );
}, },
filter(module, procedure) { filter(module, procedure) {
return this.messages.filter((i) => i.module === module && i.procedure === procedure); return this.messages.filter(
(i) => i.module === module && i.procedure === procedure,
);
}, },
enableConsoleOutput() { enableConsoleOutput() {
this.consoleOutput = true; this.consoleOutput = true;
...@@ -71,3 +73,23 @@ export const Logger = { ...@@ -71,3 +73,23 @@ export const Logger = {
}); });
}, },
}; };
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