13
'DefaultVendor': ' --default-vendor ',
14
'DefaultProduct': ' --default-product ',
15
'TargetVendor': ' --target-vendor ',
16
'TargetProduct': ' --target-product ',
17
'TargetClass': ' --target-class ',
18
'MessageEndpoint': ' --message-endpoint ',
19
'MessageContent': ' --message-content ',
20
'ResponseEndpoint': ' --response-endpoint ',
21
'DetachStorageOnly': ' --detach-storage-only ',
22
'HuaweiMode': ' --huawei-mode ',
23
'SierraMode': ' --sierra-mode ',
24
'SonyMode': ' --sony-mode ',
25
'ResetUSB': ' --reset-usb ',
26
'Interface': ' --interface ',
27
'Configuration': ' --configuration ',
28
'AltSetting': ' --altsetting '
31
# Go through the whole file
32
for line in fileinput.input():
33
# Take widely commented lines
34
if line[0:4] == '####':
38
configList[configIndex]['Comment'] = line
40
if line[0] == '#' and commentBlock:
41
configList[configIndex]['Comment'] += line
47
# Take only lines with actual configuration
51
# Where does the variable end ?
52
equalPos = line.find('=')
54
variableName = line[1:equalPos]
55
variableContent = line[equalPos+1:-1].strip()
57
# print variableName,"=",variableContent
59
configList[configIndex][variableName] = variableContent
61
print '''### /etc/udev/rules.d/usb_modeswitch.rules ###
62
# This file is generated from /etc/usb_modeswitch.conf
64
# For multiply-defined ID, only the first one is uncommented.
65
# Other ones are available but commented.
69
def um_comAdd(indic, indivConfig, toggle=False):
70
if indic in indivConfig:
72
return optionMap[indic] + indivConfig[indic]
74
return optionMap[indic]
78
# Now we have everything needed in configList
80
for indivConfig in configList:
81
if 'DefaultVendor' in indivConfig and 'DefaultProduct' in indivConfig:
82
uniqId = indivConfig['DefaultVendor'] + ":" + indivConfig['DefaultProduct']
83
print indivConfig['Comment'],
85
print '# Vendor:Product id =',uniqId
87
um_commandline = '/usr/sbin/usb_modeswitch'
88
um_commandline += um_comAdd('DefaultVendor',indivConfig)
89
um_commandline += um_comAdd('DefaultProduct',indivConfig)
90
um_commandline += um_comAdd('MessageEndpoint', indivConfig)
91
if 'MessageContent' in indivConfig:
92
um_commandline += optionMap['MessageContent'] + indivConfig['MessageContent'][1:-1]
93
um_commandline += um_comAdd('ResponseEndpoint', indivConfig)
94
um_commandline += um_comAdd('DetachStorageOnly', indivConfig, True)
95
um_commandline += um_comAdd('Interface', indivConfig)
97
ruleLine = 'SUBSYSTEM=="usb", '
98
ruleLine += 'SYSFS{idVendor}=="' + indivConfig['DefaultVendor'][2:] +'", '
99
ruleLine += 'SYSFS{idProduct}=="' + indivConfig['DefaultProduct'][2:] + '", '
100
ruleLine += 'RUN+="' + um_commandline + '"'
102
if uniqId not in uniqIds: