diff --git a/src/aimedb/decoder.ts b/src/aimedb/decoder.ts index 1f4ce5f..e6ae581 100644 --- a/src/aimedb/decoder.ts +++ b/src/aimedb/decoder.ts @@ -54,6 +54,16 @@ function readLookupRequest(msg: Buffer): Request.LookupRequest { }; } +function readLookupRequest2(msg: Buffer): Request.LookupRequest2 { + const luid = msg.slice(0x0020, 0x002a).toString("hex"); + + return { + ...begin(msg), + type: "lookup2", + luid, + }; +} + function readHelloRequest(msg: Buffer): Request.HelloRequest { return { ...begin(msg), @@ -69,10 +79,12 @@ function readGoodbyeRequest(msg: Buffer): Request.GoodbyeRequest { const readers = new Map Request.AimeRequest>(); +readers.set(0x0004, readLookupRequest); readers.set(0x0005, readRegisterRequest); readers.set(0x0009, readLogRequest); readers.set(0x000b, readCampaignRequest); -readers.set(0x000f, readLookupRequest); +readers.set(0x000d, readRegisterRequest); +readers.set(0x000f, readLookupRequest2); readers.set(0x0064, readHelloRequest); readers.set(0x0066, readGoodbyeRequest); diff --git a/src/aimedb/encoder.ts b/src/aimedb/encoder.ts index 8631855..2de438d 100644 --- a/src/aimedb/encoder.ts +++ b/src/aimedb/encoder.ts @@ -55,6 +55,17 @@ export class Encoder extends Transform { // -1 aime id means card is not registered // register level does not seem to matter + buf = begin(0x0130); + buf.writeUInt16LE(0x0006, 0x0004); // cmd code + buf.writeUInt16LE(msg.status, 0x0008); + buf.writeInt32LE(msg.aimeId || -1, 0x0020); + buf.writeUInt8(registerLevels[msg.registerLevel], 0x0024); + + break; + + case "lookup2": + // Seems identical to the above? Just with a different command code. + buf = begin(0x0130); buf.writeUInt16LE(0x0010, 0x0004); // cmd code buf.writeUInt16LE(msg.status, 0x0008); @@ -64,6 +75,8 @@ export class Encoder extends Transform { break; case "register": + // Same response code as v1 lookup command! + buf = begin(0x0030); buf.writeUInt16LE(0x0006, 0x0004); // cmd code buf.writeUInt16LE(msg.status, 0x0008); diff --git a/src/aimedb/index.ts b/src/aimedb/index.ts index 531079f..38946af 100644 --- a/src/aimedb/index.ts +++ b/src/aimedb/index.ts @@ -26,6 +26,7 @@ export default async function aimedb(socket) { break; case "lookup": + case "lookup2": console.log("Aimedb: Mifare lookup", req.luid); output.write({ type: req.type, status: 1 }); // Add aimeId if desired diff --git a/src/aimedb/request.ts b/src/aimedb/request.ts index 9f4722c..79deef3 100644 --- a/src/aimedb/request.ts +++ b/src/aimedb/request.ts @@ -29,6 +29,11 @@ export interface LookupRequest extends AimeRequestBase { luid: string; } +export interface LookupRequest2 extends AimeRequestBase { + type: "lookup2"; + luid: string; +} + export interface HelloRequest extends AimeRequestBase { type: "hello"; } @@ -43,4 +48,5 @@ export type AimeRequest = | HelloRequest | LogRequest | LookupRequest + | LookupRequest2 | RegisterRequest; diff --git a/src/aimedb/response.ts b/src/aimedb/response.ts index 5e3ec87..f22ddb9 100644 --- a/src/aimedb/response.ts +++ b/src/aimedb/response.ts @@ -22,6 +22,12 @@ export interface LookupResponse extends AimeResponseBase { registerLevel: RegisterLevel; } +export interface LookupResponse2 extends AimeResponseBase { + type: "lookup2"; + aimeId?: number; + registerLevel: RegisterLevel; +} + export interface RegisterResponse extends AimeResponseBase { type: "register"; aimeId: number; @@ -32,4 +38,5 @@ export type AimeResponse = | HelloResponse | LogResponse | LookupResponse + | LookupResponse2 | RegisterResponse;