Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 17 23:23:45 2019 +0000
Revision:
0:5b88d5760320
mbed-os5 only for TYBLE16

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /* mbed Microcontroller Library
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2018 ARM Limited
kenjiArai 0:5b88d5760320 3 *
kenjiArai 0:5b88d5760320 4 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 0:5b88d5760320 5 * you may not use this file except in compliance with the License.
kenjiArai 0:5b88d5760320 6 * You may obtain a copy of the License at
kenjiArai 0:5b88d5760320 7 *
kenjiArai 0:5b88d5760320 8 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 0:5b88d5760320 9 *
kenjiArai 0:5b88d5760320 10 * Unless required by applicable law or agreed to in writing, software
kenjiArai 0:5b88d5760320 11 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 0:5b88d5760320 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 0:5b88d5760320 13 * See the License for the specific language governing permissions and
kenjiArai 0:5b88d5760320 14 * limitations under the License.
kenjiArai 0:5b88d5760320 15 */
kenjiArai 0:5b88d5760320 16
kenjiArai 0:5b88d5760320 17 #include "gap/ConnectionParameters.h"
kenjiArai 0:5b88d5760320 18
kenjiArai 0:5b88d5760320 19 namespace ble {
kenjiArai 0:5b88d5760320 20
kenjiArai 0:5b88d5760320 21 ConnectionParameters::ConnectionParameters(
kenjiArai 0:5b88d5760320 22 phy_t phy,
kenjiArai 0:5b88d5760320 23 scan_interval_t scanInterval,
kenjiArai 0:5b88d5760320 24 scan_window_t scanWindow,
kenjiArai 0:5b88d5760320 25 conn_interval_t minConnectionInterval,
kenjiArai 0:5b88d5760320 26 conn_interval_t maxConnectionInterval,
kenjiArai 0:5b88d5760320 27 slave_latency_t slaveLatency,
kenjiArai 0:5b88d5760320 28 supervision_timeout_t connectionSupervisionTimeout,
kenjiArai 0:5b88d5760320 29 conn_event_length_t minEventLength,
kenjiArai 0:5b88d5760320 30 conn_event_length_t maxEventLength
kenjiArai 0:5b88d5760320 31 ) :
kenjiArai 0:5b88d5760320 32 _filterPolicy(initiator_filter_policy_t::NO_FILTER),
kenjiArai 0:5b88d5760320 33 _ownAddressType(own_address_type_t::RANDOM)
kenjiArai 0:5b88d5760320 34 {
kenjiArai 0:5b88d5760320 35 for (uint8_t i = 0; i < MAX_PARAM_PHYS; ++i) {
kenjiArai 0:5b88d5760320 36 _enabledPhy[i] = false;
kenjiArai 0:5b88d5760320 37 }
kenjiArai 0:5b88d5760320 38 if (phy != phy_t::NONE) {
kenjiArai 0:5b88d5760320 39 uint8_t phy_index = phyToIndex(phy);
kenjiArai 0:5b88d5760320 40
kenjiArai 0:5b88d5760320 41 if (phy_index < MAX_PARAM_PHYS) {
kenjiArai 0:5b88d5760320 42 _scanInterval[phy_index] = scanInterval.value();
kenjiArai 0:5b88d5760320 43 _scanWindow[phy_index] = scanWindow.value();
kenjiArai 0:5b88d5760320 44 _minConnectionInterval[phy_index] = minConnectionInterval.value();
kenjiArai 0:5b88d5760320 45 _maxConnectionInterval[phy_index] = maxConnectionInterval.value();
kenjiArai 0:5b88d5760320 46 _slaveLatency[phy_index] = slaveLatency.value();
kenjiArai 0:5b88d5760320 47 _connectionSupervisionTimeout[phy_index] = connectionSupervisionTimeout.value();
kenjiArai 0:5b88d5760320 48 _enabledPhy[phy_index] = true;
kenjiArai 0:5b88d5760320 49 _minEventLength[phy_index] = minEventLength.value();
kenjiArai 0:5b88d5760320 50 _maxEventLength[phy_index] = maxEventLength.value();
kenjiArai 0:5b88d5760320 51 }
kenjiArai 0:5b88d5760320 52 }
kenjiArai 0:5b88d5760320 53 }
kenjiArai 0:5b88d5760320 54
kenjiArai 0:5b88d5760320 55 /* setters */
kenjiArai 0:5b88d5760320 56
kenjiArai 0:5b88d5760320 57 ConnectionParameters &ConnectionParameters::setScanParameters(
kenjiArai 0:5b88d5760320 58 phy_t phy,
kenjiArai 0:5b88d5760320 59 scan_interval_t scanInterval,
kenjiArai 0:5b88d5760320 60 scan_window_t scanWindow
kenjiArai 0:5b88d5760320 61 )
kenjiArai 0:5b88d5760320 62 {
kenjiArai 0:5b88d5760320 63 uint8_t phy_index = handlePhyToggle(phy, true);
kenjiArai 0:5b88d5760320 64
kenjiArai 0:5b88d5760320 65 if (phy_index < MAX_PARAM_PHYS) {
kenjiArai 0:5b88d5760320 66 _scanInterval[phy_index] = scanInterval.value();
kenjiArai 0:5b88d5760320 67 _scanWindow[phy_index] = scanWindow.value();
kenjiArai 0:5b88d5760320 68 }
kenjiArai 0:5b88d5760320 69
kenjiArai 0:5b88d5760320 70 return *this;
kenjiArai 0:5b88d5760320 71 }
kenjiArai 0:5b88d5760320 72
kenjiArai 0:5b88d5760320 73 ConnectionParameters &ConnectionParameters::setConnectionParameters(
kenjiArai 0:5b88d5760320 74 phy_t phy,
kenjiArai 0:5b88d5760320 75 conn_interval_t minConnectionInterval,
kenjiArai 0:5b88d5760320 76 conn_interval_t maxConnectionInterval,
kenjiArai 0:5b88d5760320 77 slave_latency_t slaveLatency,
kenjiArai 0:5b88d5760320 78 supervision_timeout_t connectionSupervisionTimeout,
kenjiArai 0:5b88d5760320 79 conn_event_length_t minEventLength,
kenjiArai 0:5b88d5760320 80 conn_event_length_t maxEventLength
kenjiArai 0:5b88d5760320 81 )
kenjiArai 0:5b88d5760320 82 {
kenjiArai 0:5b88d5760320 83 uint8_t phy_index = handlePhyToggle(phy, true);
kenjiArai 0:5b88d5760320 84
kenjiArai 0:5b88d5760320 85 if (phy_index < MAX_PARAM_PHYS) {
kenjiArai 0:5b88d5760320 86 _minConnectionInterval[phy_index] = minConnectionInterval.value();
kenjiArai 0:5b88d5760320 87 _maxConnectionInterval[phy_index] = maxConnectionInterval.value();
kenjiArai 0:5b88d5760320 88 _slaveLatency[phy_index] = slaveLatency.value();
kenjiArai 0:5b88d5760320 89 _connectionSupervisionTimeout[phy_index] = connectionSupervisionTimeout.value();
kenjiArai 0:5b88d5760320 90
kenjiArai 0:5b88d5760320 91 /* avoid overflows and truncation */
kenjiArai 0:5b88d5760320 92 if (minEventLength.value() > maxEventLength.value()) {
kenjiArai 0:5b88d5760320 93 minEventLength = maxEventLength;
kenjiArai 0:5b88d5760320 94 }
kenjiArai 0:5b88d5760320 95
kenjiArai 0:5b88d5760320 96 _minEventLength[phy_index] = minEventLength.value();
kenjiArai 0:5b88d5760320 97 _maxEventLength[phy_index] = maxEventLength.value();
kenjiArai 0:5b88d5760320 98 }
kenjiArai 0:5b88d5760320 99
kenjiArai 0:5b88d5760320 100 return *this;
kenjiArai 0:5b88d5760320 101 }
kenjiArai 0:5b88d5760320 102
kenjiArai 0:5b88d5760320 103 #if BLE_FEATURE_PHY_MANAGEMENT
kenjiArai 0:5b88d5760320 104 /** Handle the swapping of 2M and CODED so that the array is ready for the pal call. */
kenjiArai 0:5b88d5760320 105 void ConnectionParameters::swapCodedAnd2M()
kenjiArai 0:5b88d5760320 106 {
kenjiArai 0:5b88d5760320 107 uint16_t scanInterval = _scanInterval[LE_2M_INDEX];
kenjiArai 0:5b88d5760320 108 uint16_t scanWindow = _scanWindow[LE_2M_INDEX];
kenjiArai 0:5b88d5760320 109 uint16_t minConnectionInterval = _minConnectionInterval[LE_2M_INDEX];
kenjiArai 0:5b88d5760320 110 uint16_t maxConnectionInterval = _maxConnectionInterval[LE_2M_INDEX];
kenjiArai 0:5b88d5760320 111 uint16_t slaveLatency = _slaveLatency[LE_2M_INDEX];
kenjiArai 0:5b88d5760320 112 uint16_t connectionSupervisionTimeout = _connectionSupervisionTimeout[LE_2M_INDEX];
kenjiArai 0:5b88d5760320 113 uint16_t minEventLength = _minEventLength[LE_2M_INDEX];
kenjiArai 0:5b88d5760320 114 uint16_t maxEventLength = _maxEventLength[LE_2M_INDEX];
kenjiArai 0:5b88d5760320 115
kenjiArai 0:5b88d5760320 116 _scanInterval[LE_2M_INDEX] = _scanInterval[LE_CODED_INDEX];
kenjiArai 0:5b88d5760320 117 _scanWindow[LE_2M_INDEX] = _scanWindow[LE_CODED_INDEX];
kenjiArai 0:5b88d5760320 118 _minConnectionInterval[LE_2M_INDEX] = _minConnectionInterval[LE_CODED_INDEX];
kenjiArai 0:5b88d5760320 119 _maxConnectionInterval[LE_2M_INDEX] = _maxConnectionInterval[LE_CODED_INDEX];
kenjiArai 0:5b88d5760320 120 _slaveLatency[LE_2M_INDEX] = _slaveLatency[LE_CODED_INDEX];
kenjiArai 0:5b88d5760320 121 _connectionSupervisionTimeout[LE_2M_INDEX] = _connectionSupervisionTimeout[LE_CODED_INDEX];
kenjiArai 0:5b88d5760320 122 _minEventLength[LE_2M_INDEX] = _minEventLength[LE_CODED_INDEX];
kenjiArai 0:5b88d5760320 123 _maxEventLength[LE_2M_INDEX] = _maxEventLength[LE_CODED_INDEX];
kenjiArai 0:5b88d5760320 124
kenjiArai 0:5b88d5760320 125 _scanInterval[LE_CODED_INDEX] = scanInterval;
kenjiArai 0:5b88d5760320 126 _scanWindow[LE_CODED_INDEX] = scanWindow;
kenjiArai 0:5b88d5760320 127 _minConnectionInterval[LE_CODED_INDEX] = minConnectionInterval;
kenjiArai 0:5b88d5760320 128 _maxConnectionInterval[LE_CODED_INDEX] = maxConnectionInterval;
kenjiArai 0:5b88d5760320 129 _slaveLatency[LE_CODED_INDEX] = slaveLatency;
kenjiArai 0:5b88d5760320 130 _connectionSupervisionTimeout[LE_CODED_INDEX] = connectionSupervisionTimeout;
kenjiArai 0:5b88d5760320 131 _minEventLength[LE_CODED_INDEX] = minEventLength;
kenjiArai 0:5b88d5760320 132 _maxEventLength[LE_CODED_INDEX] = maxEventLength;
kenjiArai 0:5b88d5760320 133 }
kenjiArai 0:5b88d5760320 134 #endif // BLE_FEATURE_PHY_MANAGEMENT
kenjiArai 0:5b88d5760320 135
kenjiArai 0:5b88d5760320 136 } // namespace ble