mirror of https://github.com/ARMmbed/mbed-os.git
138 lines
5.4 KiB
C
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*/
|