mirror of
https://github.com/djhackersdev/minime.git
synced 2026-04-25 16:20:19 -05:00
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:
parent
3d41b5a780
commit
acc1590aa2
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user