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*/ |
