1 /******************************************************************************
2  *
3  *  Copyright (C) 2015 Google, Inc.
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 #pragma once
20 
21 #include "device/include/interop.h"
22 
23 typedef struct {
24   bt_bdaddr_t addr;
25   size_t length;
26   interop_feature_t feature;
27 } interop_addr_entry_t;
28 
29 static const interop_addr_entry_t interop_addr_database[] = {
30   // Nexus Remote (Spike)
31   // Note: May affect other Asus brand devices
32   {{{0x08, 0x62, 0x66,      0,0,0}}, 3, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
33   {{{0x38, 0x2c, 0x4a, 0xc9,  0,0}}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
34   {{{0x38, 0x2c, 0x4a, 0xe6,  0,0}}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
35   {{{0x54, 0xa0, 0x50, 0xd9,  0,0}}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
36   {{{0xac, 0x9e, 0x17,      0,0,0}}, 3, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
37   {{{0xf0, 0x79, 0x59,      0,0,0}}, 3, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
38 
39   // Ausdom M05 - unacceptably loud volume
40   {{{0xa0, 0xe9, 0xdb,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
41 
42   // BMW car kits (Harman/Becker)
43   {{{0x9c, 0xdf, 0x03,      0,0,0}}, 3, INTEROP_AUTO_RETRY_PAIRING},
44 
45   // Flic smart button
46   {{{0x80, 0xe4, 0xda, 0x70,  0,0}}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
47 
48   // iKross IKBT83B HS - unacceptably loud volume
49   {{{0x00, 0x14, 0x02,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
50 
51   // Jabra EXTREME 2 - unacceptably loud volume
52   {{{0x1c, 0x48, 0xf9,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
53 
54   // JayBird BlueBuds X - low granularity on volume control
55   {{{0x44, 0x5e, 0xf3,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
56   {{{0xd4, 0x9c, 0x28,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
57 
58   // JayBird Family
59   {{{0x00, 0x18, 0x91,      0,0,0}}, 3, INTEROP_2MBPS_LINK_ONLY},
60 
61   // LG Tone HBS-730 - unacceptably loud volume
62   {{{0x00, 0x18, 0x6b,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
63   {{{0xb8, 0xad, 0x3e,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
64 
65   // LG Tone HV-800 - unacceptably loud volume
66   {{{0xa0, 0xe9, 0xdb,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
67 
68   // Motorola Key Link
69   {{{0x1c, 0x96, 0x5a,      0,0,0}}, 3, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
70 
71   // Mpow Cheetah - unacceptably loud volume
72   {{{0x00, 0x11, 0xb1,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
73 
74   // Nissan car kits (ALPS) - auto-pairing fails and rejects next pairing
75   {{{0x34, 0xc7, 0x31,      0,0,0}}, 3, INTEROP_DISABLE_AUTO_PAIRING},
76 
77   // SOL REPUBLIC Tracks Air - unable to adjust volume back off from max
78   {{{0xa4, 0x15, 0x66,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
79 
80   // Subaru car kits (ALPS) - auto-pairing fails and rejects next pairing
81   {{{0x00, 0x07, 0x04,      0,0,0}}, 3, INTEROP_DISABLE_AUTO_PAIRING},
82   {{{0xe0, 0x75, 0x0a,      0,0,0}}, 3, INTEROP_DISABLE_AUTO_PAIRING},
83 
84   // Swage Rokitboost HS - unacceptably loud volume
85   {{{0x00, 0x14, 0xf1,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
86 
87   // VW Car Kit - not enough granularity with volume
88   {{{0x00, 0x26, 0x7e,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
89   {{{0x90, 0x03, 0xb7,      0,0,0}}, 3, INTEROP_DISABLE_ABSOLUTE_VOLUME},
90 
91   // Unknown keyboard (carried over from auto_pair_devlist.conf)
92   {{{0x00, 0x0F, 0xF6,      0,0,0}}, 3, INTEROP_KEYBOARD_REQUIRES_FIXED_PIN},
93 };
94 
95 typedef struct {
96   char name[20];
97   size_t length;
98   interop_feature_t feature;
99 } interop_name_entry_t;
100 
101 static const interop_name_entry_t interop_name_database[] = {
102   // Carried over from auto_pair_devlist.conf migration
103   {"Audi",    4, INTEROP_DISABLE_AUTO_PAIRING},
104   {"BMW",     3, INTEROP_DISABLE_AUTO_PAIRING},
105   {"Parrot",  6, INTEROP_DISABLE_AUTO_PAIRING},
106   {"Car",     3, INTEROP_DISABLE_AUTO_PAIRING},
107 
108   // Nissan Quest rejects pairing after "0000"
109   {"NISSAN",  6, INTEROP_DISABLE_AUTO_PAIRING},
110 
111   // Subaru car kits ("CAR M_MEDIA")
112   {"CAR",     3, INTEROP_DISABLE_AUTO_PAIRING},
113 };
114 
115