mirror of https://github.com/pikvm/pikvm.git
				
				
				
			Update gpio.md
This commit is contained in:
		
							parent
							
								
									3d00729024
								
							
						
					
					
						commit
						f00878428d
					
				
							
								
								
									
										165
									
								
								pages/gpio.md
								
								
								
								
							
							
						
						
									
										165
									
								
								pages/gpio.md
								
								
								
								
							|  | @ -9,99 +9,102 @@ that can also be used transparently by emulating abstract GPIO API. | |||
| # Configuration | ||||
| Setting up GPIO is quite complex. The interface is divided into several layers for flexibility. All configuration is performed using a file `/etc/kvmd/override.yaml` which has the [YAML syntax](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html). We will look at each part of the configuration separately in a small test example. | ||||
| 
 | ||||
| * **Drivers** is the first layer that reflects the hardware that represents the IO ports (standard GPIO of Raspberry Pi, USB relay, and so on). Each driver has a type (a plugin that implements the hardware support) and an unique name. Multiple drivers of the same type can be defined at the same time. | ||||
| ### Drivers | ||||
| The first layer that reflects the hardware that represents the IO ports (standard GPIO of Raspberry Pi, USB relay, and so on). Each driver has a type (a plugin that implements the hardware support) and an unique name. Multiple drivers of the same type can be defined at the same time. | ||||
| 
 | ||||
|     For example, you can connect multiple relays and give each one its own name. By default, one driver is configured with the name `__gpio__`, representing the physical GPIO interface of the Raspberry Pi. | ||||
| For example, you can connect multiple relays and give each one its own name. By default, one driver is configured with the name `__gpio__`, representing the physical GPIO interface of the Raspberry Pi. | ||||
| 
 | ||||
|     ```yaml | ||||
|     kvmd: | ||||
|         gpio: | ||||
|             drivers: | ||||
|                 # This example shows how the __gpio__ driver is defined. You don't need to write it in your configuration. | ||||
|                 __gpio__:  # Names that start and end with two underscores are reserved. You don't have to define similar names yourself. | ||||
|                     type: gpio | ||||
|                     state_poll: 0.1 | ||||
| ```yaml | ||||
| kvmd: | ||||
|     gpio: | ||||
|         drivers: | ||||
|             # This example shows how the __gpio__ driver is defined. You don't need to write it in your configuration. | ||||
|             __gpio__:  # Names that start and end with two underscores are reserved. You don't have to define similar names yourself. | ||||
|                 type: gpio | ||||
|                 state_poll: 0.1 | ||||
| 
 | ||||
|                 # You can define another gpio driver with a different polling interval | ||||
|                 my_gpio: | ||||
|                     type: gpio | ||||
|                     state_poll: 1.5 | ||||
|             # You can define another gpio driver with a different polling interval | ||||
|             my_gpio: | ||||
|                 type: gpio | ||||
|                 state_poll: 1.5 | ||||
|                      | ||||
|                 # We have HID relay connected to Pi-KVM | ||||
|                 relay: | ||||
|                     type: hidrelay | ||||
|                     device: /dev/hidraw0 | ||||
|     ``` | ||||
|             # We have HID relay connected to Pi-KVM | ||||
|             relay: | ||||
|                 type: hidrelay | ||||
|                 device: /dev/hidraw0 | ||||
| ``` | ||||
| 
 | ||||
| * **Scheme** is the second layer that reflects how the various driver ports are configured. Each port has a unique name, mode (`input` or `output`), a pin number, and refers to the driver that provides it. | ||||
| ### Scheme | ||||
| The second layer that reflects how the various driver ports are configured. Each port has a unique name, mode (`input` or `output`), a pin number, and refers to the driver that provides it. | ||||
| 
 | ||||
|     Two interaction modes are available for outputs: `pulse` and `switch`. In pulse mode, the output quickly switches its state to logical 1 and back (just like a button). In switch mode, it saves the state that the user set. When KVMD starts and finishes, all output ports are reset to 0. This can be avoided using the `initial` parameter. | ||||
| Two interaction modes are available for outputs: `pulse` and `switch`. In pulse mode, the output quickly switches its state to logical 1 and back (just like a button). In switch mode, it saves the state that the user set. When KVMD starts and finishes, all output ports are reset to 0. This can be avoided using the `initial` parameter. | ||||
| 
 | ||||
|     If no driver is specified for the port in the scheme, `__gpio__` will be used as default. | ||||
| If no driver is specified for the port in the scheme, `__gpio__` will be used as default. | ||||
| 
 | ||||
|     ```yaml | ||||
|     kvmd: | ||||
|         gpio: | ||||
|             scheme: | ||||
|                 # A certain device sends signals to the RPi and we want the Pi-KVM to display this as an led | ||||
|                 led1: | ||||
|                     pin: 19 | ||||
|                     mode: input | ||||
|                 led2: | ||||
|                     pin: 16 | ||||
|                     mode: input | ||||
| ```yaml | ||||
| kvmd: | ||||
|     gpio: | ||||
|         scheme: | ||||
|             # A certain device sends signals to the RPi and we want the Pi-KVM to display this as an led | ||||
|             led1: | ||||
|                 pin: 19 | ||||
|                 mode: input | ||||
|             led2: | ||||
|                 pin: 16 | ||||
|                 mode: input | ||||
| 
 | ||||
