@@ -73,6 +73,24 @@ def _properties_from_file(ld_filename):
73
73
p ["memories" ] = memories
74
74
75
75
76
+ # Signals FIXME continue here, find derived peripherals
77
+ signals = {}
78
+ raw_signals = device_file .query ("//peripherals/peripheral/registers/cluster" )
79
+ for s in raw_signals :
80
+ if s .find ('name' ).text == "PSEL" :
81
+
82
+ # find parent peripheral
83
+ parent_peripheral_instance = s .getparent ().getparent ().find ('name' ).text .lower ()
84
+ signals [parent_peripheral_instance ] = []
85
+
86
+ # find all signals of peripheral
87
+ signal_elements = s .findall ('register/name' )
88
+ for signal_element in signal_elements :
89
+ signal_name = signal_element .text .lower ()
90
+ signals [parent_peripheral_instance ].append (signal_name )
91
+
92
+
93
+ # drivers and gpios
76
94
raw_modules = device_file .query ("//peripherals/peripheral" )
77
95
modules = []
78
96
ports = {}
@@ -95,9 +113,21 @@ def _properties_from_file(ld_filename):
95
113
matchString = r"(?P<module>.*\D)(?P<instance>\d*$)"
96
114
match = re .search (matchString , modulename )
97
115
modules .append ({'module' : match .group ("module" ).lower (), 'instance' : modulename .lower ()})
116
+
117
+ # copy available signals to all derived peripherals
118
+ if m .get ('derivedFrom' ) is not None :
119
+ if m .get ('derivedFrom' ).lower () in signals :
120
+ print (modulename .lower () + " is derived from " + m .get ('derivedFrom' ).lower ())
121
+ signals [modulename .lower ()] = signals [m .get ('derivedFrom' ).lower ()]
98
122
p ['modules' ] = sorted (list (set ([(m ['module' ], m ['instance' ]) for m in modules ])))
99
123
p ['gpios' ] = gpios
100
124
p ['signals' ] = []
125
+ for instance in signals :
126
+ for signal in signals [instance ]:
127
+ matchString = r"(?P<module>.*\D)(?P<instance>\d*$)"
128
+ match = re .search (matchString , instance )
129
+ p ['signals' ].append ({'driver' : match .group ("module" ).lower (), 'instance' : instance , 'name' : signal })
130
+
101
131
102
132
interrupts = []
103
133
raw_interrupt = device_file .query ("//peripherals/peripheral/interrupt" )
@@ -114,12 +144,12 @@ def _properties_from_file(ld_filename):
114
144
115
145
LOGGER .debug ("Found GPIOs: [%s]" , ", " .join ([p .upper () + "." + i for p ,i in p ['gpios' ]]))
116
146
LOGGER .debug ("Available Modules are:\n " + NRFDeviceTree ._modulesToString (p ['modules' ]))
117
- # LOGGER.debug("Found Signals:")
118
- # for sig in p['signals']:
119
- # LOGGER.debug(" %s", sig)
120
- # LOGGER.debug("Found Interrupts:")
121
- # for intr in p['interrupts']:
122
- # LOGGER.debug(" %s", intr)
147
+ LOGGER .debug ("Found Signals:" )
148
+ for sig in p ['signals' ]:
149
+ LOGGER .debug (" %s" , sig )
150
+ LOGGER .debug ("Found Interrupts:" )
151
+ for intr in p ['interrupts' ]:
152
+ LOGGER .debug (" %s" , intr )
123
153
124
154
return p
125
155
@@ -225,8 +255,8 @@ def driverOrder(e):
225
255
e ['instance' ] if e ['instance' ] is not None else '' ,
226
256
e ['name' ] if e ['name' ] is not None else '' ))
227
257
# add all signals
228
- for s in [ s for s in p ['signals' ] if s [ 'pad' ] == ( "p" + port + pin ) ]:
229
- driver , instance , name = s ['module ' ], s ['instance' ], s ['group ' ]
258
+ for s in p ['signals' ]:
259
+ driver , instance , name = s ['driver ' ], s ['instance' ], s ['name ' ]
230
260
# add the af node
231
261
pin_signal = {'driver' : driver }
232
262
if instance != driver :
@@ -239,6 +269,7 @@ def driverOrder(e):
239
269
if "name" not in pin_signal :
240
270
LOGGER .error ("%s has no name!" , s )
241
271
continue
272
+
242
273
af = pin_driver .addChild ('signal' )
243
274
af .setAttributes (['driver' , 'instance' , 'name' ], pin_signal )
244
275
0 commit comments