mirror of
				https://github.com/manuelbl/ttn-esp32.git
				synced 2025-10-31 10:40:35 +01:00 
			
		
		
		
	Initial check-in
This commit is contained in:
		
							
								
								
									
										133
									
								
								include/TheThingsNetwork.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								include/TheThingsNetwork.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,133 @@ | ||||
| /******************************************************************************* | ||||
|  * Copyright (c) 2018 Manuel Bleichenbacher | ||||
|  *  | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available under the terms of the Eclipse Public License v1.0 | ||||
|  * which accompanies this distribution, and is available at | ||||
|  * http://www.eclipse.org/legal/epl-v10.html | ||||
|  * | ||||
|  * This the hardware abstraction layer to run LMIC in on ESP32 using ESP-iDF. | ||||
|  *******************************************************************************/ | ||||
|  | ||||
| #ifndef _THETHINGSNETWORK_H_ | ||||
| #define _THETHINGSNETWORK_H_ | ||||
|  | ||||
| #include <stdint.h> | ||||
| #include "driver/spi_master.h" | ||||
|  | ||||
| #define TTN_DEFAULT_SF 7 | ||||
| #define TTN_DEFAULT_FSB 2 | ||||
|  | ||||
| /** | ||||
|  * @brief Constant for indicating that a pin is not connected | ||||
|  */ | ||||
| #define TTN_NOT_CONNECTED 0xff | ||||
|  | ||||
|  | ||||
| typedef uint8_t port_t; | ||||
|  | ||||
| /** | ||||
|  * @brief Response codes | ||||
|  */ | ||||
| enum ttn_response_t | ||||
| { | ||||
|   TTN_ERROR_SEND_COMMAND_FAILED = (-1), | ||||
|   TTN_ERROR_UNEXPECTED_RESPONSE = (-10), | ||||
|   TTN_SUCCESSFUL_TRANSMISSION = 1, | ||||
|   TTN_SUCCESSFUL_RECEIVE = 2 | ||||
| }; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * @brief TTN device | ||||
|  *  | ||||
|  * The TheThingsNetwork class enables ESP32 devices with SX1272/73/76/77/78/79 LoRaWAN chips | ||||
|  * to communicate via The Things Network. | ||||
|  *  | ||||
|  * Only one instance of this class must be created. | ||||
|  */ | ||||
| class TheThingsNetwork | ||||
| { | ||||
| public: | ||||
|     /** | ||||
|      * @brief Construct a new The Things Network device | ||||
|      *  | ||||
|      * @param sf        The spreading factor. 7 to 10 for US915 frequency plan. 7 to 12 for other frequency plans. Defaults to 7. | ||||
|      * @param fsb       Optional custom frequency subband. 1 to 8. Defaults to 2. | ||||
|      */ | ||||
|     TheThingsNetwork(uint8_t sf = TTN_DEFAULT_SF, uint8_t fsb = TTN_DEFAULT_FSB); | ||||
|  | ||||
|     /** | ||||
|      * @brief Destroy the The Things Network device. | ||||
|      */ | ||||
|     ~TheThingsNetwork(); | ||||
|  | ||||
|     /** | ||||
|      * @brief Reset the LoRaWAN radio. | ||||
|      *  | ||||
|      * Does not clear provisioned keys. | ||||
|      */ | ||||
|     void reset(); | ||||
|  | ||||
|     /** | ||||
|      * @brief Configures the pins used to communicate with the LoRaWAN radio chip. | ||||
|      *  | ||||
|      * The SPI bus must be first configured using spi_bus_initialize(). Then it is passed as the first parameter. | ||||
|      *  | ||||
|      * @param spi_host  The SPI bus/peripherial to use (SPI_HOST, HSPI_HOST or VSPI_HOST). | ||||
|      * @param nss       The GPIO pin number connected to the radio chip's NSS pin (serving as the SPI chip select) | ||||
|      * @param rxtx      The GPIO pin number connected to the radio chip's RXTX pin (TTN_NOT_CONNECTED if not connected) | ||||
|      * @param rst       The GPIO pin number connected to the radio chip's RST pin (TTN_NOT_CONNECTED if not connected) | ||||
|      * @param dio0      The GPIO pin number connected to the radio chip's DIO0 pin | ||||
|      * @param dio1      The GPIO pin number connected to the radio chip's DIO1 pin | ||||
|      */ | ||||
|     void configurePins(spi_host_device_t spi_host, uint8_t nss, uint8_t rxtx, uint8_t rst, uint8_t dio0, uint8_t dio1); | ||||
|  | ||||
|     /** | ||||
|      * @brief Sets the information needed to activate the device via OTAA, without actually activating. | ||||
|      *  | ||||
|      * Call join() without the first 2 arguments to activate. | ||||
|      *  | ||||
|      * @param appEui  Application EUI of the device (16 character string with hexadecimal data) | ||||
|      * @param appKey  App Key of the device (32 character string with hexadecimal data) | ||||
|      * @param devEui  Device EUI (16 character string with hexadecimal data) or NULL if already set | ||||
|      * @return true   if the provisioning was successful | ||||
|      * @return false  if the provisioning failed | ||||
|      */ | ||||
|     bool provision(const char *appEui, const char *appKey, const char *devEui = NULL); | ||||
|  | ||||
|     /** | ||||
|      * @brief Activate the device via OTAA. | ||||
|      *  | ||||
|      * @param appEui      Application EUI of the device (16 character string with hexadecimal data) | ||||
|      * @param appKey      App Key of the device (32 character string with hexadecimal data) | ||||
|      * @param devEui  Device EUI (16 character string with hexadecimal data) or NULL if already set | ||||
|      * @param retries     Number of times to retry after failed or unconfirmed join. Defaults to -1 which means infinite. | ||||
|      * @param retryDelay  Delay in ms between attempts. Defaults to 10 seconds. | ||||
|      * @return true  | ||||
|      * @return false  | ||||
|      */ | ||||
|     bool join(const char *appEui, const char *appKey, const char *devEui = NULL, int8_t retries = -1, uint32_t retryDelay = 10000); | ||||
|  | ||||
|     /** | ||||
|      * @brief Activate the device via OTAA. | ||||
|      *  | ||||
|      * The app EUI and key must already have been provisioned. | ||||
|      *  | ||||
|      * @param retries     Number of times to retry after failed or unconfirmed join. Defaults to -1 which means infinite. | ||||
|      * @param retryDelay  Delay in ms between attempts. Defaults to 10 seconds. | ||||
|      * @return true  | ||||
|      * @return false  | ||||
|      */ | ||||
|     bool join(int8_t retries = -1, uint32_t retryDelay = 10000); | ||||
|  | ||||
|     ttn_response_t sendBytes(const uint8_t *payload, size_t length, port_t port = 1, bool confirm = false, uint8_t sf = 0); | ||||
|  | ||||
| private: | ||||
|     uint8_t spreadingFactor = TTN_DEFAULT_SF; | ||||
|     uint8_t frequencySubband = TTN_DEFAULT_FSB; | ||||
|  | ||||
|     bool decodeKeys(const char *appEui, const char *appKey, const char *devEui); | ||||
| }; | ||||
|  | ||||
| #endif | ||||
		Reference in New Issue
	
	Block a user