|                 # Two outputs of RPi's GPIO | ||||
|                 button1: | ||||
|                     pin: 26 | ||||
|                     mode: output | ||||
|                     switch: false  # Disable switching, only pulse available | ||||
|                 button2: | ||||
|                     pin: 20 | ||||
|                     mode: output | ||||
|                     switch: false | ||||
|             # Two outputs of RPi's GPIO | ||||
|             button1: | ||||
|                 pin: 26 | ||||
|                 mode: output | ||||
|                 switch: false  # Disable switching, only pulse available | ||||
|             button2: | ||||
|                 pin: 20 | ||||
|                 mode: output | ||||
|                 switch: false | ||||
| 
 | ||||
|                 relay1:  # Channel 1 of the relay /dev/hidraw0 | ||||
|                     pin: 0  # Numerating starts from 0 | ||||
|                     mode: output  # Relays can't be inputs | ||||
|                     initial: null  # Don't reset the state to 0 when initializing and terminating KVMD | ||||
|                 relay2:  # Channel 2 | ||||
|                     pin: 1 | ||||
|                     mode: output | ||||
|                     initial: null | ||||
|                     pulse: | ||||
|                         delay: 2  # Default pulse value | ||||
|                         max_delay: 2  # The pulse interval can be between min_pulse (0.1 by default) and max_pulse=5 | ||||
|     ``` | ||||
|             relay1:  # Channel 1 of the relay /dev/hidraw0 | ||||
|                 pin: 0  # Numerating starts from 0 | ||||
|                 mode: output  # Relays can't be inputs | ||||
|                 initial: null  # Don't reset the state to 0 when initializing and terminating KVMD | ||||
|             relay2:  # Channel 2 | ||||
|                 pin: 1 | ||||
|                 mode: output | ||||
|                 initial: null | ||||
|                 pulse: | ||||
|                     delay: 2  # Default pulse value | ||||
|                     max_delay: 2  # The pulse interval can be between min_pulse (0.1 by default) and max_pulse=5 | ||||
| ``` | ||||
| 
 | ||||
| * **View** is the visualization layer of the scheme. It describes what the menu with GPIO functions will look like. It is easier to show by example. | ||||
| ### View | ||||
| This is the last layer of the scheme. It describes what the menu with GPIO functions will look like. It is easier to show by example. | ||||
| 
 | ||||
|     ```yaml | ||||
|     kvmd: | ||||
|         gpio: | ||||
|             view: | ||||
|                 header: | ||||
|                     title: Switches  # Menu title | ||||
|                 table:  # The menu items are rendered in the form of a table of text labels and controls | ||||
|                     - ["#Generic GPIO leds"]  # Text starting with the sharp symbol will be a label | ||||
|                     - []  # Horizontal separator and start of a new table | ||||
|                     - ["#Test 1:", led1, button1]  # Text label, one input, one button with text "Click" | ||||
|                     - ["#Test 2:", led2, button2] | ||||
|                     - [] | ||||
|                     - ["#HID Relays /dev/hidraw0"] | ||||
|                     - [] | ||||
|                     - ["#Relay #1:", "relay1,Boop 0.1"]  # Text label and button with alternative text | ||||
|                     - ["#Relay #2:", "relay2,Boop 2.0"] | ||||
|     ``` | ||||
| ```yaml | ||||
| kvmd: | ||||
|     gpio: | ||||
|         view: | ||||
|             header: | ||||
|                 title: Switches  # Menu title | ||||
|             table:  # The menu items are rendered in the form of a table of text labels and controls | ||||
|                 - ["#Generic GPIO leds"]  # Text starting with the sharp symbol will be a label | ||||
|                 - []  # Horizontal separator and start of a new table | ||||
|                 - ["#Test 1:", led1, button1]  # Text label, one input, one button with text "Click" | ||||
|                 - ["#Test 2:", led2, button2] | ||||
|                 - [] | ||||
|                 - ["#HID Relays /dev/hidraw0"] | ||||
|                 - [] | ||||
|                 - ["#Relay #1:", "relay1,Boop 0.1"]  # Text label and button with alternative text | ||||
|                 - ["#Relay #2:", "relay2,Boop 2.0"] | ||||
| ``` | ||||
| 
 | ||||
|     This will be rendered as: | ||||
| This will be rendered as: | ||||
| 
 | ||||
|     <img src="../img/gpio_menu.png" alt="drawing" /> | ||||
| <img src="../img/gpio_menu.png" alt="drawing" /> | ||||
| 
 | ||||
|     Here the rules: | ||||
|     - Text starting with the `#` symbol will be a label. | ||||
|     - To place a port in a cell, just put its name from the scheme. | ||||
|     - The inputs are displayed as round LEDs. | ||||
|     - The outputs are displayed as a switch AND a button. | ||||
|     - If the switch mode is disabled, only a button will be displayed. If pulse is disabled, only a switch will be shown. | ||||
|     - To rename the output button, write some its identifier using comma like `"relay1,My cool relay"`. | ||||
| Here the rules: | ||||
| - Text starting with the `#` symbol will be a label. | ||||
| - To place a port in a cell, just put its name from the scheme. | ||||
| - The inputs are displayed as round LEDs. | ||||
| - The outputs are displayed as a switch AND a button. | ||||
| - If the switch mode is disabled, only a button will be displayed. If pulse is disabled, only a switch will be shown. | ||||
| - To rename the output button, write some its identifier using comma like `"relay1,My cool relay"`. | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue