takashi kadono
/
Nucleo_446
Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466
mbed-os/UNITTESTS/features/lorawan/loraphy/Test_LoRaPHY.cpp@3:f3764f852aa8, 2018-10-11 (annotated)
- Committer:
- kadonotakashi
- Date:
- Thu Oct 11 02:27:46 2018 +0000
- Revision:
- 3:f3764f852aa8
- Parent:
- 0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kadonotakashi | 0:8fdf9a60065b | 1 | /* |
kadonotakashi | 0:8fdf9a60065b | 2 | * Copyright (c) 2018, Arm Limited and affiliates |
kadonotakashi | 0:8fdf9a60065b | 3 | * SPDX-License-Identifier: Apache-2.0 |
kadonotakashi | 0:8fdf9a60065b | 4 | * |
kadonotakashi | 0:8fdf9a60065b | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
kadonotakashi | 0:8fdf9a60065b | 6 | * you may not use this file except in compliance with the License. |
kadonotakashi | 0:8fdf9a60065b | 7 | * You may obtain a copy of the License at |
kadonotakashi | 0:8fdf9a60065b | 8 | * |
kadonotakashi | 0:8fdf9a60065b | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
kadonotakashi | 0:8fdf9a60065b | 10 | * |
kadonotakashi | 0:8fdf9a60065b | 11 | * Unless required by applicable law or agreed to in writing, software |
kadonotakashi | 0:8fdf9a60065b | 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
kadonotakashi | 0:8fdf9a60065b | 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
kadonotakashi | 0:8fdf9a60065b | 14 | * See the License for the specific language governing permissions and |
kadonotakashi | 0:8fdf9a60065b | 15 | * limitations under the License. |
kadonotakashi | 0:8fdf9a60065b | 16 | */ |
kadonotakashi | 0:8fdf9a60065b | 17 | |
kadonotakashi | 0:8fdf9a60065b | 18 | #include "gtest/gtest.h" |
kadonotakashi | 0:8fdf9a60065b | 19 | #include "LoRaPHY.h" |
kadonotakashi | 0:8fdf9a60065b | 20 | |
kadonotakashi | 0:8fdf9a60065b | 21 | #include "LoRaWANTimer_stub.h" |
kadonotakashi | 0:8fdf9a60065b | 22 | |
kadonotakashi | 0:8fdf9a60065b | 23 | class my_LoRaPHY : public LoRaPHY |
kadonotakashi | 0:8fdf9a60065b | 24 | { |
kadonotakashi | 0:8fdf9a60065b | 25 | public: |
kadonotakashi | 0:8fdf9a60065b | 26 | my_LoRaPHY(){phy_params.adr_ack_delay = 1;} |
kadonotakashi | 0:8fdf9a60065b | 27 | |
kadonotakashi | 0:8fdf9a60065b | 28 | virtual ~my_LoRaPHY(){} |
kadonotakashi | 0:8fdf9a60065b | 29 | |
kadonotakashi | 0:8fdf9a60065b | 30 | loraphy_params_t &get_phy_params() { |
kadonotakashi | 0:8fdf9a60065b | 31 | return phy_params; |
kadonotakashi | 0:8fdf9a60065b | 32 | } |
kadonotakashi | 0:8fdf9a60065b | 33 | }; |
kadonotakashi | 0:8fdf9a60065b | 34 | |
kadonotakashi | 0:8fdf9a60065b | 35 | class my_radio : public LoRaRadio |
kadonotakashi | 0:8fdf9a60065b | 36 | { |
kadonotakashi | 0:8fdf9a60065b | 37 | public: |
kadonotakashi | 0:8fdf9a60065b | 38 | |
kadonotakashi | 0:8fdf9a60065b | 39 | virtual void init_radio(radio_events_t *events){}; |
kadonotakashi | 0:8fdf9a60065b | 40 | |
kadonotakashi | 0:8fdf9a60065b | 41 | virtual void radio_reset(){}; |
kadonotakashi | 0:8fdf9a60065b | 42 | |
kadonotakashi | 0:8fdf9a60065b | 43 | virtual void sleep(void){}; |
kadonotakashi | 0:8fdf9a60065b | 44 | |
kadonotakashi | 0:8fdf9a60065b | 45 | virtual void standby(void){}; |
kadonotakashi | 0:8fdf9a60065b | 46 | |
kadonotakashi | 0:8fdf9a60065b | 47 | virtual void set_rx_config (radio_modems_t modem, uint32_t bandwidth, |
kadonotakashi | 0:8fdf9a60065b | 48 | uint32_t datarate, uint8_t coderate, |
kadonotakashi | 0:8fdf9a60065b | 49 | uint32_t bandwidth_afc, uint16_t preamble_len, |
kadonotakashi | 0:8fdf9a60065b | 50 | uint16_t symb_timeout, bool fix_len, |
kadonotakashi | 0:8fdf9a60065b | 51 | uint8_t payload_len, |
kadonotakashi | 0:8fdf9a60065b | 52 | bool crc_on, bool freq_hop_on, uint8_t hop_period, |
kadonotakashi | 0:8fdf9a60065b | 53 | bool iq_inverted, bool rx_continuous){}; |
kadonotakashi | 0:8fdf9a60065b | 54 | |
kadonotakashi | 0:8fdf9a60065b | 55 | virtual void set_tx_config(radio_modems_t modem, int8_t power, uint32_t fdev, |
kadonotakashi | 0:8fdf9a60065b | 56 | uint32_t bandwidth, uint32_t datarate, |
kadonotakashi | 0:8fdf9a60065b | 57 | uint8_t coderate, uint16_t preamble_len, |
kadonotakashi | 0:8fdf9a60065b | 58 | bool fix_len, bool crc_on, bool freq_hop_on, |
kadonotakashi | 0:8fdf9a60065b | 59 | uint8_t hop_period, bool iq_inverted, uint32_t timeout){}; |
kadonotakashi | 0:8fdf9a60065b | 60 | |
kadonotakashi | 0:8fdf9a60065b | 61 | virtual void send(uint8_t *buffer, uint8_t size){}; |
kadonotakashi | 0:8fdf9a60065b | 62 | |
kadonotakashi | 0:8fdf9a60065b | 63 | virtual void receive(void){}; |
kadonotakashi | 0:8fdf9a60065b | 64 | |
kadonotakashi | 0:8fdf9a60065b | 65 | virtual void set_channel(uint32_t freq){}; |
kadonotakashi | 0:8fdf9a60065b | 66 | |
kadonotakashi | 0:8fdf9a60065b | 67 | virtual uint32_t random(void){}; |
kadonotakashi | 0:8fdf9a60065b | 68 | |
kadonotakashi | 0:8fdf9a60065b | 69 | virtual uint8_t get_status(void){return uint8_value;}; |
kadonotakashi | 0:8fdf9a60065b | 70 | |
kadonotakashi | 0:8fdf9a60065b | 71 | virtual void set_max_payload_length(radio_modems_t modem, uint8_t max){}; |
kadonotakashi | 0:8fdf9a60065b | 72 | |
kadonotakashi | 0:8fdf9a60065b | 73 | virtual void set_public_network(bool enable){}; |
kadonotakashi | 0:8fdf9a60065b | 74 | |
kadonotakashi | 0:8fdf9a60065b | 75 | virtual uint32_t time_on_air(radio_modems_t modem, uint8_t pkt_len){}; |
kadonotakashi | 0:8fdf9a60065b | 76 | |
kadonotakashi | 0:8fdf9a60065b | 77 | virtual bool perform_carrier_sense(radio_modems_t modem, |
kadonotakashi | 0:8fdf9a60065b | 78 | uint32_t freq, |
kadonotakashi | 0:8fdf9a60065b | 79 | int16_t rssi_threshold, |
kadonotakashi | 0:8fdf9a60065b | 80 | uint32_t max_carrier_sense_time){ return bool_value;}; |
kadonotakashi | 0:8fdf9a60065b | 81 | |
kadonotakashi | 0:8fdf9a60065b | 82 | virtual void start_cad(void){}; |
kadonotakashi | 0:8fdf9a60065b | 83 | |
kadonotakashi | 0:8fdf9a60065b | 84 | virtual bool check_rf_frequency(uint32_t frequency){ return bool_value; }; |
kadonotakashi | 0:8fdf9a60065b | 85 | |
kadonotakashi | 0:8fdf9a60065b | 86 | virtual void set_tx_continuous_wave(uint32_t freq, int8_t power, uint16_t time){}; |
kadonotakashi | 0:8fdf9a60065b | 87 | |
kadonotakashi | 0:8fdf9a60065b | 88 | virtual void lock(void){}; |
kadonotakashi | 0:8fdf9a60065b | 89 | |
kadonotakashi | 0:8fdf9a60065b | 90 | virtual void unlock(void){}; |
kadonotakashi | 0:8fdf9a60065b | 91 | |
kadonotakashi | 0:8fdf9a60065b | 92 | bool bool_value; |
kadonotakashi | 0:8fdf9a60065b | 93 | uint8_t uint8_value; |
kadonotakashi | 0:8fdf9a60065b | 94 | }; |
kadonotakashi | 0:8fdf9a60065b | 95 | |
kadonotakashi | 0:8fdf9a60065b | 96 | class Test_LoRaPHY : public testing::Test { |
kadonotakashi | 0:8fdf9a60065b | 97 | protected: |
kadonotakashi | 0:8fdf9a60065b | 98 | my_LoRaPHY *object; |
kadonotakashi | 0:8fdf9a60065b | 99 | |
kadonotakashi | 0:8fdf9a60065b | 100 | virtual void SetUp() |
kadonotakashi | 0:8fdf9a60065b | 101 | { |
kadonotakashi | 0:8fdf9a60065b | 102 | object = new my_LoRaPHY(); |
kadonotakashi | 0:8fdf9a60065b | 103 | } |
kadonotakashi | 0:8fdf9a60065b | 104 | |
kadonotakashi | 0:8fdf9a60065b | 105 | virtual void TearDown() |
kadonotakashi | 0:8fdf9a60065b | 106 | { |
kadonotakashi | 0:8fdf9a60065b | 107 | delete object; |
kadonotakashi | 0:8fdf9a60065b | 108 | } |
kadonotakashi | 0:8fdf9a60065b | 109 | }; |
kadonotakashi | 0:8fdf9a60065b | 110 | |
kadonotakashi | 0:8fdf9a60065b | 111 | TEST_F(Test_LoRaPHY, initialize) |
kadonotakashi | 0:8fdf9a60065b | 112 | { |
kadonotakashi | 0:8fdf9a60065b | 113 | object->initialize(NULL); |
kadonotakashi | 0:8fdf9a60065b | 114 | } |
kadonotakashi | 0:8fdf9a60065b | 115 | |
kadonotakashi | 0:8fdf9a60065b | 116 | TEST_F(Test_LoRaPHY, set_radio_instance) |
kadonotakashi | 0:8fdf9a60065b | 117 | { |
kadonotakashi | 0:8fdf9a60065b | 118 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 119 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 120 | } |
kadonotakashi | 0:8fdf9a60065b | 121 | |
kadonotakashi | 0:8fdf9a60065b | 122 | TEST_F(Test_LoRaPHY, put_radio_to_sleep) |
kadonotakashi | 0:8fdf9a60065b | 123 | { |
kadonotakashi | 0:8fdf9a60065b | 124 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 125 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 126 | object->put_radio_to_sleep(); |
kadonotakashi | 0:8fdf9a60065b | 127 | } |
kadonotakashi | 0:8fdf9a60065b | 128 | |
kadonotakashi | 0:8fdf9a60065b | 129 | TEST_F(Test_LoRaPHY, put_radio_to_standby) |
kadonotakashi | 0:8fdf9a60065b | 130 | { |
kadonotakashi | 0:8fdf9a60065b | 131 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 132 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 133 | object->put_radio_to_standby(); |
kadonotakashi | 0:8fdf9a60065b | 134 | } |
kadonotakashi | 0:8fdf9a60065b | 135 | |
kadonotakashi | 0:8fdf9a60065b | 136 | TEST_F(Test_LoRaPHY, handle_receive) |
kadonotakashi | 0:8fdf9a60065b | 137 | { |
kadonotakashi | 0:8fdf9a60065b | 138 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 139 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 140 | object->handle_receive(); |
kadonotakashi | 0:8fdf9a60065b | 141 | } |
kadonotakashi | 0:8fdf9a60065b | 142 | |
kadonotakashi | 0:8fdf9a60065b | 143 | TEST_F(Test_LoRaPHY, handle_send) |
kadonotakashi | 0:8fdf9a60065b | 144 | { |
kadonotakashi | 0:8fdf9a60065b | 145 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 146 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 147 | object->handle_send(NULL, 0); |
kadonotakashi | 0:8fdf9a60065b | 148 | } |
kadonotakashi | 0:8fdf9a60065b | 149 | |
kadonotakashi | 0:8fdf9a60065b | 150 | TEST_F(Test_LoRaPHY, setup_public_network_mode) |
kadonotakashi | 0:8fdf9a60065b | 151 | { |
kadonotakashi | 0:8fdf9a60065b | 152 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 153 | channel_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 154 | object->get_phy_params().channels.channel_list = &p; |
kadonotakashi | 0:8fdf9a60065b | 155 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 156 | object->setup_public_network_mode(false); |
kadonotakashi | 0:8fdf9a60065b | 157 | } |
kadonotakashi | 0:8fdf9a60065b | 158 | |
kadonotakashi | 0:8fdf9a60065b | 159 | TEST_F(Test_LoRaPHY, get_radio_rng) |
kadonotakashi | 0:8fdf9a60065b | 160 | { |
kadonotakashi | 0:8fdf9a60065b | 161 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 162 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 163 | EXPECT_TRUE(0 != object->get_radio_rng()); |
kadonotakashi | 0:8fdf9a60065b | 164 | } |
kadonotakashi | 0:8fdf9a60065b | 165 | |
kadonotakashi | 0:8fdf9a60065b | 166 | TEST_F(Test_LoRaPHY, calculate_backoff) |
kadonotakashi | 0:8fdf9a60065b | 167 | { |
kadonotakashi | 0:8fdf9a60065b | 168 | channel_params_t p[1]; |
kadonotakashi | 0:8fdf9a60065b | 169 | p[0].band = 0; |
kadonotakashi | 0:8fdf9a60065b | 170 | object->get_phy_params().channels.channel_list = p; |
kadonotakashi | 0:8fdf9a60065b | 171 | band_t b[1]; |
kadonotakashi | 0:8fdf9a60065b | 172 | object->get_phy_params().bands.table = b; |
kadonotakashi | 0:8fdf9a60065b | 173 | object->calculate_backoff(false, false, false, 0, 10, 12); |
kadonotakashi | 0:8fdf9a60065b | 174 | |
kadonotakashi | 0:8fdf9a60065b | 175 | object->calculate_backoff(false, true, false, 0, 3600000 + 10, 12); |
kadonotakashi | 0:8fdf9a60065b | 176 | |
kadonotakashi | 0:8fdf9a60065b | 177 | object->calculate_backoff(false, false, true, 0, 3600000 + 36000000 + 10, 12); |
kadonotakashi | 0:8fdf9a60065b | 178 | } |
kadonotakashi | 0:8fdf9a60065b | 179 | |
kadonotakashi | 0:8fdf9a60065b | 180 | TEST_F(Test_LoRaPHY, mask_bit_test) |
kadonotakashi | 0:8fdf9a60065b | 181 | { |
kadonotakashi | 0:8fdf9a60065b | 182 | uint16_t buf; |
kadonotakashi | 0:8fdf9a60065b | 183 | EXPECT_TRUE(!object->mask_bit_test(&buf, 0)); |
kadonotakashi | 0:8fdf9a60065b | 184 | } |
kadonotakashi | 0:8fdf9a60065b | 185 | |
kadonotakashi | 0:8fdf9a60065b | 186 | TEST_F(Test_LoRaPHY, mask_bit_set) |
kadonotakashi | 0:8fdf9a60065b | 187 | { |
kadonotakashi | 0:8fdf9a60065b | 188 | uint16_t buf; |
kadonotakashi | 0:8fdf9a60065b | 189 | object->mask_bit_set(&buf, 3); |
kadonotakashi | 0:8fdf9a60065b | 190 | } |
kadonotakashi | 0:8fdf9a60065b | 191 | |
kadonotakashi | 0:8fdf9a60065b | 192 | TEST_F(Test_LoRaPHY, mask_bit_clear) |
kadonotakashi | 0:8fdf9a60065b | 193 | { |
kadonotakashi | 0:8fdf9a60065b | 194 | uint16_t buf; |
kadonotakashi | 0:8fdf9a60065b | 195 | object->mask_bit_clear(&buf, 0); |
kadonotakashi | 0:8fdf9a60065b | 196 | } |
kadonotakashi | 0:8fdf9a60065b | 197 | |
kadonotakashi | 0:8fdf9a60065b | 198 | TEST_F(Test_LoRaPHY, request_new_channel) |
kadonotakashi | 0:8fdf9a60065b | 199 | { |
kadonotakashi | 0:8fdf9a60065b | 200 | channel_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 201 | EXPECT_TRUE(0 == object->request_new_channel(1, &p)); |
kadonotakashi | 0:8fdf9a60065b | 202 | |
kadonotakashi | 0:8fdf9a60065b | 203 | p.frequency = 0; |
kadonotakashi | 0:8fdf9a60065b | 204 | object->get_phy_params().custom_channelplans_supported = true; |
kadonotakashi | 0:8fdf9a60065b | 205 | uint16_t list; |
kadonotakashi | 0:8fdf9a60065b | 206 | object->get_phy_params().channels.default_mask = &list; |
kadonotakashi | 0:8fdf9a60065b | 207 | channel_params_t pp; |
kadonotakashi | 0:8fdf9a60065b | 208 | object->get_phy_params().channels.channel_list = &pp; |
kadonotakashi | 0:8fdf9a60065b | 209 | EXPECT_TRUE(0 == object->request_new_channel(1, &p)); |
kadonotakashi | 0:8fdf9a60065b | 210 | |
kadonotakashi | 0:8fdf9a60065b | 211 | //Default |
kadonotakashi | 0:8fdf9a60065b | 212 | p.frequency = 2; |
kadonotakashi | 0:8fdf9a60065b | 213 | EXPECT_TRUE(0 == object->request_new_channel(1, &p)); |
kadonotakashi | 0:8fdf9a60065b | 214 | |
kadonotakashi | 0:8fdf9a60065b | 215 | //Freq & DR invalid |
kadonotakashi | 0:8fdf9a60065b | 216 | object->get_phy_params().max_channel_cnt = 2; |
kadonotakashi | 0:8fdf9a60065b | 217 | EXPECT_TRUE(0 == object->request_new_channel(1, &p)); |
kadonotakashi | 0:8fdf9a60065b | 218 | |
kadonotakashi | 0:8fdf9a60065b | 219 | //Freq invalid |
kadonotakashi | 0:8fdf9a60065b | 220 | pp.frequency = 0; |
kadonotakashi | 0:8fdf9a60065b | 221 | object->get_phy_params().default_max_datarate = 1; |
kadonotakashi | 0:8fdf9a60065b | 222 | object->get_phy_params().max_tx_datarate = 8; |
kadonotakashi | 0:8fdf9a60065b | 223 | p.dr_range.fields.max = 2; |
kadonotakashi | 0:8fdf9a60065b | 224 | p.dr_range.fields.min = 0; |
kadonotakashi | 0:8fdf9a60065b | 225 | object->get_phy_params().default_channel_cnt = 3; |
kadonotakashi | 0:8fdf9a60065b | 226 | EXPECT_TRUE(2 == object->request_new_channel(0, &p)); |
kadonotakashi | 0:8fdf9a60065b | 227 | |
kadonotakashi | 0:8fdf9a60065b | 228 | //DR invalid |
kadonotakashi | 0:8fdf9a60065b | 229 | pp.frequency = 2; |
kadonotakashi | 0:8fdf9a60065b | 230 | p.band = 0; |
kadonotakashi | 0:8fdf9a60065b | 231 | object->get_phy_params().bands.size = 1; |
kadonotakashi | 0:8fdf9a60065b | 232 | band_t b; |
kadonotakashi | 0:8fdf9a60065b | 233 | object->get_phy_params().bands.table = &b; |
kadonotakashi | 0:8fdf9a60065b | 234 | b.higher_band_freq = 5; |
kadonotakashi | 0:8fdf9a60065b | 235 | b.lower_band_freq = 1; |
kadonotakashi | 0:8fdf9a60065b | 236 | p.dr_range.fields.max = 12; |
kadonotakashi | 0:8fdf9a60065b | 237 | p.dr_range.fields.min = 1; |
kadonotakashi | 0:8fdf9a60065b | 238 | EXPECT_TRUE(1 == object->request_new_channel(0, &p)); |
kadonotakashi | 0:8fdf9a60065b | 239 | |
kadonotakashi | 0:8fdf9a60065b | 240 | //STATUS_OK |
kadonotakashi | 0:8fdf9a60065b | 241 | p.dr_range.fields.max = 2; |
kadonotakashi | 0:8fdf9a60065b | 242 | uint16_t list2[16]; |
kadonotakashi | 0:8fdf9a60065b | 243 | p.dr_range.fields.min = 0; |
kadonotakashi | 0:8fdf9a60065b | 244 | object->get_phy_params().channels.mask = list2; |
kadonotakashi | 0:8fdf9a60065b | 245 | EXPECT_TRUE(3 == object->request_new_channel(0, &p)); |
kadonotakashi | 0:8fdf9a60065b | 246 | } |
kadonotakashi | 0:8fdf9a60065b | 247 | |
kadonotakashi | 0:8fdf9a60065b | 248 | TEST_F(Test_LoRaPHY, set_last_tx_done) |
kadonotakashi | 0:8fdf9a60065b | 249 | { |
kadonotakashi | 0:8fdf9a60065b | 250 | channel_params_t p[1]; |
kadonotakashi | 0:8fdf9a60065b | 251 | p[0].band = 0; |
kadonotakashi | 0:8fdf9a60065b | 252 | object->get_phy_params().channels.channel_list = p; |
kadonotakashi | 0:8fdf9a60065b | 253 | band_t b[1]; |
kadonotakashi | 0:8fdf9a60065b | 254 | object->get_phy_params().bands.table = b; |
kadonotakashi | 0:8fdf9a60065b | 255 | object->set_last_tx_done(0, false, 0); |
kadonotakashi | 0:8fdf9a60065b | 256 | |
kadonotakashi | 0:8fdf9a60065b | 257 | object->set_last_tx_done(0, true, 0); |
kadonotakashi | 0:8fdf9a60065b | 258 | } |
kadonotakashi | 0:8fdf9a60065b | 259 | |
kadonotakashi | 0:8fdf9a60065b | 260 | TEST_F(Test_LoRaPHY, restore_default_channels) |
kadonotakashi | 0:8fdf9a60065b | 261 | { |
kadonotakashi | 0:8fdf9a60065b | 262 | channel_params_t p[1]; |
kadonotakashi | 0:8fdf9a60065b | 263 | p[0].band = 0; |
kadonotakashi | 0:8fdf9a60065b | 264 | object->get_phy_params().channels.channel_list = p; |
kadonotakashi | 0:8fdf9a60065b | 265 | uint16_t m, dm; |
kadonotakashi | 0:8fdf9a60065b | 266 | object->get_phy_params().channels.mask_size = 1; |
kadonotakashi | 0:8fdf9a60065b | 267 | object->get_phy_params().channels.default_mask = &dm; |
kadonotakashi | 0:8fdf9a60065b | 268 | object->get_phy_params().channels.mask = &m; |
kadonotakashi | 0:8fdf9a60065b | 269 | object->restore_default_channels(); |
kadonotakashi | 0:8fdf9a60065b | 270 | } |
kadonotakashi | 0:8fdf9a60065b | 271 | |
kadonotakashi | 0:8fdf9a60065b | 272 | TEST_F(Test_LoRaPHY, apply_cf_list) |
kadonotakashi | 0:8fdf9a60065b | 273 | { |
kadonotakashi | 0:8fdf9a60065b | 274 | uint8_t list[16]; |
kadonotakashi | 0:8fdf9a60065b | 275 | object->apply_cf_list(list, 0); |
kadonotakashi | 0:8fdf9a60065b | 276 | |
kadonotakashi | 0:8fdf9a60065b | 277 | object->get_phy_params().cflist_supported = true; |
kadonotakashi | 0:8fdf9a60065b | 278 | object->apply_cf_list(list, 0); |
kadonotakashi | 0:8fdf9a60065b | 279 | |
kadonotakashi | 0:8fdf9a60065b | 280 | object->get_phy_params().default_channel_cnt = 2; |
kadonotakashi | 0:8fdf9a60065b | 281 | object->get_phy_params().cflist_channel_cnt = 0; |
kadonotakashi | 0:8fdf9a60065b | 282 | object->get_phy_params().max_channel_cnt = 3; |
kadonotakashi | 0:8fdf9a60065b | 283 | |
kadonotakashi | 0:8fdf9a60065b | 284 | uint16_t mask[8]; |
kadonotakashi | 0:8fdf9a60065b | 285 | channel_params_t p[8]; |
kadonotakashi | 0:8fdf9a60065b | 286 | object->get_phy_params().channels.default_mask = mask; |
kadonotakashi | 0:8fdf9a60065b | 287 | object->get_phy_params().channels.mask = mask; |
kadonotakashi | 0:8fdf9a60065b | 288 | object->get_phy_params().channels.channel_list = p; |
kadonotakashi | 0:8fdf9a60065b | 289 | object->apply_cf_list(list, 16); |
kadonotakashi | 0:8fdf9a60065b | 290 | |
kadonotakashi | 0:8fdf9a60065b | 291 | list[1] = 15; |
kadonotakashi | 0:8fdf9a60065b | 292 | object->get_phy_params().cflist_channel_cnt = 1; |
kadonotakashi | 0:8fdf9a60065b | 293 | object->apply_cf_list(list, 16); |
kadonotakashi | 0:8fdf9a60065b | 294 | } |
kadonotakashi | 0:8fdf9a60065b | 295 | |
kadonotakashi | 0:8fdf9a60065b | 296 | TEST_F(Test_LoRaPHY, get_next_ADR) |
kadonotakashi | 0:8fdf9a60065b | 297 | { |
kadonotakashi | 0:8fdf9a60065b | 298 | int8_t i = 0; |
kadonotakashi | 0:8fdf9a60065b | 299 | int8_t j = 0; |
kadonotakashi | 0:8fdf9a60065b | 300 | uint32_t ctr = 0; |
kadonotakashi | 0:8fdf9a60065b | 301 | object->get_phy_params().min_tx_datarate = 0; |
kadonotakashi | 0:8fdf9a60065b | 302 | EXPECT_TRUE(!object->get_next_ADR(false, i, j, ctr)); |
kadonotakashi | 0:8fdf9a60065b | 303 | |
kadonotakashi | 0:8fdf9a60065b | 304 | i = 1; |
kadonotakashi | 0:8fdf9a60065b | 305 | object->get_phy_params().adr_ack_limit = 3; |
kadonotakashi | 0:8fdf9a60065b | 306 | EXPECT_TRUE(!object->get_next_ADR(false, i, j, ctr)); |
kadonotakashi | 0:8fdf9a60065b | 307 | |
kadonotakashi | 0:8fdf9a60065b | 308 | object->get_phy_params().adr_ack_limit = 3; |
kadonotakashi | 0:8fdf9a60065b | 309 | ctr = 4; |
kadonotakashi | 0:8fdf9a60065b | 310 | object->get_phy_params().max_tx_power = 2; |
kadonotakashi | 0:8fdf9a60065b | 311 | object->get_phy_params().adr_ack_delay = 1; |
kadonotakashi | 0:8fdf9a60065b | 312 | EXPECT_TRUE(object->get_next_ADR(true, i, j, ctr)); |
kadonotakashi | 0:8fdf9a60065b | 313 | |
kadonotakashi | 0:8fdf9a60065b | 314 | ctr = 5; |
kadonotakashi | 0:8fdf9a60065b | 315 | object->get_phy_params().adr_ack_delay = 2; |
kadonotakashi | 0:8fdf9a60065b | 316 | EXPECT_TRUE(!object->get_next_ADR(true, i, j, ctr)); |
kadonotakashi | 0:8fdf9a60065b | 317 | } |
kadonotakashi | 0:8fdf9a60065b | 318 | |
kadonotakashi | 0:8fdf9a60065b | 319 | TEST_F(Test_LoRaPHY, rx_config) |
kadonotakashi | 0:8fdf9a60065b | 320 | { |
kadonotakashi | 0:8fdf9a60065b | 321 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 322 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 323 | uint8_t list; |
kadonotakashi | 0:8fdf9a60065b | 324 | object->get_phy_params().datarates.table = &list; |
kadonotakashi | 0:8fdf9a60065b | 325 | uint8_t list2; |
kadonotakashi | 0:8fdf9a60065b | 326 | object->get_phy_params().payloads_with_repeater.table = &list2; |
kadonotakashi | 0:8fdf9a60065b | 327 | rx_config_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 328 | p.datarate = 0; |
kadonotakashi | 0:8fdf9a60065b | 329 | p.rx_slot = RX_SLOT_WIN_1; |
kadonotakashi | 0:8fdf9a60065b | 330 | channel_params_t pp[1]; |
kadonotakashi | 0:8fdf9a60065b | 331 | object->get_phy_params().channels.channel_list = pp; |
kadonotakashi | 0:8fdf9a60065b | 332 | pp[0].rx1_frequency = 2; |
kadonotakashi | 0:8fdf9a60065b | 333 | p.channel = 0; |
kadonotakashi | 0:8fdf9a60065b | 334 | uint8_t tab[8]; |
kadonotakashi | 0:8fdf9a60065b | 335 | object->get_phy_params().payloads.table = tab; |
kadonotakashi | 0:8fdf9a60065b | 336 | object->get_phy_params().payloads_with_repeater.table = tab; |
kadonotakashi | 0:8fdf9a60065b | 337 | EXPECT_TRUE(object->rx_config(&p)); |
kadonotakashi | 0:8fdf9a60065b | 338 | |
kadonotakashi | 0:8fdf9a60065b | 339 | p.datarate = DR_7; |
kadonotakashi | 0:8fdf9a60065b | 340 | p.is_repeater_supported = true; |
kadonotakashi | 0:8fdf9a60065b | 341 | object->get_phy_params().fsk_supported = true; |
kadonotakashi | 0:8fdf9a60065b | 342 | EXPECT_TRUE(object->rx_config(&p)); |
kadonotakashi | 0:8fdf9a60065b | 343 | } |
kadonotakashi | 0:8fdf9a60065b | 344 | |
kadonotakashi | 0:8fdf9a60065b | 345 | TEST_F(Test_LoRaPHY, compute_rx_win_params) |
kadonotakashi | 0:8fdf9a60065b | 346 | { |
kadonotakashi | 0:8fdf9a60065b | 347 | uint32_t list[1]; |
kadonotakashi | 0:8fdf9a60065b | 348 | list[0] = 0; |
kadonotakashi | 0:8fdf9a60065b | 349 | object->get_phy_params().bandwidths.table = list; |
kadonotakashi | 0:8fdf9a60065b | 350 | uint8_t list2; |
kadonotakashi | 0:8fdf9a60065b | 351 | object->get_phy_params().datarates.table = &list2; |
kadonotakashi | 0:8fdf9a60065b | 352 | rx_config_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 353 | object->compute_rx_win_params(0, 0, 0, &p); |
kadonotakashi | 0:8fdf9a60065b | 354 | |
kadonotakashi | 0:8fdf9a60065b | 355 | p.datarate = 0; |
kadonotakashi | 0:8fdf9a60065b | 356 | list[0] = 125000; |
kadonotakashi | 0:8fdf9a60065b | 357 | object->compute_rx_win_params(0, 0, 0, &p); |
kadonotakashi | 0:8fdf9a60065b | 358 | |
kadonotakashi | 0:8fdf9a60065b | 359 | list[0] = 250000; |
kadonotakashi | 0:8fdf9a60065b | 360 | object->compute_rx_win_params(0, 0, 0, &p); |
kadonotakashi | 0:8fdf9a60065b | 361 | |
kadonotakashi | 0:8fdf9a60065b | 362 | list[0] = 500000; |
kadonotakashi | 0:8fdf9a60065b | 363 | object->get_phy_params().fsk_supported = true; |
kadonotakashi | 0:8fdf9a60065b | 364 | object->get_phy_params().max_rx_datarate = 0; |
kadonotakashi | 0:8fdf9a60065b | 365 | object->compute_rx_win_params(0, 0, 0, &p); |
kadonotakashi | 0:8fdf9a60065b | 366 | } |
kadonotakashi | 0:8fdf9a60065b | 367 | |
kadonotakashi | 0:8fdf9a60065b | 368 | TEST_F(Test_LoRaPHY, tx_config) |
kadonotakashi | 0:8fdf9a60065b | 369 | { |
kadonotakashi | 0:8fdf9a60065b | 370 | band_t b; |
kadonotakashi | 0:8fdf9a60065b | 371 | object->get_phy_params().bands.table = &b; |
kadonotakashi | 0:8fdf9a60065b | 372 | channel_params_t pp; |
kadonotakashi | 0:8fdf9a60065b | 373 | pp.band=0; |
kadonotakashi | 0:8fdf9a60065b | 374 | object->get_phy_params().channels.channel_list = &pp; |
kadonotakashi | 0:8fdf9a60065b | 375 | uint32_t list = 0; |
kadonotakashi | 0:8fdf9a60065b | 376 | object->get_phy_params().bandwidths.table = &list; |
kadonotakashi | 0:8fdf9a60065b | 377 | uint8_t list2; |
kadonotakashi | 0:8fdf9a60065b | 378 | object->get_phy_params().datarates.table = &list2; |
kadonotakashi | 0:8fdf9a60065b | 379 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 380 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 381 | tx_config_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 382 | p.channel=0; |
kadonotakashi | 0:8fdf9a60065b | 383 | int8_t i; |
kadonotakashi | 0:8fdf9a60065b | 384 | lorawan_time_t t; |
kadonotakashi | 0:8fdf9a60065b | 385 | object->tx_config(&p, &i, &t); |
kadonotakashi | 0:8fdf9a60065b | 386 | |
kadonotakashi | 0:8fdf9a60065b | 387 | p.datarate = 8; |
kadonotakashi | 0:8fdf9a60065b | 388 | object->get_phy_params().max_tx_datarate = 8; |
kadonotakashi | 0:8fdf9a60065b | 389 | object->tx_config(&p, &i, &t); |
kadonotakashi | 0:8fdf9a60065b | 390 | } |
kadonotakashi | 0:8fdf9a60065b | 391 | |
kadonotakashi | 0:8fdf9a60065b | 392 | TEST_F(Test_LoRaPHY, link_ADR_request) |
kadonotakashi | 0:8fdf9a60065b | 393 | { |
kadonotakashi | 0:8fdf9a60065b | 394 | adr_req_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 395 | uint8_t b[100]; |
kadonotakashi | 0:8fdf9a60065b | 396 | p.payload = b; |
kadonotakashi | 0:8fdf9a60065b | 397 | b[0] = 0x03; |
kadonotakashi | 0:8fdf9a60065b | 398 | b[1] = 1; |
kadonotakashi | 0:8fdf9a60065b | 399 | b[2] = 0; |
kadonotakashi | 0:8fdf9a60065b | 400 | b[3] = 0; |
kadonotakashi | 0:8fdf9a60065b | 401 | b[4] = 1 << 4; |
kadonotakashi | 0:8fdf9a60065b | 402 | b[5] = 0x03; |
kadonotakashi | 0:8fdf9a60065b | 403 | b[6] = 1; |
kadonotakashi | 0:8fdf9a60065b | 404 | b[7] = 1; |
kadonotakashi | 0:8fdf9a60065b | 405 | b[8] = 1; |
kadonotakashi | 0:8fdf9a60065b | 406 | b[9] = 6 << 4; |
kadonotakashi | 0:8fdf9a60065b | 407 | b[10] = 0x03; |
kadonotakashi | 0:8fdf9a60065b | 408 | b[11] = 1; |
kadonotakashi | 0:8fdf9a60065b | 409 | b[12] = 0xff; |
kadonotakashi | 0:8fdf9a60065b | 410 | b[13] = 0xff; |
kadonotakashi | 0:8fdf9a60065b | 411 | b[14] = 0; |
kadonotakashi | 0:8fdf9a60065b | 412 | b[15] = 0; |
kadonotakashi | 0:8fdf9a60065b | 413 | p.payload_size = 16; |
kadonotakashi | 0:8fdf9a60065b | 414 | int8_t i, j; |
kadonotakashi | 0:8fdf9a60065b | 415 | uint8_t k, l; |
kadonotakashi | 0:8fdf9a60065b | 416 | uint8_t t[5]; |
kadonotakashi | 0:8fdf9a60065b | 417 | t[0] = 0; |
kadonotakashi | 0:8fdf9a60065b | 418 | object->get_phy_params().datarates.size = 1; |
kadonotakashi | 0:8fdf9a60065b | 419 | object->get_phy_params().datarates.table = t; |
kadonotakashi | 0:8fdf9a60065b | 420 | //Test without ADR payload does not make sense here. |
kadonotakashi | 0:8fdf9a60065b | 421 | |
kadonotakashi | 0:8fdf9a60065b | 422 | object->get_phy_params().max_channel_cnt = 2; |
kadonotakashi | 0:8fdf9a60065b | 423 | channel_params_t li[4]; |
kadonotakashi | 0:8fdf9a60065b | 424 | object->get_phy_params().channels.channel_list = li; |
kadonotakashi | 0:8fdf9a60065b | 425 | li[0].frequency = 0; |
kadonotakashi | 0:8fdf9a60065b | 426 | li[1].frequency = 5; |
kadonotakashi | 0:8fdf9a60065b | 427 | EXPECT_TRUE(4 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 428 | |
kadonotakashi | 0:8fdf9a60065b | 429 | t[0] = 3; |
kadonotakashi | 0:8fdf9a60065b | 430 | //verify adr with p.adr_enabled = false |
kadonotakashi | 0:8fdf9a60065b | 431 | EXPECT_TRUE(0 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 432 | |
kadonotakashi | 0:8fdf9a60065b | 433 | p.current_nb_rep = 0; |
kadonotakashi | 0:8fdf9a60065b | 434 | EXPECT_TRUE(0 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 435 | |
kadonotakashi | 0:8fdf9a60065b | 436 | p.adr_enabled = true; |
kadonotakashi | 0:8fdf9a60065b | 437 | li[0].dr_range.value = 0xff; |
kadonotakashi | 0:8fdf9a60065b | 438 | object->get_phy_params().min_tx_datarate = DR_3; |
kadonotakashi | 0:8fdf9a60065b | 439 | object->get_phy_params().max_tx_datarate = DR_8; |
kadonotakashi | 0:8fdf9a60065b | 440 | |
kadonotakashi | 0:8fdf9a60065b | 441 | //verify adr with status != 0 |
kadonotakashi | 0:8fdf9a60065b | 442 | EXPECT_TRUE(0 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 443 | |
kadonotakashi | 0:8fdf9a60065b | 444 | object->get_phy_params().max_tx_power = 2; |
kadonotakashi | 0:8fdf9a60065b | 445 | object->get_phy_params().min_tx_power = 6; |
kadonotakashi | 0:8fdf9a60065b | 446 | //verify adr with status != 0 |
kadonotakashi | 0:8fdf9a60065b | 447 | EXPECT_TRUE(4 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 448 | |
kadonotakashi | 0:8fdf9a60065b | 449 | object->get_phy_params().min_tx_datarate = DR_0; |
kadonotakashi | 0:8fdf9a60065b | 450 | li[0].dr_range.value = 0xf0; |
kadonotakashi | 0:8fdf9a60065b | 451 | EXPECT_TRUE(6 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 452 | |
kadonotakashi | 0:8fdf9a60065b | 453 | li[1].dr_range.fields.min = DR_0; |
kadonotakashi | 0:8fdf9a60065b | 454 | li[1].dr_range.fields.max = DR_13; |
kadonotakashi | 0:8fdf9a60065b | 455 | b[4] = 6 << 4; |
kadonotakashi | 0:8fdf9a60065b | 456 | p.payload_size = 5; |
kadonotakashi | 0:8fdf9a60065b | 457 | EXPECT_TRUE(7 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 458 | |
kadonotakashi | 0:8fdf9a60065b | 459 | uint16_t mask[2]; |
kadonotakashi | 0:8fdf9a60065b | 460 | object->get_phy_params().channels.mask = mask; |
kadonotakashi | 0:8fdf9a60065b | 461 | object->get_phy_params().channels.mask_size = 2; |
kadonotakashi | 0:8fdf9a60065b | 462 | EXPECT_TRUE(7 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 463 | |
kadonotakashi | 0:8fdf9a60065b | 464 | li[0].dr_range.value = 0xff; |
kadonotakashi | 0:8fdf9a60065b | 465 | object->get_phy_params().max_channel_cnt = 0; |
kadonotakashi | 0:8fdf9a60065b | 466 | EXPECT_TRUE(5 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 467 | |
kadonotakashi | 0:8fdf9a60065b | 468 | b[0] = 0x03; |
kadonotakashi | 0:8fdf9a60065b | 469 | b[1] = 1; |
kadonotakashi | 0:8fdf9a60065b | 470 | b[2] = 0; |
kadonotakashi | 0:8fdf9a60065b | 471 | b[3] = 0; |
kadonotakashi | 0:8fdf9a60065b | 472 | b[4] = 0; |
kadonotakashi | 0:8fdf9a60065b | 473 | t[0] = 0; |
kadonotakashi | 0:8fdf9a60065b | 474 | object->get_phy_params().datarates.size = 1; |
kadonotakashi | 0:8fdf9a60065b | 475 | object->get_phy_params().datarates.table = t; |
kadonotakashi | 0:8fdf9a60065b | 476 | //Test without ADR payload does not make sense here. |
kadonotakashi | 0:8fdf9a60065b | 477 | |
kadonotakashi | 0:8fdf9a60065b | 478 | object->get_phy_params().max_channel_cnt = 2; |
kadonotakashi | 0:8fdf9a60065b | 479 | li[0].frequency = 0; |
kadonotakashi | 0:8fdf9a60065b | 480 | li[1].frequency = 5; |
kadonotakashi | 0:8fdf9a60065b | 481 | EXPECT_TRUE(4 == object->link_ADR_request(&p, &i, &j, &k, &l)); |
kadonotakashi | 0:8fdf9a60065b | 482 | } |
kadonotakashi | 0:8fdf9a60065b | 483 | |
kadonotakashi | 0:8fdf9a60065b | 484 | TEST_F(Test_LoRaPHY, accept_rx_param_setup_req) |
kadonotakashi | 0:8fdf9a60065b | 485 | { |
kadonotakashi | 0:8fdf9a60065b | 486 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 487 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 488 | rx_param_setup_req_t req; |
kadonotakashi | 0:8fdf9a60065b | 489 | EXPECT_TRUE(0 == object->accept_rx_param_setup_req(&req)); |
kadonotakashi | 0:8fdf9a60065b | 490 | } |
kadonotakashi | 0:8fdf9a60065b | 491 | |
kadonotakashi | 0:8fdf9a60065b | 492 | TEST_F(Test_LoRaPHY, accept_tx_param_setup_req) |
kadonotakashi | 0:8fdf9a60065b | 493 | { |
kadonotakashi | 0:8fdf9a60065b | 494 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 495 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 496 | object->get_phy_params().accept_tx_param_setup_req = true; |
kadonotakashi | 0:8fdf9a60065b | 497 | EXPECT_TRUE(object->accept_tx_param_setup_req(0, 0)); |
kadonotakashi | 0:8fdf9a60065b | 498 | } |
kadonotakashi | 0:8fdf9a60065b | 499 | |
kadonotakashi | 0:8fdf9a60065b | 500 | TEST_F(Test_LoRaPHY, dl_channel_request) |
kadonotakashi | 0:8fdf9a60065b | 501 | { |
kadonotakashi | 0:8fdf9a60065b | 502 | EXPECT_TRUE(0 == object->dl_channel_request(0, 0)); |
kadonotakashi | 0:8fdf9a60065b | 503 | |
kadonotakashi | 0:8fdf9a60065b | 504 | object->get_phy_params().dl_channel_req_supported = true; |
kadonotakashi | 0:8fdf9a60065b | 505 | object->get_phy_params().bands.size = 1; |
kadonotakashi | 0:8fdf9a60065b | 506 | band_t t[1]; |
kadonotakashi | 0:8fdf9a60065b | 507 | object->get_phy_params().bands.table = t; |
kadonotakashi | 0:8fdf9a60065b | 508 | channel_params_t p[4]; |
kadonotakashi | 0:8fdf9a60065b | 509 | object->get_phy_params().channels.channel_list = p; |
kadonotakashi | 0:8fdf9a60065b | 510 | |
kadonotakashi | 0:8fdf9a60065b | 511 | p[0].frequency = 0; |
kadonotakashi | 0:8fdf9a60065b | 512 | EXPECT_TRUE(0 == object->dl_channel_request(0, 1)); |
kadonotakashi | 0:8fdf9a60065b | 513 | |
kadonotakashi | 0:8fdf9a60065b | 514 | t[0].higher_band_freq = 19; |
kadonotakashi | 0:8fdf9a60065b | 515 | t[0].lower_band_freq = 0; |
kadonotakashi | 0:8fdf9a60065b | 516 | p[0].frequency = 1; |
kadonotakashi | 0:8fdf9a60065b | 517 | EXPECT_TRUE(3 == object->dl_channel_request(0, 1)); |
kadonotakashi | 0:8fdf9a60065b | 518 | } |
kadonotakashi | 0:8fdf9a60065b | 519 | |
kadonotakashi | 0:8fdf9a60065b | 520 | TEST_F(Test_LoRaPHY, get_alternate_DR) |
kadonotakashi | 0:8fdf9a60065b | 521 | { |
kadonotakashi | 0:8fdf9a60065b | 522 | EXPECT_TRUE(0 == object->get_alternate_DR(0)); |
kadonotakashi | 0:8fdf9a60065b | 523 | |
kadonotakashi | 0:8fdf9a60065b | 524 | object->get_phy_params().default_max_datarate = 5; |
kadonotakashi | 0:8fdf9a60065b | 525 | object->get_phy_params().min_tx_datarate = 4; |
kadonotakashi | 0:8fdf9a60065b | 526 | EXPECT_TRUE(5 == object->get_alternate_DR(1)); |
kadonotakashi | 0:8fdf9a60065b | 527 | |
kadonotakashi | 0:8fdf9a60065b | 528 | object->get_phy_params().default_max_datarate = 6; |
kadonotakashi | 0:8fdf9a60065b | 529 | object->get_phy_params().min_tx_datarate = 4; |
kadonotakashi | 0:8fdf9a60065b | 530 | EXPECT_TRUE(5 == object->get_alternate_DR(2)); |
kadonotakashi | 0:8fdf9a60065b | 531 | } |
kadonotakashi | 0:8fdf9a60065b | 532 | |
kadonotakashi | 0:8fdf9a60065b | 533 | TEST_F(Test_LoRaPHY, set_next_channel) |
kadonotakashi | 0:8fdf9a60065b | 534 | { |
kadonotakashi | 0:8fdf9a60065b | 535 | channel_selection_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 536 | uint8_t ch; |
kadonotakashi | 0:8fdf9a60065b | 537 | lorawan_time_t t1; |
kadonotakashi | 0:8fdf9a60065b | 538 | lorawan_time_t t2; |
kadonotakashi | 0:8fdf9a60065b | 539 | p.aggregate_timeoff = 10000; |
kadonotakashi | 0:8fdf9a60065b | 540 | EXPECT_TRUE(LORAWAN_STATUS_DUTYCYCLE_RESTRICTED == object->set_next_channel(&p, &ch, &t1, &t2)); |
kadonotakashi | 0:8fdf9a60065b | 541 | |
kadonotakashi | 0:8fdf9a60065b | 542 | uint16_t list[16]; |
kadonotakashi | 0:8fdf9a60065b | 543 | list[4] = 1; |
kadonotakashi | 0:8fdf9a60065b | 544 | memcpy(list, "\0", 16); |
kadonotakashi | 0:8fdf9a60065b | 545 | object->get_phy_params().channels.mask = list; |
kadonotakashi | 0:8fdf9a60065b | 546 | object->get_phy_params().channels.mask_size = 1; |
kadonotakashi | 0:8fdf9a60065b | 547 | p.aggregate_timeoff = 10000; |
kadonotakashi | 0:8fdf9a60065b | 548 | EXPECT_TRUE(LORAWAN_STATUS_DUTYCYCLE_RESTRICTED == object->set_next_channel(&p, &ch, &t1, &t2)); |
kadonotakashi | 0:8fdf9a60065b | 549 | |
kadonotakashi | 0:8fdf9a60065b | 550 | LoRaWANTimer_stub::time_value = 20000; |
kadonotakashi | 0:8fdf9a60065b | 551 | EXPECT_TRUE(LORAWAN_STATUS_NO_CHANNEL_FOUND == object->set_next_channel(&p, &ch, &t1, &t2)); |
kadonotakashi | 0:8fdf9a60065b | 552 | |
kadonotakashi | 0:8fdf9a60065b | 553 | p.joined = false; |
kadonotakashi | 0:8fdf9a60065b | 554 | p.dc_enabled = false; |
kadonotakashi | 0:8fdf9a60065b | 555 | band_t b[4]; |
kadonotakashi | 0:8fdf9a60065b | 556 | object->get_phy_params().bands.size = 2; |
kadonotakashi | 0:8fdf9a60065b | 557 | object->get_phy_params().bands.table = &b; |
kadonotakashi | 0:8fdf9a60065b | 558 | b[0].off_time = 0; |
kadonotakashi | 0:8fdf9a60065b | 559 | b[1].off_time = 9999999; |
kadonotakashi | 0:8fdf9a60065b | 560 | list[4] = 0; |
kadonotakashi | 0:8fdf9a60065b | 561 | object->get_phy_params().channels.mask_size = 128; |
kadonotakashi | 0:8fdf9a60065b | 562 | p.current_datarate = DR_1; |
kadonotakashi | 0:8fdf9a60065b | 563 | object->get_phy_params().max_channel_cnt = 4; |
kadonotakashi | 0:8fdf9a60065b | 564 | EXPECT_TRUE(LORAWAN_STATUS_NO_CHANNEL_FOUND == object->set_next_channel(&p, &ch, &t1, &t2)); |
kadonotakashi | 0:8fdf9a60065b | 565 | |
kadonotakashi | 0:8fdf9a60065b | 566 | p.dc_enabled = true; |
kadonotakashi | 0:8fdf9a60065b | 567 | EXPECT_TRUE(LORAWAN_STATUS_NO_CHANNEL_FOUND == object->set_next_channel(&p, &ch, &t1, &t2)); |
kadonotakashi | 0:8fdf9a60065b | 568 | |
kadonotakashi | 0:8fdf9a60065b | 569 | list[4] = 1; |
kadonotakashi | 0:8fdf9a60065b | 570 | p.joined = true; |
kadonotakashi | 0:8fdf9a60065b | 571 | p.dc_enabled = false; |
kadonotakashi | 0:8fdf9a60065b | 572 | channel_params_t l[4]; |
kadonotakashi | 0:8fdf9a60065b | 573 | l[0].dr_range.value = 0xff; |
kadonotakashi | 0:8fdf9a60065b | 574 | l[1].dr_range.value = 0xff; |
kadonotakashi | 0:8fdf9a60065b | 575 | l[2].dr_range.value = 0xf0; |
kadonotakashi | 0:8fdf9a60065b | 576 | l[3].dr_range.value = 0xf0; |
kadonotakashi | 0:8fdf9a60065b | 577 | l[2].band = 2; |
kadonotakashi | 0:8fdf9a60065b | 578 | l[3].band = 3; |
kadonotakashi | 0:8fdf9a60065b | 579 | object->get_phy_params().channels.channel_list = l; |
kadonotakashi | 0:8fdf9a60065b | 580 | list[0] = 0xFF; |
kadonotakashi | 0:8fdf9a60065b | 581 | b[2].off_time = 9999999; |
kadonotakashi | 0:8fdf9a60065b | 582 | b[3].off_time = 0; |
kadonotakashi | 0:8fdf9a60065b | 583 | EXPECT_TRUE(LORAWAN_STATUS_OK == object->set_next_channel(&p, &ch, &t1, &t2)); |
kadonotakashi | 0:8fdf9a60065b | 584 | |
kadonotakashi | 0:8fdf9a60065b | 585 | b[0].off_time = 10000; |
kadonotakashi | 0:8fdf9a60065b | 586 | LoRaWANTimer_stub::time_value = 2000; |
kadonotakashi | 0:8fdf9a60065b | 587 | p.aggregate_timeoff = 1000; |
kadonotakashi | 0:8fdf9a60065b | 588 | p.dc_enabled = true; |
kadonotakashi | 0:8fdf9a60065b | 589 | EXPECT_TRUE(LORAWAN_STATUS_OK == object->set_next_channel(&p, &ch, &t1, &t2)); |
kadonotakashi | 0:8fdf9a60065b | 590 | } |
kadonotakashi | 0:8fdf9a60065b | 591 | |
kadonotakashi | 0:8fdf9a60065b | 592 | TEST_F(Test_LoRaPHY, add_channel) |
kadonotakashi | 0:8fdf9a60065b | 593 | { |
kadonotakashi | 0:8fdf9a60065b | 594 | uint16_t list[16]; |
kadonotakashi | 0:8fdf9a60065b | 595 | object->get_phy_params().channels.mask = list; |
kadonotakashi | 0:8fdf9a60065b | 596 | object->get_phy_params().channels.default_mask = list; |
kadonotakashi | 0:8fdf9a60065b | 597 | channel_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 598 | EXPECT_TRUE(LORAWAN_STATUS_PARAMETER_INVALID == object->add_channel(&p, 0)); |
kadonotakashi | 0:8fdf9a60065b | 599 | |
kadonotakashi | 0:8fdf9a60065b | 600 | object->get_phy_params().custom_channelplans_supported = true; |
kadonotakashi | 0:8fdf9a60065b | 601 | object->get_phy_params().max_channel_cnt = 2; |
kadonotakashi | 0:8fdf9a60065b | 602 | object->get_phy_params().min_tx_datarate = 0; |
kadonotakashi | 0:8fdf9a60065b | 603 | object->get_phy_params().max_tx_datarate = 13; |
kadonotakashi | 0:8fdf9a60065b | 604 | p.dr_range.fields.min = 6; |
kadonotakashi | 0:8fdf9a60065b | 605 | p.dr_range.fields.max = 1; |
kadonotakashi | 0:8fdf9a60065b | 606 | EXPECT_TRUE(LORAWAN_STATUS_FREQ_AND_DR_INVALID == object->add_channel(&p, 0)); |
kadonotakashi | 0:8fdf9a60065b | 607 | } |
kadonotakashi | 0:8fdf9a60065b | 608 | |
kadonotakashi | 0:8fdf9a60065b | 609 | TEST_F(Test_LoRaPHY, remove_channel) |
kadonotakashi | 0:8fdf9a60065b | 610 | { |
kadonotakashi | 0:8fdf9a60065b | 611 | channel_params_t pp; |
kadonotakashi | 0:8fdf9a60065b | 612 | pp.band=0; |
kadonotakashi | 0:8fdf9a60065b | 613 | object->get_phy_params().channels.channel_list = &pp; |
kadonotakashi | 0:8fdf9a60065b | 614 | uint16_t list[16]; |
kadonotakashi | 0:8fdf9a60065b | 615 | list[0] = 1; |
kadonotakashi | 0:8fdf9a60065b | 616 | object->get_phy_params().channels.mask = list; |
kadonotakashi | 0:8fdf9a60065b | 617 | object->get_phy_params().channels.default_mask = list; |
kadonotakashi | 0:8fdf9a60065b | 618 | EXPECT_TRUE(false == object->remove_channel(0)); |
kadonotakashi | 0:8fdf9a60065b | 619 | |
kadonotakashi | 0:8fdf9a60065b | 620 | list[0] = 0; |
kadonotakashi | 0:8fdf9a60065b | 621 | EXPECT_TRUE(false == object->remove_channel(0)); |
kadonotakashi | 0:8fdf9a60065b | 622 | |
kadonotakashi | 0:8fdf9a60065b | 623 | object->get_phy_params().channels.mask_size = 1; |
kadonotakashi | 0:8fdf9a60065b | 624 | object->get_phy_params().max_channel_cnt = 0; |
kadonotakashi | 0:8fdf9a60065b | 625 | EXPECT_TRUE(false == object->remove_channel(0)); |
kadonotakashi | 0:8fdf9a60065b | 626 | |
kadonotakashi | 0:8fdf9a60065b | 627 | object->get_phy_params().max_channel_cnt = 1; |
kadonotakashi | 0:8fdf9a60065b | 628 | EXPECT_TRUE(true == object->remove_channel(0)); |
kadonotakashi | 0:8fdf9a60065b | 629 | } |
kadonotakashi | 0:8fdf9a60065b | 630 | |
kadonotakashi | 0:8fdf9a60065b | 631 | TEST_F(Test_LoRaPHY, set_tx_cont_mode) |
kadonotakashi | 0:8fdf9a60065b | 632 | { |
kadonotakashi | 0:8fdf9a60065b | 633 | channel_params_t pp; |
kadonotakashi | 0:8fdf9a60065b | 634 | pp.band=0; |
kadonotakashi | 0:8fdf9a60065b | 635 | object->get_phy_params().channels.channel_list = &pp; |
kadonotakashi | 0:8fdf9a60065b | 636 | band_t b; |
kadonotakashi | 0:8fdf9a60065b | 637 | object->get_phy_params().bands.table = &b; |
kadonotakashi | 0:8fdf9a60065b | 638 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 639 | object->set_radio_instance(radio); |
kadonotakashi | 0:8fdf9a60065b | 640 | |
kadonotakashi | 0:8fdf9a60065b | 641 | cw_mode_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 642 | p.max_eirp = 0; |
kadonotakashi | 0:8fdf9a60065b | 643 | p.channel=0; |
kadonotakashi | 0:8fdf9a60065b | 644 | object->set_tx_cont_mode(&p); |
kadonotakashi | 0:8fdf9a60065b | 645 | |
kadonotakashi | 0:8fdf9a60065b | 646 | p.max_eirp = 1; |
kadonotakashi | 0:8fdf9a60065b | 647 | p.antenna_gain = 1; |
kadonotakashi | 0:8fdf9a60065b | 648 | object->set_tx_cont_mode(&p, 1); |
kadonotakashi | 0:8fdf9a60065b | 649 | } |
kadonotakashi | 0:8fdf9a60065b | 650 | |
kadonotakashi | 0:8fdf9a60065b | 651 | TEST_F(Test_LoRaPHY, apply_DR_offset) |
kadonotakashi | 0:8fdf9a60065b | 652 | { |
kadonotakashi | 0:8fdf9a60065b | 653 | EXPECT_TRUE(0 == object->apply_DR_offset(0, 0)); |
kadonotakashi | 0:8fdf9a60065b | 654 | |
kadonotakashi | 0:8fdf9a60065b | 655 | object->get_phy_params().min_tx_datarate = 1; |
kadonotakashi | 0:8fdf9a60065b | 656 | EXPECT_TRUE(1 == object->apply_DR_offset(0, 2)); |
kadonotakashi | 0:8fdf9a60065b | 657 | } |
kadonotakashi | 0:8fdf9a60065b | 658 | |
kadonotakashi | 0:8fdf9a60065b | 659 | TEST_F(Test_LoRaPHY, reset_to_default_values) |
kadonotakashi | 0:8fdf9a60065b | 660 | { |
kadonotakashi | 0:8fdf9a60065b | 661 | loramac_protocol_params p; |
kadonotakashi | 0:8fdf9a60065b | 662 | object->reset_to_default_values(&p); |
kadonotakashi | 0:8fdf9a60065b | 663 | |
kadonotakashi | 0:8fdf9a60065b | 664 | object->reset_to_default_values(&p, true); |
kadonotakashi | 0:8fdf9a60065b | 665 | } |
kadonotakashi | 0:8fdf9a60065b | 666 | |
kadonotakashi | 0:8fdf9a60065b | 667 | TEST_F(Test_LoRaPHY, get_next_lower_tx_datarate) |
kadonotakashi | 0:8fdf9a60065b | 668 | { |
kadonotakashi | 0:8fdf9a60065b | 669 | EXPECT_TRUE(DR_0 == object->get_next_lower_tx_datarate(DR_2)); |
kadonotakashi | 0:8fdf9a60065b | 670 | |
kadonotakashi | 0:8fdf9a60065b | 671 | object->get_phy_params().ul_dwell_time_setting = 1; |
kadonotakashi | 0:8fdf9a60065b | 672 | object->get_phy_params().dwell_limit_datarate = DR_1; |
kadonotakashi | 0:8fdf9a60065b | 673 | EXPECT_TRUE(DR_1 == object->get_next_lower_tx_datarate(DR_2)); |
kadonotakashi | 0:8fdf9a60065b | 674 | } |
kadonotakashi | 0:8fdf9a60065b | 675 | |
kadonotakashi | 0:8fdf9a60065b | 676 | TEST_F(Test_LoRaPHY, get_minimum_rx_datarate) |
kadonotakashi | 0:8fdf9a60065b | 677 | { |
kadonotakashi | 0:8fdf9a60065b | 678 | EXPECT_TRUE(DR_0 == object->get_minimum_rx_datarate()); |
kadonotakashi | 0:8fdf9a60065b | 679 | |
kadonotakashi | 0:8fdf9a60065b | 680 | object->get_phy_params().dl_dwell_time_setting = 1; |
kadonotakashi | 0:8fdf9a60065b | 681 | object->get_phy_params().dwell_limit_datarate = DR_1; |
kadonotakashi | 0:8fdf9a60065b | 682 | EXPECT_TRUE(DR_1 == object->get_minimum_rx_datarate()); |
kadonotakashi | 0:8fdf9a60065b | 683 | } |
kadonotakashi | 0:8fdf9a60065b | 684 | |
kadonotakashi | 0:8fdf9a60065b | 685 | TEST_F(Test_LoRaPHY, get_minimum_tx_datarate) |
kadonotakashi | 0:8fdf9a60065b | 686 | { |
kadonotakashi | 0:8fdf9a60065b | 687 | EXPECT_TRUE(DR_0 == object->get_minimum_tx_datarate()); |
kadonotakashi | 0:8fdf9a60065b | 688 | |
kadonotakashi | 0:8fdf9a60065b | 689 | object->get_phy_params().ul_dwell_time_setting = 1; |
kadonotakashi | 0:8fdf9a60065b | 690 | object->get_phy_params().dwell_limit_datarate = DR_1; |
kadonotakashi | 0:8fdf9a60065b | 691 | EXPECT_TRUE(DR_1 == object->get_minimum_tx_datarate()); |
kadonotakashi | 0:8fdf9a60065b | 692 | } |
kadonotakashi | 0:8fdf9a60065b | 693 | |
kadonotakashi | 0:8fdf9a60065b | 694 | TEST_F(Test_LoRaPHY, get_default_tx_datarate) |
kadonotakashi | 0:8fdf9a60065b | 695 | { |
kadonotakashi | 0:8fdf9a60065b | 696 | EXPECT_TRUE(0 == object->get_default_tx_datarate()); |
kadonotakashi | 0:8fdf9a60065b | 697 | } |
kadonotakashi | 0:8fdf9a60065b | 698 | |
kadonotakashi | 0:8fdf9a60065b | 699 | TEST_F(Test_LoRaPHY, get_default_max_tx_datarate) |
kadonotakashi | 0:8fdf9a60065b | 700 | { |
kadonotakashi | 0:8fdf9a60065b | 701 | EXPECT_TRUE(DR_0 == object->get_default_max_tx_datarate()); |
kadonotakashi | 0:8fdf9a60065b | 702 | } |
kadonotakashi | 0:8fdf9a60065b | 703 | |
kadonotakashi | 0:8fdf9a60065b | 704 | TEST_F(Test_LoRaPHY, get_default_tx_power) |
kadonotakashi | 0:8fdf9a60065b | 705 | { |
kadonotakashi | 0:8fdf9a60065b | 706 | EXPECT_TRUE(0 == object->get_default_tx_power()); |
kadonotakashi | 0:8fdf9a60065b | 707 | } |
kadonotakashi | 0:8fdf9a60065b | 708 | |
kadonotakashi | 0:8fdf9a60065b | 709 | TEST_F(Test_LoRaPHY, get_max_payload) |
kadonotakashi | 0:8fdf9a60065b | 710 | { |
kadonotakashi | 0:8fdf9a60065b | 711 | uint8_t list=8; |
kadonotakashi | 0:8fdf9a60065b | 712 | object->get_phy_params().payloads.table = &list; |
kadonotakashi | 0:8fdf9a60065b | 713 | object->get_phy_params().payloads_with_repeater.table = &list; |
kadonotakashi | 0:8fdf9a60065b | 714 | EXPECT_TRUE(8 == object->get_max_payload(0)); |
kadonotakashi | 0:8fdf9a60065b | 715 | |
kadonotakashi | 0:8fdf9a60065b | 716 | EXPECT_TRUE(8 == object->get_max_payload(0, true)); |
kadonotakashi | 0:8fdf9a60065b | 717 | } |
kadonotakashi | 0:8fdf9a60065b | 718 | |
kadonotakashi | 0:8fdf9a60065b | 719 | TEST_F(Test_LoRaPHY, get_maximum_frame_counter_gap) |
kadonotakashi | 0:8fdf9a60065b | 720 | { |
kadonotakashi | 0:8fdf9a60065b | 721 | EXPECT_TRUE(0 == object->get_maximum_frame_counter_gap()); |
kadonotakashi | 0:8fdf9a60065b | 722 | } |
kadonotakashi | 0:8fdf9a60065b | 723 | |
kadonotakashi | 0:8fdf9a60065b | 724 | TEST_F(Test_LoRaPHY, get_ack_timeout) |
kadonotakashi | 0:8fdf9a60065b | 725 | { |
kadonotakashi | 0:8fdf9a60065b | 726 | EXPECT_TRUE(0 == object->get_ack_timeout()); |
kadonotakashi | 0:8fdf9a60065b | 727 | } |
kadonotakashi | 0:8fdf9a60065b | 728 | |
kadonotakashi | 0:8fdf9a60065b | 729 | TEST_F(Test_LoRaPHY, get_default_rx2_frequency) |
kadonotakashi | 0:8fdf9a60065b | 730 | { |
kadonotakashi | 0:8fdf9a60065b | 731 | EXPECT_TRUE(0 == object->get_default_rx2_frequency()); |
kadonotakashi | 0:8fdf9a60065b | 732 | } |
kadonotakashi | 0:8fdf9a60065b | 733 | |
kadonotakashi | 0:8fdf9a60065b | 734 | TEST_F(Test_LoRaPHY, get_default_rx2_datarate) |
kadonotakashi | 0:8fdf9a60065b | 735 | { |
kadonotakashi | 0:8fdf9a60065b | 736 | EXPECT_TRUE(0 == object->get_default_rx2_datarate()); |
kadonotakashi | 0:8fdf9a60065b | 737 | } |
kadonotakashi | 0:8fdf9a60065b | 738 | |
kadonotakashi | 0:8fdf9a60065b | 739 | TEST_F(Test_LoRaPHY, get_channel_mask) |
kadonotakashi | 0:8fdf9a60065b | 740 | { |
kadonotakashi | 0:8fdf9a60065b | 741 | EXPECT_TRUE(0 == object->get_channel_mask()); |
kadonotakashi | 0:8fdf9a60065b | 742 | EXPECT_TRUE(0 == object->get_channel_mask(true)); |
kadonotakashi | 0:8fdf9a60065b | 743 | } |
kadonotakashi | 0:8fdf9a60065b | 744 | |
kadonotakashi | 0:8fdf9a60065b | 745 | TEST_F(Test_LoRaPHY, get_max_nb_channels) |
kadonotakashi | 0:8fdf9a60065b | 746 | { |
kadonotakashi | 0:8fdf9a60065b | 747 | EXPECT_TRUE(0 == object->get_max_nb_channels()); |
kadonotakashi | 0:8fdf9a60065b | 748 | } |
kadonotakashi | 0:8fdf9a60065b | 749 | |
kadonotakashi | 0:8fdf9a60065b | 750 | TEST_F(Test_LoRaPHY, get_phy_channels) |
kadonotakashi | 0:8fdf9a60065b | 751 | { |
kadonotakashi | 0:8fdf9a60065b | 752 | EXPECT_TRUE(0 == object->get_phy_channels()); |
kadonotakashi | 0:8fdf9a60065b | 753 | } |
kadonotakashi | 0:8fdf9a60065b | 754 | |
kadonotakashi | 0:8fdf9a60065b | 755 | TEST_F(Test_LoRaPHY, is_custom_channel_plan_supported) |
kadonotakashi | 0:8fdf9a60065b | 756 | { |
kadonotakashi | 0:8fdf9a60065b | 757 | EXPECT_TRUE(false == object->is_custom_channel_plan_supported()); |
kadonotakashi | 0:8fdf9a60065b | 758 | } |
kadonotakashi | 0:8fdf9a60065b | 759 | |
kadonotakashi | 0:8fdf9a60065b | 760 | TEST_F(Test_LoRaPHY, verify_rx_datarate) |
kadonotakashi | 0:8fdf9a60065b | 761 | { |
kadonotakashi | 0:8fdf9a60065b | 762 | EXPECT_TRUE(false == object->verify_rx_datarate(0)); |
kadonotakashi | 0:8fdf9a60065b | 763 | |
kadonotakashi | 0:8fdf9a60065b | 764 | object->get_phy_params().datarates.size = 1; |
kadonotakashi | 0:8fdf9a60065b | 765 | uint8_t t[1]; |
kadonotakashi | 0:8fdf9a60065b | 766 | t[0] = 2; |
kadonotakashi | 0:8fdf9a60065b | 767 | object->get_phy_params().datarates.table = t; |
kadonotakashi | 0:8fdf9a60065b | 768 | object->get_phy_params().dl_dwell_time_setting = 0; |
kadonotakashi | 0:8fdf9a60065b | 769 | |
kadonotakashi | 0:8fdf9a60065b | 770 | EXPECT_TRUE(true == object->verify_rx_datarate(0)); |
kadonotakashi | 0:8fdf9a60065b | 771 | |
kadonotakashi | 0:8fdf9a60065b | 772 | object->get_phy_params().dl_dwell_time_setting = 1; |
kadonotakashi | 0:8fdf9a60065b | 773 | object->get_phy_params().min_rx_datarate = 0; |
kadonotakashi | 0:8fdf9a60065b | 774 | |
kadonotakashi | 0:8fdf9a60065b | 775 | EXPECT_TRUE(true == object->verify_rx_datarate(0)); |
kadonotakashi | 0:8fdf9a60065b | 776 | } |
kadonotakashi | 0:8fdf9a60065b | 777 | |
kadonotakashi | 0:8fdf9a60065b | 778 | TEST_F(Test_LoRaPHY, verify_tx_datarate) |
kadonotakashi | 0:8fdf9a60065b | 779 | { |
kadonotakashi | 0:8fdf9a60065b | 780 | EXPECT_TRUE(false == object->verify_tx_datarate(0)); |
kadonotakashi | 0:8fdf9a60065b | 781 | |
kadonotakashi | 0:8fdf9a60065b | 782 | object->get_phy_params().datarates.size = 1; |
kadonotakashi | 0:8fdf9a60065b | 783 | uint8_t t[1]; |
kadonotakashi | 0:8fdf9a60065b | 784 | t[0] = 2; |
kadonotakashi | 0:8fdf9a60065b | 785 | object->get_phy_params().datarates.table = t; |
kadonotakashi | 0:8fdf9a60065b | 786 | object->get_phy_params().ul_dwell_time_setting = 0; |
kadonotakashi | 0:8fdf9a60065b | 787 | EXPECT_TRUE(true == object->verify_tx_datarate(0)); |
kadonotakashi | 0:8fdf9a60065b | 788 | |
kadonotakashi | 0:8fdf9a60065b | 789 | object->get_phy_params().ul_dwell_time_setting = 1; |
kadonotakashi | 0:8fdf9a60065b | 790 | EXPECT_TRUE(true == object->verify_tx_datarate(0)); |
kadonotakashi | 0:8fdf9a60065b | 791 | |
kadonotakashi | 0:8fdf9a60065b | 792 | object->get_phy_params().ul_dwell_time_setting = 1; |
kadonotakashi | 0:8fdf9a60065b | 793 | EXPECT_TRUE(true == object->verify_tx_datarate(0, true)); |
kadonotakashi | 0:8fdf9a60065b | 794 | } |
kadonotakashi | 0:8fdf9a60065b | 795 | |
kadonotakashi | 0:8fdf9a60065b | 796 | TEST_F(Test_LoRaPHY, verify_tx_power) |
kadonotakashi | 0:8fdf9a60065b | 797 | { |
kadonotakashi | 0:8fdf9a60065b | 798 | EXPECT_TRUE(true == object->verify_tx_power(0)); |
kadonotakashi | 0:8fdf9a60065b | 799 | } |
kadonotakashi | 0:8fdf9a60065b | 800 | |
kadonotakashi | 0:8fdf9a60065b | 801 | TEST_F(Test_LoRaPHY, verify_duty_cycle) |
kadonotakashi | 0:8fdf9a60065b | 802 | { |
kadonotakashi | 0:8fdf9a60065b | 803 | EXPECT_TRUE(true == object->verify_duty_cycle(false)); |
kadonotakashi | 0:8fdf9a60065b | 804 | |
kadonotakashi | 0:8fdf9a60065b | 805 | EXPECT_TRUE(false == object->verify_duty_cycle(true)); |
kadonotakashi | 0:8fdf9a60065b | 806 | } |
kadonotakashi | 0:8fdf9a60065b | 807 | |
kadonotakashi | 0:8fdf9a60065b | 808 | TEST_F(Test_LoRaPHY, verify_nb_join_trials) |
kadonotakashi | 0:8fdf9a60065b | 809 | { |
kadonotakashi | 0:8fdf9a60065b | 810 | EXPECT_TRUE(false == object->verify_nb_join_trials(0)); |
kadonotakashi | 0:8fdf9a60065b | 811 | EXPECT_TRUE(true == object->verify_nb_join_trials(100)); |
kadonotakashi | 0:8fdf9a60065b | 812 | } |
kadonotakashi | 0:8fdf9a60065b | 813 | |
kadonotakashi | 0:8fdf9a60065b | 814 |