• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright (C) 2025 The Android Open Source Project
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 #ifndef BLE_APPEARANCE_H
20 #define BLE_APPEARANCE_H
21 
22 #include <cstdint>
23 
24 #include "bt_dev_class.h"
25 
26 /**
27  * BLE appearance values as per BT spec assigned numbers.
28  * Definitions and mapping from BLE appearance to COD.
29  * The set represents:
30  * - BLE Appearance string
31  * - BLE Appearance value
32  * - Class of device Service
33  * - COD Major Class
34  * - COD Minor Class
35  *
36  * Note: To add mapping for a new BLE appearance value for a category, add a
37  *  new macro to the appropriate APPEARANCE_TO_COD_XXXX macro, and then
38  *  add this APPEARANCE_TO_COD_XXXX macro to the APPEARANCE_TO_COD macro
39  *  (if not already added).
40  */
41 
42 /* Category Unknown [15:6] 0x000 */
43 #define APPEARANCE_TO_COD_UNKNOWN(X) \
44   X(BLE_APPEARANCE_UNKNOWN, 0x0000, COD_SERVICE_NA, COD_MAJOR_UNCLASSIFIED, COD_MINOR_UNCATEGORIZED)
45 
46 /* Category Phone [15:6] 0x001 */
47 #define APPEARANCE_TO_COD_PHONE(X)                                         \
48   X(BLE_APPEARANCE_GENERIC_PHONE, 0x0040, COD_SERVICE_NA, COD_MAJOR_PHONE, \
49     COD_MAJOR_PHONE_MINOR_UNCATEGORIZED)
50 
51 /* Category Computer [15:6] 0x002 */
52 #define BLE_APPEARANCE_DESKTOP_WORKSTATION 0x81
53 #define BLE_APPEARANCE_SERVER_CLASS_COMPUTER 0x82
54 #define BLE_APPEARANCE_LAPTOP 0x83
55 #define BLE_APPEARANCE_HANDHELD_PC_PDA 0x84
56 #define BLE_APPEARANCE_PALM_SIZE_PC_PDA 0x85
57 #define BLE_APPEARANCE_WEARABLE_COMPUTER_WATCH_SIZE 0x86
58 #define BLE_APPEARANCE_TABLET 0x87
59 #define BLE_APPEARANCE_DOCKING_STATION 0x88
60 #define BLE_APPEARANCE_ALL_IN_ONE 0x89
61 #define BLE_APPEARANCE_BLADE_SERVER 0x8A
62 #define BLE_APPEARANCE_CONVERTIBLE 0x8B
63 #define BLE_APPEARANCE_DETACHABLE 0x8C
64 #define BLE_APPEARANCE_IOT_GATEWAY 0x8D
65 #define BLE_APPEARANCE_MINI_PC 0x8E
66 #define BLE_APPEARANCE_STICK_PC 0x8F
67 #define APPEARANCE_TO_COD_COMPUTER(X)                                            \
68   X(BLE_APPEARANCE_GENERIC_COMPUTER, 0x0080, COD_SERVICE_NA, COD_MAJOR_COMPUTER, \
69     COD_MAJOR_COMPUTER_MINOR_UNCATEGORIZED)
70 
71 /* Category Watch [15:6] 0x003 */
72 #define BLE_APPEARANCE_SMART_WATCH 0x00C2
73 #define APPEARANCE_TO_COD_WATCH(X)                                            \
74   X(BLE_APPEARANCE_GENERIC_WATCH, 0x00C0, COD_SERVICE_NA, COD_MAJOR_WEARABLE, \
75     COD_MAJOR_WEARABLE_MINOR_WRIST_WATCH)                                     \
76   X(BLE_APPEARANCE_SPORTS_WATCH, 0x00C1, COD_SERVICE_NA, COD_MAJOR_WEARABLE,  \
77     COD_MAJOR_WEARABLE_MINOR_WRIST_WATCH)
78 
79 /* Category Clock [15:6] 0x004 */
80 #define BLE_APPEARANCE_GENERIC_CLOCK 0x0100
81 
82 /* Category Display [15:6] 0x005 */
83 #define APPEARANCE_TO_COD_DISPLAY(X)                                           \
84   X(BLE_APPEARANCE_GENERIC_DISPLAY, 0x0140, COD_SERVICE_NA, COD_MAJOR_IMAGING, \
85     COD_MAJOR_IMAGING_MINOR_DISPLAY)
86 
87 /* Category Remote Control [15:6] 0x006 */
88 #define APPEARANCE_TO_COD_REMOTE_CONTROL(X)                                      \
89   X(BLE_APPEARANCE_GENERIC_REMOTE, 0x0180, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL, \
90     COD_MAJOR_PERIPH_MINOR_REMOTE_CONTROL)
91 
92 /* Category Eye-glasses [15:6] 0x007 */
93 #define APPEARANCE_TO_COD_EYEGLASSES(X)                                            \
94   X(BLE_APPEARANCE_GENERIC_EYEGLASSES, 0x01C0, COD_SERVICE_NA, COD_MAJOR_WEARABLE, \
95     COD_MAJOR_WEARABLE_MINOR_GLASSES)
96 
97 /* Category Tag [15:6] 0x008 */
98 #define BLE_APPEARANCE_GENERIC_TAG 0x0200
99 
100 /* Category Keyring [15:6] 0x009 */
101 #define BLE_APPEARANCE_GENERIC_KEYRING 0x0240
102 
103 /* Category Media Player [15:6] 0x00A */
104 #define APPEARANCE_TO_COD_MEDIA_PLAYER(X)                                         \
105   X(BLE_APPEARANCE_GENERIC_MEDIA_PLAYER, 0x0280, COD_SERVICE_NA, COD_MAJOR_AUDIO, \
106     COD_MINOR_UNCATEGORIZED)
107 
108 /* Category Barcode Scanner [15:6] 0x00B */
109 #define APPEARANCE_TO_COD_BARCODE_SCANNER(X)                                              \
110   X(BLE_APPEARANCE_GENERIC_BARCODE_SCANNER, 0x02C0, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL, \
111     COD_MAJOR_PERIPH_MINOR_UNCATEGORIZED)
112 
113 /* Category Thermometer [15:6] 0x00C */
114 #define APPEARANCE_TO_COD_THERMOMETER(X)                                          \
115   X(BLE_APPEARANCE_GENERIC_THERMOMETER, 0x0300, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
116     COD_MAJOR_HEALTH_MINOR_THERMOMETER)                                           \
117   X(BLE_APPEARANCE_THERMOMETER_EAR, 0x0301, COD_SERVICE_NA, COD_MAJOR_HEALTH,     \
118     COD_MAJOR_HEALTH_MINOR_THERMOMETER)
119 
120 /* Category Heart Rate Sensor [15:6] 0x00D */
121 #define APPEARANCE_TO_COD_HEART_RATE_SENSOR(X)                                   \
122   X(BLE_APPEARANCE_GENERIC_HEART_RATE, 0x0340, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
123     COD_MAJOR_HEALTH_MINOR_HEART_PULSE_MONITOR)                                  \
124   X(BLE_APPEARANCE_HEART_RATE_BELT, 0x0341, COD_SERVICE_NA, COD_MAJOR_HEALTH,    \
125     COD_MAJOR_HEALTH_MINOR_HEART_PULSE_MONITOR)
126 
127 /* Category Blood Pressure [15:6] 0x00E */
128 #define APPEARANCE_TO_COD_BLOOD_PRESSURE(X)                                          \
129   X(BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE, 0x0380, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
130     COD_MAJOR_HEALTH_MINOR_BLOOD_MONITOR)                                            \
131   X(BLE_APPEARANCE_BLOOD_PRESSURE_ARM, 0x0381, COD_SERVICE_NA, COD_MAJOR_HEALTH,     \
132     COD_MAJOR_HEALTH_MINOR_BLOOD_MONITOR)                                            \
133   X(BLE_APPEARANCE_BLOOD_PRESSURE_WRIST, 0x0382, COD_SERVICE_NA, COD_MAJOR_HEALTH,   \
134     COD_MAJOR_HEALTH_MINOR_BLOOD_MONITOR)
135 
136 /* Category HID [15:6] 0x00F */
137 #define BLE_APPEARANCE_HID_TOUCHPAD 0x03C9
138 #define BLE_APPEARANCE_HID_PRESENTATION_REMOTE 0x03CA
139 #define APPEARANCE_TO_COD_HID(X)                                                       \
140   X(BLE_APPEARANCE_GENERIC_HID, 0x03C0, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL,          \
141     COD_MAJOR_PERIPH_MINOR_UNCATEGORIZED)                                              \
142   X(BLE_APPEARANCE_HID_KEYBOARD, 0x03C1, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL,         \
143     COD_MAJOR_PERIPH_MINOR_KEYBOARD)                                                   \
144   X(BLE_APPEARANCE_HID_MOUSE, 0x03C2, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL,            \
145     COD_MAJOR_PERIPH_MINOR_POINTING)                                                   \
146   X(BLE_APPEARANCE_HID_JOYSTICK, 0x03C3, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL,         \
147     COD_MAJOR_PERIPH_MINOR_JOYSTICK)                                                   \
148   X(BLE_APPEARANCE_HID_GAMEPAD, 0x03C4, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL,          \
149     COD_MAJOR_PERIPH_MINOR_GAMEPAD)                                                    \
150   X(BLE_APPEARANCE_HID_DIGITIZER_TABLET, 0x03C5, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL, \
151     COD_MAJOR_PERIPH_MINOR_DIGITIZING_TABLET)                                          \
152   X(BLE_APPEARANCE_HID_CARD_READER, 0x03C6, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL,      \
153     COD_MAJOR_PERIPH_MINOR_CARD_READER)                                                \
154   X(BLE_APPEARANCE_HID_DIGITAL_PEN, 0x03C7, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL,      \
155     COD_MAJOR_PERIPH_MINOR_DIGITAL_PEN)                                                \
156   X(BLE_APPEARANCE_HID_BARCODE_SCANNER, 0x03C8, COD_SERVICE_NA, COD_MAJOR_PERIPHERAL,  \
157     COD_MAJOR_PERIPH_MINOR_UNCATEGORIZED)
158 
159 /* Category Glucose Meter [15:6] 0x010 */
160 #define APPEARANCE_TO_COD_GLUCOSE_METER(X)                                    \
161   X(BLE_APPEARANCE_GENERIC_GLUCOSE, 0x0400, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
162     COD_MAJOR_HEALTH_MINOR_GLUCOSE_METER)
163 
164 /* Category Running Walking Sensor [15:6] 0x011 */
165 #define APPEARANCE_TO_COD_RUNNING_WALKING_SENSOR(X)                           \
166   X(BLE_APPEARANCE_GENERIC_WALKING, 0x0440, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
167     COD_MAJOR_HEALTH_MINOR_STEP_COUNTER)                                      \
168   X(BLE_APPEARANCE_WALKING_IN_SHOE, 0x0441, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
169     COD_MAJOR_HEALTH_MINOR_STEP_COUNTER)                                      \
170   X(BLE_APPEARANCE_WALKING_ON_SHOE, 0x0442, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
171     COD_MAJOR_HEALTH_MINOR_STEP_COUNTER)                                      \
172   X(BLE_APPEARANCE_WALKING_ON_HIP, 0x0443, COD_SERVICE_NA, COD_MAJOR_HEALTH,  \
173     COD_MAJOR_HEALTH_MINOR_STEP_COUNTER)
174 
175 /* Category Cycling [15:6] 0x012 */
176 #define BLE_APPEARANCE_GENERIC_CYCLING 0x0480
177 #define BLE_APPEARANCE_CYCLING_COMPUTER 0x0481
178 #define BLE_APPEARANCE_CYCLING_SPEED 0x0482
179 #define BLE_APPEARANCE_CYCLING_CADENCE 0x0483
180 #define BLE_APPEARANCE_CYCLING_POWER 0x0484
181 #define BLE_APPEARANCE_CYCLING_SPEED_CADENCE 0x0485
182 
183 /* Category Control Device [15:6] 0x013 */
184 #define BLE_APPEARANCE_GENERIC_CONTROL_DEVICE 0x04C0
185 #define BLE_APPEARANCE_SWITCH 0x04C1
186 #define BLE_APPEARANCE_MULTI_SWITCH 0x04C2
187 #define BLE_APPEARANCE_SWITCH_BUTTON 0x04C3
188 #define BLE_APPEARANCE_SWITCH_SLIDER 0x04C4
189 #define BLE_APPEARANCE_ROTARY_SWITCH 0x04C5
190 #define BLE_APPEARANCE_TOUCH_PANEL 0x04C6
191 #define BLE_APPEARANCE_SINGLE_SWITCH 0x04C7
192 #define BLE_APPEARANCE_DOUBLE_SWITCH 0x04C8
193 #define BLE_APPEARANCE_TRIPLE_SWITCH 0x04C9
194 #define BLE_APPEARANCE_BATTERY_SWITCH 0x04CA
195 #define BLE_APPEARANCE_ENERGY_HARVESTING_SWITCH 0x04CB
196 #define BLE_APPEARANCE_SWITCH_PUSH_BUTTON 0x04CC
197 #define BLE_APPEARANCE_SWITCH_DIAL 0x04CD
198 
199 /* Category Network Device [15:6] 0x014 */
200 #define BLE_APPEARANCE_GENERIC_NETWORK_DEVICE 0x0500
201 #define BLE_APPEARANCE_NETWORK_DEVICE_ACCESS_POINT 0x0501
202 #define BLE_APPEARANCE_NETWORK_DEVICE_MESH_DEVICE 0x0502
203 #define BLE_APPEARANCE_NETWORK_DEVICE_MESH_NETWORK_PROXY 0x0503
204 
205 /* Category Sensor [15:6] 0x015 */
206 #define BLE_APPEARANCE_GENERIC_SENSOR 0x0540
207 #define BLE_APPEARANCE_MOTION_SENSOR 0x0541
208 #define BLE_APPEARANCE_AIR_QUALITY_SENSOR 0x0542
209 #define BLE_APPEARANCE_TEMPERATURE_SENSOR 0x0543
210 #define BLE_APPEARANCE_HUMIDITY_SENSOR 0x0544
211 #define BLE_APPEARANCE_LEAK_SENSOR 0x05
212 #define BLE_APPEARANCE_SMOKE_SENSOR 0x0546
213 #define BLE_APPEARANCE_OCCUPANCY_SENSOR 0x0547
214 #define BLE_APPEARANCE_CONTACT_SENSOR 0x0548
215 #define BLE_APPEARANCE_CARBON_MONOXIDE_SENSOR 0x0549
216 #define BLE_APPEARANCE_CARBON_DIOXIDE_SENSOR 0x054A
217 #define BLE_APPEARANCE_AMBIENT_LIGHT_SENSOR 0x054B
218 #define BLE_APPEARANCE_ENERGY_SENSOR 0x054C
219 #define BLE_APPEARANCE_COLOR_LIGHT_SENSOR 0x054D
220 #define BLE_APPEARANCE_RAIN_SENSOR 0x054E
221 #define BLE_APPEARANCE_FIRE_SENSOR 0x054F
222 #define BLE_APPEARANCE_WIND_SENSOR 0x0550
223 #define BLE_APPEARANCE_PROXIMITY_SENSOR 0x0551
224 #define BLE_APPEARANCE_MULTI_SENSOR 0x0552
225 #define BLE_APPEARANCE_FLUSH_MOUNTED_SENSOR 0x0553
226 #define BLE_APPEARANCE_CEILING_MOUNTED_SENSOR 0x0554
227 #define BLE_APPEARANCE_WALL_MOUNTED_SENSOR 0x0555
228 #define BLE_APPEARANCE_MULTISENSOR 0x0556
229 #define BLE_APPEARANCE_SENSOR_ENERGY_METER 0x0557
230 #define BLE_APPEARANCE_SENSOR_FLAME_DETECTOR 0x0558
231 #define BLE_APPEARANCE_VEHICLE_TIRE_PRESSURE_SENSOR 0x0559
232 
233 /* Category Light Fixtures [15:6] 0x016 */
234 #define BLE_APPEARANCE_GENERIC_LIGHT_FIXTURE 0x0580
235 #define BLE_APPEARANCE_WALL_LIGHT 0x0581
236 #define BLE_APPEARANCE_CEILING_LIGHT 0x0582
237 #define BLE_APPEARANCE_FLOOR_LIGHT 0x0583
238 #define BLE_APPEARANCE_CABINET_LIGHT 0x0584
239 #define BLE_APPEARANCE_DESK_LIGHT 0x0585
240 #define BLE_APPEARANCE_TROFFER_LIGHT 0x0586
241 #define BLE_APPEARANCE_PENDANT_LIGHT 0x0587
242 #define BLE_APPEARANCE_IN_GROUND_LIGHT 0x0588
243 #define BLE_APPEARANCE_FLOOD_LIGHT 0x0589
244 #define BLE_APPEARANCE_UNDERWATER_LIGHT 0x058A
245 #define BLE_APPEARANCE_BOLLARD_WITH_LIGHT 0x058B
246 #define BLE_APPEARANCE_PATHWAY_LIGHT 0x058C
247 #define BLE_APPEARANCE_GARDEN_LIGHT 0x058D
248 #define BLE_APPEARANCE_POLE_TOP_LIGHT 0x058E
249 #define BLE_APPEARANCE_SPOTLIGHT 0x058F
250 #define BLE_APPEARANCE_LINEAR_LIGHT 0x0590
251 #define BLE_APPEARANCE_STREET_LIGHT 0x0591
252 #define BLE_APPEARANCE_SHELVES_LIGHT 0x0592
253 #define BLE_APPEARANCE_BAY_LIGHT 0x0593
254 #define BLE_APPEARANCE_EMERGENCY_EXIT_LIGHT 0x0594
255 #define BLE_APPEARANCE_LIGHT_CONTROLLER 0x0595
256 #define BLE_APPEARANCE_LIGHT_DRIVER 0x0596
257 #define BLE_APPEARANCE_BULB 0x0597
258 #define BLE_APPEARANCE_LOW_BAY_LIGHT 0x0598
259 #define BLE_APPEARANCE_HIGH_BAY_LIGHT 0x0599
260 
261 /* Category Fan [15:6] 0x017 */
262 #define BLE_APPEARANCE_GENERIC_FAN 0x05C0
263 #define BLE_APPEARANCE_CEILING_FAN 0x05C1
264 #define BLE_APPEARANCE_AXIAL_FAN 0x05C2
265 #define BLE_APPEARANCE_EXHAUST_FAN 0x05C3
266 #define BLE_APPEARANCE_PEDESTAL_FAN 0x05C4
267 #define BLE_APPEARANCE_DESK_FAN 0x05C5
268 #define BLE_APPEARANCE_WALL_FAN 0x05C6
269 
270 /* Category HVAC [15:6] 0x018 */
271 #define BLE_APPEARANCE_GENERIC_HVAC 0x0600
272 #define BLE_APPEARANCE_HVAC_THERMOSTAT 0x0601
273 #define BLE_APPEARANCE_HVAC_HUMIDIFIER 0x0602
274 #define BLE_APPEARANCE_HVAC_DEHUMIDIFIER 0x0603
275 #define BLE_APPEARANCE_HVAC_HEATER 0x0604
276 #define BLE_APPEARANCE_HVAC_RADIATOR 0x0605
277 #define BLE_APPEARANCE_HVAC_BOILER 0x0606
278 #define BLE_APPEARANCE_HVAC_HEAT_PUMP 0x0607
279 #define BLE_APPEARANCE_HVAC_INFRARED_HEATER 0x0608
280 #define BLE_APPEARANCE_HVAC_RADIANT_PANEL_HEATER 0x0609
281 #define BLE_APPEARANCE_HVAC_FAN_HEATER 0x060A
282 #define BLE_APPEARANCE_HVAC_AIR_CURTAIN 0x060B
283 
284 /* Category Air Conditioning [15:6] 0x019 */
285 #define BLE_APPEARANCE_GENERIC_AIR_CONDITIONING 0x0640
286 
287 /* Category Humidifier [15:6] 0x01A */
288 #define BLE_APPEARANCE_GENERIC_HUMIDIFIER 0x0680
289 
290 /* Category Heating [15:6] 0x01B */
291 #define BLE_APPEARANCE_GENERIC_HEATING 0x06C0
292 #define BLE_APPEARANCE_HEATING_RADIATOR 0x06C1
293 #define BLE_APPEARANCE_HEATING_BOILER 0x06C2
294 #define BLE_APPEARANCE_HEATING_HEAT_PUMP 0x06C3
295 #define BLE_APPEARANCE_HEATING_INFRARED_HEATER 0x06C4
296 #define BLE_APPEARANCE_HEATING_RADIANT_PANEL_HEATER 0x06C5
297 #define BLE_APPEARANCE_HEATING_FAN_HEATER 0x06C6
298 #define BLE_APPEARANCE_HEATING_AIR_CURTAIN 0x06C7
299 
300 /* Category Access Control [15:6] 0x01C */
301 #define BLE_APPEARANCE_GENERIC_ACCESS_CONTROL 0x0700
302 #define BLE_APPEARANCE_ACCESS_DOOR 0x0701
303 #define BLE_APPEARANCE_ACCESS_CONTROL_GARAGE_DOOR 0x0702
304 #define BLE_APPEARANCE_ACCESS_CONTROL_EMERGENCY_EXIT_DOOR 0x0703
305 #define BLE_APPEARANCE_ACCESS_CONTROL_ACCESS_LOCK 0x0704
306 #define BLE_APPEARANCE_ACCESS_CONTROL_ELEVATOR 0x0705
307 #define BLE_APPEARANCE_ACCESS_CONTROL_WINDOW 0x0706
308 #define BLE_APPEARANCE_ACCESS_CONTROL_ENTRANCE_GATE 0x0707
309 #define BLE_APPEARANCE_ACCESS_CONTROL_DOOR_LOCK 0x0708
310 #define BLE_APPEARANCE_ACCESS_CONTROL_LOCKER 0x0709
311 
312 /* Category Motorized Device [15:6] 0x01D */
313 #define BLE_APPEARANCE_GENERIC_MOTORIZED_DEVICE 0x0740
314 #define BLE_APPEARANCE_MOTORIZED_GATE 0x0741
315 #define BLE_APPEARANCE_MOTORIZED_AWNING 0x0742
316 #define BLE_APPEARANCE_MOTORIZED_BLINDS_OR_SHADES 0x0743
317 #define BLE_APPEARANCE_MOTORIZED_CURTAINS 0x0744
318 #define BLE_APPEARANCE_MOTORIZED_SCREEN 0x0745
319 
320 /* Category Power Device [15:6] 0x01E */
321 #define BLE_APPEARANCE_GENERIC_POWER_DEVICE 0x0780
322 #define BLE_APPEARANCE_POWER_OUTLET 0x0781
323 #define BLE_APPEARANCE_POWER_STRIP 0x0782
324 #define BLE_APPEARANCE_POWER_PLUG 0x0783
325 #define BLE_APPEARANCE_POWER_SUPPLY 0x0784
326 
327 /* Category Light Source [15:6] 0x01F */
328 #define BLE_APPEARANCE_GENERIC_LIGHT_SOURCE 0x07C0
329 #define BLE_APPEARANCE_LIGHT_SOURCE_INCANDESCENT_LIGHT_BULB 0x07C1
330 #define BLE_APPEARANCE_LIGHT_SOURCE_LED_LAMP 0x07C2
331 #define BLE_APPEARANCE_LIGHT_SOURCE_HID_LAMP 0x07C3
332 #define BLE_APPEARANCE_LIGHT_SOURCE_FLUORESCENT_LAMP 0x07C4
333 #define BLE_APPEARANCE_LIGHT_SOURCE_LED_ARRAY 0x07C5
334 #define BLE_APPEARANCE_LIGHT_SOURCE_MULTI_COLOR_LED_ARRAY 0x07C6
335 #define BLE_APPEARANCE_LIGHT_SOURCE_LOW_VOLTAGE_HALOGEN 0x07C7
336 #define BLE_APPEARANCE_LIGHT_SOURCE_ORGANIC_LIGHT_EMITTING_DIODE_OLED 0x07C8
337 
338 /* Category Window Covering [15:6] 0x020 */
339 #define BLE_APPEARANCE_GENERIC_WINDOW_COVERING 0x0800
340 #define BLE_APPEARANCE_WINDOW_COVERING_WINDOW_SHADES 0x0801
341 #define BLE_APPEARANCE_WINDOW_COVERING_WINDOW_BLINDS 0x0802
342 #define BLE_APPEARANCE_WINDOW_COVERING_WINDOW_AWNING 0x0803
343 #define BLE_APPEARANCE_WINDOW_COVERING_WINDOW_CURTAIN 0x0804
344 #define BLE_APPEARANCE_WINDOW_COVERING_EXTERIOR_SHUTTER 0x0805
345 #define BLE_APPEARANCE_WINDOW_COVERING_EXTERIOR_SCREEN 0x0806
346 
347 /* Category Audio Sink [15:6] 0x021 */
348 #define BLE_APPEARANCE_GENERIC_AUDIO_SINK 0x0840
349 #define BLE_APPEARANCE_AUDIO_SINK_STANDALONE_SPEAKER 0x0841
350 #define BLE_APPEARANCE_AUDIO_SINK_SOUNDBAR 0x0842
351 #define BLE_APPEARANCE_AUDIO_SINK_BOOKSHELF_SPEAKER 0x0843
352 #define BLE_APPEARANCE_AUDIO_SINK_STANDMOUNTED_SPEAKER 0x0844
353 #define BLE_APPEARANCE_AUDIO_SINK_SPEAKERPHONE 0x0845
354 
355 /* Category Audio Source [15:6] 0x022 */
356 #define BLE_APPEARANCE_GENERIC_AUDIO_SOURCE 0x0880
357 #define BLE_APPEARANCE_AUDIO_SOURCE_MICROPHONE 0x0881
358 #define BLE_APPEARANCE_AUDIO_SOURCE_ALARM 0x0882
359 #define BLE_APPEARANCE_AUDIO_SOURCE_BELL 0x0883
360 #define BLE_APPEARANCE_AUDIO_SOURCE_HORN 0x0884
361 #define BLE_APPEARANCE_AUDIO_SOURCE_BROADCASTING_DEVICE 0x0885
362 #define BLE_APPEARANCE_AUDIO_SOURCE_SERVICE_DESK 0x0886
363 #define BLE_APPEARANCE_AUDIO_SOURCE_KIOSK 0x0887
364 #define BLE_APPEARANCE_AUDIO_SOURCE_BROADCASTING_ROOM 0x0888
365 #define BLE_APPEARANCE_AUDIO_SOURCE_AUDITORIUM 0x0889
366 
367 /* Category Motorized Vehicle [15:6] 0x023 */
368 #define BLE_APPEARANCE_GENERIC_MOTORIZED_VEHICLE 0x08C0
369 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_CAR 0x08C1
370 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_LARGE_GOODS 0x08C2
371 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_2_WHEELED 0x08C3
372 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_MOTORBIKE 0x08C4
373 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_SCOOTER 0x08C5
374 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_MOPED 0x08C6
375 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_3_WHEELED 0x08C7
376 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_LIGHT_VEHICLE 0x08C8
377 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_QUAD_BIKE 0x08C9
378 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_MINIBUS 0x08CA
379 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_BUS 0x08CB
380 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_TROLLEY 0x08CC
381 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_AGRICULTURAL_VEHICLE 0x08CD
382 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_CAMPER_CARAVAN 0x08CE
383 #define BLE_APPEARANCE_MOTORIZED_VEHICLE_RECREATIONAL_VEHICLE_MOTOR_HOME 0x08CF
384 
385 /* Category Domestic Appliance [15:6] 0x024 */
386 #define BLE_APPEARANCE_GENERIC_DOMESTIC_APPLIANCE 0x0900
387 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_REFRIGERATOR 0x0901
388 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_FREEZER 0x0902
389 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_OVEN 0x0903
390 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_MICROWAVE 0x0904
391 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_TOASTER 0x0905
392 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_WASHING_MACHINE 0x0906
393 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_DRYER 0x0907
394 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_COFFEE_MAKER 0x0908
395 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_CLOTHES_IRON 0x0909
396 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_CURLING_IRON 0x090A
397 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_HAIR_DRYER 0x090B
398 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_VACUUM_CLEANER 0x090C
399 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_ROBOTIC_VACUUM_CLEANER 0x090D
400 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_RICE_COOKER 0x090E
401 #define BLE_APPEARANCE_DOMESTIC_APPLIANCE_CLOTHES_STEAMER 0x090F
402 
403 /* Category Wearable Audio Device [15:6] 0x025 */
404 #define APPEARANCE_TO_COD_WEARABLE_AUDIO_DEVICE(X)                                              \
405   X(BLE_APPEARANCE_GENERIC_WEARABLE_AUDIO_DEVICE, 0x0940,                                       \
406     (COD_SERVICE_AUDIO | COD_SERVICE_RENDERING) >> 8, (COD_MAJOR_AUDIO | COD_SERVICE_LE_AUDIO), \
407     COD_MAJOR_AUDIO_MINOR_WEARABLE_HEADSET)                                                        \
408   X(BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_EARBUD, 0x0941,                                        \
409     (COD_SERVICE_AUDIO | COD_SERVICE_RENDERING) >> 8, (COD_MAJOR_AUDIO | COD_SERVICE_LE_AUDIO), \
410     COD_MAJOR_AUDIO_MINOR_WEARABLE_HEADSET)                                                        \
411   X(BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADSET, 0x0942,                                       \
412     (COD_SERVICE_AUDIO | COD_SERVICE_RENDERING) >> 8, (COD_MAJOR_AUDIO | COD_SERVICE_LE_AUDIO), \
413     COD_MAJOR_AUDIO_MINOR_WEARABLE_HEADSET)                                                        \
414   X(BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADPHONES, 0x0943,                                    \
415     (COD_SERVICE_AUDIO | COD_SERVICE_RENDERING) >> 8, (COD_MAJOR_AUDIO | COD_SERVICE_LE_AUDIO), \
416     COD_MAJOR_AUDIO_MINOR_WEARABLE_HEADSET)                                                        \
417   X(BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_NECK_BAND, 0x0944,                                     \
418     (COD_SERVICE_AUDIO | COD_SERVICE_RENDERING) >> 8, (COD_MAJOR_AUDIO | COD_SERVICE_LE_AUDIO), \
419     COD_MAJOR_AUDIO_MINOR_WEARABLE_HEADSET)
420 
421 /* Category Aircraft [15:6] 0x026 */
422 #define BLE_APPEARANCE_GENERIC_AIRCRAFT 0x0980
423 #define BLE_APPEARANCE_AIRCRAFT_LIGHT 0x0981
424 #define BLE_APPEARANCE_AIRCRAFT_MICROLIGHT 0x0982
425 #define BLE_APPEARANCE_AIRCRAFT_PARAGLIDER 0x0983
426 #define BLE_APPEARANCE_AIRCRAFT_LARGE_PASSENGER 0x0984
427 
428 /* Category Audio/Video Equipment [15:6] 0x027 */
429 #define BLE_APPEARANCE_GENERIC_AV_EQUIPMENT 0x09C0
430 #define BLE_APPEARANCE_AV_EQUIPMENT_AMPLIFIER 0x09C1
431 #define BLE_APPEARANCE_AV_EQUIPMENT_RECEIVER 0x09C2
432 #define BLE_APPEARANCE_AV_EQUIPMENT_RADIO 0x09C3
433 #define BLE_APPEARANCE_AV_EQUIPMENT_TUNER 0x09C4
434 #define BLE_APPEARANCE_AV_EQUIPMENT_TURNTABLE 0x09C5
435 #define BLE_APPEARANCE_AV_EQUIPMENT_CD_PLAYER 0x09C6
436 #define BLE_APPEARANCE_AV_EQUIPMENT_DVD_PLAYER 0x09C7
437 #define BLE_APPEARANCE_AV_EQUIPMENT_BLU_RAY_PLAYER 0x09C8
438 #define BLE_APPEARANCE_AV_EQUIPMENT_OPTICAL_DISC_PLAYER 0x09C9
439 #define BLE_APPEARANCE_AV_EQUIPMENT_SET_TOP_BOX 0x09CA
440 
441 /* Category Display Equipment [15:6] 0x028 */
442 #define BLE_APPEARANCE_GENERIC_DISPLAY_EQUIPMENT 0x0A00
443 #define BLE_APPEARANCE_DISPLAY_EQUIPMENT_TELEVISION 0x0A01
444 #define BLE_APPEARANCE_DISPLAY_EQUIPMENT_MONITOR 0x0A02
445 #define BLE_APPEARANCE_DISPLAY_EQUIPMENT_PROJECTOR 0x0A03
446 
447 /* Category Hearing Aid [15:6] 0x029 */
448 #define BLE_APPEARANCE_GENERIC_HEARING_AID 0x0A40
449 #define BLE_APPEARANCE_HEARING_AID_IN_EAR 0x0A41
450 #define BLE_APPEARANCE_HEARING_AID_BEHIND_EAR 0x0A42
451 #define BLE_APPEARANCE_HEARING_AID_COCHLLEAR_IMPLANT 0x0A43
452 
453 /* Category Gaming [15:6] 0x02A */
454 #define BLE_APPEARANCE_GENERIC_GAMING 0x0A80
455 #define BLE_APPEARANCE_GAMING_HOME_VIDEO_GAME_CONSOLE 0x0A81
456 #define BLE_APPEARANCE_GAMING_PORTABLE_HANDHELD_CONSOLE 0x0A82
457 
458 /* Category Signage [15:6] 0x02B */
459 #define BLE_APPEARANCE_GENERIC_SIGNAGE 0x0AC0
460 #define BLE_APPEARANCE_SIGNAGE_DIGITAL 0x0AC1
461 #define BLE_APPEARANCE_SIGNAGE_ELECTRONIC_LABEL 0x0AC2
462 
463 /* Category Pulse Oximeter [15:6] 0x031 */
464 #define APPEARANCE_TO_COD_PULSE_OXIMETER(X)                                            \
465   X(BLE_APPEARANCE_GENERIC_PULSE_OXIMETER, 0x0C40, COD_SERVICE_NA, COD_MAJOR_HEALTH,   \
466     COD_MAJOR_HEALTH_MINOR_PULSE_OXIMETER)                                             \
467   X(BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP, 0x0C41, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
468     COD_MAJOR_HEALTH_MINOR_PULSE_OXIMETER)                                             \
469   X(BLE_APPEARANCE_PULSE_OXIMETER_WRIST, 0x0C42, COD_SERVICE_NA, COD_MAJOR_HEALTH,     \
470     COD_MAJOR_HEALTH_MINOR_PULSE_OXIMETER)
471 
472 /* Category Weight Scale [15:6] 0x032 */
473 #define APPEARANCE_TO_COD_WEIGHT_SCALE(X)                                    \
474   X(BLE_APPEARANCE_GENERIC_WEIGHT, 0x0C80, COD_SERVICE_NA, COD_MAJOR_HEALTH, \
475     COD_MAJOR_HEALTH_MINOR_WEIGHING_SCALE)
476 
477 /* Category Personal Mobility Device [15:6] 0x033 */
478 #define BLE_APPEARANCE_GENERIC_PERSONAL_MOBILITY_DEVICE 0x0CC0
479 #define BLE_APPEARANCE_PERSONAL_MOBILITY_DEVICE_POWERED_WHEELCHAIR 0x0CC1
480 #define BLE_APPEARANCE_PERSONAL_MOBILITY_DEVICE_MOBILITY_SCOOTER 0x0CC2
481 
482 /* Category Continuous Glucose Monitor [15:6] 0x034 */
483 #define BLE_APPEARANCE_GENERIC_CONTINUOUS_GLUCOSE_MONITOR 0x0D00
484 
485 /* Category Insulin Pump [15:6] 0x035 */
486 #define BLE_APPEARANCE_GENERIC_INSULIN_PUMP 0x0D40
487 #define BLE_APPEARANCE_INSULIN_PUMP_DURABLE 0x0D41
488 #define BLE_APPEARANCE_INSULIN_PUMP_PATCH 0x0D44
489 #define BLE_APPEARANCE_INSULIN_PUMP_PEN 0x0D48
490 
491 /* Category Medication Delivery [15:6] 0x036 */
492 #define BLE_APPEARANCE_GENERIC_MEDICATION_DELIVERY 0x0D80
493 
494 /* Category Spirometer [15:6] 0x037 */
495 #define BLE_APPEARANCE_GENERIC_SPIROMETER 0x0DC0
496 #define BLE_APPEARANCE_SPIROMETER_HANDHELD 0x0DC1
497 
498 /* Category Outdoor Sports Activity [15:6] 0x051 */
499 #define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS 0x1440
500 #define BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION 0x1441
501 #define BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV 0x1442
502 #define BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD 0x1443
503 #define BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV 0x1444
504 
505 /* Category Industrial Measurement Device [15:6] 0x052 */
506 #define BLE_APPEARANCE_GENERIC_INDUSTRIAL_MEASUREMENT_DEVICE 0x1480
507 #define BLE_APPEARANCE_INDUSTRIAL_MEASUREMENT_DEVICE_TORQUE_TESTING 0x1481
508 #define BLE_APPEARANCE_INDUSTRIAL_MEASUREMENT_DEVICE_CALIPER 0x1482
509 #define BLE_APPEARANCE_INDUSTRIAL_MEASUREMENT_DEVICE_DIAL_INDICATOR 0x1483
510 #define BLE_APPEARANCE_INDUSTRIAL_MEASUREMENT_DEVICE_MICROMETER 0x1484
511 #define BLE_APPEARANCE_INDUSTRIAL_MEASUREMENT_DEVICE_HEIGHT_GAUGE 0x1485
512 #define BLE_APPEARANCE_INDUSTRIAL_MEASUREMENT_DEVICE_FORCE_GAUGE 0x1486
513 
514 /* Category Industrial Tools [15:6] 0x053 */
515 #define BLE_APPEARANCE_GENERIC_INDUSTRIAL_TOOLS 0x14C0
516 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_MACHINE_TOOL_HOLDER 0x14C1
517 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_GENERIC_CLAMPING_DEVICE 0x14C2
518 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_CLAMPING_JAWS_JAWS_CHUCK 0x14C3
519 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_CLAMPING_COLLET_CHUCK 0x14C4
520 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_CLAMPING_MANDREL 0x14C5
521 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_VISE 0x14C6
522 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_ZERO_POINT_CLAMPING_SYSTEM 0x14C7
523 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_TORQUE_WRENCH 0x14C8
524 #define BLE_APPEARANCE_INDUSTRIAL_TOOLS_TORQUE_SCREWDRIVER 0x14C9
525 
526 /*
527  * Collection of all the appearance to COD functions per category.
528  * Note: Add the macro call here if a new definition is added.
529  */
530 #define APPEARANCE_TO_COD(X)                  \
531   APPEARANCE_TO_COD_UNKNOWN(X)                \
532   APPEARANCE_TO_COD_PHONE(X)                  \
533   APPEARANCE_TO_COD_COMPUTER(X)               \
534   APPEARANCE_TO_COD_WATCH(X)                  \
535   APPEARANCE_TO_COD_DISPLAY(X)                \
536   APPEARANCE_TO_COD_REMOTE_CONTROL(X)         \
537   APPEARANCE_TO_COD_EYEGLASSES(X)             \
538   APPEARANCE_TO_COD_MEDIA_PLAYER(X)           \
539   APPEARANCE_TO_COD_BARCODE_SCANNER(X)        \
540   APPEARANCE_TO_COD_THERMOMETER(X)            \
541   APPEARANCE_TO_COD_HEART_RATE_SENSOR(X)      \
542   APPEARANCE_TO_COD_BLOOD_PRESSURE(X)         \
543   APPEARANCE_TO_COD_HID(X)                    \
544   APPEARANCE_TO_COD_GLUCOSE_METER(X)          \
545   APPEARANCE_TO_COD_RUNNING_WALKING_SENSOR(X) \
546   APPEARANCE_TO_COD_WEARABLE_AUDIO_DEVICE(X)  \
547   APPEARANCE_TO_COD_PULSE_OXIMETER(X)         \
548   APPEARANCE_TO_COD_WEIGHT_SCALE(X)
549 
550 // Generates the BLE appearance definitions for reference
551 #define GENERATE_BLE_APPEARANCE_DEFINITIONS(_appearance, _value, _service, _major, _minor) \
552   constexpr uint16_t _appearance = _value;
553 
554 #define ADD_APPEARANCE_TO_COD_CASE(_appearance, _value, _service, _major, _minor) \
555   case _appearance:                                                               \
556     return DEV_CLASS{_service, _major, _minor};
557 
558 // Generate the actual definition for each appearance.
559 APPEARANCE_TO_COD(GENERATE_BLE_APPEARANCE_DEFINITIONS)
560 
561 #endif  // BLE_APPEARANCE_H