173 lines
6.3 KiB
Python
173 lines
6.3 KiB
Python
|
|
"""
|
||
|
|
KKS Bluetooth Badge Protocol Constants
|
||
|
|
|
||
|
|
Defines all protocol markers, protocol numbers, alarm types,
|
||
|
|
signal strength levels, data report modes, and related mappings.
|
||
|
|
"""
|
||
|
|
|
||
|
|
from typing import Dict, FrozenSet
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Start / Stop Markers
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
START_MARKER_SHORT: bytes = b'\x78\x78' # 1-byte packet length field
|
||
|
|
START_MARKER_LONG: bytes = b'\x79\x79' # 2-byte packet length field
|
||
|
|
STOP_MARKER: bytes = b'\x0D\x0A'
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Protocol Numbers
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
PROTO_LOGIN: int = 0x01
|
||
|
|
PROTO_HEARTBEAT: int = 0x13
|
||
|
|
PROTO_LBS_ADDRESS_REQ: int = 0x17
|
||
|
|
PROTO_ADDRESS_QUERY: int = 0x1A
|
||
|
|
PROTO_TIME_SYNC: int = 0x1F
|
||
|
|
PROTO_GPS: int = 0x22
|
||
|
|
PROTO_LBS_MULTI: int = 0x28
|
||
|
|
PROTO_LBS_MULTI_REPLY: int = 0x2E
|
||
|
|
PROTO_WIFI: int = 0x2C
|
||
|
|
PROTO_HEARTBEAT_EXT: int = 0x36
|
||
|
|
PROTO_ONLINE_CMD: int = 0x80
|
||
|
|
PROTO_ONLINE_CMD_REPLY: int = 0x81
|
||
|
|
PROTO_MESSAGE: int = 0x82
|
||
|
|
PROTO_TIME_SYNC_2: int = 0x8A
|
||
|
|
PROTO_GENERAL_INFO: int = 0x94
|
||
|
|
PROTO_ADDRESS_REPLY_EN: int = 0x97
|
||
|
|
PROTO_GPS_4G: int = 0xA0
|
||
|
|
PROTO_LBS_4G: int = 0xA1
|
||
|
|
PROTO_WIFI_4G: int = 0xA2
|
||
|
|
PROTO_ALARM_SINGLE_FENCE: int = 0xA3
|
||
|
|
PROTO_ALARM_MULTI_FENCE: int = 0xA4
|
||
|
|
PROTO_ALARM_LBS_4G: int = 0xA5
|
||
|
|
PROTO_LBS_4G_ADDRESS_REQ: int = 0xA7
|
||
|
|
PROTO_ALARM_ACK: int = 0x26
|
||
|
|
PROTO_ALARM_WIFI: int = 0xA9
|
||
|
|
PROTO_ATTENDANCE: int = 0xB0
|
||
|
|
PROTO_ATTENDANCE_4G: int = 0xB1
|
||
|
|
PROTO_BT_PUNCH: int = 0xB2
|
||
|
|
PROTO_BT_LOCATION: int = 0xB3
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Alarm Types (bit-pattern -> name)
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
ALARM_TYPES: Dict[int, str] = {
|
||
|
|
0x00: "normal",
|
||
|
|
0x01: "sos",
|
||
|
|
0x02: "power_cut",
|
||
|
|
0x03: "vibration",
|
||
|
|
0x04: "enter_fence",
|
||
|
|
0x05: "exit_fence",
|
||
|
|
0x06: "over_speed",
|
||
|
|
0x09: "displacement",
|
||
|
|
0x0A: "enter_gps_dead_zone",
|
||
|
|
0x0B: "exit_gps_dead_zone",
|
||
|
|
0x0C: "power_on",
|
||
|
|
0x0D: "gps_first_fix",
|
||
|
|
0x0E: "low_battery",
|
||
|
|
0x0F: "low_battery_protection",
|
||
|
|
0x10: "sim_change",
|
||
|
|
0x11: "power_off",
|
||
|
|
0x12: "airplane_mode",
|
||
|
|
0x13: "remove",
|
||
|
|
0x14: "door",
|
||
|
|
0x15: "shutdown",
|
||
|
|
0x16: "voice_alarm",
|
||
|
|
0x17: "fake_base_station",
|
||
|
|
0x18: "cover_open",
|
||
|
|
0x19: "internal_low_battery",
|
||
|
|
0xFE: "acc_on",
|
||
|
|
0xFF: "acc_off",
|
||
|
|
}
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# GSM Signal Strength Levels
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
GSM_SIGNAL_LEVELS: Dict[int, str] = {
|
||
|
|
0x00: "No Signal",
|
||
|
|
0x01: "Very Weak",
|
||
|
|
0x02: "Weak",
|
||
|
|
0x03: "Good",
|
||
|
|
0x04: "Strong",
|
||
|
|
}
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Data Report Mode (0x00 - 0x0F)
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
DATA_REPORT_MODES: Dict[int, str] = {
|
||
|
|
0x00: "Timing Upload", # 定时上报
|
||
|
|
0x01: "Distance Upload", # 定距上报
|
||
|
|
0x02: "Turn Point Upload", # 拐点上传
|
||
|
|
0x03: "ACC Status Changed", # ACC状态改变上传
|
||
|
|
0x04: "Last Point After Stop", # 运动→静止补传最后定位点
|
||
|
|
0x05: "Reconnect Upload", # 断网重连上报最后有效点
|
||
|
|
0x06: "Ephemeris Force Upload", # 星历更新强制上传GPS点
|
||
|
|
0x07: "Button Upload", # 按键上传定位点
|
||
|
|
0x08: "Power On Upload", # 开机上报位置信息
|
||
|
|
0x09: "Unused", # 未使用
|
||
|
|
0x0A: "Static Update", # 设备静止后上报(时间更新)
|
||
|
|
0x0B: "WiFi Parsed Upload", # WIFI解析经纬度上传
|
||
|
|
0x0C: "LJDW Upload", # 立即定位指令上报
|
||
|
|
0x0D: "Static Last Point", # 设备静止后上报最后经纬度
|
||
|
|
0x0E: "GPSDUP Upload", # 静止状态定时上传
|
||
|
|
0x0F: "Exit Tracking Mode", # 退出追踪模式
|
||
|
|
}
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Protocol Numbers That Require a Server Response
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
PROTOCOLS_REQUIRING_RESPONSE: FrozenSet[int] = frozenset({
|
||
|
|
PROTO_LOGIN,
|
||
|
|
PROTO_HEARTBEAT,
|
||
|
|
PROTO_LBS_ADDRESS_REQ,
|
||
|
|
PROTO_ADDRESS_QUERY,
|
||
|
|
PROTO_TIME_SYNC,
|
||
|
|
PROTO_LBS_MULTI,
|
||
|
|
PROTO_HEARTBEAT_EXT,
|
||
|
|
PROTO_TIME_SYNC_2,
|
||
|
|
# PROTO_GENERAL_INFO (0x94) does NOT require response per protocol doc
|
||
|
|
PROTO_ALARM_SINGLE_FENCE,
|
||
|
|
PROTO_ALARM_MULTI_FENCE,
|
||
|
|
PROTO_ALARM_LBS_4G,
|
||
|
|
PROTO_LBS_4G_ADDRESS_REQ,
|
||
|
|
PROTO_ALARM_WIFI,
|
||
|
|
PROTO_ATTENDANCE,
|
||
|
|
PROTO_ATTENDANCE_4G,
|
||
|
|
PROTO_BT_PUNCH,
|
||
|
|
# Note: PROTO_BT_LOCATION (0xB3) does NOT require a response per protocol spec
|
||
|
|
})
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Protocol Number -> Human-Readable Name
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
PROTOCOL_NAMES: Dict[int, str] = {
|
||
|
|
PROTO_LOGIN: "Login",
|
||
|
|
PROTO_HEARTBEAT: "Heartbeat",
|
||
|
|
PROTO_LBS_ADDRESS_REQ: "LBS Address Request",
|
||
|
|
PROTO_ADDRESS_QUERY: "Address Query",
|
||
|
|
PROTO_TIME_SYNC: "Time Sync",
|
||
|
|
PROTO_ALARM_ACK: "Alarm ACK",
|
||
|
|
PROTO_GPS: "GPS",
|
||
|
|
PROTO_LBS_MULTI: "LBS Multi",
|
||
|
|
PROTO_LBS_MULTI_REPLY: "LBS Multi Reply",
|
||
|
|
PROTO_WIFI: "WIFI",
|
||
|
|
PROTO_HEARTBEAT_EXT: "Heartbeat Extended",
|
||
|
|
PROTO_ONLINE_CMD: "Online Command",
|
||
|
|
PROTO_ONLINE_CMD_REPLY: "Online Command Reply",
|
||
|
|
PROTO_MESSAGE: "Message",
|
||
|
|
PROTO_TIME_SYNC_2: "Time Sync 2",
|
||
|
|
PROTO_GENERAL_INFO: "General Info",
|
||
|
|
PROTO_ADDRESS_REPLY_EN: "Address Reply (EN)",
|
||
|
|
PROTO_GPS_4G: "GPS 4G",
|
||
|
|
PROTO_LBS_4G: "LBS 4G",
|
||
|
|
PROTO_WIFI_4G: "WIFI 4G",
|
||
|
|
PROTO_ALARM_SINGLE_FENCE: "Alarm Single Fence",
|
||
|
|
PROTO_ALARM_MULTI_FENCE: "Alarm Multi Fence",
|
||
|
|
PROTO_ALARM_LBS_4G: "Alarm LBS 4G",
|
||
|
|
PROTO_LBS_4G_ADDRESS_REQ: "LBS 4G Address Request",
|
||
|
|
PROTO_ALARM_WIFI: "Alarm WIFI",
|
||
|
|
PROTO_ATTENDANCE: "Attendance",
|
||
|
|
PROTO_ATTENDANCE_4G: "Attendance 4G",
|
||
|
|
PROTO_BT_PUNCH: "BT Punch",
|
||
|
|
PROTO_BT_LOCATION: "BT Location",
|
||
|
|
}
|