mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-08-18 16:05:05 +00:00
Add support for device addresses
This commit is contained in:
parent
497568f85e
commit
7d786c2b66
@ -178,7 +178,9 @@ def write_device_structs(file, device: Device, parent_device: Device, bindings:
|
||||
# Write config struct
|
||||
write_config(file, device, bindings, devices, type_name)
|
||||
# Write device struct
|
||||
address_value = device.node_address if device.node_address is not None else "0"
|
||||
file.write(f"static struct Device {node_name}" " = {\n")
|
||||
file.write(f"\t.address = {address_value},\n")
|
||||
file.write(f"\t.name = \"{device.node_name}\",\n") # Use original name
|
||||
file.write(f"\t.config = &{config_variable_name},\n")
|
||||
file.write(f"\t.parent = {parent_value},\n")
|
||||
|
||||
@ -40,10 +40,11 @@ array: NUMBER+
|
||||
property_value: quoted_text_array | QUOTED_TEXT | "<" value ">" | "<" values ">" | "[" array "]" | PHANDLE
|
||||
device_property: PROPERTY_NAME ["=" property_value] ";"
|
||||
|
||||
NODE_ALIAS: /[a-zA-Z0-9_\-\/@]+/
|
||||
NODE_NAME: /[a-zA-Z0-9_\-\/@]+/
|
||||
NODE_ALIAS: /[a-zA-Z0-9_\-\/]+/
|
||||
NODE_NAME: /[a-zA-Z0-9_\-\/]+/
|
||||
NODE_ADDRESS: /[0-9a-zA-Z_]+/
|
||||
|
||||
device: (NODE_ALIAS ":")? NODE_NAME "{" (device | device_property)* "};"
|
||||
device: (NODE_ALIAS ":")? NODE_NAME ("@" NODE_ADDRESS)? "{" (device | device_property)* "};"
|
||||
|
||||
dts_version: /[0-9a-zA-Z\-]+/
|
||||
|
||||
|
||||
@ -8,6 +8,7 @@ class DtsVersion:
|
||||
class Device:
|
||||
node_name: str
|
||||
node_alias: str
|
||||
node_address: str
|
||||
status: str
|
||||
properties: list
|
||||
devices: list
|
||||
|
||||
@ -29,6 +29,7 @@ class DtsTransformer(Transformer):
|
||||
def device(self, tokens: list):
|
||||
node_name = None
|
||||
node_alias = None
|
||||
node_address = None
|
||||
status = None
|
||||
properties = list()
|
||||
child_devices = list()
|
||||
@ -37,6 +38,8 @@ class DtsTransformer(Transformer):
|
||||
node_name = item.value
|
||||
elif type(item) is Token and item.type == 'NODE_ALIAS':
|
||||
node_alias = item.value
|
||||
elif type(item) is Token and item.type == 'NODE_ADDRESS':
|
||||
node_address = item.value
|
||||
elif type(item) is DeviceProperty:
|
||||
if item.name == "status":
|
||||
status = item.value
|
||||
@ -44,7 +47,7 @@ class DtsTransformer(Transformer):
|
||||
properties.append(item)
|
||||
elif type(item) is Device:
|
||||
child_devices.append(item)
|
||||
return Device(node_name, node_alias, status, properties, child_devices)
|
||||
return Device(node_name, node_alias, node_address, status, properties, child_devices)
|
||||
def device_property(self, objects: List[object]):
|
||||
name = objects[0]
|
||||
# Boolean property has no value as the value is implied to be true
|
||||
|
||||
@ -26,6 +26,9 @@ struct DeviceType {
|
||||
|
||||
/** Represents a piece of hardware */
|
||||
struct Device {
|
||||
/** Device address. Can represent an index, a memory address, or some kind of offset */
|
||||
int32_t address;
|
||||
|
||||
/** The name of the device. Valid characters: a-z a-Z 0-9 - _ . */
|
||||
const char* name;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user