global generateHeader gpio_map = { 2: '10', 3: '11', 4: '12', 5: '13', 6: '14', 7: '15', 8: '16', 9: '17', 10: '18', 11: '9', 13: '20', 14: '21', 15: '22', 16: '23', 18: '19', 21: '24', 31: '0', 32: '1', 33: '2', 34: '3', 35: '4', 36: '5', 37: '6', 38: '7', 39: '8' } generateHeader.println(""" #include #include enum schematic_direction { schematic_direction_out = 1, schematic_direction_in = 2 }; """) usages = generateHeader.netlist.find_nets_using_ref(generateHeader.ref) for usage in usages: node = usage.node_for_ref(generateHeader.ref) gpio = gpio_map.get(node.pin) if gpio is None: continue generateHeader.println( 'static const uint8_t SCHEMATIC_' + usage.name + ' = ' + gpio + ';\n' '\n' 'static inline\n' 'qm_rc_t schematic_' + usage.name + '_direction(enum schematic_direction dir) {\n' ' qm_gpio_port_config_t cfg;\n' '\n' ' qm_gpio_get_config(QM_GPIO_0, &cfg);\n' '\n' ' if (dir == schematic_direction_out) {\n' ' cfg.direction |= BIT(SCHEMATIC_' + usage.name + ');\n' ' } else {\n' ' cfg.direction &= ~BIT(SCHEMATIC_' + usage.name + ');\n' ' }\n' '\n' ' return qm_gpio_set_config(QM_GPIO_0, &cfg);\n' '}')