mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	[sn74hc595] Enforce type field to distinguish gpio vs spi mode (#6609)
This commit is contained in:
		| @@ -4,14 +4,13 @@ from esphome import pins | |||||||
| from esphome.components import spi | from esphome.components import spi | ||||||
| from esphome.const import ( | from esphome.const import ( | ||||||
|     CONF_ID, |     CONF_ID, | ||||||
|     CONF_SPI_ID, |  | ||||||
|     CONF_NUMBER, |     CONF_NUMBER, | ||||||
|     CONF_INVERTED, |     CONF_INVERTED, | ||||||
|     CONF_DATA_PIN, |     CONF_DATA_PIN, | ||||||
|     CONF_CLOCK_PIN, |     CONF_CLOCK_PIN, | ||||||
|     CONF_OUTPUT, |     CONF_OUTPUT, | ||||||
|  |     CONF_TYPE, | ||||||
| ) | ) | ||||||
| from esphome.core import EsphomeError |  | ||||||
|  |  | ||||||
| MULTI_CONF = True | MULTI_CONF = True | ||||||
|  |  | ||||||
| @@ -34,53 +33,53 @@ CONF_LATCH_PIN = "latch_pin" | |||||||
| CONF_OE_PIN = "oe_pin" | CONF_OE_PIN = "oe_pin" | ||||||
| CONF_SR_COUNT = "sr_count" | CONF_SR_COUNT = "sr_count" | ||||||
|  |  | ||||||
| CONFIG_SCHEMA = cv.Any( | TYPE_GPIO = "gpio" | ||||||
|     cv.Schema( | TYPE_SPI = "spi" | ||||||
|         { |  | ||||||
|             cv.Required(CONF_ID): cv.declare_id(SN74HC595GPIOComponent), | _COMMON_SCHEMA = cv.Schema( | ||||||
|             cv.Required(CONF_DATA_PIN): pins.gpio_output_pin_schema, |     { | ||||||
|             cv.Required(CONF_CLOCK_PIN): pins.gpio_output_pin_schema, |         cv.Required(CONF_LATCH_PIN): pins.gpio_output_pin_schema, | ||||||
|             cv.Required(CONF_LATCH_PIN): pins.gpio_output_pin_schema, |         cv.Optional(CONF_OE_PIN): pins.gpio_output_pin_schema, | ||||||
|             cv.Optional(CONF_OE_PIN): pins.gpio_output_pin_schema, |         cv.Optional(CONF_SR_COUNT, default=1): cv.int_range(min=1, max=256), | ||||||
|             cv.Optional(CONF_SR_COUNT, default=1): cv.int_range(min=1, max=256), |     } | ||||||
|         } | ) | ||||||
|     ).extend(cv.COMPONENT_SCHEMA), |  | ||||||
|     cv.Schema( | CONFIG_SCHEMA = cv.typed_schema( | ||||||
|         { |     { | ||||||
|             cv.Required(CONF_ID): cv.declare_id(SN74HC595SPIComponent), |         TYPE_GPIO: _COMMON_SCHEMA.extend( | ||||||
|             cv.Required(CONF_LATCH_PIN): pins.gpio_output_pin_schema, |             { | ||||||
|             cv.Optional(CONF_OE_PIN): pins.gpio_output_pin_schema, |                 cv.Required(CONF_ID): cv.declare_id(SN74HC595GPIOComponent), | ||||||
|             cv.Optional(CONF_SR_COUNT, default=1): cv.int_range(min=1, max=256), |                 cv.Required(CONF_DATA_PIN): pins.gpio_output_pin_schema, | ||||||
|         } |                 cv.Required(CONF_CLOCK_PIN): pins.gpio_output_pin_schema, | ||||||
|     ) |             } | ||||||
|     .extend(cv.COMPONENT_SCHEMA) |         ).extend(cv.COMPONENT_SCHEMA), | ||||||
|     .extend(spi.spi_device_schema(cs_pin_required=False)) |         TYPE_SPI: _COMMON_SCHEMA.extend( | ||||||
|     .extend( |             { | ||||||
|         { |                 cv.Required(CONF_ID): cv.declare_id(SN74HC595SPIComponent), | ||||||
|             cv.Required(CONF_SPI_ID): cv.use_id(spi.SPIComponent), |             } | ||||||
|         } |         ) | ||||||
|     ), |         .extend(cv.COMPONENT_SCHEMA) | ||||||
|     msg='Either "data_pin" and "clock_pin" must be set or "spi_id" must be set.', |         .extend(spi.spi_device_schema(cs_pin_required=False)), | ||||||
|  |     }, | ||||||
|  |     default_type=TYPE_GPIO, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| async def to_code(config): | async def to_code(config): | ||||||
|     var = cg.new_Pvariable(config[CONF_ID]) |     var = cg.new_Pvariable(config[CONF_ID]) | ||||||
|     await cg.register_component(var, config) |     await cg.register_component(var, config) | ||||||
|     if CONF_DATA_PIN in config: |     if config[CONF_TYPE] == TYPE_GPIO: | ||||||
|         data_pin = await cg.gpio_pin_expression(config[CONF_DATA_PIN]) |         data_pin = await cg.gpio_pin_expression(config[CONF_DATA_PIN]) | ||||||
|         cg.add(var.set_data_pin(data_pin)) |         cg.add(var.set_data_pin(data_pin)) | ||||||
|         clock_pin = await cg.gpio_pin_expression(config[CONF_CLOCK_PIN]) |         clock_pin = await cg.gpio_pin_expression(config[CONF_CLOCK_PIN]) | ||||||
|         cg.add(var.set_clock_pin(clock_pin)) |         cg.add(var.set_clock_pin(clock_pin)) | ||||||
|     elif CONF_SPI_ID in config: |  | ||||||
|         await spi.register_spi_device(var, config) |  | ||||||
|     else: |     else: | ||||||
|         raise EsphomeError("Not supported") |         await spi.register_spi_device(var, config) | ||||||
|  |  | ||||||
|     latch_pin = await cg.gpio_pin_expression(config[CONF_LATCH_PIN]) |     latch_pin = await cg.gpio_pin_expression(config[CONF_LATCH_PIN]) | ||||||
|     cg.add(var.set_latch_pin(latch_pin)) |     cg.add(var.set_latch_pin(latch_pin)) | ||||||
|     if CONF_OE_PIN in config: |     if oe_pin := config.get(CONF_OE_PIN): | ||||||
|         oe_pin = await cg.gpio_pin_expression(config[CONF_OE_PIN]) |         oe_pin = await cg.gpio_pin_expression(oe_pin) | ||||||
|         cg.add(var.set_oe_pin(oe_pin)) |         cg.add(var.set_oe_pin(oe_pin)) | ||||||
|     cg.add(var.set_sr_count(config[CONF_SR_COUNT])) |     cg.add(var.set_sr_count(config[CONF_SR_COUNT])) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								tests/components/sn74hc595/test.esp32-c3-idf.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests/components/sn74hc595/test.esp32-c3-idf.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | spi: | ||||||
|  |   - id: spi_sn74hc595 | ||||||
|  |     clk_pin: 6 | ||||||
|  |     mosi_pin: 7 | ||||||
|  |     miso_pin: 5 | ||||||
|  |  | ||||||
|  | sn74hc595: | ||||||
|  |   - id: sn74hc595_hub | ||||||
|  |     clock_pin: 0 | ||||||
|  |     data_pin: 1 | ||||||
|  |     latch_pin: 2 | ||||||
|  |     oe_pin: 3 | ||||||
|  |     sr_count: 2 | ||||||
|  |   - id: sn74hc595_hub_2 | ||||||
|  |     latch_pin: 8 | ||||||
|  |     oe_pin: 9 | ||||||
|  |     spi_id: spi_sn74hc595 | ||||||
|  |     type: spi | ||||||
|  |     sr_count: 2 | ||||||
|  |  | ||||||
|  | switch: | ||||||
|  |   - platform: gpio | ||||||
|  |     name: SN74HC595 Pin 0 | ||||||
|  |     pin: | ||||||
|  |       sn74hc595: sn74hc595_hub_2 | ||||||
|  |       number: 0 | ||||||
|  |       inverted: false | ||||||
							
								
								
									
										27
									
								
								tests/components/sn74hc595/test.esp32-c3.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests/components/sn74hc595/test.esp32-c3.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | spi: | ||||||
|  |   - id: spi_sn74hc595 | ||||||
|  |     clk_pin: 6 | ||||||
|  |     mosi_pin: 7 | ||||||
|  |     miso_pin: 5 | ||||||
|  |  | ||||||
|  | sn74hc595: | ||||||
|  |   - id: sn74hc595_hub | ||||||
|  |     clock_pin: 0 | ||||||
|  |     data_pin: 1 | ||||||
|  |     latch_pin: 2 | ||||||
|  |     oe_pin: 3 | ||||||
|  |     sr_count: 2 | ||||||
|  |   - id: sn74hc595_hub_2 | ||||||
|  |     latch_pin: 8 | ||||||
|  |     oe_pin: 9 | ||||||
|  |     spi_id: spi_sn74hc595 | ||||||
|  |     type: spi | ||||||
|  |     sr_count: 2 | ||||||
|  |  | ||||||
|  | switch: | ||||||
|  |   - platform: gpio | ||||||
|  |     name: SN74HC595 Pin 0 | ||||||
|  |     pin: | ||||||
|  |       sn74hc595: sn74hc595_hub_2 | ||||||
|  |       number: 0 | ||||||
|  |       inverted: false | ||||||
							
								
								
									
										27
									
								
								tests/components/sn74hc595/test.esp32-idf.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests/components/sn74hc595/test.esp32-idf.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | spi: | ||||||
|  |   - id: spi_sn74hc595 | ||||||
|  |     clk_pin: 16 | ||||||
|  |     mosi_pin: 17 | ||||||
|  |     miso_pin: 15 | ||||||
|  |  | ||||||
|  | sn74hc595: | ||||||
|  |   - id: sn74hc595_hub | ||||||
|  |     clock_pin: 12 | ||||||
|  |     data_pin: 13 | ||||||
|  |     latch_pin: 14 | ||||||
|  |     oe_pin: 18 | ||||||
|  |     sr_count: 2 | ||||||
|  |   - id: sn74hc595_hub_2 | ||||||
|  |     latch_pin: 21 | ||||||
|  |     oe_pin: 22 | ||||||
|  |     spi_id: spi_sn74hc595 | ||||||
|  |     type: spi | ||||||
|  |     sr_count: 2 | ||||||
|  |  | ||||||
|  | switch: | ||||||
|  |   - platform: gpio | ||||||
|  |     name: SN74HC595 Pin 0 | ||||||
|  |     pin: | ||||||
|  |       sn74hc595: sn74hc595_hub_2 | ||||||
|  |       number: 0 | ||||||
|  |       inverted: false | ||||||
							
								
								
									
										27
									
								
								tests/components/sn74hc595/test.esp32.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests/components/sn74hc595/test.esp32.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | spi: | ||||||
|  |   - id: spi_sn74hc595 | ||||||
|  |     clk_pin: 16 | ||||||
|  |     mosi_pin: 17 | ||||||
|  |     miso_pin: 15 | ||||||
|  |  | ||||||
|  | sn74hc595: | ||||||
|  |   - id: sn74hc595_hub | ||||||
|  |     clock_pin: 12 | ||||||
|  |     data_pin: 13 | ||||||
|  |     latch_pin: 14 | ||||||
|  |     oe_pin: 18 | ||||||
|  |     sr_count: 2 | ||||||
|  |   - id: sn74hc595_hub_2 | ||||||
|  |     latch_pin: 21 | ||||||
|  |     oe_pin: 22 | ||||||
|  |     spi_id: spi_sn74hc595 | ||||||
|  |     type: spi | ||||||
|  |     sr_count: 2 | ||||||
|  |  | ||||||
|  | switch: | ||||||
|  |   - platform: gpio | ||||||
|  |     name: SN74HC595 Pin 0 | ||||||
|  |     pin: | ||||||
|  |       sn74hc595: sn74hc595_hub_2 | ||||||
|  |       number: 0 | ||||||
|  |       inverted: false | ||||||
							
								
								
									
										27
									
								
								tests/components/sn74hc595/test.esp8266.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests/components/sn74hc595/test.esp8266.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | spi: | ||||||
|  |   - id: spi_sn74hc595 | ||||||
|  |     clk_pin: 14 | ||||||
|  |     mosi_pin: 13 | ||||||
|  |     miso_pin: 12 | ||||||
|  |  | ||||||
|  | sn74hc595: | ||||||
|  |   - id: sn74hc595_hub | ||||||
|  |     clock_pin: 0 | ||||||
|  |     data_pin: 2 | ||||||
|  |     latch_pin: 4 | ||||||
|  |     oe_pin: 5 | ||||||
|  |     sr_count: 2 | ||||||
|  |   - id: sn74hc595_hub_2 | ||||||
|  |     latch_pin: 15 | ||||||
|  |     oe_pin: 16 | ||||||
|  |     spi_id: spi_sn74hc595 | ||||||
|  |     type: spi | ||||||
|  |     sr_count: 2 | ||||||
|  |  | ||||||
|  | switch: | ||||||
|  |   - platform: gpio | ||||||
|  |     name: SN74HC595 Pin 0 | ||||||
|  |     pin: | ||||||
|  |       sn74hc595: sn74hc595_hub_2 | ||||||
|  |       number: 0 | ||||||
|  |       inverted: false | ||||||
							
								
								
									
										27
									
								
								tests/components/sn74hc595/test.rp2040.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests/components/sn74hc595/test.rp2040.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | spi: | ||||||
|  |   - id: spi_sn74hc595 | ||||||
|  |     clk_pin: 6 | ||||||
|  |     mosi_pin: 5 | ||||||
|  |     miso_pin: 4 | ||||||
|  |  | ||||||
|  | sn74hc595: | ||||||
|  |   - id: sn74hc595_hub | ||||||
|  |     clock_pin: 0 | ||||||
|  |     data_pin: 1 | ||||||
|  |     latch_pin: 2 | ||||||
|  |     oe_pin: 3 | ||||||
|  |     sr_count: 2 | ||||||
|  |   - id: sn74hc595_hub_2 | ||||||
|  |     latch_pin: 8 | ||||||
|  |     oe_pin: 9 | ||||||
|  |     spi_id: spi_sn74hc595 | ||||||
|  |     type: spi | ||||||
|  |     sr_count: 2 | ||||||
|  |  | ||||||
|  | switch: | ||||||
|  |   - platform: gpio | ||||||
|  |     name: SN74HC595 Pin 0 | ||||||
|  |     pin: | ||||||
|  |       sn74hc595: sn74hc595_hub_2 | ||||||
|  |       number: 0 | ||||||
|  |       inverted: false | ||||||
| @@ -3996,6 +3996,7 @@ sn74hc595: | |||||||
|       number: GPIO32 |       number: GPIO32 | ||||||
|     sr_count: 2 |     sr_count: 2 | ||||||
|     spi_id: spi_bus |     spi_id: spi_bus | ||||||
|  |     type: spi | ||||||
|  |  | ||||||
| rtttl: | rtttl: | ||||||
|   output: gpio_19 |   output: gpio_19 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user