Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ardupilot
GitHub Repository: Ardupilot/ardupilot
Path: blob/master/Tools/scripts/decode_devid.py
9347 views
1
#!/usr/bin/env python3
2
3
# flake8: noqa
4
5
'''
6
decode a device ID, such as used for COMPASS_DEV_ID, INS_ACC_ID etc
7
8
To understand the devtype you should look at the backend headers for
9
the sensor library, such as libraries/AP_Compass/AP_Compass_Backend.h
10
'''
11
12
import sys
13
import optparse
14
15
def num(s):
16
try:
17
return int(s)
18
except ValueError:
19
return int(s, 16)
20
21
22
parser = optparse.OptionParser("decode_devid.py")
23
parser.add_option("-C", "--compass", action='store_true', help='decode compass IDs')
24
parser.add_option("-I", "--imu", action='store_true', help='decode IMU IDs')
25
parser.add_option("-B", "--baro", action='store_true', help='decode barometer IDs')
26
parser.add_option("-A", "--airspeed", action='store_true', help='decode airspeed IDs')
27
28
opts, args = parser.parse_args()
29
30
if len(args) == 0:
31
print("Please supply a device ID")
32
sys.exit(1)
33
34
devid=num(args[0])
35
36
bus_type=devid & 0x07
37
bus=(devid>>3) & 0x1F
38
address=(devid>>8)&0xFF
39
devtype=(devid>>16)
40
41
bustypes = {
42
1: "I2C",
43
2: "SPI",
44
3: "DRONECAN",
45
4: "SITL",
46
5: "MSP",
47
6: "SERIAL",
48
}
49
50
compass_types = {
51
0x01 : "DEVTYPE_HMC5883_OLD",
52
0x07 : "DEVTYPE_HMC5883",
53
0x02 : "DEVTYPE_LSM303D",
54
0x04 : "DEVTYPE_AK8963 ",
55
0x05 : "DEVTYPE_BMM150 ",
56
0x06 : "DEVTYPE_LSM9DS1",
57
0x08 : "DEVTYPE_LIS3MDL",
58
0x09 : "DEVTYPE_AK0991x",
59
0x0A : "DEVTYPE_IST8310",
60
0x0B : "DEVTYPE_ICM20948",
61
0x0C : "DEVTYPE_MMC3416",
62
0x0D : "DEVTYPE_QMC5883L",
63
0x0E : "DEVTYPE_MAG3110",
64
0x0F : "DEVTYPE_SITL",
65
0x10 : "DEVTYPE_IST8308",
66
0x11 : "DEVTYPE_RM3100_OLD",
67
0x12 : "DEVTYPE_RM3100",
68
0x13 : "DEVTYPE_MMC5883",
69
0x14 : "DEVTYPE_AK09918",
70
0x15 : "DEVTYPE_AK09915",
71
0x16 : "DEVTYPE_QMC5883P",
72
0x17 : "DEVTYPE_BMM350",
73
0x18 : "DEVTYPE_IIS2MDC",
74
0x19 : "DEVTYPE_LIS2MDL",
75
}
76
77
imu_types = {
78
0x09 : "DEVTYPE_BMI160",
79
0x10 : "DEVTYPE_L3G4200D",
80
0x11 : "DEVTYPE_ACC_LSM303D",
81
0x12 : "DEVTYPE_ACC_BMA180",
82
0x13 : "DEVTYPE_ACC_MPU6000",
83
0x16 : "DEVTYPE_ACC_MPU9250",
84
0x17 : "DEVTYPE_ACC_IIS328DQ",
85
0x21 : "DEVTYPE_GYR_MPU6000",
86
0x22 : "DEVTYPE_GYR_L3GD20",
87
0x24 : "DEVTYPE_GYR_MPU9250",
88
0x25 : "DEVTYPE_GYR_I3G4250D",
89
0x26 : "DEVTYPE_GYR_LSM9DS1",
90
0x27 : "DEVTYPE_INS_ICM20789",
91
0x28 : "DEVTYPE_INS_ICM20689",
92
0x29 : "DEVTYPE_INS_BMI055",
93
0x2A : "DEVTYPE_SITL",
94
0x2B : "DEVTYPE_INS_BMI088",
95
0x2C : "DEVTYPE_INS_ICM20948",
96
0x2D : "DEVTYPE_INS_ICM20648",
97
0x2E : "DEVTYPE_INS_ICM20649",
98
0x2F : "DEVTYPE_INS_ICM20602",
99
0x30 : "DEVTYPE_INS_ICM20601",
100
0x31 : "DEVTYPE_INS_ADIS1647x",
101
0x32 : "DEVTYPE_INS_SERIAL",
102
0x33 : "DEVTYPE_INS_ICM40609",
103
0x34 : "DEVTYPE_INS_ICM42688",
104
0x35 : "DEVTYPE_INS_ICM42605",
105
0x36 : "DEVTYPE_INS_ICM40605",
106
0x37 : "DEVTYPE_INS_IIM42652",
107
0x38 : "DEVTYPE_INS_BMI270",
108
0x39 : "DEVTYPE_INS_BMI085",
109
0x3A : "DEVTYPE_INS_ICM42670",
110
0x3B : "DEVTYPE_INS_ICM45686",
111
0x3C : "DEVTYPE_INS_SCHA63T",
112
0x3D : "DEVTYPE_INS_IIM42653",
113
}
114
115
baro_types = {
116
0x01 : "DEVTYPE_BARO_SITL",
117
0x02 : "DEVTYPE_BARO_BMP085",
118
0x03 : "DEVTYPE_BARO_BMP280",
119
0x04 : "DEVTYPE_BARO_BMP388",
120
0x05 : "DEVTYPE_BARO_DPS280",
121
0x06 : "DEVTYPE_BARO_DPS310",
122
0x07 : "DEVTYPE_BARO_FBM320",
123
0x08 : "DEVTYPE_BARO_ICM20789",
124
0x09 : "DEVTYPE_BARO_KELLERLD",
125
0x0A : "DEVTYPE_BARO_LPS2XH",
126
0x0B : "DEVTYPE_BARO_MS5611",
127
0x0C : "DEVTYPE_BARO_SPL06",
128
0x0D : "DEVTYPE_BARO_DRONECAN",
129
0x0E : "DEVTYPE_BARO_MSP",
130
0x0F : "DEVTYPE_BARO_ICP101XX",
131
0x10 : "DEVTYPE_BARO_ICP201XX",
132
0x11 : "DEVTYPE_BARO_MS5607",
133
0x12 : "DEVTYPE_BARO_MS5837_30BA",
134
0x13 : "DEVTYPE_BARO_MS5637",
135
0x14 : "DEVTYPE_BARO_BMP390",
136
0x15 : "DEVTYPE_BARO_BMP581",
137
0x16 : "DEVTYPE_BARO_SPA06",
138
0x17 : "DEVTYPE_BARO_AUAV",
139
0x18 : "DEVTYPE_BARO_MS5837_02BA",
140
}
141
142
airspeed_types = {
143
0x01 : "DEVTYPE_AIRSPEED_SITL",
144
0x02 : "DEVTYPE_AIRSPEED_MS4525",
145
0x03 : "DEVTYPE_AIRSPEED_MS5525",
146
0x04 : "DEVTYPE_AIRSPEED_DLVR",
147
0x05 : "DEVTYPE_AIRSPEED_MSP",
148
0x06 : "DEVTYPE_AIRSPEED_SDP3X",
149
0x07 : "DEVTYPE_AIRSPEED_DRONECAN",
150
0x08 : "DEVTYPE_AIRSPEED_ANALOG",
151
0x09 : "DEVTYPE_AIRSPEED_NMEA",
152
0x0A : "DEVTYPE_AIRSPEED_ASP5033",
153
0x0B : "DEVTYPE_AIRSPEED_AUAV",
154
}
155
156
decoded_devname = ""
157
158
if opts.compass:
159
decoded_devname = compass_types.get(devtype, "UNKNOWN")
160
161
if opts.imu:
162
decoded_devname = imu_types.get(devtype, "UNKNOWN")
163
164
if opts.baro:
165
decoded_devname = baro_types.get(devtype, "UNKNOWN")
166
167
if opts.airspeed:
168
decoded_devname = airspeed_types.get(devtype, "UNKNOWN")
169
170
if bus_type == 3:
171
#dronecan devtype represents sensor_id
172
print("bus_type:%s(%u) bus:%u address:%u(0x%x) sensor_id:%u(0x%x) %s" % (
173
bustypes.get(bus_type,"UNKNOWN"), bus_type,
174
bus, address, address, devtype-1, devtype-1, decoded_devname))
175
else:
176
print("bus_type:%s(%u) bus:%u address:%u(0x%x) devtype:%u(0x%x) %s" % (
177
bustypes.get(bus_type,"UNKNOWN"), bus_type,
178
bus, address, address, devtype, devtype, decoded_devname))
179
180