#ifndef _CONFIGURATION_H_ #define _CONFIGURATION_H_ #include "apsCommon.h" #include #include /*----------------------------------------------- */ /* Disables board-specific peripherals support */ /*----------------------------------------------- */ #define APP_DISABLE_BSP 1 #define AC_FREQ 8000000 /* ----------------------------------------------------------- */ /* USART CONFIGURATION */ /* ----------------------------------------------------------- */ #define APP_INTERFACE_USART 0x01 #define APP_INTERFACE_VCP 0x02 #define APP_INTERFACE_SPI 0x03 #define APP_INTERFACE_UART 0x04 #define APP_INTERFACE_USBFIFO 0x05 #define APP_USART_RX_BUFFER_SIZE 10 /* Receive buffer size for USART. */ #define APP_USART_TX_BUFFER_SIZE 300 /* Transmit buffer size for USART */ #define APP_INTERFACE APP_INTERFACE_USART /* Defines primary serial interface type to be used by application */ #define APP_USART_CHANNEL USART_CHANNEL_1 /* Defines USART interface name to be used by application.*/ /* ----------------------------------------------------------- */ /* TWI CONFIGURATION */ /* ----------------------------------------------------------- */ #define AC_BEACON_TWI_ADDRESS 10 /* TWI address */ #define AC_TWI_DRIVER HARD /* Driver to implement TWI: HARD, SOFT, or USI. */ #define AC_TWI_NO_INTERRUPT 0 /* Do not use interrupts. */ #define AC_TWI_FREQ 100000 /* TWI frequency, should really be 100 kHz. */ #define AC_TWI_SLAVE_ENABLE 1 /* Enable slave part. */ #define AC_TWI_MASTER_ENABLE 0 /* Enable master part. */ #define AC_TWI_SLAVE_POLLED 1 /* Use polled slave mode: received data is stored in a buffer which can be polled using twi_slave_poll. */ #undef AC_TWI_SLAVE_RECV /* Slave reception callback to be defined by the user when not in polled mode. */ #define AC_TWI_PULL_UP 0 /* Use internal pull up. */ #define AC_TWI_SLAVE_RECV_BUFFER_SIZE 16 /* Slave reception buffer size. */ #define AC_TWI_SLAVE_SEND_BUFFER_SIZE 32 /* Slave transmission buffer size. */ /* ----------------------------------------------------------- */ /* ZIGBEE CONFIGURATION */ /* ----------------------------------------------------------- */ #define AT25F2048 0x01 #define AT45DB041 0x02 #define AT25DF041A 0x03 #define APP_FRAGMENTATION 0 /* Enables or disables APS Fragmentation support. */ #define APP_DETECT_LINK_FAILURE 1 /* Enable or disable link failure detection */ #define APP_ENDPOINT 1 /* Endpoint will be useed */ #define APP_PROFILE_ID 1 /* Profile Id will be used */ #define APP_CLUSTER_ID 1 /* Cluster Id will be used */ #define APP_JOINING_INDICATION_PERIOD 500L /* Period of blinking during starting network */ // 32-bit mask of channels to be scanned before network is started. Channels that // should be used are marked with logical 1 at corresponding bit location. // Valid channel numbers for 2.4 GHz band are 0x0b - 0x1a // Valid channel numbers for 900 MHz band are 0x00 - 0x0a // // Notes: // 1. for small amount of enabled channels it is more convinient to specify list // of channels in the form of '(1ul << 0x0b)' // 2. For 900 MHz band you also need to specify channel page // // Value range: 32-bit values: // Valid channel numbers for 2.4 GHz band are 0x0b - 0x1a // Valid channel numbers for 900 MHz band are 0x00 - 0x0a // // C-type: uint32_t // Can be set: at any time before network start // #define CS_CHANNEL_MASK (1L<<0x0f) // #define CS_CHANNEL_MASK 0x3FFFC00L #define CS_CHANNEL_MASK 0x00030000L // The parameter specifies the predefined extended PANID of the network to be // formed (for the coordinator) or joined (for a router or an end device). For a // router or an end device the parameter can equal 0 allowing them to join the // first suitable network that they discover. #define CS_EXT_PANID 0xAAAAAAAAAAAA1337LL // 64-bit Unique Identifier (UID) determining the device extended address. If this // value is 0 stack will try to read hardware UID from external UID or EEPROM chip. // at startup. Location of hardware UID is platform dependend and it may not be // available on all platforms. If the latter case then UID value must be provided // by user via this parameter. This parameter must be unique for each device in a // network. // Specifies short (network) address if CS_NWK_UNIQUE_ADDR equals 1 // // If static addressing is applied the stack uses the value of the parameter as a // short address. Otherwise, the stack assigns the parameter to a randomly chosen // value unique within the network. In both cases after the network start the // parameter holds actual short address of the device. While the device is in the // network its value must not be changed. // The maximum number of direct children that a given device (the coordinator or a // router) can have. // // The parameter is only enabled for routers and the coordinator. An end device // can not have children. If an actual number of children reaches a parameter's // value, the node will have not been able to accept any more children joining the // network. The parameter can be set to 0 on a router thus preventing it from // accepting any children and can be help form a desired network topology. For // example, if the parameter is set to 0 on all routers, then the coordinator will // be the only device that can have children and the network will have star // topology. #define CS_MAX_CHILDREN_AMOUNT 8 // The maximum number of routers among the direct children of the device // // The parameter determines how many routers the device can have as children. Note // that the maximum number of end devices is equal to CS_MAX_CHILDREN_AMOUNT - // CS_MAX_CHILDREN_ROUTER_AMOUNT. #define CS_MAX_CHILDREN_ROUTER_AMOUNT 0 // Network depht limits amount of hops that packet may travel in the network. // Actual maximum number of hops is network depth multiplied by 2. // // The parameter determines the maximum depth of a network tree formed by // child-parent relationships between nodes. // // While joining the network the node receives beacon responses from potential // parents containing their actual network depth and declines those which show // values not less than the maximum network depth on the joining device. A // potential parent will also reject a beacon from the joining device and will not // sent a response if the joining device shows the network depth greater than it is // allowed on the potential parent. This logic is enabled if the parameter value is // not greater than 15. If its value is greater than 15, then device does not // perform any checkings of the network depth, neither when joining a network nor // when accepting other nodes as children. This allows forming long chains of // devices across considerable distances. #define CS_MAX_NETWORK_DEPTH 1 // Maximum amount of records in the Neighbor Table. // // The parameter determines the size of the neighbor table which is used to store // beacon responses from nearby devices. The parameter puts an upper bound over the // amount of child devices possible for the node. #define CS_NEIB_TABLE_SIZE 10 // Maximum amount of records in the network Route Table. // // The parameter sets the maximum number of records that can be kept in the NWK // route table. The table is used by NWK to store information about established // routes. Each table entry specifies the next-hop short address for a route from // the current node to a given destination node. The table is being filled // automatically during route discovery. An entry is added when a route is // discovered. #define CS_ROUTE_TABLE_SIZE 8 // The parameter specifies the TX power of the transceiver device, is measured in // dBm(s). After the node has entered the network the value can only be changed via // the ZDO_SetTxPowerReq() function. // // Value range: depends on the hardware. Transmit power must be in the range from // -17 to 3 dBm for AT86RF231, AT86RF230 and AT86RF230B. For AT86RF212 transmit // power must be in the range from -11 to 11 dBm. #define CS_RF_TX_POWER 3 //----------------------------------------------- //STANDARD_SECURITY_MODE //----------------------------------------------- #ifdef STANDARD_SECURITY_MODE // The parameter is used to determine the security type. // // Value range: 0,3 - for standard security; 1,2 - for high security. // 0 - network key is preconfigured ; // 1 - network join without master key, but with a trust center link key, which // must be set via APS_SetLinkKey(); // 2 - network join employs a master key, which must be set APS_SetMasterKey(); // 3 - network key is no preconfigured, but rather received from the trust center // in an unencrypted frame. (CS_APS_MAX_BLOCKS_AMOUNT * APS_MAX_ASDU_SIZE) #error APP_MAX_PACKET_SIZE must be less or equal to (CS_APS_MAX_BLOCKS_AMOUNT * APS_MAX_ASDU_SIZE) #endif #else #if APP_APS_PAYLOAD_SIZE > APS_MAX_ASDU_SIZE #error APP_APS_PAYLOAD_SIZE must be less or equal to APS_MAX_ASDU_SIZE #endif #endif // Common application state definition typedef enum { APP_INITIAL_STATE, // Initial state APP_NETWORK_JOIN_REQUEST, APP_NETWORK_JOINING_STATE, // Attempting join the network APP_NETWORK_JOINED_STATE, // Successfully joined APP_NETWORK_LEAVING_STATE, // Leaving from the network APP_ERROR_STATE // Error state (runtime error occured) } AppState_t; // Network data transmission state typedef enum { APP_DATA_TRANSMISSION_SENDING_STATE, // APS Data Request was not sent yet APP_DATA_TRANSMISSION_BUSY_STATE, // APS Data Request was sent (confirm waiting) APP_DATA_TRANSMISSION_WAIT_STATE, // Waiting a data block from USART APP_DATA_TRANSMISSION_READY_STATE, // Ready to send new APS Data Request APP_DATA_TRANSMISSION_STOP_STATE // Inter-frame delay } AppDataTransmissionState_t; #endif // _CONFIGURATION_H_