@@ -359,6 +359,54 @@ def test_parse_multiple_32bit_uuids():
359359 assert adv .tx_power is None
360360
361361
362+ def test_parse_mixed_16bit_32bit_uuids ():
363+ """Test parsing advertisement data with 16-bit UUID followed by 32-bit UUID."""
364+ # Build advertisement data with:
365+ # - One 16-bit UUID: 0x1234
366+ # - Two 32-bit UUIDs: 0x56789ABC, 0xDEF01234
367+ data = [
368+ bytes .fromhex (
369+ "03023412" # Length=3, Type=0x02, UUID=0x1234 (little-endian)
370+ "090478563412F0DEBC9A" # Length=9, Type=0x04, UUIDs in little-endian
371+ )
372+ ]
373+ adv = parse_advertisement_data (data )
374+
375+ assert adv .service_uuids == [
376+ "00001234-0000-1000-8000-00805f9b34fb" , # 16-bit
377+ "12345678-0000-1000-8000-00805f9b34fb" , # 32-bit
378+ "9abcdef0-0000-1000-8000-00805f9b34fb" , # 32-bit
379+ ]
380+ assert adv .local_name is None
381+ assert adv .service_data == {}
382+ assert adv .manufacturer_data == {}
383+ assert adv .tx_power is None
384+
385+
386+ def test_parse_mixed_16bit_128bit_uuids ():
387+ """Test parsing advertisement data with 16-bit UUID followed by 128-bit UUID."""
388+ # Build advertisement data with:
389+ # - One 16-bit UUID: 0x1234
390+ # - One 128-bit UUID: 550e8400-e29b-41d4-a716-446655440000
391+ # Note: 128-bit UUIDs are stored in reverse byte order in BLE
392+ data = [
393+ bytes .fromhex (
394+ "03023412" # Length=3, Type=0x02, UUID=0x1234 (little-endian)
395+ "110600004455664416a7d4419be200840e55" # Length=17, Type=0x06, 128-bit UUID (reversed)
396+ )
397+ ]
398+ adv = parse_advertisement_data (data )
399+
400+ assert adv .service_uuids == [
401+ "00001234-0000-1000-8000-00805f9b34fb" , # 16-bit
402+ "550e8400-e29b-41d4-a716-446655440000" , # 128-bit
403+ ]
404+ assert adv .local_name is None
405+ assert adv .service_data == {}
406+ assert adv .manufacturer_data == {}
407+ assert adv .tx_power is None
408+
409+
362410def test_parse_advertisement_data_zero_padded_scan_included ():
363411 data = [
364412 b"\x02 \x01 \x06 \t \xff Y\x00 \xfe \x02 4\x9e \xa6 \xba \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 "
0 commit comments