Commit b22ba4a8 authored by Skye Yu's avatar Skye Yu

Merge branch 'master' of http://gitlab.sugrsugr.com/skye/jensen

parents 7ddea2b4 6510e1fe
import { Jensen } from './src/jensen';
export default Jensen;
import { Jensen as Jen } from './src/jensen';
import { Logger } from './src/utils/utils';
export type DeviceInfo = {
sn: string;
versionNumber: number;
versionCode: string;
};
export type ReturnStruct = {
common: { result: 'failed' | 'success' };
};
export type FileInfo = {
name: string;
createDate: string;
createTime: string;
time: Date;
duration: number;
length: number;
signature: 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: () => 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: () => Promise<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']>
}
//@ts-ignore
const Jensen = Jen as new (log?: typeof Logger) => JensenType
export default Jensen;
declare module 'jensen' {
export type DeviceInfo = {
sn: string;
versionNumber: number;
versionCode: string;
};
export type ReturnStruct = {
common: { result: 'failed' | 'success' };
};
export type FileInfo = {
name: string;
createDate: string;
createTime: string;
time: Date;
duration: number;
length: number;
signature: string;
};
export default class Jensen {
onconnect: Function;
onmessage: (data: any) => void | null;
constructor();
connect(): Promise<void>;
init(): Promise<boolean>;
getDeviceInfo: (time?: number) => Promise<DeviceInfo>;
listFiles: (time?: number) => Promise<FileInfo[]>;
tryconnect: () => 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: () => Promise<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']>;
}
}
{ {
"name": "jensen", "name": "jensen",
"version": "1.0.0", "version": "1.1.3",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "jensen", "name": "jensen",
"version": "1.0.0", "version": "1.1.3",
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"prettier": "^3.3.3" "prettier": "^3.3.3"
......
import {Logger} from './utils/utils'; import { Logger as internalLogger } from './utils/utils';
const QUERY_DEVICE_INFO = 0x01; const QUERY_DEVICE_INFO = 0x01;
const QUERY_DEVICE_TIME = 0x02; const QUERY_DEVICE_TIME = 0x02;
...@@ -20,6 +20,7 @@ const SET_SETTINGS = 0x0c; ...@@ -20,6 +20,7 @@ const SET_SETTINGS = 0x0c;
const GET_FILE_BLOCK = 0x0d; const GET_FILE_BLOCK = 0x0d;
const FACTORY_RESET = 0xf00b; const FACTORY_RESET = 0xf00b;
const TEST_SN_WRITE = 0xf007;
const RECORD_TEST_START = 0xf008; // 录音测试开始 const RECORD_TEST_START = 0xf008; // 录音测试开始
const RECORD_TEST_END = 0xf009; // 录音测试结束 const RECORD_TEST_END = 0xf009; // 录音测试结束
...@@ -47,7 +48,10 @@ const COMMAND_NAMES = [ ...@@ -47,7 +48,10 @@ const COMMAND_NAMES = [
'factory reset', 'factory reset',
]; ];
function Jensen() {
function Jensen(log) {
const Logger = log || internalLogger
let device = null; let device = null;
let actions = {}; let actions = {};
let buffer = []; let buffer = [];
...@@ -124,7 +128,7 @@ function Jensen() { ...@@ -124,7 +128,7 @@ function Jensen() {
if (r) return; if (r) return;
let conn = await navigator.usb.requestDevice({ let conn = await navigator.usb.requestDevice({
filters: [{vendorId: 0x10d6}], filters: [{ vendorId: 0x10d6 }],
}); });
await conn.open(); await conn.open();
self.model = conn.productId == 45069 ? 'hidock-h1e' : 'hidock-h1'; self.model = conn.productId == 45069 ? 'hidock-h1e' : 'hidock-h1';
...@@ -290,6 +294,7 @@ function Jensen() { ...@@ -290,6 +294,7 @@ function Jensen() {
const tryReceive = function () { const tryReceive = function () {
if (device) if (device)
device.transferIn(2, RECV_BUFF_SIZE).then((r) => { device.transferIn(2, RECV_BUFF_SIZE).then((r) => {
Logger.save?.('jensen', 'tryReceive', r?.data);
receive(r); receive(r);
}); });
}; };
...@@ -455,7 +460,7 @@ function Jensen() { ...@@ -455,7 +460,7 @@ function Jensen() {
// for (let i = 0; i < padding; i++) this.buffer[i + cutLen]; // for (let i = 0; i < padding; i++) this.buffer[i + cutLen];
cutLen += padding; cutLen += padding;
// self.buffer = self.buffer.slice(cutLen); // self.buffer = self.buffer.slice(cutLen);
return {message: new Message(cmdid, sequeue, body), length: cutLen}; return { message: new Message(cmdid, sequeue, body), length: cutLen };
}; };
this.to_bcd = function (str) { this.to_bcd = function (str) {
...@@ -756,25 +761,25 @@ Jensen.prototype.endBNC = async function (seconds) { ...@@ -756,25 +761,25 @@ Jensen.prototype.endBNC = async function (seconds) {
Jensen.prototype.getSettings = async function (seconds) { Jensen.prototype.getSettings = async function (seconds) {
if (this.versionNumber < 327714) { if (this.versionNumber < 327714) {
return {autoRecord: false, autoPlay: false}; return { autoRecord: false, autoPlay: false };
} }
return this.send(new Command(GET_SETTINGS), seconds); return this.send(new Command(GET_SETTINGS), seconds);
}; };
Jensen.prototype.setAutoRecord = function (enable, seconds) { Jensen.prototype.setAutoRecord = function (enable, seconds) {
if (this.versionNumber < 327714) return {result: false}; if (this.versionNumber < 327714) return { result: false };
return this.send(new Command(SET_SETTINGS).body([0, 0, 0, enable ? 1 : 2]), seconds); return this.send(new Command(SET_SETTINGS).body([0, 0, 0, enable ? 1 : 2]), seconds);
}; };
Jensen.prototype.setAutoPlay = function (enable, seconds) { Jensen.prototype.setAutoPlay = function (enable, seconds) {
if (this.versionNumber < 327714) return {result: false}; if (this.versionNumber < 327714) return { result: false };
return this.send(new Command(SET_SETTINGS).body([0, 0, 0, 0, 0, 0, 0, enable ? 1 : 2,]), seconds); return this.send(new Command(SET_SETTINGS).body([0, 0, 0, 0, 0, 0, 0, enable ? 1 : 2,]), seconds);
}; };
Jensen.prototype.setNotification = function (enable, seconds) { Jensen.prototype.setNotification = function (enable, seconds) {
if (this.versionNumber < 327714) return {result: false}; if (this.versionNumber < 327714) return { result: false };
return this.send(new Command(SET_SETTINGS).body([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, enable ? 1 : 2]), seconds); return this.send(new Command(SET_SETTINGS).body([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, enable ? 1 : 2]), seconds);
}; };
Jensen.prototype.setBluetoothPromptPlay = function (enable, seconds) { Jensen.prototype.setBluetoothPromptPlay = function (enable, seconds) {
if (this.model === 'hidock-h1e' && this.versionNumber < 393218) return {result: false} if (this.model === 'hidock-h1e' && this.versionNumber < 393218) return { result: false }
if (this.model === 'hidock-h1' && this.versionNumber < 327732) return {result: false} if (this.model === 'hidock-h1' && this.versionNumber < 327732) return { result: false }
return this.send(new Command(SET_SETTINGS).body([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, enable ? 1 : 2]), seconds); return this.send(new Command(SET_SETTINGS).body([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, enable ? 1 : 2]), seconds);
} }
...@@ -821,8 +826,16 @@ Jensen.prototype.getFileBlock = async function (filename, length, ondata) { ...@@ -821,8 +826,16 @@ Jensen.prototype.getFileBlock = async function (filename, length, ondata) {
return this.send(new Command(GET_FILE_BLOCK).body(data)); return this.send(new Command(GET_FILE_BLOCK).body(data));
} }
Jensen.prototype.writeSerialNumber = async function (sn) {
let data = [];
for (let i = 0; i < sn.length; i++) {
data.push(sn.charCodeAt(i));
}
return this.send(new Command(TEST_SN_WRITE).body(data));
}
const commonMessageParser = (msg) => { const commonMessageParser = (msg) => {
return {result: msg.body[0] === 0x00 ? 'success' : 'failed'}; return { result: msg.body[0] === 0x00 ? 'success' : 'failed' };
}; };
Jensen.registerHandler(SET_DEVICE_TIME, commonMessageParser); Jensen.registerHandler(SET_DEVICE_TIME, commonMessageParser);
Jensen.registerHandler(BNC_DEMO_TEST, commonMessageParser); Jensen.registerHandler(BNC_DEMO_TEST, commonMessageParser);
...@@ -831,7 +844,7 @@ Jensen.registerHandler(DELETE_FILE, (msg) => { ...@@ -831,7 +844,7 @@ Jensen.registerHandler(DELETE_FILE, (msg) => {
if (msg.body[0] === 0x00) rst = 'success'; if (msg.body[0] === 0x00) rst = 'success';
else if (msg.body[0] === 0x01) rst = 'not-exists'; else if (msg.body[0] === 0x01) rst = 'not-exists';
else if (msg.body[0] === 0x02) rst = 'failed'; else if (msg.body[0] === 0x02) rst = 'failed';
return {result: rst}; return { result: rst };
}); });
Jensen.registerHandler(QUERY_DEVICE_INFO, (msg, jensen) => { Jensen.registerHandler(QUERY_DEVICE_INFO, (msg, jensen) => {
let vc = [], let vc = [],
...@@ -873,19 +886,19 @@ Jensen.registerHandler(QUERY_DEVICE_TIME, (msg, jensen) => { ...@@ -873,19 +886,19 @@ Jensen.registerHandler(QUERY_DEVICE_TIME, (msg, jensen) => {
}; };
}); });
Jensen.registerHandler(QUERY_FILE_COUNT, (msg) => { Jensen.registerHandler(QUERY_FILE_COUNT, (msg) => {
if (msg.body.length === 0) return {count: 0}; if (msg.body.length === 0) return { count: 0 };
let c = 0; let c = 0;
for (let i = 0; i < 4; i++) { for (let i = 0; i < 4; i++) {
let b = msg.body[i] & 0xff; let b = msg.body[i] & 0xff;
c = c | (b << ((4 - i - 1) * 8)); c = c | (b << ((4 - i - 1) * 8));
} }
return {count: c}; return { count: c };
}); });
Jensen.registerHandler(GET_SETTINGS, (msg) => { Jensen.registerHandler(GET_SETTINGS, (msg) => {
let r1 = msg.body[3]; let r1 = msg.body[3];
let r2 = msg.body[7]; let r2 = msg.body[7];
let r4 = msg.body[15]; let r4 = msg.body[15];
let rst = {autoRecord: r1 === 1, autoPlay: r2 === 1, bluetoothTone: r4 === 1}; let rst = { autoRecord: r1 === 1, autoPlay: r2 === 1, bluetoothTone: r4 === 1 };
if (msg.body.length >= 12) { if (msg.body.length >= 12) {
let r3 = msg.body[11] === 1; let r3 = msg.body[11] === 1;
rst['notification'] = r3; rst['notification'] = r3;
...@@ -902,11 +915,11 @@ Jensen.registerHandler(REQUEST_FIRMWARE_UPGRADE, (msg) => { ...@@ -902,11 +915,11 @@ Jensen.registerHandler(REQUEST_FIRMWARE_UPGRADE, (msg) => {
if (c === 0x01) rst = 'wrong-version'; if (c === 0x01) rst = 'wrong-version';
if (c === 0x02) rst = 'busy'; if (c === 0x02) rst = 'busy';
if (c === 0x03) return 'unknown'; if (c === 0x03) return 'unknown';
return {result: rst}; return { result: rst };
}); });
Jensen.registerHandler(FIRMWARE_UPLOAD, (msg) => { Jensen.registerHandler(FIRMWARE_UPLOAD, (msg) => {
let c = msg.body[0]; let c = msg.body[0];
return {result: c === 0x00 ? 'success' : 'failed'}; return { result: c === 0x00 ? 'success' : 'failed' };
}); });
Jensen.registerHandler(READ_CARD_INFO, (msg) => { Jensen.registerHandler(READ_CARD_INFO, (msg) => {
let i = 0; let i = 0;
...@@ -914,11 +927,11 @@ Jensen.registerHandler(READ_CARD_INFO, (msg) => { ...@@ -914,11 +927,11 @@ Jensen.registerHandler(READ_CARD_INFO, (msg) => {
let capacity = ((msg.body[i++] & 0xff) << 24) | ((msg.body[i++] & 0xff) << 16) | ((msg.body[i++] & 0xff) << 8) | (msg.body[i++] & 0xff); let capacity = ((msg.body[i++] & 0xff) << 24) | ((msg.body[i++] & 0xff) << 16) | ((msg.body[i++] & 0xff) << 8) | (msg.body[i++] & 0xff);
let status = ((msg.body[i++] & 0xff) << 24) | ((msg.body[i++] & 0xff) << 16) | ((msg.body[i++] & 0xff) << 8) | (msg.body[i++] & 0xff); let status = ((msg.body[i++] & 0xff) << 24) | ((msg.body[i++] & 0xff) << 16) | ((msg.body[i++] & 0xff) << 8) | (msg.body[i++] & 0xff);
return {used: used, capacity: capacity, status: status.toString(16)}; return { used: used, capacity: capacity, status: status.toString(16) };
}); });
Jensen.registerHandler(FORMAT_CARD, commonMessageParser); Jensen.registerHandler(FORMAT_CARD, commonMessageParser);
Jensen.registerHandler(GET_RECORDING_FILE, (msg) => { Jensen.registerHandler(GET_RECORDING_FILE, (msg) => {
if (msg.body == null || msg.body.length === 0) return {recording: null}; if (msg.body == null || msg.body.length === 0) return { recording: null };
else { else {
let fname = []; let fname = [];
for (var i = 0; i < msg.body.length; i++) { for (var i = 0; i < msg.body.length; i++) {
...@@ -960,5 +973,7 @@ Jensen.registerHandler(RECORD_TEST_START, commonMessageParser); ...@@ -960,5 +973,7 @@ Jensen.registerHandler(RECORD_TEST_START, commonMessageParser);
Jensen.registerHandler(RECORD_TEST_END, commonMessageParser); 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)
export {Jensen}; export { Jensen };
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