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-11-06 17:28:29 -05:00
parent 3d41b5a780
commit acc1590aa2
5 changed files with 40 additions and 1 deletions
+13 -1
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);
+13
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);
+1
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
+6
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;
+7
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;