mbed-os/nanostack/net_nwk_scan.h

138 lines
5.4 KiB
C

/*
* Copyright (c) 2013-2017, Arm Limited and affiliates.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _NS_NWK_SCAN_H
#define _NS_NWK_SCAN_H
#ifdef __cplusplus
extern "C" {
#endif
#include "ns_types.h"
#include "net_interface.h" /* needed for channel_list_s */
#include "mlme.h"
/**
* \file net_nwk_scan.h
* \brief Link layer Scan API for Active and Energy Detection Scan API.
*
* - arm_net_energy_scan(), Energy scan start (Use only with ZIP node library).
* - arm_net_nwk_scan(), Active scan for network (Use only with ZIP node library).
* - arm_net_get_scanned_nwk_list(), Active scan result read.
*
* Scan API works only when stack is in idle state.
*
* The scan operation result is handled at callback function that is defined by scan function call.
* The scan result format is as follows:
*
* | Data pointer | VALUE |
* | :----------: | :---------------------------------------------------: |
* | 1.Byte | Scan Type: NET_NWK_ENERGY_SCAN or NET_NWK_ACTIVE_SCAN |
* | 2.Byte | Result length |
* | 3+n Bytes | Payload :Read Only at Energy Detection type |
*
* The result length indicates the scan response size as follows:
* - NET_NWK_ENERGY_SCAN Payload length is result length *2 bytes after length field.
* * 1.Byte Channel
* * 2.Byte Energy Level
* - NET_NWK_ACTIVE_SCAN result indicates the the number of networks.
* * The network list needs to be read by net_get_scanned_nwk_list().
*
*/
/** Network energy detection scan type */
#define NET_NWK_ENERGY_SCAN 0
/** Network active scan type */
#define NET_NWK_ACTIVE_SCAN 1
/** Network parent address type 16-bit short */
#define NET_PARET_SHORT_16_BIT 2
/** Network parent address type 64-bit long */
#define NET_PARET_LONG_64_BIT 3
/* Active scan level definition */
/** List only PAN networks at channels */
#define NET_ACTIVE_SCAN_ONLY_NWK 0
/** List PAN networks with any beacon payload */
#define NET_ACTIVE_SCAN_ACCEPT_ANY_BEACON_PAYLOAD 1
/** List PAN networks with ZIP-specific payload that accept join */
#define NET_ACTIVE_SCAN_ACCEPT_ONLY_ZIP_SPESIFIC 2
/*!
* \struct nwk_pan_alternative_parent_t
* \brief Network alternative parent structure.
*/
typedef struct nwk_pan_alternative_parent_t {
uint8_t CoordAddrMode; /**< Parent address mode NET_PARET_SHORT_16_BIT or NET_PARET_LONG_64_BIT. */
uint8_t CoordAddress[8]; /**< Parent address based on CoordAddrMode. */
uint8_t LinkQuality; /**< LQI to parent. */
} nwk_pan_alternative_parent_t;
/*!
* \struct nwk_pan_descriptor_t
* \brief Linked network response list.
*/
typedef struct nwk_pan_descriptor_t {
mlme_pan_descriptor_t *pan_descriptor; /**< Pan Description */
uint8_t *beacon_payload; /**< Beacon Payload pointer */
uint8_t beacon_length; /**< Beacon Payload length */
nwk_pan_alternative_parent_t alternative_parent; /**< Alternative Parent information pointer */
struct nwk_pan_descriptor_t *next; /**< Link to next network result */
} nwk_pan_descriptor_t;
/**
* \brief Energy detection scan start for configured channel with application-specific threshold.
*
* \param interface_id Interface id.
* \param scan_list Channel list for scan operation.
* \param passed_fptr A function pointer for scan result notify.
* \param energy_tresshold Scan response lists all channels with smaller or equal level.
*
* \return 0 Scan operation started OK.
* \return -1 Stack is active.
* \return -2 Channel list not valid.
* \return -3 Function not enabled at border router.
*
*/
extern int8_t arm_net_energy_scan(int8_t interface_id, channel_list_s *scan_list, void (*passed_fptr)(int8_t if_id, const mlme_scan_conf_t *conf), uint8_t energy_tresshold);
/**
* \brief Active network scan for configured channels.
*
* \param interface_id Interface id.
* \param scan_list Channel list for scan operation.
* \param passed_fptr A function pointer for scan result notify.
* \param scan_level NET_ACTIVE_SCAN_ONLY_NWK, NET_ACTIVE_SCAN_ACCEPT_ANY_BEACON_PAYLOAD,NET_ACTIVE_SCAN_ACCEPT_ONLY_ZIP_SPESIFIC
*
* \return 0 Scan operation started OK.
* \return -1 Stack is active.
* \return -2 Channel list not valid.
* \return -3 Function not enabled at border router.
*
*/
extern int8_t arm_net_nwk_scan(int8_t interface_id, channel_list_s *scan_list, void (*passed_fptr)(int8_t if_id, const mlme_scan_conf_t *conf), uint8_t scan_level);
/**
* \brief Active scan result read.
*
* Note: The pointer is only valid at callback function call time. The application needs to allocate memory if it wants to save the result.
*
* \return >0 A pointer to scan result.
* \return 0 No network results available.
*
*/
extern nwk_pan_descriptor_t *arm_net_get_scanned_nwk_list(int8_t interface_id);
#ifdef __cplusplus
}
#endif
#endif /*_NS_NWK_SCAN_H*/