mirror of https://github.com/ARMmbed/mbed-os.git
Rename NanostackRfPhy to NanostackPhy
This is to allow other types of PHY drivers than just RF. Mesh-API does not actually care about driver type, it is drivers responsibility to register right handlers with Nanostack. * Implement a wrapper class NanostackRfPhy to ensure backward compatibility. * Remove mesh_connect()/disconnect() functions from MeshInterface This job is already done in inherited classes. * LoWPANNDInterface and ThreadInterface should only be used with NanostackRfPhy.pull/3267/head
parent
6ba755e444
commit
7732adb8a0
|
@ -26,17 +26,14 @@ public:
|
||||||
*
|
*
|
||||||
* Must initialize to initialize the mesh on a phy.
|
* Must initialize to initialize the mesh on a phy.
|
||||||
*/
|
*/
|
||||||
LoWPANNDInterface() : MeshInterfaceNanostack() {
|
LoWPANNDInterface() : MeshInterfaceNanostack() { }
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Create an initialized MeshInterface
|
/** Create an initialized MeshInterface
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
LoWPANNDInterface(NanostackRfPhy *phy) : MeshInterfaceNanostack(phy) {
|
LoWPANNDInterface(NanostackRfPhy *phy) : MeshInterfaceNanostack(phy) { }
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
nsapi_error_t initialize(NanostackRfPhy *phy);
|
||||||
int connect();
|
int connect();
|
||||||
int disconnect();
|
int disconnect();
|
||||||
bool getOwnIpAddress(char *address, int8_t len);
|
bool getOwnIpAddress(char *address, int8_t len);
|
||||||
|
|
|
@ -32,7 +32,7 @@ public:
|
||||||
*
|
*
|
||||||
* @return 0 on success, negative on failure
|
* @return 0 on success, negative on failure
|
||||||
*/
|
*/
|
||||||
virtual nsapi_error_t initialize(NanostackRfPhy *phy);
|
virtual nsapi_error_t initialize(NanostackPhy *phy);
|
||||||
|
|
||||||
/** Start the interface
|
/** Start the interface
|
||||||
*
|
*
|
||||||
|
@ -64,27 +64,10 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MeshInterfaceNanostack();
|
MeshInterfaceNanostack();
|
||||||
MeshInterfaceNanostack(NanostackRfPhy *phy);
|
MeshInterfaceNanostack(NanostackPhy *phy);
|
||||||
nsapi_error_t register_rf();
|
nsapi_error_t register_phy();
|
||||||
virtual NetworkStack * get_stack(void);
|
virtual NetworkStack * get_stack(void);
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Connect interface to the mesh network
|
|
||||||
* \return MESH_ERROR_NONE on success.
|
|
||||||
* \return MESH_ERROR_PARAM in case of illegal parameters.
|
|
||||||
* \return MESH_ERROR_MEMORY in case of memory error.
|
|
||||||
* \return MESH_ERROR_STATE if interface is already connected to network.
|
|
||||||
* \return MESH_ERROR_UNKNOWN in case of unspecified error.
|
|
||||||
* */
|
|
||||||
virtual mesh_error_t mesh_connect() = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Disconnect interface from the mesh network
|
|
||||||
* \return MESH_ERROR_NONE on success.
|
|
||||||
* \return MESH_ERROR_UNKNOWN in case of error.
|
|
||||||
* */
|
|
||||||
virtual mesh_error_t mesh_disconnect() = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Read own global IP address
|
* \brief Read own global IP address
|
||||||
*
|
*
|
||||||
|
@ -94,7 +77,7 @@ protected:
|
||||||
*/
|
*/
|
||||||
virtual bool getOwnIpAddress(char *address, int8_t len) = 0;
|
virtual bool getOwnIpAddress(char *address, int8_t len) = 0;
|
||||||
|
|
||||||
NanostackRfPhy *phy;
|
NanostackPhy *phy;
|
||||||
/** Network interface ID */
|
/** Network interface ID */
|
||||||
int8_t _network_interface_id;
|
int8_t _network_interface_id;
|
||||||
/** Registered device ID */
|
/** Registered device ID */
|
||||||
|
|
|
@ -26,17 +26,14 @@ public:
|
||||||
*
|
*
|
||||||
* Must initialize to initialize the mesh on a phy.
|
* Must initialize to initialize the mesh on a phy.
|
||||||
*/
|
*/
|
||||||
ThreadInterface() : MeshInterfaceNanostack() {
|
ThreadInterface() : MeshInterfaceNanostack() { }
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Create an initialized MeshInterface
|
/** Create an initialized MeshInterface
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
ThreadInterface(NanostackRfPhy *phy) : MeshInterfaceNanostack(phy) {
|
ThreadInterface(NanostackRfPhy *phy) : MeshInterfaceNanostack(phy) { }
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
nsapi_error_t initialize(NanostackRfPhy *phy);
|
||||||
int connect();
|
int connect();
|
||||||
int disconnect();
|
int disconnect();
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -7,11 +7,16 @@
|
||||||
#include "ns_trace.h"
|
#include "ns_trace.h"
|
||||||
#define TRACE_GROUP "nslp"
|
#define TRACE_GROUP "nslp"
|
||||||
|
|
||||||
|
nsapi_error_t LoWPANNDInterface::initialize(NanostackRfPhy *phy)
|
||||||
|
{
|
||||||
|
return MeshInterfaceNanostack::initialize(phy);
|
||||||
|
}
|
||||||
|
|
||||||
int LoWPANNDInterface::connect()
|
int LoWPANNDInterface::connect()
|
||||||
{
|
{
|
||||||
nanostack_lock();
|
nanostack_lock();
|
||||||
|
|
||||||
if (register_rf() < 0) {
|
if (register_phy() < 0) {
|
||||||
nanostack_unlock();
|
nanostack_unlock();
|
||||||
return NSAPI_ERROR_DEVICE_ERROR;
|
return NSAPI_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,13 +25,13 @@ MeshInterfaceNanostack::MeshInterfaceNanostack()
|
||||||
// Nothing to do
|
// Nothing to do
|
||||||
}
|
}
|
||||||
|
|
||||||
MeshInterfaceNanostack::MeshInterfaceNanostack(NanostackRfPhy *phy)
|
MeshInterfaceNanostack::MeshInterfaceNanostack(NanostackPhy *phy)
|
||||||
: phy(phy), _network_interface_id(-1), _device_id(-1), connect_semaphore(0)
|
: phy(phy), _network_interface_id(-1), _device_id(-1), connect_semaphore(0)
|
||||||
{
|
{
|
||||||
// Nothing to do
|
// Nothing to do
|
||||||
}
|
}
|
||||||
|
|
||||||
nsapi_error_t MeshInterfaceNanostack::initialize(NanostackRfPhy *phy)
|
nsapi_error_t MeshInterfaceNanostack::initialize(NanostackPhy *phy)
|
||||||
{
|
{
|
||||||
mesh_system_init();
|
mesh_system_init();
|
||||||
if (this->phy != NULL) {
|
if (this->phy != NULL) {
|
||||||
|
@ -52,11 +52,11 @@ void MeshInterfaceNanostack::mesh_network_handler(mesh_connection_status_t statu
|
||||||
nanostack_unlock();
|
nanostack_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
nsapi_error_t MeshInterfaceNanostack::register_rf()
|
nsapi_error_t MeshInterfaceNanostack::register_phy()
|
||||||
{
|
{
|
||||||
nanostack_lock();
|
nanostack_lock();
|
||||||
|
|
||||||
_device_id = phy->rf_register();
|
_device_id = phy->phy_register();
|
||||||
if (_device_id < 0) {
|
if (_device_id < 0) {
|
||||||
nanostack_unlock();
|
nanostack_unlock();
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -7,11 +7,16 @@
|
||||||
#include "ns_trace.h"
|
#include "ns_trace.h"
|
||||||
#define TRACE_GROUP "nsth"
|
#define TRACE_GROUP "nsth"
|
||||||
|
|
||||||
|
nsapi_error_t ThreadInterface::initialize(NanostackRfPhy *phy)
|
||||||
|
{
|
||||||
|
return MeshInterfaceNanostack::initialize(phy);
|
||||||
|
}
|
||||||
|
|
||||||
int ThreadInterface::connect()
|
int ThreadInterface::connect()
|
||||||
{
|
{
|
||||||
nanostack_lock();
|
nanostack_lock();
|
||||||
|
|
||||||
if (register_rf() < 0) {
|
if (register_phy() < 0) {
|
||||||
nanostack_unlock();
|
nanostack_unlock();
|
||||||
return NSAPI_ERROR_DEVICE_ERROR;
|
return NSAPI_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016 ARM Limited. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NANOSTACK_PHY_H_
|
||||||
|
#define NANOSTACK_PHY_H_
|
||||||
|
|
||||||
|
class NanostackPhy {
|
||||||
|
public:
|
||||||
|
|
||||||
|
/** Register this physical interface with Nanostack
|
||||||
|
*
|
||||||
|
* @return Device driver ID or a negative error
|
||||||
|
* code on failure
|
||||||
|
*/
|
||||||
|
virtual int8_t phy_register() = 0;
|
||||||
|
|
||||||
|
/** Read the mac address of this physical interface
|
||||||
|
*
|
||||||
|
* Note - some devices do not have a mac address
|
||||||
|
* in hardware.
|
||||||
|
*/
|
||||||
|
virtual void get_mac_address(uint8_t *mac) = 0;
|
||||||
|
|
||||||
|
/** Set the mac address of this physical interface
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
virtual void set_mac_address(uint8_t *mac) = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
NanostackPhy() {}
|
||||||
|
virtual ~NanostackPhy() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* NANOSTACK_INTERFACE_H_ */
|
|
@ -5,7 +5,9 @@
|
||||||
#ifndef NANOSTACK_RF_PHY_H_
|
#ifndef NANOSTACK_RF_PHY_H_
|
||||||
#define NANOSTACK_RF_PHY_H_
|
#define NANOSTACK_RF_PHY_H_
|
||||||
|
|
||||||
class NanostackRfPhy {
|
#include "NanostackPhy.h"
|
||||||
|
|
||||||
|
class NanostackRfPhy : public NanostackPhy {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Register this physical interface with Nanostack
|
/** Register this physical interface with Nanostack
|
||||||
|
@ -20,21 +22,17 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void rf_unregister() = 0;
|
virtual void rf_unregister() = 0;
|
||||||
|
|
||||||
/** Read the mac address of this physical interface
|
/** Register this physical interface with Nanostack
|
||||||
*
|
*
|
||||||
* Note - some devices do not have a mac address
|
* @return Device driver ID or a negative error
|
||||||
* in hardware.
|
* code on failure
|
||||||
*/
|
*/
|
||||||
virtual void get_mac_address(uint8_t *mac) = 0;
|
int8_t phy_register() { return rf_register();}
|
||||||
|
|
||||||
/** Set the mac address of this physical interface
|
/** Unregister this physical interface
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
virtual void set_mac_address(uint8_t *mac) = 0;
|
void unregister() { rf_unregister(); }
|
||||||
|
|
||||||
protected:
|
|
||||||
NanostackRfPhy() {}
|
|
||||||
virtual ~NanostackRfPhy() {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* NANOSTACK_INTERFACE_H_ */
|
#endif /* NANOSTACK_RF_PHY_H_ */
|
||||||
|
|
Loading…
Reference in New Issue