Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

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?

UserRevisionLine numberNew 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 "LoRaPHYUS915.h"
kadonotakashi 0:8fdf9a60065b 20 #include "LoRaPHY_stub.h"
kadonotakashi 0:8fdf9a60065b 21
kadonotakashi 0:8fdf9a60065b 22 class my_radio : public LoRaRadio
kadonotakashi 0:8fdf9a60065b 23 {
kadonotakashi 0:8fdf9a60065b 24 public:
kadonotakashi 0:8fdf9a60065b 25
kadonotakashi 0:8fdf9a60065b 26 virtual void init_radio(radio_events_t *events){};
kadonotakashi 0:8fdf9a60065b 27
kadonotakashi 0:8fdf9a60065b 28 virtual void radio_reset(){};
kadonotakashi 0:8fdf9a60065b 29
kadonotakashi 0:8fdf9a60065b 30 virtual void sleep(void){};
kadonotakashi 0:8fdf9a60065b 31
kadonotakashi 0:8fdf9a60065b 32 virtual void standby(void){};
kadonotakashi 0:8fdf9a60065b 33
kadonotakashi 0:8fdf9a60065b 34 virtual void set_rx_config (radio_modems_t modem, uint32_t bandwidth,
kadonotakashi 0:8fdf9a60065b 35 uint32_t datarate, uint8_t coderate,
kadonotakashi 0:8fdf9a60065b 36 uint32_t bandwidth_afc, uint16_t preamble_len,
kadonotakashi 0:8fdf9a60065b 37 uint16_t symb_timeout, bool fix_len,
kadonotakashi 0:8fdf9a60065b 38 uint8_t payload_len,
kadonotakashi 0:8fdf9a60065b 39 bool crc_on, bool freq_hop_on, uint8_t hop_period,
kadonotakashi 0:8fdf9a60065b 40 bool iq_inverted, bool rx_continuous){};
kadonotakashi 0:8fdf9a60065b 41
kadonotakashi 0:8fdf9a60065b 42 virtual void set_tx_config(radio_modems_t modem, int8_t power, uint32_t fdev,
kadonotakashi 0:8fdf9a60065b 43 uint32_t bandwidth, uint32_t datarate,
kadonotakashi 0:8fdf9a60065b 44 uint8_t coderate, uint16_t preamble_len,
kadonotakashi 0:8fdf9a60065b 45 bool fix_len, bool crc_on, bool freq_hop_on,
kadonotakashi 0:8fdf9a60065b 46 uint8_t hop_period, bool iq_inverted, uint32_t timeout){};
kadonotakashi 0:8fdf9a60065b 47
kadonotakashi 0:8fdf9a60065b 48 virtual void send(uint8_t *buffer, uint8_t size){};
kadonotakashi 0:8fdf9a60065b 49
kadonotakashi 0:8fdf9a60065b 50 virtual void receive(void){};
kadonotakashi 0:8fdf9a60065b 51
kadonotakashi 0:8fdf9a60065b 52 virtual void set_channel(uint32_t freq){};
kadonotakashi 0:8fdf9a60065b 53
kadonotakashi 0:8fdf9a60065b 54 virtual uint32_t random(void){};
kadonotakashi 0:8fdf9a60065b 55
kadonotakashi 0:8fdf9a60065b 56 virtual uint8_t get_status(void){return uint8_value;};
kadonotakashi 0:8fdf9a60065b 57
kadonotakashi 0:8fdf9a60065b 58 virtual void set_max_payload_length(radio_modems_t modem, uint8_t max){};
kadonotakashi 0:8fdf9a60065b 59
kadonotakashi 0:8fdf9a60065b 60 virtual void set_public_network(bool enable){};
kadonotakashi 0:8fdf9a60065b 61
kadonotakashi 0:8fdf9a60065b 62 virtual uint32_t time_on_air(radio_modems_t modem, uint8_t pkt_len){};
kadonotakashi 0:8fdf9a60065b 63
kadonotakashi 0:8fdf9a60065b 64 virtual bool perform_carrier_sense(radio_modems_t modem,
kadonotakashi 0:8fdf9a60065b 65 uint32_t freq,
kadonotakashi 0:8fdf9a60065b 66 int16_t rssi_threshold,
kadonotakashi 0:8fdf9a60065b 67 uint32_t max_carrier_sense_time){ return bool_value;};
kadonotakashi 0:8fdf9a60065b 68
kadonotakashi 0:8fdf9a60065b 69 virtual void start_cad(void){};
kadonotakashi 0:8fdf9a60065b 70
kadonotakashi 0:8fdf9a60065b 71 virtual bool check_rf_frequency(uint32_t frequency){ return bool_value; };
kadonotakashi 0:8fdf9a60065b 72
kadonotakashi 0:8fdf9a60065b 73 virtual void set_tx_continuous_wave(uint32_t freq, int8_t power, uint16_t time){};
kadonotakashi 0:8fdf9a60065b 74
kadonotakashi 0:8fdf9a60065b 75 virtual void lock(void){};
kadonotakashi 0:8fdf9a60065b 76
kadonotakashi 0:8fdf9a60065b 77 virtual void unlock(void){};
kadonotakashi 0:8fdf9a60065b 78
kadonotakashi 0:8fdf9a60065b 79 bool bool_value;
kadonotakashi 0:8fdf9a60065b 80 uint8_t uint8_value;
kadonotakashi 0:8fdf9a60065b 81 };
kadonotakashi 0:8fdf9a60065b 82
kadonotakashi 0:8fdf9a60065b 83 class Test_LoRaPHYUS915 : public testing::Test {
kadonotakashi 0:8fdf9a60065b 84 protected:
kadonotakashi 0:8fdf9a60065b 85 LoRaPHYUS915 *object;
kadonotakashi 0:8fdf9a60065b 86 my_radio radio;
kadonotakashi 0:8fdf9a60065b 87
kadonotakashi 0:8fdf9a60065b 88 virtual void SetUp()
kadonotakashi 0:8fdf9a60065b 89 {
kadonotakashi 0:8fdf9a60065b 90 LoRaPHY_stub::radio = &radio;
kadonotakashi 0:8fdf9a60065b 91 object = new LoRaPHYUS915();
kadonotakashi 0:8fdf9a60065b 92 }
kadonotakashi 0:8fdf9a60065b 93
kadonotakashi 0:8fdf9a60065b 94 virtual void TearDown()
kadonotakashi 0:8fdf9a60065b 95 {
kadonotakashi 0:8fdf9a60065b 96 LoRaPHY_stub::radio = NULL;
kadonotakashi 0:8fdf9a60065b 97 delete object;
kadonotakashi 0:8fdf9a60065b 98 }
kadonotakashi 0:8fdf9a60065b 99 };
kadonotakashi 0:8fdf9a60065b 100
kadonotakashi 0:8fdf9a60065b 101 TEST_F(Test_LoRaPHYUS915, constructor)
kadonotakashi 0:8fdf9a60065b 102 {
kadonotakashi 0:8fdf9a60065b 103 EXPECT_TRUE(object);
kadonotakashi 0:8fdf9a60065b 104 }
kadonotakashi 0:8fdf9a60065b 105
kadonotakashi 0:8fdf9a60065b 106 TEST_F(Test_LoRaPHYUS915, restore_default_channels)
kadonotakashi 0:8fdf9a60065b 107 {
kadonotakashi 0:8fdf9a60065b 108 object->restore_default_channels();
kadonotakashi 0:8fdf9a60065b 109 }
kadonotakashi 0:8fdf9a60065b 110
kadonotakashi 0:8fdf9a60065b 111 TEST_F(Test_LoRaPHYUS915, rx_config)
kadonotakashi 0:8fdf9a60065b 112 {
kadonotakashi 0:8fdf9a60065b 113 rx_config_params_t p;
kadonotakashi 0:8fdf9a60065b 114
kadonotakashi 0:8fdf9a60065b 115 radio.uint8_value = 1;
kadonotakashi 0:8fdf9a60065b 116 EXPECT_TRUE(!object->rx_config(&p));
kadonotakashi 0:8fdf9a60065b 117
kadonotakashi 0:8fdf9a60065b 118 radio.uint8_value = 0;
kadonotakashi 0:8fdf9a60065b 119 p.is_repeater_supported = true;
kadonotakashi 0:8fdf9a60065b 120 EXPECT_TRUE(object->rx_config(&p));
kadonotakashi 0:8fdf9a60065b 121
kadonotakashi 0:8fdf9a60065b 122 p.is_repeater_supported = false;
kadonotakashi 0:8fdf9a60065b 123 EXPECT_TRUE(object->rx_config(&p));
kadonotakashi 0:8fdf9a60065b 124 }
kadonotakashi 0:8fdf9a60065b 125
kadonotakashi 0:8fdf9a60065b 126 TEST_F(Test_LoRaPHYUS915, tx_config)
kadonotakashi 0:8fdf9a60065b 127 {
kadonotakashi 0:8fdf9a60065b 128 tx_config_params_t p;
kadonotakashi 0:8fdf9a60065b 129 int8_t tx;
kadonotakashi 0:8fdf9a60065b 130 lorawan_time_t time;
kadonotakashi 0:8fdf9a60065b 131 EXPECT_TRUE(object->tx_config(&p, &tx, &time));
kadonotakashi 0:8fdf9a60065b 132 }
kadonotakashi 0:8fdf9a60065b 133
kadonotakashi 0:8fdf9a60065b 134 TEST_F(Test_LoRaPHYUS915, link_ADR_request)
kadonotakashi 0:8fdf9a60065b 135 {
kadonotakashi 0:8fdf9a60065b 136 adr_req_params_t params;
kadonotakashi 0:8fdf9a60065b 137 int8_t dr_out;
kadonotakashi 0:8fdf9a60065b 138 int8_t tx_power_out;
kadonotakashi 0:8fdf9a60065b 139 uint8_t nb_rep_out;
kadonotakashi 0:8fdf9a60065b 140 uint8_t nb_bytes_parsed;
kadonotakashi 0:8fdf9a60065b 141
kadonotakashi 0:8fdf9a60065b 142 EXPECT_TRUE(0 == object->link_ADR_request(&params, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed));
kadonotakashi 0:8fdf9a60065b 143
kadonotakashi 0:8fdf9a60065b 144 LoRaPHY_stub::uint8_value = 1;
kadonotakashi 0:8fdf9a60065b 145 LoRaPHY_stub::ch_mask_value = 6;
kadonotakashi 0:8fdf9a60065b 146 LoRaPHY_stub::adr_parse_count = 2;
kadonotakashi 0:8fdf9a60065b 147 EXPECT_TRUE(1 == object->link_ADR_request(&params, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed));
kadonotakashi 0:8fdf9a60065b 148
kadonotakashi 0:8fdf9a60065b 149 LoRaPHY_stub::adr_parse_count = 2;
kadonotakashi 0:8fdf9a60065b 150 LoRaPHY_stub::ch_mask_value = 7;
kadonotakashi 0:8fdf9a60065b 151 EXPECT_TRUE(1 == object->link_ADR_request(&params, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed));
kadonotakashi 0:8fdf9a60065b 152
kadonotakashi 0:8fdf9a60065b 153 LoRaPHY_stub::adr_parse_count = 2;
kadonotakashi 0:8fdf9a60065b 154 LoRaPHY_stub::ch_mask_value = 5;
kadonotakashi 0:8fdf9a60065b 155 LoRaPHY_stub::uint8_value = 6;
kadonotakashi 0:8fdf9a60065b 156 EXPECT_TRUE(6 == object->link_ADR_request(&params, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed));
kadonotakashi 0:8fdf9a60065b 157
kadonotakashi 0:8fdf9a60065b 158 LoRaPHY_stub::adr_parse_count = 2;
kadonotakashi 0:8fdf9a60065b 159 LoRaPHY_stub::ch_mask_value = 66;
kadonotakashi 0:8fdf9a60065b 160 LoRaPHY_stub::uint8_value = 7;
kadonotakashi 0:8fdf9a60065b 161 EXPECT_TRUE(7 == object->link_ADR_request(&params, &dr_out, &tx_power_out, &nb_rep_out, &nb_bytes_parsed));
kadonotakashi 0:8fdf9a60065b 162 }
kadonotakashi 0:8fdf9a60065b 163
kadonotakashi 0:8fdf9a60065b 164 TEST_F(Test_LoRaPHYUS915, accept_rx_param_setup_req)
kadonotakashi 0:8fdf9a60065b 165 {
kadonotakashi 0:8fdf9a60065b 166 rx_param_setup_req_t p;
kadonotakashi 0:8fdf9a60065b 167 EXPECT_TRUE(0 == object->accept_rx_param_setup_req(&p));
kadonotakashi 0:8fdf9a60065b 168
kadonotakashi 0:8fdf9a60065b 169 radio.bool_value = true;
kadonotakashi 0:8fdf9a60065b 170 p.frequency = 923300000 - 1;
kadonotakashi 0:8fdf9a60065b 171 EXPECT_TRUE(0 == object->accept_rx_param_setup_req(&p));
kadonotakashi 0:8fdf9a60065b 172
kadonotakashi 0:8fdf9a60065b 173 radio.bool_value = true;
kadonotakashi 0:8fdf9a60065b 174 p.frequency = 927500000 + 1;
kadonotakashi 0:8fdf9a60065b 175 p.datarate = 6;
kadonotakashi 0:8fdf9a60065b 176 LoRaPHY_stub::bool_counter = 0;
kadonotakashi 0:8fdf9a60065b 177 LoRaPHY_stub::bool_table[0] = true;
kadonotakashi 0:8fdf9a60065b 178 EXPECT_TRUE(2 == object->accept_rx_param_setup_req(&p));
kadonotakashi 0:8fdf9a60065b 179 }
kadonotakashi 0:8fdf9a60065b 180
kadonotakashi 0:8fdf9a60065b 181 TEST_F(Test_LoRaPHYUS915, get_alternate_DR)
kadonotakashi 0:8fdf9a60065b 182 {
kadonotakashi 0:8fdf9a60065b 183 EXPECT_TRUE(0 == object->get_alternate_DR(0));
kadonotakashi 0:8fdf9a60065b 184
kadonotakashi 0:8fdf9a60065b 185 EXPECT_TRUE(4 == object->get_alternate_DR(1));
kadonotakashi 0:8fdf9a60065b 186 }
kadonotakashi 0:8fdf9a60065b 187
kadonotakashi 0:8fdf9a60065b 188 TEST_F(Test_LoRaPHYUS915, set_next_channel)
kadonotakashi 0:8fdf9a60065b 189 {
kadonotakashi 0:8fdf9a60065b 190 channel_selection_params_t params;
kadonotakashi 0:8fdf9a60065b 191 uint8_t channel;
kadonotakashi 0:8fdf9a60065b 192 lorawan_time_t time;
kadonotakashi 0:8fdf9a60065b 193 lorawan_time_t timeoff;
kadonotakashi 0:8fdf9a60065b 194
kadonotakashi 0:8fdf9a60065b 195 params.current_datarate = 4;
kadonotakashi 0:8fdf9a60065b 196 params.aggregate_timeoff = 0;
kadonotakashi 0:8fdf9a60065b 197 LoRaPHY_stub::uint8_value = 0;
kadonotakashi 0:8fdf9a60065b 198 EXPECT_TRUE(LORAWAN_STATUS_NO_CHANNEL_FOUND == object->set_next_channel(&params, &channel, &time, &timeoff));
kadonotakashi 0:8fdf9a60065b 199
kadonotakashi 0:8fdf9a60065b 200 radio.bool_value = false;
kadonotakashi 0:8fdf9a60065b 201 params.aggregate_timeoff = 1;
kadonotakashi 0:8fdf9a60065b 202 EXPECT_TRUE(LORAWAN_STATUS_DUTYCYCLE_RESTRICTED == object->set_next_channel(&params, &channel, &time, &timeoff));
kadonotakashi 0:8fdf9a60065b 203
kadonotakashi 0:8fdf9a60065b 204 params.aggregate_timeoff = 0;
kadonotakashi 0:8fdf9a60065b 205 LoRaPHY_stub::uint8_value = 1;
kadonotakashi 0:8fdf9a60065b 206 EXPECT_TRUE(LORAWAN_STATUS_OK == object->set_next_channel(&params, &channel, &time, &timeoff));
kadonotakashi 0:8fdf9a60065b 207 }
kadonotakashi 0:8fdf9a60065b 208
kadonotakashi 0:8fdf9a60065b 209 TEST_F(Test_LoRaPHYUS915, apply_DR_offset)
kadonotakashi 0:8fdf9a60065b 210 {
kadonotakashi 0:8fdf9a60065b 211 //10, 9, 8, 8
kadonotakashi 0:8fdf9a60065b 212 //11, 10, 9, 8
kadonotakashi 0:8fdf9a60065b 213 //12, 11, 10, 9
kadonotakashi 0:8fdf9a60065b 214 //13, 12, 11, 10
kadonotakashi 0:8fdf9a60065b 215 //13, 13, 12, 11
kadonotakashi 0:8fdf9a60065b 216
kadonotakashi 0:8fdf9a60065b 217 for (int i = 0; i < 5; i++) {
kadonotakashi 0:8fdf9a60065b 218 for (int j=0; j < 4; j++ ) {
kadonotakashi 0:8fdf9a60065b 219 uint8_t val = 10 + i;
kadonotakashi 0:8fdf9a60065b 220 val -= j;
kadonotakashi 0:8fdf9a60065b 221 if (val > 13) val = 13;
kadonotakashi 0:8fdf9a60065b 222 if (val < 8) val = 8;
kadonotakashi 0:8fdf9a60065b 223 EXPECT_TRUE(val == object->apply_DR_offset(i, j));
kadonotakashi 0:8fdf9a60065b 224 }
kadonotakashi 0:8fdf9a60065b 225 }
kadonotakashi 0:8fdf9a60065b 226 }
kadonotakashi 0:8fdf9a60065b 227
kadonotakashi 0:8fdf9a60065b 228 TEST_F(Test_LoRaPHYUS915, set_tx_cont_mode)
kadonotakashi 0:8fdf9a60065b 229 {
kadonotakashi 0:8fdf9a60065b 230 cw_mode_params_t p;
kadonotakashi 0:8fdf9a60065b 231 object->set_tx_cont_mode(&p, 0);
kadonotakashi 0:8fdf9a60065b 232
kadonotakashi 0:8fdf9a60065b 233 p.datarate = 4;
kadonotakashi 0:8fdf9a60065b 234 object->set_tx_cont_mode(&p, 0);
kadonotakashi 0:8fdf9a60065b 235 }