forked from Hay1tsme/artemis
adb: add felica classes
This commit is contained in:
parent
7ac50868b2
commit
ad9bef618f
@ -1,3 +1,4 @@
|
||||
from .base import ADBBaseRequest, ADBBaseResponse, ADBHeader, ADBHeaderException
|
||||
from .lookup import ADBLookupRequest, ADBLookupResponse
|
||||
from .touch import ADBTouchRequest, ADBTouchResponse
|
||||
from .felica import ADBFelicaLookupRequest, ADBFelicaLookupResponse, ADBFelicaLookup2Request, ADBFelicaLookup2Response
|
||||
|
56
core/adb_handlers/felica.py
Normal file
56
core/adb_handlers/felica.py
Normal file
@ -0,0 +1,56 @@
|
||||
from construct import Struct, Int32sl, Padding, Int8ub
|
||||
|
||||
from .base import *
|
||||
|
||||
class ADBFelicaLookupRequest(ADBBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
self.idm = data[0x20:0x28].hex()
|
||||
self.pmm = data[0x28:0x30].hex()
|
||||
|
||||
class ADBFelicaLookupResponse(ADBBaseResponse):
|
||||
def __init__(self, code: int = 0, length: int = 10, status: int = 1, access_code: str | None = None) -> None:
|
||||
super().__init__(code, length, status)
|
||||
self.access_code = access_code if access_code is not None else "00000000000000000000"
|
||||
|
||||
def make(self) -> bytes:
|
||||
header = super().make()
|
||||
|
||||
resp_struct = Struct(
|
||||
Padding(26),
|
||||
"access_code" / Int8ub[10],
|
||||
)
|
||||
|
||||
return header + resp_struct.build(dict(
|
||||
access_code = self.access_code
|
||||
))
|
||||
|
||||
class ADBFelicaLookup2Request(ADBBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
self.idm = data[0x30:0x38].hex()
|
||||
self.pmm = data[0x38:0x40].hex()
|
||||
|
||||
class ADBFelicaLookup2Response(ADBBaseResponse):
|
||||
def __init__(self, code: int = 0, length: int = 10, status: int = 1, user_id: int | None = None, access_code: str | None = None) -> None:
|
||||
super().__init__(code, length, status)
|
||||
self.user_id = user_id if user_id is not None else -1
|
||||
self.access_code = access_code if access_code is not None else "00000000000000000000"
|
||||
|
||||
def make(self) -> bytes:
|
||||
header = super().make()
|
||||
|
||||
resp_struct = Struct(
|
||||
Padding(22),
|
||||
"user_id" / Int32sl,
|
||||
"unk1" / Int32sl,
|
||||
"access_code" / Int8ub[10],
|
||||
"unk2" / Int32sl
|
||||
)
|
||||
|
||||
return header + resp_struct.build(dict(
|
||||
user_id = self.user_id,
|
||||
unk1 = -1,
|
||||
access_code = self.access_code,
|
||||
unk2 = 1,
|
||||
))
|
Loading…
Reference in New Issue
Block a user