Commit 14b905e3 authored by martin hou's avatar martin hou

eason兼容处理

parent 587cd7ac
......@@ -7,6 +7,14 @@ export type DeviceInfo = {
export type ReturnStruct = {
common: { result: 'failed' | 'success' };
};
export type ToneUpdateResponse = {
code: number;
result: string;
}
export type UACUpdateResponse = {
code: number;
result: string;
}
export type FileInfo = {
name: string;
......@@ -138,6 +146,11 @@ declare class Jensen {
pauseRealtime: () => Promise<ReturnStruct['common']>;
stopRealtime: () => Promise<ReturnStruct['common']>;
getRealtime: (frames: number) => Promise<{ data: Uint8Array; rest: number }>;
readFile: (fname: string, offset: number, length: number) => Promise<Uint8Array>;
requestToneUpdate: (signature: string, size: number, seconds?: number) => Promise<ToneUpdateResponse>;
updateTone: (data: Uint8Array, seconds?: number) => Promise<ReturnStruct['common']>;
requestUACUpdate: (signature: string, size: number, seconds?: number) => Promise<UACUpdateResponse>;
updateUAC: (data: Uint8Array, seconds?: number) => Promise<ReturnStruct['common']>;
}
export = Jensen;
......@@ -20,6 +20,11 @@ const BNC_DEMO_TEST = 0x0a;
const GET_SETTINGS = 0x0b;
const SET_SETTINGS = 0x0c;
const GET_FILE_BLOCK = 0x0d;
const TRANSFER_FILE_PARTIAL = 0x15;
const REQUEST_TONE_UPDATE = 0x16;
const TONE_UPDATE = 0x17;
const REQUEST_UAC_UPDATE = 0x18;
const UAC_UPDATE = 0x19;
const FACTORY_RESET = 0xf00b;
const REALTIME_READ_SETTING = 0x20;
......@@ -156,7 +161,14 @@ function Jensen(log) {
filters: [{ vendorId: 0x10d6 }]
});
await conn.open();
self.model = conn.productId == 45069 ? 'hidock-h1e' : 'hidock-h1';
self.model =
device.productId == 0xb00c
? 'hidock-h1'
: device.productId == 0xb00d
? 'hidock-h1e'
: device.productId == 0xb00e
? 'hidock-p1'
: 'unknown';
device = conn;
await setup();
};
......@@ -671,16 +683,27 @@ Jensen.prototype.listFiles = async function () {
ftime = ftime.replace(/^(\d{2})?(\d{2})(\w{3})(\d{2})-(\d{2})(\d{2})(\d{2})-.*\.(hda|wav)$/gi, '20$2 $3 $4 $5:$6:$7');
ftime = new Date(ftime);
duration = (flen / 32) * 4;
} else {
}
else
{
ftime = null;
}
if (ver == 1) {
if (ver == 1)
{
duration = duration * 2;
} else if (ver == 2) {
}
else if (ver == 2)
{
duration = (flen - 44) / 48 / 2;
} else if (ver == 3) {
}
else if (ver == 3)
{
duration = (flen - 44) / 48 / 2 / 2;
}
else if (ver == 5)
{
duration = flen / 12;
}
let createDate = '';
let createTime = '';
if (ftime) {
......@@ -721,6 +744,21 @@ Jensen.prototype.deleteFile = async function (filename, seconds) {
return this.send(new Command(DELETE_FILE).body(fname), seconds);
};
Jensen.prototype.readFile = async function (filename, offset, length, seconds) {
// 如果确定支持的版本号
let data = [];
data.push((offset >> 24) & 0xff);
data.push((offset >> 16) & 0xff);
data.push((offset >> 8) & 0xff);
data.push((offset >> 0) & 0xff);
data.push((length >> 24) & 0xff);
data.push((length >> 16) & 0xff);
data.push((length >> 8) & 0xff);
data.push((length >> 0) & 0xff);
for (let i = 0; i < filename.length; i++) data.push(filename.charCodeAt(i));
return this.send(new Command(TRANSFER_FILE_PARTIAL).body(data), seconds);
}
Jensen.prototype.setTime = async function (time, seconds) {
let str =
time.getFullYear() +
......@@ -1039,7 +1077,38 @@ Jensen.prototype.getRealtime = async function (frames) {
let d = (frames >> 0) & 0xff;
return this.send(new Command(REALTIME_TRANSFER).body([a, b, c, d]));
};
Jensen.prototype.requestToneUpdate = async function(signature, size, seconds) {
let data = [];
for (let i = 0; i < signature.length; i+=2)
{
let b = signature.substring(i, i + 2);
data.push(parseInt(b, 16));
}
data.push((size >> 24) & 0xff);
data.push((size >> 16) & 0xff);
data.push((size >> 8) & 0xff);
data.push((size >> 0) & 0xff);
return this.send(new Command(REQUEST_TONE_UPDATE).body(data), seconds);
}
Jensen.prototype.updateTone = async function(toneFile, seconds) {
return this.send(new Command(TONE_UPDATE).body(toneFile), seconds);
}
Jensen.prototype.requestUACUpdate = async function(signature, size, seconds) {
let data = [];
for (let i = 0; i < signature.length; i+=2)
{
let b = signature.substring(i, i + 2);
data.push(parseInt(b, 16));
}
data.push((size >> 24) & 0xff);
data.push((size >> 16) & 0xff);
data.push((size >> 8) & 0xff);
data.push((size >> 0) & 0xff);
return this.send(new Command(REQUEST_UAC_UPDATE).body(data), seconds);
}
Jensen.prototype.updateUAC = async function(uacFile, seconds) {
return this.send(new Command(UAC_UPDATE).body(uacFile), seconds);
}
Jensen.registerHandler(REALTIME_CONTROL, commonMessageParser);
Jensen.registerHandler(REALTIME_READ_SETTING, (msg) => {
console.log(msg);
......@@ -1153,6 +1222,14 @@ Jensen.registerHandler(READ_CARD_INFO, (msg) => {
return { used: used, capacity: capacity, status: status.toString(16) };
});
Jensen.registerHandler(TRANSFER_FILE_PARTIAL, (msg) => {
let buf = new Uint8Array(msg.body.length);
for (let i = 0; i < msg.body.length; i++)
{
buf[i] = msg.body[i] & 0xff;
}
return buf;
});
Jensen.registerHandler(FORMAT_CARD, commonMessageParser);
Jensen.registerHandler(GET_RECORDING_FILE, (msg) => {
if (msg.body == null || msg.body.length === 0) return { recording: null };
......@@ -1207,7 +1284,7 @@ Jensen.registerHandler(BLUETOOTH_SCAN, (msg) => {
}
let mac = [];
for (let f = 0; f < 6; f++) {
let m = msg.body[k++].toString(16).toUpperCase();
let m = (msg.body[k++] & 0xff).toString(16).toUpperCase();
mac.push(m.length == 1 ? '0' + m : m);
}
devices.push({
......@@ -1252,5 +1329,26 @@ Jensen.registerHandler(GET_FILE_BLOCK, commonMessageParser);
Jensen.registerHandler(TEST_SN_WRITE, commonMessageParser);
Jensen.registerHandler(SCHEDULE_INFO, commonMessageParser);
Jensen.registerHandler(BLUETOOTH_CMD, commonMessageParser);
Jensen.registerHandler(REQUEST_TONE_UPDATE, (msg) => {
let rst = msg.body[0];
let txt = 'success';
if (rst == 0x01) txt = 'length-mismatch';
else if (rst == 0x02) txt = 'busy';
else if (rst == 0x03) txt = 'card-full';
else if (rst == 0x04) txt = 'card-error';
else txt = String(rst);
return { code : rst, result : txt };
});
Jensen.registerHandler(TONE_UPDATE, commonMessageParser);
Jensen.registerHandler(REQUEST_UAC_UPDATE, (msg) => {
let rst = msg.body[0];
let txt = 'success';
if (rst == 0x01) txt = 'length-mismatch';
else if (rst == 0x02) txt = 'busy';
else if (rst == 0x03) txt = 'card-full';
else if (rst == 0x04) txt = 'card-error';
else txt = String(rst);
return { code : rst, result : txt };
});
Jensen.registerHandler(UAC_UPDATE, commonMessageParser);
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