1 #ifndef __DEVICES_FILTER_H
2 #define __DEVICES_FILTER_H
5 #define USB_ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
10 const char *manufacturer;
15 static usb_parameter not_skip_device_list[] = {
16 {0x12D1, 0x1001, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", "HUAWEI Mobile",NULL},
17 // {0x12D1, 0x1411, "HUAWEI Technology", "HUAWEI Mobile",NULL},
20 static usb_parameter skip_device_list[] = {
21 {0x12D1, 0x1DA1, NULL, NULL, NULL},
22 {0x12D1, 0x1D09, NULL, NULL, NULL},
23 {0x12D1, 0x1520, NULL, NULL, NULL},
24 {0x12D1, 0x14AC, NULL, NULL, NULL},
25 {0x12D1, 0x1465, NULL, NULL, NULL},
26 {0x12D1, 0x1446, NULL, NULL, NULL},
27 {0x12D1, 0x1414, NULL, NULL, NULL},
28 {0x12D1, 0x140C, NULL, NULL, NULL},
29 {0x12D1, 0x1003, NULL, NULL, NULL},
30 {0x12D1, 0x1001, NULL, NULL, NULL},
32 {0x19D2, 0xFFF5, NULL, NULL, NULL},
33 {0x19D2, 0xFFF1, NULL, NULL, NULL},
34 {0x19D2, 0x2000, NULL, NULL, NULL},
35 {0x19D2, 0x0120, NULL, NULL, NULL},
36 {0x19D2, 0x0094, NULL, NULL, NULL},
37 {0x19D2, 0x0079, NULL, NULL, NULL},
38 {0x19D2, 0x0073, NULL, NULL, NULL},
39 {0x19D2, 0x0033, NULL, NULL, NULL},
40 {0x19D2, 0x0031, NULL, NULL, NULL},
41 {0x19D2, 0x0026, NULL, NULL, NULL},
42 {0x19D2, 0x0017, NULL, NULL, NULL},
43 {0x19D2, 0x0015, NULL, NULL, NULL},
45 {0x04CC, 0x225A, NULL, NULL, NULL},
46 {0x04CC, 0x2259, NULL, NULL, NULL},
48 {0x1410, 0x5010, NULL, NULL, NULL},
49 {0x1410, 0x4400, NULL, NULL, NULL},
51 {0x1D09, 0xAEF4, NULL, NULL, NULL},
53 {0x1BBB, 0xF000, NULL, NULL, NULL},
54 {0x1BBB, 0x0017, NULL, NULL, NULL},
57 // {0x05C6, -1, NULL, NULL, NULL},
58 {0x20B9, 0x1682, NULL, NULL, NULL},
60 {0x028A, 0x1006, NULL, NULL, NULL},
62 {0x1C9E, 0x6061, NULL, NULL, NULL},
63 {0x1C9E, 0x6000, NULL, NULL, NULL},
64 {0x1C9E, 0x1001, NULL, NULL, NULL},
66 {0x21F5, 0x2008, NULL, NULL, NULL},
67 {0x21F5, 0x1000, NULL, NULL, NULL},
69 {0x6000, 0x1000, NULL, NULL, NULL},
71 {0x0685, 0x7000, NULL, NULL, NULL},
78 static int match_string(const char* s1, const char* s2)
81 while( s1[count] && s2[count] && !(s1[count]-s2[count]) )
84 return !(s1[count]-s2[count]);
90 static int __must_check inline match_for_each_entry(usb_parameter* pusbp1, usb_parameter* pusbp2)
92 if( pusbp1->vid>=0 && pusbp1->vid!=pusbp2->vid)
95 if( pusbp1->pid>=0 && pusbp1->pid!=pusbp2->pid)
98 if( pusbp1->manufacturer )
100 if( pusbp2->manufacturer==NULL )
102 else if( strcmp(pusbp1->manufacturer, pusbp2->manufacturer) )
106 if( pusbp1->product )
108 if( pusbp2->product==NULL )
110 else if( strcmp(pusbp1->product, pusbp2->product) )
121 static int is_skip_device(usb_parameter *pusbp)
125 在 not_skip_device_list 中寻找匹配,找到则该 device 正常流程
126 在 skip_device_list 中寻找匹配,找到则该 device 跳过attach
127 对于不在 skip_device_list,not_skip_device_list,则正常流程
129 for(i = 0; i < USB_ARRAY_SIZE(not_skip_device_list); i++)
131 if(match_for_each_entry(not_skip_device_list+i, pusbp)){
136 for(i = 0; i < USB_ARRAY_SIZE(skip_device_list); i++)
138 if(match_for_each_entry(skip_device_list+i, pusbp)){
146 #endif //__DEVICES_FILTER_H