mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	Add callback functions for prog mode and improve documentation (#173)
This commit is contained in:
		
							parent
							
								
									d26771c432
								
							
						
					
					
						commit
						53425e2ef7
					
				
							
								
								
									
										51
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								README.md
									
									
									
									
									
								
							| @ -1,16 +1,55 @@ | ||||
| knx | ||||
| === | ||||
| # knx | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| This projects provides a knx-device stack for arduino (ESP8266, SAMD21) and linux. (more are quite easy to add) | ||||
| This projects provides a knx-device stack for arduino (ESP8266, ESP32, SAMD21, RP2040, STM32), CC1310 and linux. (more are quite easy to add) | ||||
| It implements most of System-B specification and can be configured with ETS. | ||||
| The necessary knxprod-files can be generated with my [CreateKnxProd](https://github.com/thelsing/CreateKnxProd) tool. | ||||
| 
 | ||||
| For esp8266 [WifiManager](https://github.com/tzapu/WiFiManager) is used to configure wifi. | ||||
| For ESP8266 and ESP32 [WifiManager](https://github.com/tzapu/WiFiManager) is used to configure wifi. | ||||
| 
 | ||||
| Don't forget to reset ESP8266 manually (disconnect power) after flashing. The reboot doen't work during configuration with ETS otherwise. | ||||
| 
 | ||||
| The SAMD21 version uses my version of the [FlashStorage](https://github.com/thelsing/FlashStorage) lib (Pull request pending). | ||||
| 
 | ||||
| Generated documentation can be found [here](https://knx.readthedocs.io/en/latest/). | ||||
| 
 | ||||
| ## Stack configuration possibilities | ||||
| 
 | ||||
| Specify prog button GPIO other then `GPIO0`: | ||||
| ```C++ | ||||
| knx.buttonPin(3); // Use GPIO3 Pin | ||||
| ``` | ||||
| 
 | ||||
| Specify a LED GPIO for programming mode other then the `LED_BUILTIN`: | ||||
| ```C++ | ||||
| knx.ledPin(5); | ||||
| ``` | ||||
| 
 | ||||
| Use a custom function instead of a LED connected to GPIO to indicate the programming mode: | ||||
| ```C++ | ||||
| #include <Arduino.h> | ||||
| #include <Adafruit_NeoPixel.h> | ||||
| #include <knx.h> | ||||
| // create a pixel strand with 1 pixel on PIN_NEOPIXEL | ||||
| Adafruit_NeoPixel pixels(1, PIN_NEOPIXEL); | ||||
| 
 | ||||
| void progLedOff() | ||||
| { | ||||
|   pixels.clear(); | ||||
|   pixels.show(); | ||||
| } | ||||
| 
 | ||||
| void progLedOn() | ||||
| { | ||||
|   pixels.setPixelColor(0, pixels.Color(20, 0, 0)); | ||||
|   pixels.show(); | ||||
| } | ||||
| 
 | ||||
| void main () | ||||
| { | ||||
|  knx.setProgLedOffCallback(progLedOff); | ||||
|  knx.setProgLedOnCallback(progLedOn); | ||||
|  [...] | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| More configuration options can be found in the examples.  | ||||
| @ -28,7 +28,9 @@ | ||||
|         void buttonUp(); | ||||
|     #endif | ||||
| #elif defined(ARDUINO_ARCH_ESP32) | ||||
| #if !defined(LED_BUILTIN) | ||||
|     #define LED_BUILTIN 13 | ||||
| #endif | ||||
|     #include "esp32_platform.h" | ||||
|     #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE | ||||
|         void buttonUp(); | ||||
| @ -39,10 +41,14 @@ | ||||
|         void buttonUp(); | ||||
|     #endif | ||||
| #elif __linux__ | ||||
| #if !defined(LED_BUILTIN) | ||||
|     #define LED_BUILTIN 0 | ||||
| #endif | ||||
|     #include "linux_platform.h" | ||||
| #else | ||||
| #if !defined(LED_BUILTIN) | ||||
|     #define LED_BUILTIN 5 // see GPIO_PinConfig gpioPinConfigs[]
 | ||||
|  #endif    | ||||
|     #include "cc1310_platform.h" | ||||
|     #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE | ||||
|         extern void buttonUp(); | ||||
| @ -52,7 +58,9 @@ | ||||
| typedef const uint8_t* (*RestoreCallback)(const uint8_t* buffer); | ||||
| typedef uint8_t* (*SaveCallback)(uint8_t* buffer); | ||||
| typedef void (*IsrFunctionPtr)(); | ||||
|   | ||||
| typedef void (*ProgLedOnCallback)(); | ||||
| typedef void (*ProgLedOffCallback)(); | ||||
| 
 | ||||
| template <class P, class B> class KnxFacade : private SaveRestore | ||||
| { | ||||
|   public: | ||||
| @ -158,6 +166,16 @@ template <class P, class B> class KnxFacade : private SaveRestore | ||||
|         _ledPin = value; | ||||
|     } | ||||
| 
 | ||||
|     void setProgLedOffCallback(ProgLedOffCallback progLedOffCallback) | ||||
|     { | ||||
|         _progLedOffCallback = progLedOffCallback; | ||||
|     } | ||||
| 
 | ||||
|     void setProgLedOnCallback(ProgLedOnCallback progLedOnCallback) | ||||
|     { | ||||
|         _progLedOnCallback = progLedOnCallback; | ||||
|     } | ||||
| 
 | ||||
|     /**
 | ||||
|      * returns RISING if interrupt is created in a rising signal, FALLING otherwise | ||||
|      */ | ||||
| @ -209,12 +227,12 @@ template <class P, class B> class KnxFacade : private SaveRestore | ||||
|             if (_progLedState) | ||||
|             { | ||||
|                 println("progmode on"); | ||||
|                 digitalWrite(ledPin(), _ledPinActiveOn); | ||||
|                 progLedOn(); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 println("progmode off"); | ||||
|                 digitalWrite(ledPin(), HIGH - _ledPinActiveOn); | ||||
|                 progLedOff(); | ||||
|             } | ||||
|         } | ||||
|         if (_toggleProgMode) | ||||
| @ -252,10 +270,10 @@ template <class P, class B> class KnxFacade : private SaveRestore | ||||
| 
 | ||||
|     void start() | ||||
|     { | ||||
|         pinMode(ledPin(), OUTPUT); | ||||
| 
 | ||||
|         digitalWrite(ledPin(), HIGH - _ledPinActiveOn); | ||||
|         if (_progLedOffCallback == 0 || _progLedOnCallback == 0) | ||||
|             pinMode(ledPin(), OUTPUT); | ||||
| 
 | ||||
|         progLedOff(); | ||||
|         pinMode(buttonPin(), INPUT_PULLUP); | ||||
| 
 | ||||
|         if (_progButtonISRFuncPtr) | ||||
| @ -389,6 +407,8 @@ template <class P, class B> class KnxFacade : private SaveRestore | ||||
|     P* _platformPtr = 0; | ||||
|     B* _bauPtr = 0; | ||||
|     B& _bau; | ||||
|     ProgLedOnCallback _progLedOnCallback = 0; | ||||
|     ProgLedOffCallback _progLedOffCallback = 0; | ||||
|     uint32_t _ledPinActiveOn = LOW; | ||||
|     uint32_t _ledPin = LED_BUILTIN; | ||||
|     uint32_t _buttonPinInterruptOn = RISING; | ||||
| @ -425,6 +445,22 @@ template <class P, class B> class KnxFacade : private SaveRestore | ||||
|     { | ||||
|         _saveSize = size; | ||||
|     } | ||||
| 
 | ||||
|     void progLedOn() | ||||
|     { | ||||
|         if (_progLedOnCallback == 0) | ||||
|             digitalWrite(ledPin(), _ledPinActiveOn); | ||||
|         else | ||||
|             _progLedOnCallback(); | ||||
|     } | ||||
| 
 | ||||
|     void progLedOff() | ||||
|     { | ||||
|         if (_progLedOffCallback == 0) | ||||
|             digitalWrite(ledPin(), HIGH - _ledPinActiveOn); | ||||
|         else | ||||
|             _progLedOffCallback(); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user