Sergio Scaglia / Nanostack_lib

Dependents:   mbedEndpointNetwork mbedEndpointNetworkMJK

Fork of Nanostack_lib by Sensinode

Committer:
Mika Karjalainen
Date:
Tue Jun 24 16:48:01 2014 +0300
Revision:
4:c449bead5cf3
Child:
11:1b7aaf37a131
Creating initial nanostack release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mika Karjalainen 4:c449bead5cf3 1 #ifndef _NS_NWK_SCAN_H
Mika Karjalainen 4:c449bead5cf3 2 #define _NS_NWK_SCAN_H
Mika Karjalainen 4:c449bead5cf3 3 /*
Mika Karjalainen 4:c449bead5cf3 4 * Copyright Sensinode Ltd 2011
Mika Karjalainen 4:c449bead5cf3 5 * net_nwk_scan.h
Mika Karjalainen 4:c449bead5cf3 6 */
Mika Karjalainen 4:c449bead5cf3 7
Mika Karjalainen 4:c449bead5cf3 8 /**
Mika Karjalainen 4:c449bead5cf3 9 * \file net_nwk_scan.h
Mika Karjalainen 4:c449bead5cf3 10 * \brief Link layer Scan API for Active and Energy Detection Scan API.
Mika Karjalainen 4:c449bead5cf3 11 *
Mika Karjalainen 4:c449bead5cf3 12 * - arm_net_energy_scan(), Energy scan start (Use only with ZIP node library)
Mika Karjalainen 4:c449bead5cf3 13 * - arm_net_nwk_scan(), Active scan for network (Use only with ZIP node library)
Mika Karjalainen 4:c449bead5cf3 14 * - arm_net_get_scanned_nwk_list(), Active scan result read
Mika Karjalainen 4:c449bead5cf3 15 *
Mika Karjalainen 4:c449bead5cf3 16 * Scan API works only when stack is at idle state.
Mika Karjalainen 4:c449bead5cf3 17 *
Mika Karjalainen 4:c449bead5cf3 18 * Scan operation result will be handled at call back function which is defined by scan function call.
Mika Karjalainen 4:c449bead5cf3 19 * Scan result format is as follows:
Mika Karjalainen 4:c449bead5cf3 20 *
Mika Karjalainen 4:c449bead5cf3 21 * | Data pointer | VALUE |
Mika Karjalainen 4:c449bead5cf3 22 * | :----------: | :---------------------------------------------------: |
Mika Karjalainen 4:c449bead5cf3 23 * | 1.Byte | Scan Type: NET_NWK_ENERGY_SCAN or NET_NWK_ACTIVE_SCAN |
Mika Karjalainen 4:c449bead5cf3 24 * | 2.Byte | Result length |
Mika Karjalainen 4:c449bead5cf3 25 * | 3+n Bytes | Payload :Read Only at Energy Detection type |
Mika Karjalainen 4:c449bead5cf3 26 *
Mika Karjalainen 4:c449bead5cf3 27 * Result length indicates scan response size as follows:
Mika Karjalainen 4:c449bead5cf3 28 * - NET_NWK_ENERGY_SCAN payload length is result length *2 bytes after length field
Mika Karjalainen 4:c449bead5cf3 29 * * 1.Byte Channel
Mika Karjalainen 4:c449bead5cf3 30 * * 2.Byte Energy Level
Mika Karjalainen 4:c449bead5cf3 31 * - NET_NWK_ACTIVE_SCAN result indicate network count
Mika Karjalainen 4:c449bead5cf3 32 * * Network list need to read by net_get_scanned_nwk_list()
Mika Karjalainen 4:c449bead5cf3 33 *
Mika Karjalainen 4:c449bead5cf3 34 *
Mika Karjalainen 4:c449bead5cf3 35 * Here is reference code for call back function:
Mika Karjalainen 4:c449bead5cf3 36 *
Mika Karjalainen 4:c449bead5cf3 37 * @code
Mika Karjalainen 4:c449bead5cf3 38 void linklayer_scan_cb(uint8_t * response)
Mika Karjalainen 4:c449bead5cf3 39 {
Mika Karjalainen 4:c449bead5cf3 40 uint8_t * ptr = response;
Mika Karjalainen 4:c449bead5cf3 41 uint8_t response_size = 0, scan_type = 0;
Mika Karjalainen 4:c449bead5cf3 42 scan_type = *ptr++;
Mika Karjalainen 4:c449bead5cf3 43 response_size = *ptr++;
Mika Karjalainen 4:c449bead5cf3 44
Mika Karjalainen 4:c449bead5cf3 45 if(scan_type == NET_NWK_ENERGY_SCAN)
Mika Karjalainen 4:c449bead5cf3 46 {
Mika Karjalainen 4:c449bead5cf3 47 debug("ED Scan Ready\r\n");
Mika Karjalainen 4:c449bead5cf3 48 if(response_size)
Mika Karjalainen 4:c449bead5cf3 49 {
Mika Karjalainen 4:c449bead5cf3 50 uint8_t channel, ed_value;
Mika Karjalainen 4:c449bead5cf3 51 debug("Good channel count:");
Mika Karjalainen 4:c449bead5cf3 52 debug_hex(response_size);
Mika Karjalainen 4:c449bead5cf3 53 debug("\r\n");
Mika Karjalainen 4:c449bead5cf3 54 while(response_size--)
Mika Karjalainen 4:c449bead5cf3 55 {
Mika Karjalainen 4:c449bead5cf3 56 channel = *ptr++;
Mika Karjalainen 4:c449bead5cf3 57 ed_value = *ptr++;
Mika Karjalainen 4:c449bead5cf3 58 debug("CH:");
Mika Karjalainen 4:c449bead5cf3 59 debug_int(channel);
Mika Karjalainen 4:c449bead5cf3 60 debug(",ED Level");
Mika Karjalainen 4:c449bead5cf3 61 debug_int(ed_value);
Mika Karjalainen 4:c449bead5cf3 62 debug("\r\n");
Mika Karjalainen 4:c449bead5cf3 63 }
Mika Karjalainen 4:c449bead5cf3 64 }
Mika Karjalainen 4:c449bead5cf3 65 }
Mika Karjalainen 4:c449bead5cf3 66 else if(scan_type == NET_NWK_ACTIVE_SCAN)
Mika Karjalainen 4:c449bead5cf3 67 {
Mika Karjalainen 4:c449bead5cf3 68 nwk_pan_descriptor_t *result = 0;
Mika Karjalainen 4:c449bead5cf3 69 debug("Active Scan\r\n");
Mika Karjalainen 4:c449bead5cf3 70 result = net_get_scanned_nwk_list();
Mika Karjalainen 4:c449bead5cf3 71 if(result)
Mika Karjalainen 4:c449bead5cf3 72 {
Mika Karjalainen 4:c449bead5cf3 73 debug("Finded PAN-nwk\r\n");
Mika Karjalainen 4:c449bead5cf3 74 debug_int(response_size);
Mika Karjalainen 4:c449bead5cf3 75 debug("\r\n");
Mika Karjalainen 4:c449bead5cf3 76 while(result)
Mika Karjalainen 4:c449bead5cf3 77 {
Mika Karjalainen 4:c449bead5cf3 78 debug("PAN-ID:");
Mika Karjalainen 4:c449bead5cf3 79 printf_array(result->CoordPANId,2);
Mika Karjalainen 4:c449bead5cf3 80 debug("Address:");
Mika Karjalainen 4:c449bead5cf3 81 if(result->CoordAddrMode == NET_PARET_SHORT_16_BIT) //Short Address
Mika Karjalainen 4:c449bead5cf3 82 {
Mika Karjalainen 4:c449bead5cf3 83 printf_array(result->CoordAddress,2);
Mika Karjalainen 4:c449bead5cf3 84 }
Mika Karjalainen 4:c449bead5cf3 85 else
Mika Karjalainen 4:c449bead5cf3 86 {
Mika Karjalainen 4:c449bead5cf3 87 printf_array(result->CoordAddress,8);
Mika Karjalainen 4:c449bead5cf3 88 }
Mika Karjalainen 4:c449bead5cf3 89 debug("Chan:");
Mika Karjalainen 4:c449bead5cf3 90 debug_int(result->LogicalChannel);
Mika Karjalainen 4:c449bead5cf3 91 debug(" , LQI");
Mika Karjalainen 4:c449bead5cf3 92 debug_hex(result->LinkQuality);
Mika Karjalainen 4:c449bead5cf3 93 debug("\r\n");
Mika Karjalainen 4:c449bead5cf3 94 if(result->beacon_length)
Mika Karjalainen 4:c449bead5cf3 95 {
Mika Karjalainen 4:c449bead5cf3 96 debug("Payload:");
Mika Karjalainen 4:c449bead5cf3 97 printf_array(result->beacon_payload,result->beacon_length);
Mika Karjalainen 4:c449bead5cf3 98 }
Mika Karjalainen 4:c449bead5cf3 99 result = result->next;
Mika Karjalainen 4:c449bead5cf3 100 }
Mika Karjalainen 4:c449bead5cf3 101 }
Mika Karjalainen 4:c449bead5cf3 102 }
Mika Karjalainen 4:c449bead5cf3 103 }
Mika Karjalainen 4:c449bead5cf3 104 *@endcode
Mika Karjalainen 4:c449bead5cf3 105 *
Mika Karjalainen 4:c449bead5cf3 106 */
Mika Karjalainen 4:c449bead5cf3 107
Mika Karjalainen 4:c449bead5cf3 108 /** Network Energy Detection Scan Type */
Mika Karjalainen 4:c449bead5cf3 109 #define NET_NWK_ENERGY_SCAN 0
Mika Karjalainen 4:c449bead5cf3 110 /** Network Active Scan Type */
Mika Karjalainen 4:c449bead5cf3 111 #define NET_NWK_ACTIVE_SCAN 1
Mika Karjalainen 4:c449bead5cf3 112
Mika Karjalainen 4:c449bead5cf3 113 /** Network Parent Address Type 16-bit Short */
Mika Karjalainen 4:c449bead5cf3 114 #define NET_PARET_SHORT_16_BIT 2
Mika Karjalainen 4:c449bead5cf3 115 /** Network Parent Address Type 64-bit Long */
Mika Karjalainen 4:c449bead5cf3 116 #define NET_PARET_LONG_64_BIT 3
Mika Karjalainen 4:c449bead5cf3 117
Mika Karjalainen 4:c449bead5cf3 118 /* Active scan level definition */
Mika Karjalainen 4:c449bead5cf3 119 /** List only PAN-networks at channels */
Mika Karjalainen 4:c449bead5cf3 120 #define NET_ACTIVE_SCAN_ONLY_NWK 0
Mika Karjalainen 4:c449bead5cf3 121 /** List PAN-networks with any beacon payload */
Mika Karjalainen 4:c449bead5cf3 122 #define NET_ACTIVE_SCAN_ACCEPT_ANY_BEACON_PAYLOAD 1
Mika Karjalainen 4:c449bead5cf3 123 /** List PAN-networks with ZIP specific payload which accept join */
Mika Karjalainen 4:c449bead5cf3 124 #define NET_ACTIVE_SCAN_ACCEPT_ONLY_ZIP_SPESIFIC 2
Mika Karjalainen 4:c449bead5cf3 125 /*!
Mika Karjalainen 4:c449bead5cf3 126 * \struct nwk_pan_alternative_parent_t
Mika Karjalainen 4:c449bead5cf3 127 * \brief Network Alternative Parent structure.
Mika Karjalainen 4:c449bead5cf3 128 */
Mika Karjalainen 4:c449bead5cf3 129 typedef struct nwk_pan_alternative_parent_t
Mika Karjalainen 4:c449bead5cf3 130 {
Mika Karjalainen 4:c449bead5cf3 131 uint8_t CoordAddrMode; /**< Parent Address Mode NET_PARET_SHORT_16_BIT or NET_PARET_LONG_64_BIT*/
Mika Karjalainen 4:c449bead5cf3 132 uint8_t CoordAddress[8]; /**< Parent Address based on CoordAddrMode */
Mika Karjalainen 4:c449bead5cf3 133 uint8_t LinkQuality; /**< LQI to parent */
Mika Karjalainen 4:c449bead5cf3 134 }nwk_pan_alternative_parent_t;
Mika Karjalainen 4:c449bead5cf3 135
Mika Karjalainen 4:c449bead5cf3 136 /*!
Mika Karjalainen 4:c449bead5cf3 137 * \struct nwk_pan_descriptor_t
Mika Karjalainen 4:c449bead5cf3 138 * \brief Linked Network response list.
Mika Karjalainen 4:c449bead5cf3 139 */
Mika Karjalainen 4:c449bead5cf3 140 typedef struct nwk_pan_descriptor_t
Mika Karjalainen 4:c449bead5cf3 141 {
Mika Karjalainen 4:c449bead5cf3 142 uint8_t CoordAddrMode; /**< Parent Address Mode NET_PARET_SHORT_16_BIT or NET_PARET_LONG_64_BIT*/
Mika Karjalainen 4:c449bead5cf3 143 uint16_t CoordPANId; /**< Network PAN-ID */
Mika Karjalainen 4:c449bead5cf3 144 uint8_t CoordAddress[8]; /**< Parent Address based on CoordAddrMode */
Mika Karjalainen 4:c449bead5cf3 145 uint8_t LogicalChannel; /**< Network Channel */
Mika Karjalainen 4:c449bead5cf3 146 uint8_t ChannelPage; /**< Channel Page 0 at 2.4Ghz */
Mika Karjalainen 4:c449bead5cf3 147 uint8_t SuperframeSpec[2]; /**< Network SuperFrame setup */
Mika Karjalainen 4:c449bead5cf3 148 uint8_t LinkQuality; /**< LQI to parent */
Mika Karjalainen 4:c449bead5cf3 149 uint8_t *beacon_payload; /**< Beacon Payload pointer */
Mika Karjalainen 4:c449bead5cf3 150 uint8_t beacon_length; /**< Beacon Payload length */
Mika Karjalainen 4:c449bead5cf3 151 nwk_pan_alternative_parent_t* alternative_parent; /**< Alternative Parent information pointer */
Mika Karjalainen 4:c449bead5cf3 152 struct nwk_pan_descriptor_t * next; /**< Link to next network result */
Mika Karjalainen 4:c449bead5cf3 153 }nwk_pan_descriptor_t;
Mika Karjalainen 4:c449bead5cf3 154
Mika Karjalainen 4:c449bead5cf3 155 /**
Mika Karjalainen 4:c449bead5cf3 156 * \brief Energy Detection scan start for configured channel with application specific threshold.
Mika Karjalainen 4:c449bead5cf3 157 *
Mika Karjalainen 4:c449bead5cf3 158 * \param scan_list Channel List for scan operation.
Mika Karjalainen 4:c449bead5cf3 159 * \param passed_fptr function pointer for scan result notify
Mika Karjalainen 4:c449bead5cf3 160 * \param energy_tresshold scan response will list all channels which level is smaller or equal
Mika Karjalainen 4:c449bead5cf3 161 *
Mika Karjalainen 4:c449bead5cf3 162 * \return 0 Scan operation started OK.
Mika Karjalainen 4:c449bead5cf3 163 * \return -1 Stack is Active
Mika Karjalainen 4:c449bead5cf3 164 * \return -2 Channel list not valid
Mika Karjalainen 4:c449bead5cf3 165 * \return -3 Function not enabled at Border Router
Mika Karjalainen 4:c449bead5cf3 166 *
Mika Karjalainen 4:c449bead5cf3 167 */
Mika Karjalainen 4:c449bead5cf3 168 extern int8_t arm_net_energy_scan(int8_t interface_id,uint32_t scan_list, void (*passed_fptr)(uint8_t *), uint8_t energy_tresshold);
Mika Karjalainen 4:c449bead5cf3 169 /**
Mika Karjalainen 4:c449bead5cf3 170 * \brief Active Network scan for configured channels.
Mika Karjalainen 4:c449bead5cf3 171 *
Mika Karjalainen 4:c449bead5cf3 172 * \param scan_list Channel List for scan operation.
Mika Karjalainen 4:c449bead5cf3 173 * \param passed_fptr function pointer for scan result notify
Mika Karjalainen 4:c449bead5cf3 174 * \param scan_level NET_ACTIVE_SCAN_ONLY_NWK, NET_ACTIVE_SCAN_ACCEPT_ANY_BEACON_PAYLOAD,NET_ACTIVE_SCAN_ACCEPT_ONLY_ZIP_SPESIFIC
Mika Karjalainen 4:c449bead5cf3 175 *
Mika Karjalainen 4:c449bead5cf3 176 * \return 0 Scan operation started OK.
Mika Karjalainen 4:c449bead5cf3 177 * \return -1 Stack is Active
Mika Karjalainen 4:c449bead5cf3 178 * \return -2 Channel list not valid
Mika Karjalainen 4:c449bead5cf3 179 * \return -3 Function not enabled at Border Router
Mika Karjalainen 4:c449bead5cf3 180 *
Mika Karjalainen 4:c449bead5cf3 181 */
Mika Karjalainen 4:c449bead5cf3 182 extern int8_t arm_net_nwk_scan(int8_t interface_id,uint32_t scan_list, void (*passed_fptr)(uint8_t *), uint8_t scan_level);
Mika Karjalainen 4:c449bead5cf3 183 /**
Mika Karjalainen 4:c449bead5cf3 184 * \brief Active scan result read.
Mika Karjalainen 4:c449bead5cf3 185 *
Mika Karjalainen 4:c449bead5cf3 186 * Note: Pointer is only valid at Call back function call time. Application need to allocate memory if it wants to save the result.
Mika Karjalainen 4:c449bead5cf3 187 *
Mika Karjalainen 4:c449bead5cf3 188 * \return >0 Pointer to Scan result.
Mika Karjalainen 4:c449bead5cf3 189 * \return 0 When no network result available
Mika Karjalainen 4:c449bead5cf3 190 *
Mika Karjalainen 4:c449bead5cf3 191 */
Mika Karjalainen 4:c449bead5cf3 192 extern nwk_pan_descriptor_t * arm_net_get_scanned_nwk_list(int8_t interface_id);
Mika Karjalainen 4:c449bead5cf3 193
Mika Karjalainen 4:c449bead5cf3 194 #endif /*_NS_NWK_SCAN_H*/