2018-10-27 14:45:55 +02:00
/*******************************************************************************
*
* ttn - esp32 - The Things Network device library for ESP - IDF / SX127x
*
2019-10-08 20:52:08 +02:00
* Copyright ( c ) 2018 - 2019 Manuel Bleichenbacher
2018-10-27 14:45:55 +02:00
*
* Licensed under MIT License
* https : //opensource.org/licenses/MIT
*
* Task listening on a UART port for provisioning commands .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef _ttnprovisioning_h_
# define _ttnprovisioning_h_
# include "lmic/oslmic.h"
# include "nvs_flash.h"
class TTNProvisioning
{
public :
TTNProvisioning ( ) ;
bool haveKeys ( ) ;
bool decodeKeys ( const char * dev_eui , const char * app_eui , const char * app_key ) ;
bool fromMAC ( const char * app_eui , const char * app_key ) ;
bool saveKeys ( ) ;
bool restoreKeys ( bool silent ) ;
2018-10-27 19:19:55 +02:00
# if defined(TTN_HAS_AT_COMMANDS)
void startTask ( ) ;
# endif
2018-10-27 14:45:55 +02:00
private :
bool decode ( bool incl_dev_eui , const char * dev_eui , const char * app_eui , const char * app_key ) ;
2018-10-27 19:19:55 +02:00
bool readNvsValue ( nvs_handle handle , const char * key , uint8_t * data , size_t expected_length , bool silent ) ;
bool writeNvsValue ( nvs_handle handle , const char * key , const uint8_t * data , size_t len ) ;
# if defined(TTN_HAS_AT_COMMANDS)
void provisioningTask ( ) ;
2018-10-27 14:45:55 +02:00
void addLineData ( int numBytes ) ;
void detectLineEnd ( int start_at ) ;
void processLine ( ) ;
2018-10-27 19:19:55 +02:00
# endif
2018-10-27 14:45:55 +02:00
2018-10-27 19:19:55 +02:00
# if defined(TTN_CONFIG_UART)
2018-10-27 14:45:55 +02:00
void configUART ( ) ;
# endif
static bool hexStrToBin ( const char * hex , uint8_t * buf , int len ) ;
static int hexTupleToByte ( const char * hex ) ;
static int hexDigitToVal ( char ch ) ;
static void binToHexStr ( const uint8_t * buf , int len , char * hex ) ;
static char valToHexDigit ( int val ) ;
static void swapBytes ( uint8_t * buf , int len ) ;
static bool isAllZeros ( const uint8_t * buf , int len ) ;
private :
bool have_keys = false ;
2018-10-27 19:19:55 +02:00
# if defined(TTN_HAS_AT_COMMANDS)
2018-10-27 14:45:55 +02:00
QueueHandle_t uart_queue ;
char * line_buf ;
int line_length ;
uint8_t last_line_end_char ;
bool quit_task ;
friend void ttn_provisioning_task_caller ( void * pvParameter ) ;
2018-10-27 19:19:55 +02:00
# endif
2018-10-27 14:45:55 +02:00
} ;
# endif