aimedb: Deal with redundant command codes

Some messages apparently use more than one command code depending
on the game. The meaning of the 0x0006 response code is also
overloaded apparently, so that's cool. Fortunately that's the
game's problem and not ours.
This commit is contained in:
Tau 2019-03-27 20:13:55 -04:00
parent 3d41b5a780
commit acc1590aa2
5 changed files with 40 additions and 1 deletions

View File

@ -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<number, (msg: Buffer) => 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);

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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;