![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466
mbed-os/UNITTESTS/features/lorawan/loraphycn470/Test_LoRaPHYCN470.cpp@0:8fdf9a60065b, 2018-10-10 (annotated)
- Committer:
- kadonotakashi
- Date:
- Wed Oct 10 00:33:53 2018 +0000
- Revision:
- 0:8fdf9a60065b
how to make mbed librry
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 "LoRaPHYCN470.h" |
kadonotakashi | 0:8fdf9a60065b | 20 | |
kadonotakashi | 0:8fdf9a60065b | 21 | #include "LoRaPHY_stub.h" |
kadonotakashi | 0:8fdf9a60065b | 22 | |
kadonotakashi | 0:8fdf9a60065b | 23 | class my_radio : public LoRaRadio |
kadonotakashi | 0:8fdf9a60065b | 24 | { |
kadonotakashi | 0:8fdf9a60065b | 25 | public: |
kadonotakashi | 0:8fdf9a60065b | 26 | |
kadonotakashi | 0:8fdf9a60065b | 27 | virtual void init_radio(radio_events_t *events){}; |
kadonotakashi | 0:8fdf9a60065b | 28 | |
kadonotakashi | 0:8fdf9a60065b | 29 | virtual void radio_reset(){}; |
kadonotakashi | 0:8fdf9a60065b | 30 | |
kadonotakashi | 0:8fdf9a60065b | 31 | virtual void sleep(void){}; |
kadonotakashi | 0:8fdf9a60065b | 32 | |
kadonotakashi | 0:8fdf9a60065b | 33 | virtual void standby(void){}; |
kadonotakashi | 0:8fdf9a60065b | 34 | |
kadonotakashi | 0:8fdf9a60065b | 35 | virtual void set_rx_config (radio_modems_t modem, uint32_t bandwidth, |
kadonotakashi | 0:8fdf9a60065b | 36 | uint32_t datarate, uint8_t coderate, |
kadonotakashi | 0:8fdf9a60065b | 37 | uint32_t bandwidth_afc, uint16_t preamble_len, |
kadonotakashi | 0:8fdf9a60065b | 38 | uint16_t symb_timeout, bool fix_len, |
kadonotakashi | 0:8fdf9a60065b | 39 | uint8_t payload_len, |
kadonotakashi | 0:8fdf9a60065b | 40 | bool crc_on, bool freq_hop_on, uint8_t hop_period, |
kadonotakashi | 0:8fdf9a60065b | 41 | bool iq_inverted, bool rx_continuous){}; |
kadonotakashi | 0:8fdf9a60065b | 42 | |
kadonotakashi | 0:8fdf9a60065b | 43 | virtual void set_tx_config(radio_modems_t modem, int8_t power, uint32_t fdev, |
kadonotakashi | 0:8fdf9a60065b | 44 | uint32_t bandwidth, uint32_t datarate, |
kadonotakashi | 0:8fdf9a60065b | 45 | uint8_t coderate, uint16_t preamble_len, |
kadonotakashi | 0:8fdf9a60065b | 46 | bool fix_len, bool crc_on, bool freq_hop_on, |
kadonotakashi | 0:8fdf9a60065b | 47 | uint8_t hop_period, bool iq_inverted, uint32_t timeout){}; |
kadonotakashi | 0:8fdf9a60065b | 48 | |
kadonotakashi | 0:8fdf9a60065b | 49 | virtual void send(uint8_t *buffer, uint8_t size){}; |
kadonotakashi | 0:8fdf9a60065b | 50 | |
kadonotakashi | 0:8fdf9a60065b | 51 | virtual void receive(void){}; |
kadonotakashi | 0:8fdf9a60065b | 52 | |
kadonotakashi | 0:8fdf9a60065b | 53 | virtual void set_channel(uint32_t freq){}; |
kadonotakashi | 0:8fdf9a60065b | 54 | |
kadonotakashi | 0:8fdf9a60065b | 55 | virtual uint32_t random(void){}; |
kadonotakashi | 0:8fdf9a60065b | 56 | |
kadonotakashi | 0:8fdf9a60065b | 57 | virtual uint8_t get_status(void){return uint8_value;}; |
kadonotakashi | 0:8fdf9a60065b | 58 | |
kadonotakashi | 0:8fdf9a60065b | 59 | virtual void set_max_payload_length(radio_modems_t modem, uint8_t max){}; |
kadonotakashi | 0:8fdf9a60065b | 60 | |
kadonotakashi | 0:8fdf9a60065b | 61 | virtual void set_public_network(bool enable){}; |
kadonotakashi | 0:8fdf9a60065b | 62 | |
kadonotakashi | 0:8fdf9a60065b | 63 | virtual uint32_t time_on_air(radio_modems_t modem, uint8_t pkt_len){}; |
kadonotakashi | 0:8fdf9a60065b | 64 | |
kadonotakashi | 0:8fdf9a60065b | 65 | virtual bool perform_carrier_sense(radio_modems_t modem, |
kadonotakashi | 0:8fdf9a60065b | 66 | uint32_t freq, |
kadonotakashi | 0:8fdf9a60065b | 67 | int16_t rssi_threshold, |
kadonotakashi | 0:8fdf9a60065b | 68 | uint32_t max_carrier_sense_time){ return bool_value;}; |
kadonotakashi | 0:8fdf9a60065b | 69 | |
kadonotakashi | 0:8fdf9a60065b | 70 | virtual void start_cad(void){}; |
kadonotakashi | 0:8fdf9a60065b | 71 | |
kadonotakashi | 0:8fdf9a60065b | 72 | virtual bool check_rf_frequency(uint32_t frequency){ return bool_value; }; |
kadonotakashi | 0:8fdf9a60065b | 73 | |
kadonotakashi | 0:8fdf9a60065b | 74 | virtual void set_tx_continuous_wave(uint32_t freq, int8_t power, uint16_t time){}; |
kadonotakashi | 0:8fdf9a60065b | 75 | |
kadonotakashi | 0:8fdf9a60065b | 76 | virtual void lock(void){}; |
kadonotakashi | 0:8fdf9a60065b | 77 | |
kadonotakashi | 0:8fdf9a60065b | 78 | virtual void unlock(void){}; |
kadonotakashi | 0:8fdf9a60065b | 79 | |
kadonotakashi | 0:8fdf9a60065b | 80 | bool bool_value; |
kadonotakashi | 0:8fdf9a60065b | 81 | uint8_t uint8_value; |
kadonotakashi | 0:8fdf9a60065b | 82 | }; |
kadonotakashi | 0:8fdf9a60065b | 83 | |
kadonotakashi | 0:8fdf9a60065b | 84 | class Test_LoRaPHYCN470 : public testing::Test { |
kadonotakashi | 0:8fdf9a60065b | 85 | protected: |
kadonotakashi | 0:8fdf9a60065b | 86 | LoRaPHYCN470 *object; |
kadonotakashi | 0:8fdf9a60065b | 87 | my_radio radio; |
kadonotakashi | 0:8fdf9a60065b | 88 | |
kadonotakashi | 0:8fdf9a60065b | 89 | virtual void SetUp() |
kadonotakashi | 0:8fdf9a60065b | 90 | { |
kadonotakashi | 0:8fdf9a60065b | 91 | |
kadonotakashi | 0:8fdf9a60065b | 92 | LoRaPHY_stub::radio = &radio; |
kadonotakashi | 0:8fdf9a60065b | 93 | object = new LoRaPHYCN470(); |
kadonotakashi | 0:8fdf9a60065b | 94 | } |
kadonotakashi | 0:8fdf9a60065b | 95 | |
kadonotakashi | 0:8fdf9a60065b | 96 | virtual void TearDown() |
kadonotakashi | 0:8fdf9a60065b | 97 | { |
kadonotakashi | 0:8fdf9a60065b | 98 | |
kadonotakashi | 0:8fdf9a60065b | 99 | LoRaPHY_stub::radio = NULL; |
kadonotakashi | 0:8fdf9a60065b | 100 | delete object; |
kadonotakashi | 0:8fdf9a60065b | 101 | } |
kadonotakashi | 0:8fdf9a60065b | 102 | }; |
kadonotakashi | 0:8fdf9a60065b | 103 | |
kadonotakashi | 0:8fdf9a60065b | 104 | TEST_F(Test_LoRaPHYCN470, constructor) |
kadonotakashi | 0:8fdf9a60065b | 105 | { |
kadonotakashi | 0:8fdf9a60065b | 106 | EXPECT_TRUE(object); |
kadonotakashi | 0:8fdf9a60065b | 107 | } |
kadonotakashi | 0:8fdf9a60065b | 108 | |
kadonotakashi | 0:8fdf9a60065b | 109 | TEST_F(Test_LoRaPHYCN470, set_next_channel) |
kadonotakashi | 0:8fdf9a60065b | 110 | { |
kadonotakashi | 0:8fdf9a60065b | 111 | channel_selection_params_t params; |
kadonotakashi | 0:8fdf9a60065b | 112 | uint8_t channel; |
kadonotakashi | 0:8fdf9a60065b | 113 | lorawan_time_t time; |
kadonotakashi | 0:8fdf9a60065b | 114 | lorawan_time_t timeoff; |
kadonotakashi | 0:8fdf9a60065b | 115 | |
kadonotakashi | 0:8fdf9a60065b | 116 | params.current_datarate = 4; |
kadonotakashi | 0:8fdf9a60065b | 117 | params.aggregate_timeoff = 0; |
kadonotakashi | 0:8fdf9a60065b | 118 | LoRaPHY_stub::uint8_value = 0; |
kadonotakashi | 0:8fdf9a60065b | 119 | EXPECT_TRUE(LORAWAN_STATUS_NO_CHANNEL_FOUND == object->set_next_channel(¶ms, &channel, &time, &timeoff)); |
kadonotakashi | 0:8fdf9a60065b | 120 | |
kadonotakashi | 0:8fdf9a60065b | 121 | radio.bool_value = false; |
kadonotakashi | 0:8fdf9a60065b | 122 | params.aggregate_timeoff = 1; |
kadonotakashi | 0:8fdf9a60065b | 123 | EXPECT_TRUE(LORAWAN_STATUS_DUTYCYCLE_RESTRICTED == object->set_next_channel(¶ms, &channel, &time, &timeoff)); |
kadonotakashi | 0:8fdf9a60065b | 124 | |
kadonotakashi | 0:8fdf9a60065b | 125 | params.aggregate_timeoff = 0; |
kadonotakashi | 0:8fdf9a60065b | 126 | LoRaPHY_stub::uint8_value = 1; |
kadonotakashi | 0:8fdf9a60065b | 127 | EXPECT_TRUE(LORAWAN_STATUS_OK == object->set_next_channel(¶ms, &channel, &time, &timeoff)); |
kadonotakashi | 0:8fdf9a60065b | 128 | } |
kadonotakashi | 0:8fdf9a60065b | 129 | |
kadonotakashi | 0:8fdf9a60065b | 130 | TEST_F(Test_LoRaPHYCN470, rx_config) |
kadonotakashi | 0:8fdf9a60065b | 131 | { |
kadonotakashi | 0:8fdf9a60065b | 132 | rx_config_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 133 | |
kadonotakashi | 0:8fdf9a60065b | 134 | radio.uint8_value = 1; |
kadonotakashi | 0:8fdf9a60065b | 135 | EXPECT_TRUE(!object->rx_config(&p)); |
kadonotakashi | 0:8fdf9a60065b | 136 | |
kadonotakashi | 0:8fdf9a60065b | 137 | radio.uint8_value = 0; |
kadonotakashi | 0:8fdf9a60065b | 138 | p.is_repeater_supported = true; |
kadonotakashi | 0:8fdf9a60065b | 139 | EXPECT_TRUE(object->rx_config(&p)); |
kadonotakashi | 0:8fdf9a60065b | 140 | |
kadonotakashi | 0:8fdf9a60065b | 141 | p.is_repeater_supported = false; |
kadonotakashi | 0:8fdf9a60065b | 142 | EXPECT_TRUE(object->rx_config(&p)); |
kadonotakashi | 0:8fdf9a60065b | 143 | } |
kadonotakashi | 0:8fdf9a60065b | 144 | |
kadonotakashi | 0:8fdf9a60065b | 145 | TEST_F(Test_LoRaPHYCN470, tx_config) |
kadonotakashi | 0:8fdf9a60065b | 146 | { |
kadonotakashi | 0:8fdf9a60065b | 147 | tx_config_params_t p; |
kadonotakashi | 0:8fdf9a60065b | 148 | int8_t tx; |
kadonotakashi | 0:8fdf9a60065b | 149 | lorawan_time_t time; |
kadonotakashi | 0:8fdf9a60065b | 150 | p.tx_power = 9; |
kadonotakashi | 0:8fdf9a60065b | 151 | EXPECT_TRUE(object->tx_config(&p, &tx, &time)); |
kadonotakashi | 0:8fdf9a60065b | 152 | } |
kadonotakashi | 0:8fdf9a60065b | 153 | |
kadonotakashi | 0:8fdf9a60065b | 154 | TEST_F(Test_LoRaPHYCN470, link_ADR_request) |
kadonotakashi | 0:8fdf9a60065b | 155 | { |
kadonotakashi | 0:8fdf9a60065b | 156 | adr_req_params_t params; |
kadonotakashi | 0:8fdf9a60065b | 157 | int8_t dr_out; |
kadonotakashi | 0:8fdf9a60065b | 158 | int8_t tx_power_out; |
kadonotakashi | 0:8fdf9a60065b | 159 | uint8_t nb_rep_out; |
kadonotakashi | 0:8fdf9a60065b | 160 | uint8_t nb_bytes_parsed; |
kadonotakashi | 0:8fdf9a60065b | 161 | |
kadonotakashi | 0:8fdf9a60065b | 162 | LoRaPHY_stub::uint8_value = 1; |
kadonotakashi | 0:8fdf9a60065b | 163 | LoRaPHY_stub::ch_mask_value = 6; |
kadonotakashi | 0:8fdf9a60065b | 164 | LoRaPHY_stub::adr_parse_count = 2; |
kadonotakashi | 0:8fdf9a60065b | 165 | EXPECT_TRUE(1 == object->link_ADR_request(¶ms, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed)); |
kadonotakashi | 0:8fdf9a60065b | 166 | |
kadonotakashi | 0:8fdf9a60065b | 167 | LoRaPHY_stub::adr_parse_count = 2; |
kadonotakashi | 0:8fdf9a60065b | 168 | LoRaPHY_stub::ch_mask_value = 7; |
kadonotakashi | 0:8fdf9a60065b | 169 | EXPECT_TRUE(1 == object->link_ADR_request(¶ms, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed)); |
kadonotakashi | 0:8fdf9a60065b | 170 | |
kadonotakashi | 0:8fdf9a60065b | 171 | LoRaPHY_stub::adr_parse_count = 2; |
kadonotakashi | 0:8fdf9a60065b | 172 | LoRaPHY_stub::ch_mask_value = 5; |
kadonotakashi | 0:8fdf9a60065b | 173 | LoRaPHY_stub::uint8_value = 6; |
kadonotakashi | 0:8fdf9a60065b | 174 | EXPECT_TRUE(6 == object->link_ADR_request(¶ms, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed)); |
kadonotakashi | 0:8fdf9a60065b | 175 | |
kadonotakashi | 0:8fdf9a60065b | 176 | LoRaPHY_stub::adr_parse_count = 2; |
kadonotakashi | 0:8fdf9a60065b | 177 | LoRaPHY_stub::ch_mask_value = 66; |
kadonotakashi | 0:8fdf9a60065b | 178 | LoRaPHY_stub::uint8_value = 7; |
kadonotakashi | 0:8fdf9a60065b | 179 | EXPECT_TRUE(7 == object->link_ADR_request(¶ms, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed)); |
kadonotakashi | 0:8fdf9a60065b | 180 | } |
kadonotakashi | 0:8fdf9a60065b | 181 | |
kadonotakashi | 0:8fdf9a60065b | 182 | TEST_F(Test_LoRaPHYCN470, accept_rx_param_setup_req) |
kadonotakashi | 0:8fdf9a60065b | 183 | { |
kadonotakashi | 0:8fdf9a60065b | 184 | rx_param_setup_req_t p; |
kadonotakashi | 0:8fdf9a60065b | 185 | EXPECT_TRUE(0 == object->accept_rx_param_setup_req(&p)); |
kadonotakashi | 0:8fdf9a60065b | 186 | |
kadonotakashi | 0:8fdf9a60065b | 187 | radio.bool_value = true; |
kadonotakashi | 0:8fdf9a60065b | 188 | p.frequency = 923300000 - 1; |
kadonotakashi | 0:8fdf9a60065b | 189 | EXPECT_TRUE(0 == object->accept_rx_param_setup_req(&p)); |
kadonotakashi | 0:8fdf9a60065b | 190 | |
kadonotakashi | 0:8fdf9a60065b | 191 | radio.bool_value = true; |
kadonotakashi | 0:8fdf9a60065b | 192 | p.frequency = 927500000 + 1; |
kadonotakashi | 0:8fdf9a60065b | 193 | p.datarate = 6; |
kadonotakashi | 0:8fdf9a60065b | 194 | LoRaPHY_stub::bool_counter = 0; |
kadonotakashi | 0:8fdf9a60065b | 195 | LoRaPHY_stub::bool_table[0] = true; |
kadonotakashi | 0:8fdf9a60065b | 196 | EXPECT_TRUE(2 == object->accept_rx_param_setup_req(&p)); |
kadonotakashi | 0:8fdf9a60065b | 197 | } |
kadonotakashi | 0:8fdf9a60065b | 198 | |
kadonotakashi | 0:8fdf9a60065b | 199 |