Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mbedEndpointNetwork mbedEndpointNetworkMJK
Fork of Nanostack_lib by
inc/net/net_nwk_scan.h@4:c449bead5cf3, 2014-06-24 (annotated)
- 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?
| User | Revision | Line number | New 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*/ | 
