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 "LoRaMac.h"
kadonotakashi 0:8fdf9a60065b 20 #include "LoRaPHY_stub.h"
kadonotakashi 0:8fdf9a60065b 21 #include "LoRaMacCrypto_stub.h"
kadonotakashi 0:8fdf9a60065b 22 #include "LoRaMacCommand_stub.h"
kadonotakashi 0:8fdf9a60065b 23 #include "LoRaWANTimer_stub.h"
kadonotakashi 0:8fdf9a60065b 24 #include "EventQueue_stub.h"
kadonotakashi 0:8fdf9a60065b 25
kadonotakashi 0:8fdf9a60065b 26 using namespace events;
kadonotakashi 0:8fdf9a60065b 27
kadonotakashi 0:8fdf9a60065b 28 class my_phy : public LoRaPHY
kadonotakashi 0:8fdf9a60065b 29 {
kadonotakashi 0:8fdf9a60065b 30 public:
kadonotakashi 0:8fdf9a60065b 31 my_phy(){};
kadonotakashi 0:8fdf9a60065b 32
kadonotakashi 0:8fdf9a60065b 33 virtual ~my_phy(){};
kadonotakashi 0:8fdf9a60065b 34 };
kadonotakashi 0:8fdf9a60065b 35
kadonotakashi 0:8fdf9a60065b 36 class Test_LoRaMac : public testing::Test {
kadonotakashi 0:8fdf9a60065b 37 protected:
kadonotakashi 0:8fdf9a60065b 38 LoRaMac *object;
kadonotakashi 0:8fdf9a60065b 39
kadonotakashi 0:8fdf9a60065b 40 virtual void SetUp()
kadonotakashi 0:8fdf9a60065b 41 {
kadonotakashi 0:8fdf9a60065b 42 object = new LoRaMac();
kadonotakashi 0:8fdf9a60065b 43 }
kadonotakashi 0:8fdf9a60065b 44
kadonotakashi 0:8fdf9a60065b 45 virtual void TearDown()
kadonotakashi 0:8fdf9a60065b 46 {
kadonotakashi 0:8fdf9a60065b 47 delete object;
kadonotakashi 0:8fdf9a60065b 48 }
kadonotakashi 0:8fdf9a60065b 49 };
kadonotakashi 0:8fdf9a60065b 50
kadonotakashi 0:8fdf9a60065b 51 TEST_F(Test_LoRaMac, constructor)
kadonotakashi 0:8fdf9a60065b 52 {
kadonotakashi 0:8fdf9a60065b 53 EXPECT_TRUE(object);
kadonotakashi 0:8fdf9a60065b 54 }
kadonotakashi 0:8fdf9a60065b 55
kadonotakashi 0:8fdf9a60065b 56 void my_cb()
kadonotakashi 0:8fdf9a60065b 57 {
kadonotakashi 0:8fdf9a60065b 58
kadonotakashi 0:8fdf9a60065b 59 }
kadonotakashi 0:8fdf9a60065b 60
kadonotakashi 0:8fdf9a60065b 61 TEST_F(Test_LoRaMac, initialize)
kadonotakashi 0:8fdf9a60065b 62 {
kadonotakashi 0:8fdf9a60065b 63 my_phy phy;
kadonotakashi 0:8fdf9a60065b 64 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 65
kadonotakashi 0:8fdf9a60065b 66 lorawan_connect_t conn;
kadonotakashi 0:8fdf9a60065b 67 uint8_t key[16];
kadonotakashi 0:8fdf9a60065b 68 conn.connection_u.otaa.app_key = key;
kadonotakashi 0:8fdf9a60065b 69 conn.connection_u.otaa.app_eui = key;
kadonotakashi 0:8fdf9a60065b 70 conn.connection_u.otaa.dev_eui = key;
kadonotakashi 0:8fdf9a60065b 71 conn.connection_u.otaa.nb_trials = 2;
kadonotakashi 0:8fdf9a60065b 72 object->prepare_join(&conn, true);
kadonotakashi 0:8fdf9a60065b 73
kadonotakashi 0:8fdf9a60065b 74 LoRaWANTimer_stub::call_cb_immediately = true;
kadonotakashi 0:8fdf9a60065b 75 EXPECT_TRUE(LORAWAN_STATUS_OK == object->initialize(NULL, my_cb));
kadonotakashi 0:8fdf9a60065b 76 }
kadonotakashi 0:8fdf9a60065b 77
kadonotakashi 0:8fdf9a60065b 78 TEST_F(Test_LoRaMac, disconnect)
kadonotakashi 0:8fdf9a60065b 79 {
kadonotakashi 0:8fdf9a60065b 80 object->disconnect();
kadonotakashi 0:8fdf9a60065b 81 }
kadonotakashi 0:8fdf9a60065b 82
kadonotakashi 0:8fdf9a60065b 83 TEST_F(Test_LoRaMac, nwk_joined)
kadonotakashi 0:8fdf9a60065b 84 {
kadonotakashi 0:8fdf9a60065b 85 EXPECT_EQ(false, object->nwk_joined());
kadonotakashi 0:8fdf9a60065b 86 }
kadonotakashi 0:8fdf9a60065b 87
kadonotakashi 0:8fdf9a60065b 88 TEST_F(Test_LoRaMac, add_channel_plan)
kadonotakashi 0:8fdf9a60065b 89 {
kadonotakashi 0:8fdf9a60065b 90 lorawan_channelplan_t plan;
kadonotakashi 0:8fdf9a60065b 91 EXPECT_EQ(LORAWAN_STATUS_OK, object->add_channel_plan(plan));
kadonotakashi 0:8fdf9a60065b 92
kadonotakashi 0:8fdf9a60065b 93 object->set_tx_ongoing(true);
kadonotakashi 0:8fdf9a60065b 94 EXPECT_EQ(LORAWAN_STATUS_BUSY, object->add_channel_plan(plan));
kadonotakashi 0:8fdf9a60065b 95 }
kadonotakashi 0:8fdf9a60065b 96
kadonotakashi 0:8fdf9a60065b 97 TEST_F(Test_LoRaMac, remove_channel_plan)
kadonotakashi 0:8fdf9a60065b 98 {
kadonotakashi 0:8fdf9a60065b 99 EXPECT_EQ(LORAWAN_STATUS_OK, object->remove_channel_plan());
kadonotakashi 0:8fdf9a60065b 100
kadonotakashi 0:8fdf9a60065b 101 object->set_tx_ongoing(true);
kadonotakashi 0:8fdf9a60065b 102 EXPECT_EQ(LORAWAN_STATUS_BUSY, object->remove_channel_plan());
kadonotakashi 0:8fdf9a60065b 103 }
kadonotakashi 0:8fdf9a60065b 104
kadonotakashi 0:8fdf9a60065b 105 TEST_F(Test_LoRaMac, get_channel_plan)
kadonotakashi 0:8fdf9a60065b 106 {
kadonotakashi 0:8fdf9a60065b 107 lorawan_channelplan_t plan;
kadonotakashi 0:8fdf9a60065b 108 EXPECT_EQ(LORAWAN_STATUS_OK, object->get_channel_plan(plan));
kadonotakashi 0:8fdf9a60065b 109 }
kadonotakashi 0:8fdf9a60065b 110
kadonotakashi 0:8fdf9a60065b 111 TEST_F(Test_LoRaMac, remove_single_channel)
kadonotakashi 0:8fdf9a60065b 112 {
kadonotakashi 0:8fdf9a60065b 113 EXPECT_EQ(LORAWAN_STATUS_OK, object->remove_single_channel(1));
kadonotakashi 0:8fdf9a60065b 114
kadonotakashi 0:8fdf9a60065b 115 object->set_tx_ongoing(true);
kadonotakashi 0:8fdf9a60065b 116 EXPECT_EQ(LORAWAN_STATUS_BUSY, object->remove_single_channel(1));
kadonotakashi 0:8fdf9a60065b 117 }
kadonotakashi 0:8fdf9a60065b 118
kadonotakashi 0:8fdf9a60065b 119 TEST_F(Test_LoRaMac, multicast_channel_link)
kadonotakashi 0:8fdf9a60065b 120 {
kadonotakashi 0:8fdf9a60065b 121 multicast_params_t p;
kadonotakashi 0:8fdf9a60065b 122
kadonotakashi 0:8fdf9a60065b 123 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->multicast_channel_link(NULL));
kadonotakashi 0:8fdf9a60065b 124
kadonotakashi 0:8fdf9a60065b 125 object->set_tx_ongoing(true);
kadonotakashi 0:8fdf9a60065b 126 EXPECT_EQ(LORAWAN_STATUS_BUSY, object->multicast_channel_link(&p));
kadonotakashi 0:8fdf9a60065b 127
kadonotakashi 0:8fdf9a60065b 128 object->set_tx_ongoing(false);
kadonotakashi 0:8fdf9a60065b 129 EXPECT_EQ(LORAWAN_STATUS_OK, object->multicast_channel_link(&p));
kadonotakashi 0:8fdf9a60065b 130 }
kadonotakashi 0:8fdf9a60065b 131
kadonotakashi 0:8fdf9a60065b 132 TEST_F(Test_LoRaMac, multicast_channel_unlink)
kadonotakashi 0:8fdf9a60065b 133 {
kadonotakashi 0:8fdf9a60065b 134 multicast_params_t p;
kadonotakashi 0:8fdf9a60065b 135
kadonotakashi 0:8fdf9a60065b 136 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->multicast_channel_unlink(NULL));
kadonotakashi 0:8fdf9a60065b 137
kadonotakashi 0:8fdf9a60065b 138 object->set_tx_ongoing(true);
kadonotakashi 0:8fdf9a60065b 139 EXPECT_EQ(LORAWAN_STATUS_BUSY, object->multicast_channel_unlink(&p));
kadonotakashi 0:8fdf9a60065b 140
kadonotakashi 0:8fdf9a60065b 141 object->set_tx_ongoing(false);
kadonotakashi 0:8fdf9a60065b 142 EXPECT_EQ(LORAWAN_STATUS_OK, object->multicast_channel_unlink(&p));
kadonotakashi 0:8fdf9a60065b 143 }
kadonotakashi 0:8fdf9a60065b 144
kadonotakashi 0:8fdf9a60065b 145 TEST_F(Test_LoRaMac, send)
kadonotakashi 0:8fdf9a60065b 146 {
kadonotakashi 0:8fdf9a60065b 147 loramac_mhdr_t mac_hdr;
kadonotakashi 0:8fdf9a60065b 148 uint8_t buf[15];
kadonotakashi 0:8fdf9a60065b 149 mac_hdr.bits.mtype = FRAME_TYPE_DATA_CONFIRMED_UP;
kadonotakashi 0:8fdf9a60065b 150 object->send(&mac_hdr, 1, buf, 15);
kadonotakashi 0:8fdf9a60065b 151 }
kadonotakashi 0:8fdf9a60065b 152
kadonotakashi 0:8fdf9a60065b 153 TEST_F(Test_LoRaMac, get_default_tx_datarate)
kadonotakashi 0:8fdf9a60065b 154 {
kadonotakashi 0:8fdf9a60065b 155 object->get_default_tx_datarate();
kadonotakashi 0:8fdf9a60065b 156 }
kadonotakashi 0:8fdf9a60065b 157
kadonotakashi 0:8fdf9a60065b 158 TEST_F(Test_LoRaMac, enable_adaptive_datarate)
kadonotakashi 0:8fdf9a60065b 159 {
kadonotakashi 0:8fdf9a60065b 160 object->enable_adaptive_datarate(true);
kadonotakashi 0:8fdf9a60065b 161 }
kadonotakashi 0:8fdf9a60065b 162
kadonotakashi 0:8fdf9a60065b 163 TEST_F(Test_LoRaMac, set_channel_data_rate)
kadonotakashi 0:8fdf9a60065b 164 {
kadonotakashi 0:8fdf9a60065b 165 object->set_channel_data_rate(8);
kadonotakashi 0:8fdf9a60065b 166 }
kadonotakashi 0:8fdf9a60065b 167
kadonotakashi 0:8fdf9a60065b 168 TEST_F(Test_LoRaMac, tx_ongoing)
kadonotakashi 0:8fdf9a60065b 169 {
kadonotakashi 0:8fdf9a60065b 170 object->tx_ongoing();
kadonotakashi 0:8fdf9a60065b 171 }
kadonotakashi 0:8fdf9a60065b 172
kadonotakashi 0:8fdf9a60065b 173 TEST_F(Test_LoRaMac, set_tx_ongoing)
kadonotakashi 0:8fdf9a60065b 174 {
kadonotakashi 0:8fdf9a60065b 175 object->set_tx_ongoing(true);
kadonotakashi 0:8fdf9a60065b 176 }
kadonotakashi 0:8fdf9a60065b 177
kadonotakashi 0:8fdf9a60065b 178 TEST_F(Test_LoRaMac, reset_ongoing_tx)
kadonotakashi 0:8fdf9a60065b 179 {
kadonotakashi 0:8fdf9a60065b 180 object->reset_ongoing_tx(true);
kadonotakashi 0:8fdf9a60065b 181 }
kadonotakashi 0:8fdf9a60065b 182
kadonotakashi 0:8fdf9a60065b 183 TEST_F(Test_LoRaMac, prepare_ongoing_tx)
kadonotakashi 0:8fdf9a60065b 184 {
kadonotakashi 0:8fdf9a60065b 185 uint8_t buf[16];
kadonotakashi 0:8fdf9a60065b 186 object->prepare_ongoing_tx(1, buf, 16, 1, 0);
kadonotakashi 0:8fdf9a60065b 187 }
kadonotakashi 0:8fdf9a60065b 188
kadonotakashi 0:8fdf9a60065b 189 TEST_F(Test_LoRaMac, send_ongoing_tx)
kadonotakashi 0:8fdf9a60065b 190 {
kadonotakashi 0:8fdf9a60065b 191 object->send_ongoing_tx();
kadonotakashi 0:8fdf9a60065b 192 }
kadonotakashi 0:8fdf9a60065b 193
kadonotakashi 0:8fdf9a60065b 194 TEST_F(Test_LoRaMac, get_device_class)
kadonotakashi 0:8fdf9a60065b 195 {
kadonotakashi 0:8fdf9a60065b 196 object->get_device_class();
kadonotakashi 0:8fdf9a60065b 197 }
kadonotakashi 0:8fdf9a60065b 198
kadonotakashi 0:8fdf9a60065b 199 void exp_cb()
kadonotakashi 0:8fdf9a60065b 200 {
kadonotakashi 0:8fdf9a60065b 201
kadonotakashi 0:8fdf9a60065b 202 }
kadonotakashi 0:8fdf9a60065b 203
kadonotakashi 0:8fdf9a60065b 204 TEST_F(Test_LoRaMac, set_device_class)
kadonotakashi 0:8fdf9a60065b 205 {
kadonotakashi 0:8fdf9a60065b 206 object->set_device_class(CLASS_B, exp_cb);
kadonotakashi 0:8fdf9a60065b 207 }
kadonotakashi 0:8fdf9a60065b 208
kadonotakashi 0:8fdf9a60065b 209 TEST_F(Test_LoRaMac, setup_link_check_request)
kadonotakashi 0:8fdf9a60065b 210 {
kadonotakashi 0:8fdf9a60065b 211 object->setup_link_check_request();
kadonotakashi 0:8fdf9a60065b 212 }
kadonotakashi 0:8fdf9a60065b 213
kadonotakashi 0:8fdf9a60065b 214 TEST_F(Test_LoRaMac, prepare_join)
kadonotakashi 0:8fdf9a60065b 215 {
kadonotakashi 0:8fdf9a60065b 216 lorawan_connect_t conn;
kadonotakashi 0:8fdf9a60065b 217 object->prepare_join(&conn, false);
kadonotakashi 0:8fdf9a60065b 218
kadonotakashi 0:8fdf9a60065b 219 my_phy phy;
kadonotakashi 0:8fdf9a60065b 220 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 221 EXPECT_EQ(LORAWAN_STATUS_OK, object->join(false));
kadonotakashi 0:8fdf9a60065b 222
kadonotakashi 0:8fdf9a60065b 223 uint8_t key[16];
kadonotakashi 0:8fdf9a60065b 224 conn.connection_u.otaa.app_key = NULL;
kadonotakashi 0:8fdf9a60065b 225 conn.connection_u.otaa.app_eui = NULL;
kadonotakashi 0:8fdf9a60065b 226 conn.connection_u.otaa.dev_eui = NULL;
kadonotakashi 0:8fdf9a60065b 227 conn.connection_u.otaa.nb_trials = 0;
kadonotakashi 0:8fdf9a60065b 228 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->prepare_join(&conn, true));
kadonotakashi 0:8fdf9a60065b 229
kadonotakashi 0:8fdf9a60065b 230 conn.connection_u.otaa.app_key = key;
kadonotakashi 0:8fdf9a60065b 231 conn.connection_u.otaa.app_eui = NULL;
kadonotakashi 0:8fdf9a60065b 232 conn.connection_u.otaa.dev_eui = NULL;
kadonotakashi 0:8fdf9a60065b 233 conn.connection_u.otaa.nb_trials = 0;
kadonotakashi 0:8fdf9a60065b 234 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->prepare_join(&conn, true));
kadonotakashi 0:8fdf9a60065b 235
kadonotakashi 0:8fdf9a60065b 236 conn.connection_u.otaa.app_key = key;
kadonotakashi 0:8fdf9a60065b 237 conn.connection_u.otaa.app_eui = key;
kadonotakashi 0:8fdf9a60065b 238 conn.connection_u.otaa.dev_eui = NULL;
kadonotakashi 0:8fdf9a60065b 239 conn.connection_u.otaa.nb_trials = 0;
kadonotakashi 0:8fdf9a60065b 240 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->prepare_join(&conn, true));
kadonotakashi 0:8fdf9a60065b 241
kadonotakashi 0:8fdf9a60065b 242 conn.connection_u.otaa.app_key = key;
kadonotakashi 0:8fdf9a60065b 243 conn.connection_u.otaa.app_eui = key;
kadonotakashi 0:8fdf9a60065b 244 conn.connection_u.otaa.dev_eui = key;
kadonotakashi 0:8fdf9a60065b 245 conn.connection_u.otaa.nb_trials = 0;
kadonotakashi 0:8fdf9a60065b 246 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->prepare_join(&conn, true));
kadonotakashi 0:8fdf9a60065b 247
kadonotakashi 0:8fdf9a60065b 248 LoRaPHY_stub::bool_table[0] = false;
kadonotakashi 0:8fdf9a60065b 249 LoRaPHY_stub::bool_counter = 0;
kadonotakashi 0:8fdf9a60065b 250 conn.connection_u.otaa.app_key = key;
kadonotakashi 0:8fdf9a60065b 251 conn.connection_u.otaa.app_eui = key;
kadonotakashi 0:8fdf9a60065b 252 conn.connection_u.otaa.dev_eui = key;
kadonotakashi 0:8fdf9a60065b 253 conn.connection_u.otaa.nb_trials = 2;
kadonotakashi 0:8fdf9a60065b 254 EXPECT_EQ(LORAWAN_STATUS_OK, object->prepare_join(&conn, true));
kadonotakashi 0:8fdf9a60065b 255
kadonotakashi 0:8fdf9a60065b 256 conn.connection_u.abp.dev_addr = 0;
kadonotakashi 0:8fdf9a60065b 257 conn.connection_u.abp.nwk_id = 0;
kadonotakashi 0:8fdf9a60065b 258 conn.connection_u.abp.nwk_skey = NULL;
kadonotakashi 0:8fdf9a60065b 259 conn.connection_u.abp.app_skey = NULL;
kadonotakashi 0:8fdf9a60065b 260 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->prepare_join(&conn, false));
kadonotakashi 0:8fdf9a60065b 261
kadonotakashi 0:8fdf9a60065b 262 conn.connection_u.abp.dev_addr = 1;
kadonotakashi 0:8fdf9a60065b 263 conn.connection_u.abp.nwk_id = 0;
kadonotakashi 0:8fdf9a60065b 264 conn.connection_u.abp.nwk_skey = NULL;
kadonotakashi 0:8fdf9a60065b 265 conn.connection_u.abp.app_skey = NULL;
kadonotakashi 0:8fdf9a60065b 266 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->prepare_join(&conn, false));
kadonotakashi 0:8fdf9a60065b 267
kadonotakashi 0:8fdf9a60065b 268 conn.connection_u.abp.dev_addr = 1;
kadonotakashi 0:8fdf9a60065b 269 conn.connection_u.abp.nwk_id = 2;
kadonotakashi 0:8fdf9a60065b 270 conn.connection_u.abp.nwk_skey = NULL;
kadonotakashi 0:8fdf9a60065b 271 conn.connection_u.abp.app_skey = NULL;
kadonotakashi 0:8fdf9a60065b 272 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->prepare_join(&conn, false));
kadonotakashi 0:8fdf9a60065b 273
kadonotakashi 0:8fdf9a60065b 274 conn.connection_u.abp.dev_addr = 1;
kadonotakashi 0:8fdf9a60065b 275 conn.connection_u.abp.nwk_id = 2;
kadonotakashi 0:8fdf9a60065b 276 conn.connection_u.abp.nwk_skey = key;
kadonotakashi 0:8fdf9a60065b 277 conn.connection_u.abp.app_skey = NULL;
kadonotakashi 0:8fdf9a60065b 278 EXPECT_EQ(LORAWAN_STATUS_PARAMETER_INVALID, object->prepare_join(&conn, false));
kadonotakashi 0:8fdf9a60065b 279
kadonotakashi 0:8fdf9a60065b 280 conn.connection_u.abp.dev_addr = 1;
kadonotakashi 0:8fdf9a60065b 281 conn.connection_u.abp.nwk_id = 2;
kadonotakashi 0:8fdf9a60065b 282 conn.connection_u.abp.nwk_skey = key;
kadonotakashi 0:8fdf9a60065b 283 conn.connection_u.abp.app_skey = key;
kadonotakashi 0:8fdf9a60065b 284 EXPECT_EQ(LORAWAN_STATUS_OK, object->prepare_join(&conn, false));
kadonotakashi 0:8fdf9a60065b 285
kadonotakashi 0:8fdf9a60065b 286 EXPECT_EQ(LORAWAN_STATUS_OK, object->prepare_join(NULL, false));
kadonotakashi 0:8fdf9a60065b 287 }
kadonotakashi 0:8fdf9a60065b 288
kadonotakashi 0:8fdf9a60065b 289 TEST_F(Test_LoRaMac, join)
kadonotakashi 0:8fdf9a60065b 290 {
kadonotakashi 0:8fdf9a60065b 291 my_phy phy;
kadonotakashi 0:8fdf9a60065b 292 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 293 EXPECT_EQ(LORAWAN_STATUS_OK, object->join(false));
kadonotakashi 0:8fdf9a60065b 294
kadonotakashi 0:8fdf9a60065b 295 lorawan_connect_t conn;
kadonotakashi 0:8fdf9a60065b 296 uint8_t key[16];
kadonotakashi 0:8fdf9a60065b 297 conn.connection_u.otaa.app_key = key;
kadonotakashi 0:8fdf9a60065b 298 conn.connection_u.otaa.app_eui = key;
kadonotakashi 0:8fdf9a60065b 299 conn.connection_u.otaa.dev_eui = key;
kadonotakashi 0:8fdf9a60065b 300 conn.connection_u.otaa.nb_trials = 2;
kadonotakashi 0:8fdf9a60065b 301 object->prepare_join(&conn, true);
kadonotakashi 0:8fdf9a60065b 302 EXPECT_EQ(LORAWAN_STATUS_CONNECT_IN_PROGRESS, object->join(true));
kadonotakashi 0:8fdf9a60065b 303 }
kadonotakashi 0:8fdf9a60065b 304
kadonotakashi 0:8fdf9a60065b 305 TEST_F(Test_LoRaMac, on_radio_tx_done)
kadonotakashi 0:8fdf9a60065b 306 {
kadonotakashi 0:8fdf9a60065b 307 my_phy phy;
kadonotakashi 0:8fdf9a60065b 308 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 309 object->on_radio_tx_done(100);
kadonotakashi 0:8fdf9a60065b 310 }
kadonotakashi 0:8fdf9a60065b 311
kadonotakashi 0:8fdf9a60065b 312 TEST_F(Test_LoRaMac, on_radio_rx_done)
kadonotakashi 0:8fdf9a60065b 313 {
kadonotakashi 0:8fdf9a60065b 314 uint8_t buf[16];
kadonotakashi 0:8fdf9a60065b 315 object->on_radio_rx_done(buf, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 316 }
kadonotakashi 0:8fdf9a60065b 317
kadonotakashi 0:8fdf9a60065b 318 TEST_F(Test_LoRaMac, on_radio_tx_timeout)
kadonotakashi 0:8fdf9a60065b 319 {
kadonotakashi 0:8fdf9a60065b 320 object->on_radio_tx_timeout();
kadonotakashi 0:8fdf9a60065b 321 }
kadonotakashi 0:8fdf9a60065b 322
kadonotakashi 0:8fdf9a60065b 323 TEST_F(Test_LoRaMac, on_radio_rx_timeout)
kadonotakashi 0:8fdf9a60065b 324 {
kadonotakashi 0:8fdf9a60065b 325 object->on_radio_rx_timeout(true);
kadonotakashi 0:8fdf9a60065b 326 }
kadonotakashi 0:8fdf9a60065b 327
kadonotakashi 0:8fdf9a60065b 328 TEST_F(Test_LoRaMac, continue_joining_process)
kadonotakashi 0:8fdf9a60065b 329 {
kadonotakashi 0:8fdf9a60065b 330 my_phy phy;
kadonotakashi 0:8fdf9a60065b 331 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 332 lorawan_connect_t conn;
kadonotakashi 0:8fdf9a60065b 333 uint8_t key[16];
kadonotakashi 0:8fdf9a60065b 334 conn.connection_u.otaa.app_key = key;
kadonotakashi 0:8fdf9a60065b 335 conn.connection_u.otaa.app_eui = key;
kadonotakashi 0:8fdf9a60065b 336 conn.connection_u.otaa.dev_eui = key;
kadonotakashi 0:8fdf9a60065b 337 conn.connection_u.otaa.nb_trials = 2;
kadonotakashi 0:8fdf9a60065b 338 object->prepare_join(&conn, true);
kadonotakashi 0:8fdf9a60065b 339 object->continue_joining_process();
kadonotakashi 0:8fdf9a60065b 340 }
kadonotakashi 0:8fdf9a60065b 341
kadonotakashi 0:8fdf9a60065b 342 TEST_F(Test_LoRaMac, continue_sending_process)
kadonotakashi 0:8fdf9a60065b 343 {
kadonotakashi 0:8fdf9a60065b 344 my_phy phy;
kadonotakashi 0:8fdf9a60065b 345 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 346 object->continue_sending_process();
kadonotakashi 0:8fdf9a60065b 347 }
kadonotakashi 0:8fdf9a60065b 348
kadonotakashi 0:8fdf9a60065b 349 TEST_F(Test_LoRaMac, get_mcps_confirmation)
kadonotakashi 0:8fdf9a60065b 350 {
kadonotakashi 0:8fdf9a60065b 351 object->get_mcps_confirmation();
kadonotakashi 0:8fdf9a60065b 352 }
kadonotakashi 0:8fdf9a60065b 353
kadonotakashi 0:8fdf9a60065b 354 TEST_F(Test_LoRaMac, get_mcps_indication)
kadonotakashi 0:8fdf9a60065b 355 {
kadonotakashi 0:8fdf9a60065b 356 object->get_mcps_indication();
kadonotakashi 0:8fdf9a60065b 357 }
kadonotakashi 0:8fdf9a60065b 358
kadonotakashi 0:8fdf9a60065b 359 TEST_F(Test_LoRaMac, get_mlme_confirmation)
kadonotakashi 0:8fdf9a60065b 360 {
kadonotakashi 0:8fdf9a60065b 361 object->get_mlme_confirmation();
kadonotakashi 0:8fdf9a60065b 362 }
kadonotakashi 0:8fdf9a60065b 363
kadonotakashi 0:8fdf9a60065b 364 TEST_F(Test_LoRaMac, get_mlme_indication)
kadonotakashi 0:8fdf9a60065b 365 {
kadonotakashi 0:8fdf9a60065b 366 object->get_mlme_indication();
kadonotakashi 0:8fdf9a60065b 367 }
kadonotakashi 0:8fdf9a60065b 368
kadonotakashi 0:8fdf9a60065b 369 TEST_F(Test_LoRaMac, post_process_mcps_req)
kadonotakashi 0:8fdf9a60065b 370 {
kadonotakashi 0:8fdf9a60065b 371 uint8_t data[16];
kadonotakashi 0:8fdf9a60065b 372 LoRaPHY_stub::bool_counter = 0;
kadonotakashi 0:8fdf9a60065b 373 LoRaPHY_stub::bool_table[0] = true;
kadonotakashi 0:8fdf9a60065b 374
kadonotakashi 0:8fdf9a60065b 375 my_phy phy;
kadonotakashi 0:8fdf9a60065b 376 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 377 object->join(false);
kadonotakashi 0:8fdf9a60065b 378
kadonotakashi 0:8fdf9a60065b 379 object->prepare_ongoing_tx(1, data, 15, 0x01, 2);
kadonotakashi 0:8fdf9a60065b 380 object->send_ongoing_tx();
kadonotakashi 0:8fdf9a60065b 381 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 382
kadonotakashi 0:8fdf9a60065b 383 LoRaPHY_stub::bool_counter = 0;
kadonotakashi 0:8fdf9a60065b 384 object->prepare_ongoing_tx(1, data, 15, 0x02, 2);
kadonotakashi 0:8fdf9a60065b 385 object->send_ongoing_tx();
kadonotakashi 0:8fdf9a60065b 386 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 387
kadonotakashi 0:8fdf9a60065b 388 //_mcps_confirmation.ack_received missing here
kadonotakashi 0:8fdf9a60065b 389 uint8_t payload[16] = {};
kadonotakashi 0:8fdf9a60065b 390 LoRaPHY_stub::uint16_value = 5;
kadonotakashi 0:8fdf9a60065b 391 payload[0] = FRAME_TYPE_DATA_CONFIRMED_DOWN << 5;
kadonotakashi 0:8fdf9a60065b 392 payload[5] = 1 << 5;
kadonotakashi 0:8fdf9a60065b 393
kadonotakashi 0:8fdf9a60065b 394 //address != _params.dev_addr
kadonotakashi 0:8fdf9a60065b 395 payload[2] = 2;
kadonotakashi 0:8fdf9a60065b 396 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 397 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 398
kadonotakashi 0:8fdf9a60065b 399 payload[2] = 0;
kadonotakashi 0:8fdf9a60065b 400 //mic failure
kadonotakashi 0:8fdf9a60065b 401 payload[13] = 2;
kadonotakashi 0:8fdf9a60065b 402 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 403 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 404
kadonotakashi 0:8fdf9a60065b 405 payload[13] = 0;
kadonotakashi 0:8fdf9a60065b 406 //crypto failure
kadonotakashi 0:8fdf9a60065b 407 LoRaMacCrypto_stub::int_table_idx_value = 0;
kadonotakashi 0:8fdf9a60065b 408 LoRaMacCrypto_stub::int_table[0] = 4;
kadonotakashi 0:8fdf9a60065b 409 LoRaMacCrypto_stub::int_table[1] = 4;
kadonotakashi 0:8fdf9a60065b 410 // LoRaPHY_stub::uint16_value = 0;
kadonotakashi 0:8fdf9a60065b 411 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 412 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 413
kadonotakashi 0:8fdf9a60065b 414 //process_mac_commands failure
kadonotakashi 0:8fdf9a60065b 415 LoRaMacCommand_stub::status_value = LORAWAN_STATUS_BUSY;
kadonotakashi 0:8fdf9a60065b 416 LoRaMacCrypto_stub::int_table[0] = 0;
kadonotakashi 0:8fdf9a60065b 417 LoRaMacCrypto_stub::int_table[1] = 0;
kadonotakashi 0:8fdf9a60065b 418 payload[7] = 1;
kadonotakashi 0:8fdf9a60065b 419 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 420 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 421
kadonotakashi 0:8fdf9a60065b 422 //FOpts_len != 0
kadonotakashi 0:8fdf9a60065b 423 payload[5] = (1 << 5) + 1;
kadonotakashi 0:8fdf9a60065b 424 payload[7] = 0;
kadonotakashi 0:8fdf9a60065b 425 LoRaMacCommand_stub::status_value = LORAWAN_STATUS_OK;
kadonotakashi 0:8fdf9a60065b 426 payload[0] = FRAME_TYPE_DATA_UNCONFIRMED_DOWN << 5;
kadonotakashi 0:8fdf9a60065b 427
kadonotakashi 0:8fdf9a60065b 428 object->on_radio_rx_done(payload, 13, 0, 0);
kadonotakashi 0:8fdf9a60065b 429
kadonotakashi 0:8fdf9a60065b 430 //_mac_commands.process_mac_commands fails
kadonotakashi 0:8fdf9a60065b 431 LoRaMacCommand_stub::status_value = LORAWAN_STATUS_DATARATE_INVALID;
kadonotakashi 0:8fdf9a60065b 432 object->on_radio_rx_done(payload, 13, 0, 0);
kadonotakashi 0:8fdf9a60065b 433
kadonotakashi 0:8fdf9a60065b 434 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 435
kadonotakashi 0:8fdf9a60065b 436 payload[9] = 1;
kadonotakashi 0:8fdf9a60065b 437 LoRaMacCommand_stub::status_value = LORAWAN_STATUS_OK;
kadonotakashi 0:8fdf9a60065b 438 payload[0] = FRAME_TYPE_PROPRIETARY << 5;
kadonotakashi 0:8fdf9a60065b 439 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 440 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 441
kadonotakashi 0:8fdf9a60065b 442 payload[9] = 0;
kadonotakashi 0:8fdf9a60065b 443 payload[5] = 1 << 5;
kadonotakashi 0:8fdf9a60065b 444 LoRaMacCommand_stub::status_value = LORAWAN_STATUS_OK;
kadonotakashi 0:8fdf9a60065b 445 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 446 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 447
kadonotakashi 0:8fdf9a60065b 448 LoRaPHY_stub::bool_counter = 0;
kadonotakashi 0:8fdf9a60065b 449 object->prepare_ongoing_tx(1, data, 15, 0x04, 2);
kadonotakashi 0:8fdf9a60065b 450 object->send_ongoing_tx();
kadonotakashi 0:8fdf9a60065b 451 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 452
kadonotakashi 0:8fdf9a60065b 453 LoRaPHY_stub::bool_counter = 0;
kadonotakashi 0:8fdf9a60065b 454 object->prepare_ongoing_tx(1, data, 15, 0x08, 2);
kadonotakashi 0:8fdf9a60065b 455 object->send_ongoing_tx();
kadonotakashi 0:8fdf9a60065b 456 object->post_process_mcps_req();
kadonotakashi 0:8fdf9a60065b 457 }
kadonotakashi 0:8fdf9a60065b 458
kadonotakashi 0:8fdf9a60065b 459 TEST_F(Test_LoRaMac, handle_join_accept_frame)
kadonotakashi 0:8fdf9a60065b 460 {
kadonotakashi 0:8fdf9a60065b 461 LoRaPHY_stub::bool_counter = 0;
kadonotakashi 0:8fdf9a60065b 462 LoRaPHY_stub::bool_table[0] = true;
kadonotakashi 0:8fdf9a60065b 463
kadonotakashi 0:8fdf9a60065b 464 my_phy phy;
kadonotakashi 0:8fdf9a60065b 465 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 466
kadonotakashi 0:8fdf9a60065b 467 uint8_t payload[16] = {};
kadonotakashi 0:8fdf9a60065b 468 LoRaPHY_stub::uint16_value = 5;
kadonotakashi 0:8fdf9a60065b 469 payload[0] = FRAME_TYPE_JOIN_ACCEPT << 5;
kadonotakashi 0:8fdf9a60065b 470 payload[5] = 1 << 5;
kadonotakashi 0:8fdf9a60065b 471
kadonotakashi 0:8fdf9a60065b 472 LoRaMacCrypto_stub::int_table_idx_value = 0;
kadonotakashi 0:8fdf9a60065b 473 LoRaMacCrypto_stub::int_table[0] = 4;
kadonotakashi 0:8fdf9a60065b 474 LoRaMacCrypto_stub::int_table[1] = 4;
kadonotakashi 0:8fdf9a60065b 475 LoRaMacCrypto_stub::int_table[2] = 4;
kadonotakashi 0:8fdf9a60065b 476 LoRaMacCrypto_stub::int_table[3] = 4;
kadonotakashi 0:8fdf9a60065b 477 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 478
kadonotakashi 0:8fdf9a60065b 479 LoRaMacCrypto_stub::int_table_idx_value = 0;
kadonotakashi 0:8fdf9a60065b 480 LoRaMacCrypto_stub::int_table[0] = 0;
kadonotakashi 0:8fdf9a60065b 481 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 482
kadonotakashi 0:8fdf9a60065b 483 LoRaMacCrypto_stub::int_table_idx_value = 0;
kadonotakashi 0:8fdf9a60065b 484 LoRaMacCrypto_stub::int_table[1] = 0;
kadonotakashi 0:8fdf9a60065b 485 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 486
kadonotakashi 0:8fdf9a60065b 487 //mic failure case
kadonotakashi 0:8fdf9a60065b 488 payload[13] = 17;
kadonotakashi 0:8fdf9a60065b 489 LoRaMacCrypto_stub::int_table_idx_value = 0;
kadonotakashi 0:8fdf9a60065b 490 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 491
kadonotakashi 0:8fdf9a60065b 492 payload[13] = 0;
kadonotakashi 0:8fdf9a60065b 493 LoRaMacCrypto_stub::int_table_idx_value = 0;
kadonotakashi 0:8fdf9a60065b 494 LoRaMacCrypto_stub::int_table[2] = 0;
kadonotakashi 0:8fdf9a60065b 495 object->on_radio_rx_done(payload, 16, 0, 0);
kadonotakashi 0:8fdf9a60065b 496 }
kadonotakashi 0:8fdf9a60065b 497
kadonotakashi 0:8fdf9a60065b 498 TEST_F(Test_LoRaMac, post_process_mcps_ind)
kadonotakashi 0:8fdf9a60065b 499 {
kadonotakashi 0:8fdf9a60065b 500 object->post_process_mcps_ind();
kadonotakashi 0:8fdf9a60065b 501 }
kadonotakashi 0:8fdf9a60065b 502
kadonotakashi 0:8fdf9a60065b 503 TEST_F(Test_LoRaMac, post_process_mlme_request)
kadonotakashi 0:8fdf9a60065b 504 {
kadonotakashi 0:8fdf9a60065b 505 object->post_process_mlme_request();
kadonotakashi 0:8fdf9a60065b 506 }
kadonotakashi 0:8fdf9a60065b 507
kadonotakashi 0:8fdf9a60065b 508 TEST_F(Test_LoRaMac, post_process_mlme_ind)
kadonotakashi 0:8fdf9a60065b 509 {
kadonotakashi 0:8fdf9a60065b 510 object->post_process_mlme_ind();
kadonotakashi 0:8fdf9a60065b 511 }
kadonotakashi 0:8fdf9a60065b 512
kadonotakashi 0:8fdf9a60065b 513 uint8_t batt_cb()
kadonotakashi 0:8fdf9a60065b 514 {
kadonotakashi 0:8fdf9a60065b 515
kadonotakashi 0:8fdf9a60065b 516 }
kadonotakashi 0:8fdf9a60065b 517
kadonotakashi 0:8fdf9a60065b 518 TEST_F(Test_LoRaMac, set_batterylevel_callback)
kadonotakashi 0:8fdf9a60065b 519 {
kadonotakashi 0:8fdf9a60065b 520 object->set_batterylevel_callback(batt_cb);
kadonotakashi 0:8fdf9a60065b 521 }
kadonotakashi 0:8fdf9a60065b 522
kadonotakashi 0:8fdf9a60065b 523 TEST_F(Test_LoRaMac, get_backoff_timer_event_id)
kadonotakashi 0:8fdf9a60065b 524 {
kadonotakashi 0:8fdf9a60065b 525 object->get_backoff_timer_event_id();
kadonotakashi 0:8fdf9a60065b 526 }
kadonotakashi 0:8fdf9a60065b 527
kadonotakashi 0:8fdf9a60065b 528 TEST_F(Test_LoRaMac, clear_tx_pipe)
kadonotakashi 0:8fdf9a60065b 529 {
kadonotakashi 0:8fdf9a60065b 530 EXPECT_EQ(LORAWAN_STATUS_OK, object->clear_tx_pipe()); //timer id == 0
kadonotakashi 0:8fdf9a60065b 531
kadonotakashi 0:8fdf9a60065b 532 my_phy phy;
kadonotakashi 0:8fdf9a60065b 533 object->bind_phy(phy);
kadonotakashi 0:8fdf9a60065b 534
kadonotakashi 0:8fdf9a60065b 535 lorawan_connect_t conn;
kadonotakashi 0:8fdf9a60065b 536 uint8_t key[16];
kadonotakashi 0:8fdf9a60065b 537 conn.connection_u.otaa.app_key = key;
kadonotakashi 0:8fdf9a60065b 538 conn.connection_u.otaa.app_eui = key;
kadonotakashi 0:8fdf9a60065b 539 conn.connection_u.otaa.dev_eui = key;
kadonotakashi 0:8fdf9a60065b 540 conn.connection_u.otaa.nb_trials = 2;
kadonotakashi 0:8fdf9a60065b 541 object->prepare_join(&conn, true);
kadonotakashi 0:8fdf9a60065b 542
kadonotakashi 0:8fdf9a60065b 543 EXPECT_TRUE(LORAWAN_STATUS_OK == object->initialize(NULL, my_cb));
kadonotakashi 0:8fdf9a60065b 544 EventQueue_stub::int_value = 0;
kadonotakashi 0:8fdf9a60065b 545 EXPECT_EQ(LORAWAN_STATUS_BUSY, object->clear_tx_pipe());
kadonotakashi 0:8fdf9a60065b 546
kadonotakashi 0:8fdf9a60065b 547 EventQueue_stub::int_value = 1;
kadonotakashi 0:8fdf9a60065b 548 EXPECT_EQ(LORAWAN_STATUS_OK, object->clear_tx_pipe());
kadonotakashi 0:8fdf9a60065b 549 }
kadonotakashi 0:8fdf9a60065b 550
kadonotakashi 0:8fdf9a60065b 551 TEST_F(Test_LoRaMac, get_current_time)
kadonotakashi 0:8fdf9a60065b 552 {
kadonotakashi 0:8fdf9a60065b 553 object->get_current_time();
kadonotakashi 0:8fdf9a60065b 554 }
kadonotakashi 0:8fdf9a60065b 555
kadonotakashi 0:8fdf9a60065b 556 TEST_F(Test_LoRaMac, get_current_slot)
kadonotakashi 0:8fdf9a60065b 557 {
kadonotakashi 0:8fdf9a60065b 558 object->get_current_slot();
kadonotakashi 0:8fdf9a60065b 559 }
kadonotakashi 0:8fdf9a60065b 560