mirror of
https://github.com/mysensors/MySensors.git
synced 2026-02-20 01:21:27 +01:00
* Added support for I2C EEPROM OTA * EEPROM OTA now uses extEEPROM as driver * Compiler warning fix * Style check fixes * Fix doxygen warnings of I2CEeprom * Use bool instead of boolean in I2CEeprom shim * Fix re-merged style problem
1384 lines
39 KiB
C
1384 lines
39 KiB
C
/*
|
|
* The MySensors Arduino library handles the wireless radio link and protocol
|
|
* between your home built sensors/actuators and HA controller of choice.
|
|
* The sensors forms a self healing radio network with optional repeaters. Each
|
|
* repeater and gateway builds a routing tables in RAM or EEPROM which keeps track of the
|
|
* network topology allowing messages to be routed to nodes.
|
|
*
|
|
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
|
|
* Copyright (C) 2013-2017 Sensnology AB
|
|
* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
|
|
*
|
|
* Documentation: http://www.mysensors.org
|
|
* Support Forum: http://forum.mysensors.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* version 2 as published by the Free Software Foundation.
|
|
*/
|
|
|
|
/**
|
|
* @file MyConfig.h
|
|
*
|
|
* MySensors specific configurations
|
|
*/
|
|
#ifndef MyConfig_h
|
|
#define MyConfig_h
|
|
#include <stdint.h>
|
|
|
|
|
|
/**********************************
|
|
* Serial and debug options
|
|
***********************************/
|
|
|
|
/**
|
|
* @def MY_DEBUG
|
|
* @brief Enable MY_DEBUG in sketch to show debug prints. This option will add a lot to the size of the
|
|
* final sketch but is helpful to see what is actually is happening during development
|
|
*/
|
|
//#define MY_DEBUG
|
|
|
|
/**
|
|
* @def MY_SPECIAL_DEBUG
|
|
* @brief Enable MY_SPECIAL_DEBUG to enable I_DEBUG messages.
|
|
* I_DEBUG requests are:
|
|
* R: routing info (only repeaters): received msg XXYY (as stream), where XX is the node and YY the routing node
|
|
* V: CPU voltage
|
|
* F: CPU frequency
|
|
* M: free memory
|
|
* E: clear MySensors EEPROM area and reboot (i.e. "factory" reset)
|
|
*/
|
|
//#define MY_SPECIAL_DEBUG
|
|
|
|
/**
|
|
* @def MY_DISABLED_SERIAL
|
|
* @brief Enable MY_DISABLED_SERIAL in sketch if you want to use TX(1), RX(0) as normal I/O pins
|
|
*/
|
|
//#define MY_DISABLED_SERIAL
|
|
|
|
/**
|
|
* @def MY_CORE_ONLY
|
|
* @brief Enable MY_CORE_ONLY flag if you want to use core functions without loading the framework
|
|
*/
|
|
//#define MY_CORE_ONLY
|
|
|
|
// Turn off debug if serial pins is used for other stuff
|
|
#ifdef MY_DISABLED_SERIAL
|
|
#undef MY_DEBUG
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_BAUD_RATE
|
|
* @brief Serial output baud rate (debug prints and serial gateway speed).
|
|
*/
|
|
#ifndef MY_BAUD_RATE
|
|
#define MY_BAUD_RATE (115200ul)
|
|
#endif
|
|
/**
|
|
* @def MY_SERIAL_OUTPUT_SIZE
|
|
* @brief Max. characters for serial output.
|
|
*/
|
|
#ifndef MY_SERIAL_OUTPUT_SIZE
|
|
#define MY_SERIAL_OUTPUT_SIZE (120u)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_DISABLE_REMOTE_RESET
|
|
* @brief Disables over-the-air reset of node
|
|
*/
|
|
//#define MY_DISABLE_REMOTE_RESET
|
|
|
|
/**********************************
|
|
* Radio selection and node config
|
|
***********************************/
|
|
|
|
// Selecting uplink transport layer is optional (for a gateway node).
|
|
//#define MY_RADIO_RF24
|
|
//#define MY_RADIO_NRF5_ESB
|
|
//#define MY_RADIO_RFM69
|
|
//#define MY_RADIO_RFM95
|
|
//#define MY_RS485
|
|
|
|
// legacy
|
|
#ifdef MY_RADIO_NRF24
|
|
//MY_RADIO_NRF24 is deprecated
|
|
#define MY_RADIO_RF24
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RAM_ROUTING_TABLE_FEATURE
|
|
* @brief If enabled, the routing table is kept in RAM (if memory allows) and saved in regular intervals.
|
|
* note: AVR has limited memory, use with care
|
|
*/
|
|
#define MY_RAM_ROUTING_TABLE_FEATURE
|
|
|
|
/**
|
|
* @def MY_ROUTING_TABLE_SAVE_INTERVAL_MS
|
|
* @brief Interval to dump content of routing table to eeprom
|
|
*/
|
|
#ifndef MY_ROUTING_TABLE_SAVE_INTERVAL_MS
|
|
#define MY_ROUTING_TABLE_SAVE_INTERVAL_MS (30*60*1000ul)
|
|
#endif
|
|
/**
|
|
* @def MY_TRANSPORT_SANITY_CHECK
|
|
* @brief If enabled, node will check transport in regular intervals to detect HW issues and re-initialize in case of failure.
|
|
* This feature is enabled for all repeater nodes (incl. GW)
|
|
*/
|
|
//#define MY_TRANSPORT_SANITY_CHECK
|
|
|
|
/**
|
|
* @def MY_TRANSPORT_SANITY_CHECK_INTERVAL_MS
|
|
* @brief Interval (in ms) for transport sanity checks
|
|
*/
|
|
#ifndef MY_TRANSPORT_SANITY_CHECK_INTERVAL_MS
|
|
#define MY_TRANSPORT_SANITY_CHECK_INTERVAL_MS (15*60*1000ul)
|
|
#endif
|
|
/**
|
|
* @def MY_TRANSPORT_DISCOVERY_INTERVAL_MS
|
|
* @brief This is a gateway-only feature: Interval (in ms) to issue network discovery checks
|
|
*/
|
|
#ifndef MY_TRANSPORT_DISCOVERY_INTERVAL_MS
|
|
#define MY_TRANSPORT_DISCOVERY_INTERVAL_MS (20*60*1000ul)
|
|
#endif
|
|
|
|
/**
|
|
*@def MY_TRANSPORT_UPLINK_CHECK_DISABLED
|
|
*@brief If set, uplink check to GW is disabled during transport initialisation
|
|
*/
|
|
//#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
|
|
|
|
/**
|
|
*@def MY_TRANSPORT_MAX_TX_FAILURES
|
|
*@brief Set to override max. consecutive TX failures until SNP is initiated
|
|
*/
|
|
//#define MY_TRANSPORT_MAX_TX_FAILURES (10u)
|
|
|
|
/**
|
|
* @def MY_REGISTRATION_FEATURE
|
|
* @brief If enabled, node has to register to gateway/controller before allowed to send sensor data.
|
|
*/
|
|
#define MY_REGISTRATION_FEATURE
|
|
|
|
/**
|
|
* @def MY_REGISTRATION_RETRIES
|
|
* @brief Number of registration retries if no reply received from GW/controller
|
|
*/
|
|
|
|
#ifndef MY_REGISTRATION_RETRIES
|
|
#define MY_REGISTRATION_RETRIES (3u)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_REGISTRATION_DEFAULT
|
|
* @brief Node registration default - this applies if no registration response is received from controller
|
|
*/
|
|
#define MY_REGISTRATION_DEFAULT true
|
|
|
|
/**
|
|
* @def MY_REGISTRATION_CONTROLLER
|
|
* @brief If enabled, node registration request has to be handled by controller
|
|
*/
|
|
// #define MY_REGISTRATION_CONTROLLER
|
|
|
|
/**
|
|
* @def MY_CORE_COMPATIBILITY_CHECK
|
|
* @brief If enabled, library compatibility is checked during node registration. Incompatible libraries are unable to send sensor data.
|
|
*/
|
|
#define MY_CORE_COMPATIBILITY_CHECK
|
|
|
|
/**
|
|
* @def MY_TRANSPORT_WAIT_READY_MS
|
|
* @brief Timeout in MS until transport is ready during startup, set to 0 for no timeout
|
|
*/
|
|
#ifndef MY_TRANSPORT_WAIT_READY_MS
|
|
#define MY_TRANSPORT_WAIT_READY_MS (0ul)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_PASSIVE_NODE
|
|
* @brief If enabled, the node operates fully autonomously, i.e. messages are sent without ACKing.
|
|
* note: All transport-related checks and safety-mechanisms are disabled.
|
|
* Requirement: @ref MY_NODE_ID needs to be set, @ref MY_PARENT_NODE_ID and @ref MY_PARENT_NODE_IS_STATIC are optional.
|
|
* Singing, registration, and OTA FW update are disabled.
|
|
*/
|
|
//#define MY_PASSIVE_NODE
|
|
|
|
|
|
/**
|
|
* @def MY_NODE_ID
|
|
* @brief Node id defaults to AUTO (tries to fetch id from controller).
|
|
*/
|
|
#ifndef MY_NODE_ID
|
|
#define MY_NODE_ID AUTO
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_PARENT_NODE_ID
|
|
* @brief Node parent defaults to AUTO (tries to find a parent automatically).
|
|
*/
|
|
#ifndef MY_PARENT_NODE_ID
|
|
#define MY_PARENT_NODE_ID AUTO
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_PARENT_NODE_IS_STATIC
|
|
* @brief Enable MY_PARENT_NODE_IS_STATIC to disable fall back if parent node fails
|
|
*/
|
|
//#define MY_PARENT_NODE_IS_STATIC
|
|
|
|
/**
|
|
* @def MY_REPEATER_FEATURE
|
|
* @brief Enables repeater functionality (relays messages from other nodes)
|
|
*/
|
|
//#define MY_REPEATER_FEATURE
|
|
|
|
/**
|
|
* @def MY_SLEEP_TRANSPORT_RECONNECT_TIMEOUT_MS
|
|
* @brief Timeout (in ms) to re-establish link if node is send to sleep and transport is not ready.
|
|
*/
|
|
#ifndef MY_SLEEP_TRANSPORT_RECONNECT_TIMEOUT_MS
|
|
#define MY_SLEEP_TRANSPORT_RECONNECT_TIMEOUT_MS (10*1000ul)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_SMART_SLEEP_WAIT_DURATION_MS
|
|
* @brief The wait period (in ms) before going to sleep when using smartSleep-functions.
|
|
*
|
|
* This period has to be long enough for controller to be able to send out
|
|
* potential buffered messages.
|
|
*/
|
|
#ifndef MY_SMART_SLEEP_WAIT_DURATION_MS
|
|
#define MY_SMART_SLEEP_WAIT_DURATION_MS (500ul)
|
|
#endif
|
|
|
|
/**********************************
|
|
* Over the air firmware updates
|
|
***********************************/
|
|
|
|
// Enable MY_OTA_FIRMWARE_FEATURE in sketch to allow safe over-the-air firmware updates.
|
|
// This feature requires external flash and the DualOptiBoot boot-loader.
|
|
// Note: You can still have OTA FW updates without external flash but it
|
|
// requires the MYSBootloader and disabled MY_OTA_FIRMWARE_FEATURE
|
|
//#define MY_OTA_FIRMWARE_FEATURE
|
|
|
|
// Define or uncomment MY_OTA_USE_I2C_EEPROM below if you want I2C EEPROM instead
|
|
// of a SPI flash. Used EEPROM needs to be large enough, an 24(L)C256 will do as minimum.
|
|
// HW I2C assumed. This will exclude the SPI flash code.
|
|
// Note that you also need an updated DualOptiboot supporting I2C EEPROM!
|
|
//#define MY_OTA_USE_I2C_EEPROM
|
|
|
|
#ifdef MY_OTA_USE_I2C_EEPROM
|
|
// I2C address of EEPROM. Wire will shift this left, i.e. 0x50->0xA0
|
|
#ifndef MY_OTA_I2C_ADDR
|
|
#define MY_OTA_I2C_ADDR 0x50
|
|
#endif
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_OTA_FLASH_SS
|
|
* @brief Slave select pin for external flash.
|
|
*/
|
|
#ifndef MY_OTA_FLASH_SS
|
|
#define MY_OTA_FLASH_SS (8)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_OTA_FLASH_JDECID
|
|
* @brief Flash JDECID. Use (0x00) if unknown.
|
|
*/
|
|
#ifndef MY_OTA_FLASH_JDECID
|
|
#define MY_OTA_FLASH_JDECID (0x1F65)
|
|
#endif
|
|
|
|
|
|
/**********************************
|
|
* Gateway config
|
|
***********************************/
|
|
|
|
/**
|
|
* @def MY_GATEWAY_MAX_RECEIVE_LENGTH
|
|
* @brief Max buffersize needed for messages coming from controller.
|
|
*/
|
|
#ifndef MY_GATEWAY_MAX_RECEIVE_LENGTH
|
|
#define MY_GATEWAY_MAX_RECEIVE_LENGTH (100u)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_GATEWAY_MAX_SEND_LENGTH
|
|
* @brief Max buffer size when sending messages.
|
|
*/
|
|
#ifndef MY_GATEWAY_MAX_SEND_LENGTH
|
|
#define MY_GATEWAY_MAX_SEND_LENGTH (120u)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_GATEWAY_MAX_CLIENTS
|
|
* @brief Max number of parallel clients (sever mode).
|
|
*/
|
|
#ifndef MY_GATEWAY_MAX_CLIENTS
|
|
#define MY_GATEWAY_MAX_CLIENTS (1u)
|
|
#endif
|
|
|
|
|
|
|
|
/**********************************
|
|
* Information LEDs blinking
|
|
***********************************/
|
|
// If one of the following is defined here, or in the sketch, the pin will be used for the
|
|
// corresponding led function.
|
|
// They have to be enabled here (or in your sketch). Replace x with the pin number you have the LED on.
|
|
//
|
|
// NOTE!! that on some platforms (for example sensebender GW) the hardware variant can enable LEDs by default,
|
|
// These defaults can be overridden by defining one of these.
|
|
//#define MY_DEFAULT_ERR_LED_PIN x
|
|
//#define MY_DEFAULT_TX_LED_PIN x
|
|
//#define MY_DEFAULT_RX_LED_PIN x
|
|
|
|
/**
|
|
* @def MY_WITH_LEDS_BLINKING_INVERSE
|
|
* @brief The following setting allows you to inverse the LED blinking.
|
|
* When MY_WITH_LEDS_BLINKING_INVERSE is enabled LEDSs are normally turned on and switches off when blinking.
|
|
*/
|
|
//#define MY_WITH_LEDS_BLINKING_INVERSE
|
|
|
|
/**
|
|
* @def MY_INDICATION_HANDLER
|
|
* @brief Enable to use own indication handler.
|
|
*/
|
|
//#define MY_INDICATION_HANDLER
|
|
|
|
/**
|
|
* @def MY_DEFAULT_LED_BLINK_PERIOD
|
|
* @brief Default LEDs blinking period in milliseconds.
|
|
*/
|
|
#ifndef MY_DEFAULT_LED_BLINK_PERIOD
|
|
#define MY_DEFAULT_LED_BLINK_PERIOD 300
|
|
#endif
|
|
|
|
|
|
|
|
/**********************************************
|
|
* Gateway inclusion button/mode configuration
|
|
**********************************************/
|
|
|
|
/**
|
|
* @def MY_INCLUSION_MODE_FEATURE
|
|
* @brief Enables inclusion mode feature.
|
|
*/
|
|
//#define MY_INCLUSION_MODE_FEATURE
|
|
|
|
/**
|
|
* @def MY_INCLUSION_BUTTON_FEATURE
|
|
* @brief Enables inclusion-mode button feature on the gateway device
|
|
*/
|
|
//#define MY_INCLUSION_BUTTON_FEATURE
|
|
|
|
// Disable inclusion mode button if inclusion mode feature is not enabled
|
|
#ifndef MY_INCLUSION_MODE_FEATURE
|
|
#undef MY_INCLUSION_BUTTON_FEATURE
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_INCLUSION_MODE_BUTTON_PIN
|
|
* @brief The default input pin used for the inclusion mode button.
|
|
*/
|
|
#ifndef MY_INCLUSION_MODE_BUTTON_PIN
|
|
#if defined(ARDUINO_ARCH_ESP8266)
|
|
#define MY_INCLUSION_MODE_BUTTON_PIN (5)
|
|
#else
|
|
#define MY_INCLUSION_MODE_BUTTON_PIN (3)
|
|
#endif
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_INCLUSION_MODE_DURATION
|
|
* @brief Number of seconds (default one minute) inclusion mode should be enabled.
|
|
*/
|
|
|
|
#ifndef MY_INCLUSION_MODE_DURATION
|
|
#define MY_INCLUSION_MODE_DURATION (60)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_INCLUSION_BUTTON_PRESSED
|
|
* @brief The logical level indicating a pressed inclusion mode button.
|
|
*/
|
|
#if defined(MY_INCLUSION_BUTTON_EXTERNAL_PULLUP)
|
|
#define MY_INCLUSION_BUTTON_PRESSED HIGH
|
|
#else
|
|
#define MY_INCLUSION_BUTTON_PRESSED LOW
|
|
#endif
|
|
|
|
/**********************************
|
|
* Message Signing Settings
|
|
***********************************/
|
|
/**
|
|
* @def MY_DEBUG_VERBOSE_SIGNING
|
|
* @brief Flag for verbose debug prints related to signing. Requires DEBUG to be enabled.
|
|
* This will add even more to the size of the final sketch!
|
|
*/
|
|
//#define MY_DEBUG_VERBOSE_SIGNING
|
|
|
|
/**
|
|
* @def MY_SIGNING_SIMPLE_PASSWD
|
|
* @brief Enables SW backed signing functionality in library and uses provided password as key.
|
|
*
|
|
* This flag will enable signing, signature requests and encryption. It has to be identical on ALL
|
|
* nodes in the network.<br>
|
|
* Whitelisting is supported and serial will be the first 8 characters of the password, the ninth
|
|
* character will be the node ID (to make each node have a unique serial).<br>
|
|
* As with the regular signing modes, whitelisting is only activated if a whitelist is specified in
|
|
* the sketch.
|
|
* No personalization is required for this mode.<br>
|
|
* It is allowed to set @ref MY_SIGNING_WEAK_SECURITY for deployment purposes in this mode as it is
|
|
* with the regular software and ATSHA204A based modes.<br>
|
|
* If the provided password is shorter than the size of the HMAC or AES key, it will be null-padded
|
|
* to accomodate the key size in question. A 32 character password is the maximum length. Any
|
|
* password longer than that will be truncated.
|
|
*/
|
|
//#define MY_SIGNING_SIMPLE_PASSWD "MyInsecurePassword"
|
|
#if defined(MY_SIGNING_SIMPLE_PASSWD)
|
|
#define MY_SIGNING_SOFT
|
|
#define MY_SIGNING_REQUEST_SIGNATURES
|
|
#define MY_RF24_ENABLE_ENCRYPTION
|
|
#define MY_RFM69_ENABLE_ENCRYPTION
|
|
#define MY_NRF5_ESB_ENABLE_ENCRYPTION
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_SIGNING_ATSHA204
|
|
* @brief Enables HW backed signing functionality in library.
|
|
*
|
|
* For any signing related functionality to be included, this define or @ref MY_SIGNING_SOFT has to
|
|
* be enabled.
|
|
*/
|
|
//#define MY_SIGNING_ATSHA204
|
|
|
|
/**
|
|
* @def MY_SIGNING_SOFT
|
|
* @brief Enables SW backed signing functionality in library.
|
|
*
|
|
* For any signing related functionality to be included, this define or @ref MY_SIGNING_ATSHA204 has
|
|
* to be enabled.
|
|
*/
|
|
//#define MY_SIGNING_SOFT
|
|
|
|
/**
|
|
* @def MY_SIGNING_REQUEST_SIGNATURES
|
|
* @brief Enable this to inform gateway to sign all messages sent to this node.
|
|
*
|
|
* If used for a gateway, gateway will only request signatures from nodes that in turn
|
|
* request signatures from gateway.
|
|
*/
|
|
//#define MY_SIGNING_REQUEST_SIGNATURES
|
|
|
|
/**
|
|
* @def MY_SIGNING_WEAK_SECURITY
|
|
* @brief Enable this to permit downgrade of security preferences and relaxed gateway signing
|
|
* requirements.
|
|
*
|
|
* Use this for evaluating security. It allows for gradual introduction of signing requirements in
|
|
* a network. Nodes that present themselves as not requiering signing or whitelisting will be
|
|
* cleared of this requirement at the receiving end. A gateway which require signatures will only do
|
|
* so from nodes that in turn require signatures.<br>
|
|
* When not set, any node that has presented themselves as a node that require signatures or
|
|
* whitelisting, will be permanently remembered as doing so at the receiver until EEPROM is cleared
|
|
* or the receiver is reconfigured with this flag set or has signing disabled alltogether.
|
|
*
|
|
* @warning This flag when set will weaken security significantly
|
|
*/
|
|
//#define MY_SIGNING_WEAK_SECURITY
|
|
|
|
/**
|
|
* @def MY_VERIFICATION_TIMEOUT_MS
|
|
* @brief Define a suitable timeout for a signature verification session
|
|
*
|
|
* Consider the turnaround from a nonce being generated to a signed message being received
|
|
* which might vary, especially in networks with many hops. 5s ought to be enough for anyone.
|
|
*/
|
|
#ifndef MY_VERIFICATION_TIMEOUT_MS
|
|
#define MY_VERIFICATION_TIMEOUT_MS (5*1000ul)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_SIGNING_NODE_WHITELISTING
|
|
* @brief Enable to turn on whitelisting
|
|
*
|
|
* When enabled, a signing node will salt the signature with it's unique signature and nodeId.<br>
|
|
* The verifying node will look up the sender in a local table of trusted nodes and
|
|
* do the corresponding salting in order to verify the signature.<br>
|
|
* For this reason, if whitelisting is enabled on one of the nodes in a sign-verify pair, both
|
|
* nodes have to implement whitelisting for this to work.<br>
|
|
* Note that a node can still transmit a non-salted message (i.e. have whitelisting disabled)
|
|
* to a node that has whitelisting enabled (assuming the receiver does not have a matching entry
|
|
* for the sender in it's whitelist). The whitelist to use is defined as the value of the flag.
|
|
*/
|
|
//#define MY_SIGNING_NODE_WHITELISTING {{.nodeId = GATEWAY_ADDRESS,.serial = {0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01}}}
|
|
|
|
/**
|
|
* @def MY_SIGNING_ATSHA204_PIN
|
|
* @brief Atsha204 default pin setting
|
|
*
|
|
* Pin where ATSHA204 is attached
|
|
*/
|
|
#ifndef MY_SIGNING_ATSHA204_PIN
|
|
#define MY_SIGNING_ATSHA204_PIN (17)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_SIGNING_SOFT_RANDOMSEED_PIN
|
|
* @brief Pin used for random generation in soft signing
|
|
*
|
|
* Do not connect anything to this when soft signing is enabled
|
|
*/
|
|
#ifndef MY_SIGNING_SOFT_RANDOMSEED_PIN
|
|
#define MY_SIGNING_SOFT_RANDOMSEED_PIN (7)
|
|
#endif
|
|
|
|
/**********************************
|
|
* RS485 Driver Defaults
|
|
***********************************/
|
|
|
|
/**
|
|
* @def MY_RS485_BAUD_RATE
|
|
* @brief The RS485 BAUD rate.
|
|
*/
|
|
#ifndef MY_RS485_BAUD_RATE
|
|
#define MY_RS485_BAUD_RATE (9600)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RS485_MAX_MESSAGE_LENGTH
|
|
* @brief The maximum message length used for RS485.
|
|
*/
|
|
#ifndef MY_RS485_MAX_MESSAGE_LENGTH
|
|
#define MY_RS485_MAX_MESSAGE_LENGTH (40)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RS485_DE_PIN
|
|
* @brief RS485 driver enable pin.
|
|
*/
|
|
//#define MY_RS485_DE_PIN (2)
|
|
|
|
/**
|
|
* @def MY_RS485_HWSERIAL
|
|
* @brief Enable this if RS485 is connected to a hardware serial port.
|
|
*/
|
|
//#define MY_RS485_HWSERIAL Serial1
|
|
|
|
/**********************************
|
|
* NRF24L01P Driver Defaults
|
|
***********************************/
|
|
|
|
/**
|
|
* @def MY_RF24_ENABLE_ENCRYPTION
|
|
* @brief Enables RF24 encryption (all nodes and gateway must have this enabled, and all must be personalized with the same AES key)
|
|
*/
|
|
//#define MY_RF24_ENABLE_ENCRYPTION
|
|
|
|
/**
|
|
* @def MY_DEBUG_VERBOSE_RF24
|
|
* @brief Enable MY_DEBUG_VERBOSE_RF24 flag for verbose debug prints related to the RF24 driver.
|
|
*/
|
|
//#define MY_DEBUG_VERBOSE_RF24
|
|
|
|
/**
|
|
* @def MY_RF24_SPI_SPEED
|
|
* @brief MY_RF24_SPI_SPEED to overrule default nRF24L01+ SPI speed, 2MHz - safe for nRF24L01+ clones
|
|
*/
|
|
#ifndef MY_RF24_SPI_SPEED
|
|
#define MY_RF24_SPI_SPEED (2*1000000ul)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RF24_CE_PIN
|
|
* @brief Default RF24 chip enable pin setting. Override in sketch if needed.
|
|
*/
|
|
#ifndef MY_RF24_CE_PIN
|
|
#define MY_RF24_CE_PIN DEFAULT_RF24_CE_PIN
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RF24_CS_PIN
|
|
* @brief Default RF24 chip select pin setting. Override in sketch if needed.
|
|
*/
|
|
#ifndef MY_RF24_CS_PIN
|
|
#define MY_RF24_CS_PIN DEFAULT_RF24_CS_PIN
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RF24_POWER_PIN
|
|
* @brief NRF24 power pin, uncomment if used
|
|
*/
|
|
//#define MY_RF24_POWER_PIN (3)
|
|
|
|
/**
|
|
* @def MY_RX_MESSAGE_BUFFER_FEATURE
|
|
* @brief This enabled the receiving buffer feature.
|
|
*
|
|
* This feature is currently not supported for RFM69 and RS485, for RF24 MY_RF24_IRQ_PIN has to be defined.
|
|
*/
|
|
//#define MY_RX_MESSAGE_BUFFER_FEATURE
|
|
|
|
/**
|
|
* @def MY_RX_MESSAGE_BUFFER_SIZE
|
|
* @brief Declare the amount of incoming messages that can be buffered.
|
|
*/
|
|
#ifdef MY_RX_MESSAGE_BUFFER_FEATURE
|
|
#ifndef MY_RX_MESSAGE_BUFFER_SIZE
|
|
#define MY_RX_MESSAGE_BUFFER_SIZE (20)
|
|
#endif
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RF24_PA_LEVEL
|
|
* @brief Default RF24 PA level. Override in sketch if needed.
|
|
*
|
|
* RF24_PA_LOW = -18dBm
|
|
* RF24_PA_MID = -12dBm
|
|
* RF24_PA_HIGH = -6dBm
|
|
* RF24_PA_MAX = 0dBm
|
|
*/
|
|
#ifndef MY_RF24_PA_LEVEL
|
|
#define MY_RF24_PA_LEVEL RF24_PA_HIGH
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RF24_CHANNEL
|
|
* @brief RF channel for the sensor net, 0-125.
|
|
* Frequence: 2400 Mhz - 2525 Mhz Channels: 126
|
|
* http://www.mysensors.org/radio/nRF24L01Plus.pdf
|
|
* 0 => 2400 Mhz (RF24 channel 1)
|
|
* 1 => 2401 Mhz (RF24 channel 2)
|
|
* 76 => 2476 Mhz (RF24 channel 77)
|
|
* 83 => 2483 Mhz (RF24 channel 84)
|
|
* 124 => 2524 Mhz (RF24 channel 125)
|
|
* 125 => 2525 Mhz (RF24 channel 126)
|
|
* In some countries there might be limitations, in Germany for example only the range 2400,0 - 2483,5 Mhz is allowed
|
|
* http://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2013_10_WLAN_2,4GHz_pdf.pdf
|
|
*/
|
|
#ifndef MY_RF24_CHANNEL
|
|
#define MY_RF24_CHANNEL (76)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RF24_DATARATE
|
|
* @brief RF24 datarate (RF24_250KBPS for 250kbs, RF24_1MBPS for 1Mbps or RF24_2MBPS for 2Mbps).
|
|
*/
|
|
#ifndef MY_RF24_DATARATE
|
|
#define MY_RF24_DATARATE RF24_250KBPS
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RF24_BASE_RADIO_ID
|
|
* @brief RF24 radio network identifier.
|
|
*
|
|
* This acts as base value for sensor nodeId addresses. Change this (or channel) if you have more than one sensor network.
|
|
*/
|
|
#ifndef MY_RF24_BASE_RADIO_ID
|
|
#define MY_RF24_BASE_RADIO_ID 0x00,0xFC,0xE1,0xA8,0xA8
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RF24_ADDR_WIDTH
|
|
* @brief RF24 address width.
|
|
*
|
|
* This defines the width of the base address.
|
|
*/
|
|
#ifndef MY_RF24_ADDR_WIDTH
|
|
#define MY_RF24_ADDR_WIDTH (5)
|
|
#endif
|
|
|
|
// Enable SOFTSPI for NRF24L01, useful for the W5100 Ethernet module
|
|
//#define MY_SOFTSPI
|
|
|
|
/**
|
|
* @def MY_SOFT_SPI_SCK_PIN
|
|
* @brief Soft SPI SCK pin.
|
|
*/
|
|
#ifndef MY_SOFT_SPI_SCK_PIN
|
|
#define MY_SOFT_SPI_SCK_PIN (14)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_SOFT_SPI_MISO_PIN
|
|
* @brief Soft SPI MISO pin.
|
|
*/
|
|
#ifndef MY_SOFT_SPI_MISO_PIN
|
|
#define MY_SOFT_SPI_MISO_PIN (16)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_SOFT_SPI_MOSI_PIN
|
|
* @brief Soft SPI MOSI pin.
|
|
*/
|
|
#ifndef MY_SOFT_SPI_MOSI_PIN
|
|
#define MY_SOFT_SPI_MOSI_PIN (15)
|
|
#endif
|
|
|
|
/**********************************
|
|
* NRF5_ESB Driver Defaults
|
|
* The NRF5_ESB driver is compatible
|
|
* to RF24
|
|
***********************************/
|
|
|
|
/**
|
|
* @def MY_NRF5_ESB_ENABLE_ENCRYPTION
|
|
* @brief Enables RF24 compatible ncryption (all nodes and gateway must have
|
|
* this enabled, and all must be personalized with the same AES key)
|
|
* This is compatible to MY_RF24_ENABLE_ENCRYPTION. Because the Initialization
|
|
* Vector is always 0, the Encryption is weak.
|
|
*/
|
|
//#define MY_NRF5_ESB_ENABLE_ENCRYPTION
|
|
|
|
/**
|
|
* @def MY_DEBUG_VERBOSE_NRF5_ESB
|
|
* @brief Enable MY_DEBUG_VERBOSE_NRF5_ESB flag for verbose debug prints related
|
|
* to the NRF5_ESB driver. Requires DEBUG to be enabled.
|
|
*/
|
|
//#define MY_DEBUG_VERBOSE_NRF5_ESB
|
|
|
|
/**
|
|
* @def MY_NRF5_ESB_PA_LEVEL
|
|
* @brief Default NRF5 PA level. Override in sketch if needed.
|
|
*/
|
|
#ifndef MY_NRF5_ESB_PA_LEVEL
|
|
#define MY_NRF5_ESB_PA_LEVEL NRF5_PA_MAX
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_NRF5_ESB_CHANNEL
|
|
* @brief RF channel for the sensor net, 0-125.
|
|
* Frequence: 2400 Mhz - 2525 Mhz Channels: 126
|
|
* http://www.mysensors.org/radio/nRF24L01Plus.pdf
|
|
* 0 => 2400 Mhz (RF24 channel 1)
|
|
* 1 => 2401 Mhz (RF24 channel 2)
|
|
* 76 => 2476 Mhz (RF24 channel 77)
|
|
* 83 => 2483 Mhz (RF24 channel 84)
|
|
* 124 => 2524 Mhz (RF24 channel 125)
|
|
* 125 => 2525 Mhz (RF24 channel 126)
|
|
* In some countries there might be limitations, in Germany for example only the
|
|
* range 2400,0 - 2483,5 Mhz is allowed
|
|
* http://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2013_10_WLAN_2,4GHz_pdf.pdf
|
|
*/
|
|
#ifndef MY_NRF5_ESB_CHANNEL
|
|
#define MY_NRF5_ESB_CHANNEL 76
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_NRF5_ESB_MODE
|
|
* @brief NRF5 mode (NRF5_250KBPS for 250kbs, NRF5_1MBPS for 1Mbps or NRF5_2MBPS
|
|
* for 2Mbps).
|
|
*/
|
|
#ifndef MY_NRF5_ESB_MODE
|
|
#define MY_NRF5_ESB_MODE NRF5_250KBPS
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_NRF5_ESB_BASE_RADIO_ID
|
|
* @brief NRF5 radio network identifier.
|
|
*
|
|
* This acts as base value for sensor nodeId addresses. Change this (or channel)
|
|
* if you have more than one sensor network.
|
|
*/
|
|
#ifndef MY_NRF5_ESB_BASE_RADIO_ID
|
|
#define MY_NRF5_ESB_BASE_RADIO_ID 0x00, 0xFC, 0xE1, 0xA8, 0xA8
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_NRF5_ESB_ADDR_WIDTH
|
|
* @brief NRF5 address width.
|
|
*
|
|
* This defines the width of the complete address.
|
|
*/
|
|
#ifndef MY_NRF5_ESB_ADDR_WIDTH
|
|
#define MY_NRF5_ESB_ADDR_WIDTH 5
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_NRF5_ESB_RX_BUFFER_SIZE
|
|
* @brief Declare the amount of incoming messages that can be buffered at driver
|
|
* level.
|
|
*/
|
|
#ifndef MY_NRF5_ESB_RX_BUFFER_SIZE
|
|
#define MY_NRF5_ESB_RX_BUFFER_SIZE (20)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_NRF5_ESB_REVERSE_ACK
|
|
* @brief Switch to SI24R1 or faked NRF24L01+ compatible ACK mode.
|
|
*/
|
|
//#define MY_NRF5_ESB_REVERSE_ACK
|
|
|
|
/**********************************
|
|
* RFM69 Driver Defaults
|
|
***********************************/
|
|
|
|
/**
|
|
* @def MY_DEBUG_VERBOSE_RFM69
|
|
* @brief Enable MY_DEBUG_VERBOSE_RFM69 flag for verbose debug prints related to the RFM69 driver.
|
|
*/
|
|
//#define MY_DEBUG_VERBOSE_RFM69
|
|
|
|
/**
|
|
* @def MY_DEBUG_VERBOSE_RFM69_REGISTERS
|
|
* @brief Print content of RFM69 radio registers.
|
|
*/
|
|
//#define MY_DEBUG_VERBOSE_RFM69_REGISTERS
|
|
|
|
/**
|
|
* @def MY_RFM69_NEW_DRIVER
|
|
* @brief Enable MY_RFM69_NEW_DRIVER to enable the refactored RFM69 driver.
|
|
* IMPORTANT: This driver is not compatible with the old (=default) RFM69 driver.
|
|
*/
|
|
//#define MY_RFM69_NEW_DRIVER
|
|
|
|
/**
|
|
* @def MY_RFM69_FREQUENCY
|
|
* @brief RFM69 frequency to use: RFM69_433MHZ, RFM69_868MHZ, RFM69_915MHZ, or custom frequency in Hz (new RFM69 driver only).
|
|
*
|
|
* This must match the hardware version of the RFM69 radio.
|
|
* Additional information: https://en.wikipedia.org/wiki/Short_Range_Devices
|
|
*/
|
|
#ifndef MY_RFM69_FREQUENCY
|
|
#define MY_RFM69_FREQUENCY RFM69_868MHZ
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_IS_RFM69HW
|
|
* @brief Enable this if you're running the RFM69HW model.
|
|
*/
|
|
//#define MY_IS_RFM69HW
|
|
|
|
/**
|
|
* @def MY_RFM69HW
|
|
* @brief Set to true if @ref MY_IS_RFM69HW is set.
|
|
*/
|
|
#ifdef MY_IS_RFM69HW
|
|
#define MY_RFM69HW true
|
|
#else
|
|
#define MY_RFM69HW false
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM69_TX_POWER_DBM
|
|
* @brief Set TX power level, default 5dBm (overriden if ATC mode enabled).
|
|
*/
|
|
#ifndef MY_RFM69_TX_POWER_DBM
|
|
#define MY_RFM69_TX_POWER_DBM (5)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM69_ATC_TARGET_RSSI_DBM
|
|
* @brief Target RSSI level (in dBm) for RFM69 ATC mode.
|
|
*/
|
|
#ifndef MY_RFM69_ATC_TARGET_RSSI_DBM
|
|
#define MY_RFM69_ATC_TARGET_RSSI_DBM (-80)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM69_ATC_MODE_DISABLED
|
|
* @brief Switch to disable ATC mode of RFM69 driver.
|
|
*/
|
|
//#define MY_RFM69_ATC_MODE_DISABLED
|
|
|
|
/**
|
|
* @def MY_RFM69_MAX_POWER_LEVEL_DBM
|
|
* @brief Set max TX power in dBm if local legislation requires
|
|
* 1mW = 0dBm, 10mW = 10dBm, 25mW = 14dBm, 100mW = 20dBm
|
|
* see here: https://en.wikipedia.org/wiki/Short_Range_Devices
|
|
*/
|
|
//#define MY_RFM69_MAX_POWER_LEVEL_DBM (10u)
|
|
|
|
/**
|
|
* @def MY_RFM69_NETWORKID
|
|
* @brief RFM69 Network ID. Use the same for all nodes that will talk to each other.
|
|
*/
|
|
#ifndef MY_RFM69_NETWORKID
|
|
#define MY_RFM69_NETWORKID (100)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM69_RST_PIN
|
|
* @brief RFM69 reset pin, uncomment if used.
|
|
*/
|
|
//#define MY_RFM69_RST_PIN (9)
|
|
|
|
#ifdef MY_RF69_RESET
|
|
// legacy, older board files
|
|
#define MY_RFM69_RST_PIN MY_RF69_RESET
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM69_POWER_PIN
|
|
* @brief RFM69 power pin
|
|
*/
|
|
//#define MY_RFM69_POWER_PIN (3)
|
|
|
|
/**
|
|
* @def MY_RFM69_IRQ_PIN
|
|
* @brief RFM69 IRQ pin
|
|
*/
|
|
#ifndef MY_RFM69_IRQ_PIN
|
|
#ifdef MY_RF69_IRQ_PIN
|
|
// legacy, older board files
|
|
#define MY_RFM69_IRQ_PIN MY_RF69_IRQ_PIN
|
|
#else
|
|
#define MY_RFM69_IRQ_PIN DEFAULT_RFM69_IRQ_PIN
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/**
|
|
* @def MY_RFM69_IRQ_NUM
|
|
* @brief RFM69 IRQ number.
|
|
*/
|
|
#ifndef MY_RFM69_IRQ_NUM
|
|
#ifdef MY_RF69_IRQ_NUM
|
|
// legacy, older board files
|
|
#define MY_RFM69_IRQ_NUM MY_RF69_IRQ_NUM
|
|
#else
|
|
#define MY_RFM69_IRQ_NUM DEFAULT_RFM69_IRQ_NUM
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/**
|
|
* @def MY_RFM69_CS_PIN
|
|
* @brief RFM69 SPI chip select pin.
|
|
*/
|
|
#ifndef MY_RFM69_CS_PIN
|
|
#ifdef MY_RF69_SPI_CS
|
|
// legacy, older board files
|
|
#define MY_RFM69_CS_PIN MY_RF69_SPI_CS
|
|
#else
|
|
#define MY_RFM69_CS_PIN DEFAULT_RFM69_CS_PIN
|
|
#endif
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM69_SPI_SPEED
|
|
* @brief Set to overrule default RFM69 SPI speed.
|
|
*/
|
|
#ifndef MY_RFM69_SPI_SPEED
|
|
#define MY_RFM69_SPI_SPEED (4*1000000ul) // datasheet says 10Mhz max.
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM69_ENABLE_ENCRYPTION
|
|
* Enables RFM69 encryption (all nodes and gateway must have this enabled, and all must be personalized with the same AES key)
|
|
*/
|
|
//#define MY_RFM69_ENABLE_ENCRYPTION
|
|
|
|
/**
|
|
* Uncomment if you need listenmode, else comment it and save memory
|
|
*/
|
|
//#define MY_RFM69_ENABLE_LISTENMODE
|
|
|
|
#if defined(MY_RFM69_ENABLE_LISTENMODE) && !defined(MY_RFM69_DEFAULT_LISTEN_RX_US)
|
|
// By default, receive for 256uS in listen mode and idle for ~1s
|
|
#define MY_RFM69_DEFAULT_LISTEN_RX_US (256)
|
|
#endif
|
|
|
|
#if defined(MY_RFM69_ENABLE_LISTENMODE) && !defined(MY_RFM69_DEFAULT_LISTEN_IDLE_US)
|
|
// By default, receive for 256uS in listen mode and idle for ~1s
|
|
#define MY_RFM69_DEFAULT_LISTEN_IDLE_US (1*1000000ul)
|
|
#endif
|
|
|
|
|
|
/**
|
|
* @def MY_RFM69_BITRATE_MSB
|
|
* The bit rate. Most significant bits. Bitrate between the transmitter and the receiver must be better than 6.5. Refer to RFM69registers.h (L.153) for settings or http://www.semtech.com/apps/filedown/down.php?file=sx1231.pdf
|
|
* @brief Datarate value. Note : RFM69_FOSC(Hz)/MSB_LSBVALUE = Bitrate in kbits
|
|
*
|
|
* @def MY_RFM69_BITRATE_LSB
|
|
* The bit rate. Less significant bits. Bitrate between the transmitter and the receiver must be better than 6.5. Refer to RFM69registers.h (L.153) for settings or http://www.semtech.com/apps/filedown/down.php?file=sx1231.pdf
|
|
* @brief Datarate value. Note : RFM69_FOSC(Hz)/MSB_LSBVALUE = Bitrate in kbits
|
|
*/
|
|
#if !defined(MY_RFM69_BITRATE_MSB) && !defined(MY_RFM69_BITRATE_LSB)
|
|
#define MY_RFM69_BITRATE_MSB RFM69_BITRATEMSB_55555
|
|
#define MY_RFM69_BITRATE_LSB RFM69_BITRATELSB_55555
|
|
#endif
|
|
|
|
/**********************************
|
|
* RFM95 driver defaults
|
|
***********************************/
|
|
|
|
/**
|
|
* @def MY_DEBUG_VERBOSE_RFM95
|
|
* @brief Enable MY_DEBUG_VERBOSE_RFM95 flag for verbose debug prints related to the RFM95 driver.
|
|
*/
|
|
//#define MY_DEBUG_VERBOSE_RFM95
|
|
|
|
/**
|
|
* @def MY_RFM95_FREQUENCY
|
|
* @brief RFM95 frequency to use: RFM95_169MHZ, RFM95_315MHZ, RFM95_434MHZ, RFM95_868MHZ, RFM95_915MHZ, or custom frequency in Hz.
|
|
*
|
|
* This must match the hardware version of the RFM95 radio.
|
|
* Additional information: https://en.wikipedia.org/wiki/Short_Range_Devices
|
|
|
|
*/
|
|
#ifndef MY_RFM95_FREQUENCY
|
|
#define MY_RFM95_FREQUENCY RFM95_868MHZ
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM95_MODEM_CONFIGRUATION
|
|
* @brief RFM95 modem configuration, see table. Default RFM95 modem configuration: @ref RFM95_BW125CR45SF128
|
|
*
|
|
* BW = Bandwidth in kHz
|
|
* CR = Error correction code
|
|
* SF = Spreading factor, chips / symbol
|
|
*
|
|
* | CONFIG | BW | CR | SF | Comment
|
|
* |------------------------|-------|-----|------|-----------------------------
|
|
* | RFM95_BW125CR45SF128 | 125 | 4/5 | 128 | Default, medium range
|
|
* | RFM95_BW500CR45SF128 | 500 | 4/5 | 128 | Fast, short range
|
|
* | RFM95_BW31_25CR48SF512 | 31.25 | 4/8 | 512 | Slow, long range
|
|
* | RFM95_BW125CR48SF4096 | 125 | 4/8 | 4096 | Slow, long range
|
|
*
|
|
*/
|
|
#ifndef MY_RFM95_MODEM_CONFIGRUATION
|
|
#define MY_RFM95_MODEM_CONFIGRUATION RFM95_BW125CR45SF128
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM95_RST_PIN
|
|
* @brief RFM95 reset pin, uncomment if used.
|
|
*/
|
|
//#define MY_RFM95_RST_PIN (9)
|
|
|
|
/**
|
|
* @def MY_RFM95_POWER_PIN
|
|
* @brief RFM95 power pin, uncomment if used
|
|
*/
|
|
//#define MY_RFM95_POWER_PIN (3)
|
|
|
|
/**
|
|
* @def MY_RFM95_IRQ_PIN
|
|
* @brief RFM95 IRQ pin.
|
|
*/
|
|
#ifndef MY_RFM95_IRQ_PIN
|
|
#define MY_RFM95_IRQ_PIN DEFAULT_RFM95_IRQ_PIN
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM95_IRQ_NUM
|
|
* @brief RFM95 IRQ number.
|
|
*/
|
|
#ifndef MY_RFM95_IRQ_NUM
|
|
#define MY_RFM95_IRQ_NUM DEFAULT_RFM95_IRQ_NUM
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM95_CS_PIN
|
|
* @brief RFM95 SPI chip select pin.
|
|
*/
|
|
#ifndef MY_RFM95_CS_PIN
|
|
#define MY_RFM95_CS_PIN DEFAULT_RFM95_CS_PIN
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM95_SPI_SPEED
|
|
* @brief Set to overrule default RFM95 SPI speed, default 4Mhz.
|
|
*/
|
|
#ifndef MY_RFM95_SPI_SPEED
|
|
#define MY_RFM95_SPI_SPEED (4*1000000ul)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM95_TX_POWER_DBM
|
|
* @brief Set TX power level, default 13dBm (overriden if ATC mode enabled)
|
|
* see here: https://en.wikipedia.org/wiki/Short_Range_Devices
|
|
*/
|
|
#ifndef MY_RFM95_TX_POWER_DBM
|
|
#define MY_RFM95_TX_POWER_DBM (13u) // 20mW
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM95_ATC_MODE_DISABLED
|
|
* @brief Switch to disable RFM95 ATC mode
|
|
*/
|
|
//#define MY_RFM95_ATC_MODE_DISABLED
|
|
|
|
/**
|
|
* @def MY_RFM95_ATC_TARGET_RSSI
|
|
* @brief Target RSSI level (in dBm) for RFM95 ATC mode
|
|
*/
|
|
#ifndef MY_RFM95_ATC_TARGET_RSSI
|
|
#define MY_RFM95_ATC_TARGET_RSSI (-60)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_RFM95_MAX_POWER_LEVEL_DBM
|
|
* @brief Set max TX power in dBm if local legislation requires
|
|
* 1mW = 0dBm, 10mW = 10dBm, 25mW = 14dBm, 100mW = 20dBm
|
|
* see here: https://en.wikipedia.org/wiki/Short_Range_Devices
|
|
*/
|
|
//#define MY_RFM95_MAX_POWER_LEVEL_DBM (10u)
|
|
|
|
/**
|
|
* @def MY_RFM95_TCXO
|
|
* @brief Enable to force your radio to use an external frequency source (e.g. TCXO, if present).
|
|
* This allows for better stability using SF 9 to 12.
|
|
*/
|
|
//#define MY_RFM95_TCXO
|
|
|
|
/**************************************
|
|
* Signal report
|
|
***************************************/
|
|
|
|
/**
|
|
* @def MY_SIGNAL_REPORT_ENABLED
|
|
* @brief Enables signal report functionality, see @ref transportSignalReport().
|
|
* NOTE: This feature adds ~1kB code to the sketch.
|
|
*/
|
|
#define MY_SIGNAL_REPORT_ENABLED
|
|
|
|
|
|
/**************************************
|
|
* Ethernet Gateway Transport Defaults
|
|
***************************************/
|
|
|
|
// The gateway options available
|
|
//#define MY_GATEWAY_W5100
|
|
//#define MY_GATEWAY_ENC28J60
|
|
//#define MY_GATEWAY_ESP8266
|
|
//#define MY_GATEWAY_LINUX
|
|
|
|
/**
|
|
* @def MY_PORT
|
|
* @brief The Ethernet TCP/UDP port to open on controller or gateway.
|
|
*/
|
|
#ifndef MY_PORT
|
|
#ifdef MY_GATEWAY_MQTT_CLIENT
|
|
#define MY_PORT 1883
|
|
#else
|
|
#define MY_PORT 5003
|
|
#endif
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_MQTT_CLIENT_PUBLISH_RETAIN
|
|
* @brief Enables MQTT client to set the retain flag when publishing specific messages.
|
|
*/
|
|
//#define MY_MQTT_CLIENT_PUBLISH_RETAIN
|
|
|
|
// Static ip address of gateway (if this is disabled, DHCP will be used)
|
|
//#define MY_IP_ADDRESS 192,168,178,66
|
|
|
|
// Enables UDP mode for Ethernet gateway (W5100)
|
|
//#define MY_USE_UDP
|
|
|
|
/**
|
|
* @def MY_IP_RENEWAL_INTERVAL_MS
|
|
* @brief DHCP, default renewal setting in milliseconds.
|
|
*/
|
|
#ifndef MY_IP_RENEWAL_INTERVAL_MS
|
|
#define MY_IP_RENEWAL_INTERVAL_MS (60*1000ul)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_MAC_ADDRESS
|
|
* @brief Ethernet MAC address.
|
|
*
|
|
* This needs to be unique on the network.
|
|
*/
|
|
#ifndef MY_MAC_ADDRESS
|
|
#define MY_MAC_ADDRESS 0xDE,0xAD,0xBE,0xEF,0xFE,0xED
|
|
#endif
|
|
|
|
// Controller ip-address, if this is defined, gateway will act as a client trying to contact controller on MY_PORT.
|
|
// If MY_CONTROLLER_IP_ADDRESS is left un-defined, gateway acts as server allowing incoming connections.
|
|
//#define MY_CONTROLLER_IP_ADDRESS 192, 168, 178, 254
|
|
|
|
/**************************************
|
|
* Node Locking
|
|
***************************************/
|
|
|
|
/**
|
|
* @defgroup MyLockgrp MyNodeLock
|
|
* @ingroup internals
|
|
* @{
|
|
* @brief The node lock feature is a security related feature. It locks a node that suspect itself for being
|
|
* under some form of attack.
|
|
*
|
|
* This is achieved by having a counter stored in EEPROM which decrements when suspicious activity is detected.
|
|
* If the counter reaches 0, node will not work anymore and will transmit a @ref I_LOCKED message to the
|
|
* gateway/controller with 30m intervals. Payload is a string with a reason for the locking.
|
|
* The string is abbreviated to accomodate a signature. The following abbreviations exist at the moment:
|
|
* - LDB (Locked During Boot)
|
|
* - TMNR (Too Many Nonce Requests)
|
|
* - TMFV (Too Many Failed Verifications)
|
|
*
|
|
* Typically, the counter only decrements when suspicious activity happens in a row.
|
|
* It is reset if legit traffic is present.
|
|
|
|
* Examples of malicious activity are:
|
|
* - Repeatedly incorrectly checksummed OTA firmware
|
|
* - Repeated requests for signing nonces without properly signed messages arriving
|
|
* - Repeatedly failed signature verifications
|
|
*
|
|
* If counter reaches zero, node locks down and EEPROM has to be erased/reset to reactivate node.
|
|
* Node can also be unlocked by grounding a pin (see @ref MY_NODE_UNLOCK_PIN).
|
|
*
|
|
* The size of the counter can be adjusted using @ref MY_NODE_LOCK_COUNTER_MAX.
|
|
*
|
|
* @def MY_NODE_LOCK_FEATURE
|
|
* @brief Enable this to activate intrusion prevention mechanisms on the node.
|
|
*/
|
|
//#define MY_NODE_LOCK_FEATURE
|
|
|
|
/**
|
|
* @def MY_NODE_UNLOCK_PIN
|
|
* @brief By grounding this pin durig reset of a locked node, the node will unlock.
|
|
*
|
|
* If using a secure bootloader, grounding the pin is the only option to reactivate the node.
|
|
* If using stock Android bootloader or a DualOptiBoot it is also possible to download a sketch
|
|
* using serial protocol to erase EEPROM to unlock the node.
|
|
*/
|
|
#ifndef MY_NODE_UNLOCK_PIN
|
|
#define MY_NODE_UNLOCK_PIN (14)
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_NODE_LOCK_COUNTER_MAX
|
|
* @brief Maximum accepted occurances of suspected malicious activity in a node.
|
|
*
|
|
* Counter decrements on reoccuring incidents but resets if legitimate behaviour is identified.
|
|
*/
|
|
#ifndef MY_NODE_LOCK_COUNTER_MAX
|
|
#define MY_NODE_LOCK_COUNTER_MAX (5)
|
|
#endif
|
|
/** @}*/ // Node lock group
|
|
|
|
/**********************************
|
|
* ESP8266 Defaults
|
|
***********************************/
|
|
|
|
/**
|
|
* @def MY_ESP8266_SERIAL_MODE
|
|
* @brief Serial modes: SERIAL_FULL, SERIAL_RX_ONLY, SERIAL_TX_ONLY
|
|
*
|
|
* SERIAL_FULL: Default mode.
|
|
* SERIAL_TX_ONLY: allows to use RX (GPIO3) as a general purpose input/output.
|
|
* SERIAL_RX_ONLY: allows to use TX (GPIO1) as a general purpose input/output.
|
|
*/
|
|
#ifndef MY_ESP8266_SERIAL_MODE
|
|
#define MY_ESP8266_SERIAL_MODE SERIAL_FULL
|
|
#endif
|
|
|
|
/**************************************
|
|
* Linux Settings
|
|
***************************************/
|
|
|
|
/**
|
|
* @def MY_LINUX_SERIAL_PORT
|
|
* @brief Serial device port
|
|
*/
|
|
#ifndef MY_LINUX_SERIAL_PORT
|
|
#define MY_LINUX_SERIAL_PORT "/dev/ttyACM0"
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_LINUX_IS_SERIAL_PTY
|
|
* @brief Set serial as a pseudo terminal.
|
|
*
|
|
* Enable this if you need to connect to a controller running on the same device.
|
|
*/
|
|
//#define MY_LINUX_IS_SERIAL_PTY
|
|
|
|
/**
|
|
* @def MY_LINUX_SERIAL_PTY
|
|
* @brief Symlink name for the PTY device.
|
|
*/
|
|
#ifndef MY_LINUX_SERIAL_PTY
|
|
#define MY_LINUX_SERIAL_PTY "/dev/ttyMySensorsGateway"
|
|
#endif
|
|
|
|
/**
|
|
* @def MY_LINUX_SERIAL_GROUPNAME
|
|
* @brief Grant access to the specified system group for the serial device.
|
|
*/
|
|
//#define MY_LINUX_SERIAL_GROUPNAME "tty"
|
|
|
|
/**
|
|
* @def MY_LINUX_CONFIG_FILE
|
|
* @brief Set the filepath for the gateway config file
|
|
*
|
|
* For now the configuration file is only used to store the emulated eeprom state
|
|
*/
|
|
#ifndef MY_LINUX_CONFIG_FILE
|
|
#define MY_LINUX_CONFIG_FILE "/etc/mysensors.dat"
|
|
#endif
|
|
|
|
#endif // MyConfig_h
|
|
|
|
// Doxygen specific constructs, not included when built normally
|
|
// This is used to enable disabled macros/definitions to be included in the documentation as well.
|
|
#if DOXYGEN
|
|
// debug
|
|
#define MY_DEBUG
|
|
#define MY_SPECIAL_DEBUG
|
|
#define MY_DISABLED_SERIAL
|
|
// linux
|
|
#define MY_LINUX_SERIAL_GROUPNAME
|
|
#define MY_LINUX_IS_SERIAL_PTY
|
|
// inclusion mode
|
|
#define MY_INCLUSION_MODE_FEATURE
|
|
#define MY_INCLUSION_BUTTON_FEATURE
|
|
// transport
|
|
#define MY_PARENT_NODE_IS_STATIC
|
|
#define MY_REGISTRATION_CONTROLLER
|
|
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
|
|
#define MY_TRANSPORT_SANITY_CHECK
|
|
#define MY_NODE_LOCK_FEATURE
|
|
#define MY_REPEATER_FEATURE
|
|
#define MY_PASSIVE_NODE
|
|
#define MY_MQTT_CLIENT_PUBLISH_RETAIN
|
|
// general
|
|
#define MY_WITH_LEDS_BLINKING_INVERSE
|
|
#define MY_INDICATION_HANDLER
|
|
#define MY_DISABLE_REMOTE_RESET
|
|
// signing
|
|
#define MY_SIGNING_SIMPLE_PASSWD
|
|
#define MY_SIGNING_ATSHA204
|
|
#define MY_SIGNING_SOFT
|
|
#define MY_SIGNING_REQUEST_SIGNATURES
|
|
#define MY_SIGNING_WEAK_SECURITY
|
|
#define MY_SIGNING_NODE_WHITELISTING {{.nodeId = GATEWAY_ADDRESS,.serial = {0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01}}}
|
|
#define MY_DEBUG_VERBOSE_SIGNING
|
|
// RS485
|
|
#define MY_RS485_HWSERIAL
|
|
// RF24
|
|
#define MY_DEBUG_VERBOSE_RF24
|
|
#define MY_RF24_POWER_PIN
|
|
#define MY_RF24_ENABLE_ENCRYPTION
|
|
#define MY_RX_MESSAGE_BUFFER_FEATURE
|
|
#define MY_RX_MESSAGE_BUFFER_SIZE
|
|
// NRF5_ESB
|
|
#define MY_NRF5_ESB_ENABLE_ENCRYPTION
|
|
#define MY_DEBUG_VERBOSE_NRF5_ESB
|
|
#define MY_NRF5_ESB_REVERSE_ACK
|
|
// RFM69
|
|
#define MY_IS_RFM69HW
|
|
#define MY_RFM69_NEW_DRIVER
|
|
#define MY_RFM69_POWER_PIN
|
|
#define MY_RFM69_ENABLE_ENCRYPTION
|
|
#define MY_RFM69_ATC_MODE_DISABLED
|
|
#define MY_RFM69_MAX_POWER_LEVEL_DBM
|
|
#define MY_RFM69_RST_PIN
|
|
#define MY_DEBUG_VERBOSE_RFM69
|
|
#define MY_DEBUG_VERBOSE_RFM69_REGISTERS
|
|
// RFM95
|
|
#define MY_DEBUG_VERBOSE_RFM95
|
|
#define MY_RFM95_ATC_MODE_DISABLED
|
|
#define MY_RFM95_RST_PIN
|
|
#define MY_RFM95_MODEM_CONFIGRUATION
|
|
#define MY_RFM95_POWER_PIN
|
|
#define MY_RFM95_TCXO
|
|
#define MY_RFM95_MAX_POWER_LEVEL_DBM
|
|
|
|
#endif
|