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: mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510
features/nanostack/FEATURE_NANOSTACK/mbed-mesh-api/source/MeshInterfaceNanostack.cpp@0:098463de4c5d, 2017-01-25 (annotated)
- Committer:
- group-onsemi
- Date:
- Wed Jan 25 20:34:15 2017 +0000
- Revision:
- 0:098463de4c5d
Initial commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| group-onsemi | 0:098463de4c5d | 1 | /* | 
| group-onsemi | 0:098463de4c5d | 2 | * Copyright (c) 2016 ARM Limited. All rights reserved. | 
| group-onsemi | 0:098463de4c5d | 3 | * SPDX-License-Identifier: Apache-2.0 | 
| group-onsemi | 0:098463de4c5d | 4 | * Licensed under the Apache License, Version 2.0 (the License); you may | 
| group-onsemi | 0:098463de4c5d | 5 | * not use this file except in compliance with the License. | 
| group-onsemi | 0:098463de4c5d | 6 | * You may obtain a copy of the License at | 
| group-onsemi | 0:098463de4c5d | 7 | * | 
| group-onsemi | 0:098463de4c5d | 8 | * http://www.apache.org/licenses/LICENSE-2.0 | 
| group-onsemi | 0:098463de4c5d | 9 | * | 
| group-onsemi | 0:098463de4c5d | 10 | * Unless required by applicable law or agreed to in writing, software | 
| group-onsemi | 0:098463de4c5d | 11 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT | 
| group-onsemi | 0:098463de4c5d | 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
| group-onsemi | 0:098463de4c5d | 13 | * See the License for the specific language governing permissions and | 
| group-onsemi | 0:098463de4c5d | 14 | * limitations under the License. | 
| group-onsemi | 0:098463de4c5d | 15 | */ | 
| group-onsemi | 0:098463de4c5d | 16 | |
| group-onsemi | 0:098463de4c5d | 17 | #include "MeshInterfaceNanostack.h" | 
| group-onsemi | 0:098463de4c5d | 18 | #include "NanostackInterface.h" | 
| group-onsemi | 0:098463de4c5d | 19 | #include "mesh_system.h" | 
| group-onsemi | 0:098463de4c5d | 20 | |
| group-onsemi | 0:098463de4c5d | 21 | MeshInterfaceNanostack::MeshInterfaceNanostack() | 
| group-onsemi | 0:098463de4c5d | 22 | : phy(NULL), _network_interface_id(-1), _device_id(-1), eui64(), | 
| group-onsemi | 0:098463de4c5d | 23 | ip_addr_str(), mac_addr_str(), connect_semaphore(0) | 
| group-onsemi | 0:098463de4c5d | 24 | { | 
| group-onsemi | 0:098463de4c5d | 25 | // Nothing to do | 
| group-onsemi | 0:098463de4c5d | 26 | } | 
| group-onsemi | 0:098463de4c5d | 27 | |
| group-onsemi | 0:098463de4c5d | 28 | MeshInterfaceNanostack::MeshInterfaceNanostack(NanostackPhy *phy) | 
| group-onsemi | 0:098463de4c5d | 29 | : phy(phy), _network_interface_id(-1), _device_id(-1), connect_semaphore(0) | 
| group-onsemi | 0:098463de4c5d | 30 | { | 
| group-onsemi | 0:098463de4c5d | 31 | // Nothing to do | 
| group-onsemi | 0:098463de4c5d | 32 | } | 
| group-onsemi | 0:098463de4c5d | 33 | |
| group-onsemi | 0:098463de4c5d | 34 | nsapi_error_t MeshInterfaceNanostack::initialize(NanostackPhy *phy) | 
| group-onsemi | 0:098463de4c5d | 35 | { | 
| group-onsemi | 0:098463de4c5d | 36 | mesh_system_init(); | 
| group-onsemi | 0:098463de4c5d | 37 | if (this->phy != NULL) { | 
| group-onsemi | 0:098463de4c5d | 38 | error("Phy already set"); | 
| group-onsemi | 0:098463de4c5d | 39 | } | 
| group-onsemi | 0:098463de4c5d | 40 | this->phy = phy; | 
| group-onsemi | 0:098463de4c5d | 41 | return 0; | 
| group-onsemi | 0:098463de4c5d | 42 | } | 
| group-onsemi | 0:098463de4c5d | 43 | |
| group-onsemi | 0:098463de4c5d | 44 | void MeshInterfaceNanostack::mesh_network_handler(mesh_connection_status_t status) | 
| group-onsemi | 0:098463de4c5d | 45 | { | 
| group-onsemi | 0:098463de4c5d | 46 | nanostack_lock(); | 
| group-onsemi | 0:098463de4c5d | 47 | |
| group-onsemi | 0:098463de4c5d | 48 | if (status == MESH_CONNECTED) { | 
| group-onsemi | 0:098463de4c5d | 49 | connect_semaphore.release(); | 
| group-onsemi | 0:098463de4c5d | 50 | } | 
| group-onsemi | 0:098463de4c5d | 51 | |
| group-onsemi | 0:098463de4c5d | 52 | nanostack_unlock(); | 
| group-onsemi | 0:098463de4c5d | 53 | } | 
| group-onsemi | 0:098463de4c5d | 54 | |
| group-onsemi | 0:098463de4c5d | 55 | nsapi_error_t MeshInterfaceNanostack::register_phy() | 
| group-onsemi | 0:098463de4c5d | 56 | { | 
| group-onsemi | 0:098463de4c5d | 57 | nanostack_lock(); | 
| group-onsemi | 0:098463de4c5d | 58 | |
| group-onsemi | 0:098463de4c5d | 59 | _device_id = phy->phy_register(); | 
| group-onsemi | 0:098463de4c5d | 60 | if (_device_id < 0) { | 
| group-onsemi | 0:098463de4c5d | 61 | nanostack_unlock(); | 
| group-onsemi | 0:098463de4c5d | 62 | return -1; | 
| group-onsemi | 0:098463de4c5d | 63 | } | 
| group-onsemi | 0:098463de4c5d | 64 | // Read mac address after registering the device. | 
| group-onsemi | 0:098463de4c5d | 65 | phy->get_mac_address(eui64); | 
| group-onsemi | 0:098463de4c5d | 66 | sprintf(mac_addr_str, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", eui64[0], eui64[1], eui64[2], eui64[3], eui64[4], eui64[5], eui64[6], eui64[7]); | 
| group-onsemi | 0:098463de4c5d | 67 | |
| group-onsemi | 0:098463de4c5d | 68 | nanostack_unlock(); | 
| group-onsemi | 0:098463de4c5d | 69 | |
| group-onsemi | 0:098463de4c5d | 70 | return 0; | 
| group-onsemi | 0:098463de4c5d | 71 | } | 
| group-onsemi | 0:098463de4c5d | 72 | |
| group-onsemi | 0:098463de4c5d | 73 | NetworkStack * MeshInterfaceNanostack::get_stack() | 
| group-onsemi | 0:098463de4c5d | 74 | { | 
| group-onsemi | 0:098463de4c5d | 75 | return NanostackInterface::get_stack(); | 
| group-onsemi | 0:098463de4c5d | 76 | } | 
| group-onsemi | 0:098463de4c5d | 77 | |
| group-onsemi | 0:098463de4c5d | 78 | const char *MeshInterfaceNanostack::get_ip_address() | 
| group-onsemi | 0:098463de4c5d | 79 | { | 
| group-onsemi | 0:098463de4c5d | 80 | nanostack_lock(); | 
| group-onsemi | 0:098463de4c5d | 81 | |
| group-onsemi | 0:098463de4c5d | 82 | const char *ret = NULL; | 
| group-onsemi | 0:098463de4c5d | 83 | if (getOwnIpAddress(ip_addr_str, sizeof ip_addr_str)) { | 
| group-onsemi | 0:098463de4c5d | 84 | ret = ip_addr_str; | 
| group-onsemi | 0:098463de4c5d | 85 | } | 
| group-onsemi | 0:098463de4c5d | 86 | |
| group-onsemi | 0:098463de4c5d | 87 | nanostack_unlock(); | 
| group-onsemi | 0:098463de4c5d | 88 | |
| group-onsemi | 0:098463de4c5d | 89 | return ret; | 
| group-onsemi | 0:098463de4c5d | 90 | } | 
| group-onsemi | 0:098463de4c5d | 91 | |
| group-onsemi | 0:098463de4c5d | 92 | const char *MeshInterfaceNanostack::get_mac_address() | 
| group-onsemi | 0:098463de4c5d | 93 | { | 
| group-onsemi | 0:098463de4c5d | 94 | return mac_addr_str; | 
| group-onsemi | 0:098463de4c5d | 95 | } |