mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Cellular: Add State machine unit tests.
							parent
							
								
									97709f52ec
								
							
						
					
					
						commit
						725e14d15f
					
				| 
						 | 
				
			
			@ -26,6 +26,7 @@ set(unittest-test-sources
 | 
			
		|||
  stubs/AT_CellularDevice_stub.cpp
 | 
			
		||||
  stubs/AT_CellularStack_stub.cpp
 | 
			
		||||
  stubs/AT_CellularNetwork_stub.cpp
 | 
			
		||||
  stubs/AT_CellularPower_stub.cpp
 | 
			
		||||
  stubs/CellularDevice_stub.cpp
 | 
			
		||||
  stubs/CellularStateMachine_stub.cpp
 | 
			
		||||
  stubs/equeue_stub.c
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,427 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2018, Arm Limited and affiliates.
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
#include "gtest/gtest.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "CellularDevice.h"
 | 
			
		||||
#include "AT_CellularDevice_stub.h"
 | 
			
		||||
#include "FileHandle_stub.h"
 | 
			
		||||
#include "AT_CellularPower_stub.h"
 | 
			
		||||
#include "AT_CellularNetwork_stub.h"
 | 
			
		||||
#include "myCellularDevice.h"
 | 
			
		||||
#include "Thread_stub.h"
 | 
			
		||||
#include "cmsis_os2.h"
 | 
			
		||||
#include "equeue_stub.h"
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
 | 
			
		||||
enum UT_CellularState {
 | 
			
		||||
    UT_STATE_INIT = 0,
 | 
			
		||||
    UT_STATE_POWER_ON,
 | 
			
		||||
    UT_STATE_DEVICE_READY,
 | 
			
		||||
    UT_STATE_SIM_PIN,
 | 
			
		||||
    UT_STATE_REGISTERING_NETWORK,
 | 
			
		||||
    UT_STATE_MANUAL_REGISTERING_NETWORK,
 | 
			
		||||
    UT_STATE_ATTACHING_NETWORK,
 | 
			
		||||
    UT_STATE_MAX_FSM_STATE
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// AStyle ignored as the definition is not clear due to preprocessor usage
 | 
			
		||||
// *INDENT-OFF*
 | 
			
		||||
class TestCellularStateMachine : public testing::Test {
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
    void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        Thread_stub::osStatus_value = osOK;
 | 
			
		||||
        AT_CellularPower_stub::fail_counter = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void TearDown()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void cellular_callback(nsapi_event_t ev, intptr_t ptr)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace mbed {
 | 
			
		||||
 | 
			
		||||
class UT_CellularStateMachine {
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    UT_CellularStateMachine() {
 | 
			
		||||
        _state_machine = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ~UT_CellularStateMachine() {
 | 
			
		||||
        delete _state_machine;
 | 
			
		||||
        _state_machine = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine *create_state_machine(CellularDevice &device, events::EventQueue &queue)
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine = new CellularStateMachine(device, queue);
 | 
			
		||||
        return _state_machine;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void delete_state_machine() {
 | 
			
		||||
        delete _state_machine;
 | 
			
		||||
        _state_machine = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void set_cellular_callback(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb)
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine->set_cellular_callback(status_cb);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nsapi_error_t start_dispatch()
 | 
			
		||||
    {
 | 
			
		||||
        return _state_machine->start_dispatch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nsapi_error_t run_to_power_on()
 | 
			
		||||
    {
 | 
			
		||||
        return _state_machine->run_to_state(CellularStateMachine::STATE_POWER_ON);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nsapi_error_t run_to_device_ready()
 | 
			
		||||
    {
 | 
			
		||||
        return _state_machine->run_to_state(CellularStateMachine::STATE_DEVICE_READY);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nsapi_error_t run_to_device_sim_ready()
 | 
			
		||||
    {
 | 
			
		||||
        return _state_machine->run_to_state(CellularStateMachine::STATE_SIM_PIN);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nsapi_error_t run_to_device_registered()
 | 
			
		||||
    {
 | 
			
		||||
        return _state_machine->run_to_state(CellularStateMachine::STATE_REGISTERING_NETWORK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nsapi_error_t run_to_device_attached()
 | 
			
		||||
    {
 | 
			
		||||
        return _state_machine->run_to_state(CellularStateMachine::STATE_ATTACHING_NETWORK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void stop()
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine->stop();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void set_sim_pin(const char *sim_pin)
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine->set_sim_pin(sim_pin);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void set_retry_timeout_array(uint16_t *timeout, int array_len)
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine->set_retry_timeout_array(timeout, array_len);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void set_plmn(const char *plmn)
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine->set_plmn(plmn);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool get_current_status(UT_CellularState ¤t_state, UT_CellularState &target_state)
 | 
			
		||||
    {
 | 
			
		||||
        return _state_machine->get_current_status((CellularStateMachine::CellularState&)current_state,
 | 
			
		||||
                (CellularStateMachine::CellularState&)target_state);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void cellular_event_changed(nsapi_event_t ev, intptr_t ptr)
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine->cellular_event_changed(ev, ptr);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void reset()
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine->reset();
 | 
			
		||||
    }
 | 
			
		||||
    void ready_urc_cb()
 | 
			
		||||
    {
 | 
			
		||||
        _state_machine->device_ready_cb();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine * _state_machine;
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularStateMachine, test_create_delete)
 | 
			
		||||
{
 | 
			
		||||
    UT_CellularStateMachine ut;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine *stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    delete dev;
 | 
			
		||||
    dev = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularStateMachine, test_setters)
 | 
			
		||||
{
 | 
			
		||||
    UT_CellularStateMachine ut;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine *stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
    ut.set_cellular_callback(&cellular_callback);
 | 
			
		||||
 | 
			
		||||
    ut.set_sim_pin(NULL);
 | 
			
		||||
    ut.set_sim_pin("1234");
 | 
			
		||||
    ut.set_plmn(NULL);
 | 
			
		||||
    ut.set_plmn("12345");
 | 
			
		||||
 | 
			
		||||
    uint16_t timeout[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
 | 
			
		||||
    ut.set_retry_timeout_array(timeout, 10); // test max length
 | 
			
		||||
    ut.set_retry_timeout_array(timeout, 20); // test too big array
 | 
			
		||||
    ut.set_retry_timeout_array(0, 10); // null array
 | 
			
		||||
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    delete dev;
 | 
			
		||||
    dev = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularStateMachine, test_start_dispatch)
 | 
			
		||||
{
 | 
			
		||||
    UT_CellularStateMachine ut;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine *stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
    nsapi_error_t err = ut.start_dispatch();
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, err);
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    Thread_stub::osStatus_value = osErrorNoMemory;
 | 
			
		||||
    stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
    err = ut.start_dispatch();
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_NO_MEMORY, err);
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    delete dev;
 | 
			
		||||
    dev = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularStateMachine, test_stop)
 | 
			
		||||
{
 | 
			
		||||
    UT_CellularStateMachine ut;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev = new AT_CellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine *stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
 | 
			
		||||
    ut.stop(); // nothing created, run through
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
    nsapi_error_t err = ut.start_dispatch();
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, err);
 | 
			
		||||
 | 
			
		||||
    ut.stop(); // thread is created, now stop will delete it
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
    err = ut.start_dispatch();
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, err);
 | 
			
		||||
 | 
			
		||||
    ut.set_cellular_callback(&cellular_callback);
 | 
			
		||||
 | 
			
		||||
    struct equeue_event ptr;
 | 
			
		||||
    equeue_stub.void_ptr = &ptr;
 | 
			
		||||
    equeue_stub.call_cb_immediately = true;
 | 
			
		||||
 | 
			
		||||
    AT_CellularPower_stub::fail_counter = 1;
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_power_on());
 | 
			
		||||
 | 
			
		||||
    ut.stop(); // thread and power are created, now stop will delete them
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
    err = ut.start_dispatch();
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, err);
 | 
			
		||||
 | 
			
		||||
    ut.set_cellular_callback(&cellular_callback);
 | 
			
		||||
    AT_CellularPower_stub::fail_counter = 1;
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_ready());
 | 
			
		||||
 | 
			
		||||
    ut.stop(); // thread and network are created, now stop will delete them
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    delete dev;
 | 
			
		||||
    dev = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularStateMachine, test_run_to_state)
 | 
			
		||||
{
 | 
			
		||||
    UT_CellularStateMachine ut;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev = new AT_CellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine *stm = ut.create_state_machine(*dev, *dev->get_queue());
 | 
			
		||||
    EXPECT_TRUE(stm);
 | 
			
		||||
 | 
			
		||||
    nsapi_error_t err = ut.start_dispatch();
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, err);
 | 
			
		||||
 | 
			
		||||
    struct equeue_event ptr;
 | 
			
		||||
    equeue_stub.void_ptr = 0;
 | 
			
		||||
    equeue_stub.call_cb_immediately = false;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_NO_MEMORY, ut.run_to_power_on());
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    equeue_stub.void_ptr = &ptr;
 | 
			
		||||
    equeue_stub.call_cb_immediately = true;
 | 
			
		||||
 | 
			
		||||
    ut.set_cellular_callback(&cellular_callback);
 | 
			
		||||
    AT_CellularPower_stub::fail_counter = 0;
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_power_on());
 | 
			
		||||
    UT_CellularState current_state;
 | 
			
		||||
    UT_CellularState target_state;
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_POWER_ON, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_POWER_ON, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    AT_CellularPower_stub::set_at_fail_counter = 1;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_ready());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_DEVICE_READY, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_DEVICE_READY, target_state);
 | 
			
		||||
    ut.ready_urc_cb();
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    AT_CellularPower_stub::fail_counter = 1;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_ready());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_DEVICE_READY, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_DEVICE_READY, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
     AT_CellularPower_stub::fail_counter = 2;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_ready());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_DEVICE_READY, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_DEVICE_READY, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
     AT_CellularPower_stub::fail_counter = 3;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_ready());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_DEVICE_READY, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_DEVICE_READY, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    AT_CellularDevice_stub::init_module_failure_count = 1;
 | 
			
		||||
    AT_CellularPower_stub::fail_counter = 0;
 | 
			
		||||
    AT_CellularNetwork_stub::set_registration_urc_fail_counter = 4;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_sim_ready());
 | 
			
		||||
    (void) ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_SIM_PIN, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_SIM_PIN, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    AT_CellularDevice_stub::pin_needed = true;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_sim_ready());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_SIM_PIN, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_SIM_PIN, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    ut.set_sim_pin("1234");
 | 
			
		||||
    AT_CellularDevice_stub::pin_needed = true;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_sim_ready());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_SIM_PIN, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_SIM_PIN, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    ut.set_sim_pin("1234");
 | 
			
		||||
    AT_CellularDevice_stub::pin_needed = true;
 | 
			
		||||
    AT_CellularDevice_stub::set_pin_failure_count = 1;
 | 
			
		||||
    AT_CellularDevice_stub::get_sim_failure_count = 1;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_sim_ready());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_SIM_PIN, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_SIM_PIN, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    cell_callback_data_t data;
 | 
			
		||||
    data.status_data = CellularNetwork::RegisteredHomeNetwork;
 | 
			
		||||
    AT_CellularNetwork_stub::get_registration_params_fail_counter = 10;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_registered());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_REGISTERING_NETWORK, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_REGISTERING_NETWORK, target_state);
 | 
			
		||||
    ut.cellular_event_changed((nsapi_event_t)CellularRegistrationStatusChanged, (intptr_t)&data);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    // manual registering
 | 
			
		||||
    ut.set_plmn("12345");
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_registered());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_MANUAL_REGISTERING_NETWORK, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_MANUAL_REGISTERING_NETWORK, target_state);
 | 
			
		||||
    ut.cellular_event_changed((nsapi_event_t)CellularRegistrationStatusChanged, (intptr_t)&data);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    ut.set_plmn(0);
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_attached());
 | 
			
		||||
    (void)ut.get_current_status(current_state, target_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_ATTACHING_NETWORK, current_state);
 | 
			
		||||
    ASSERT_EQ(UT_STATE_ATTACHING_NETWORK, target_state);
 | 
			
		||||
    ut.reset();
 | 
			
		||||
 | 
			
		||||
    ut.delete_state_machine();
 | 
			
		||||
 | 
			
		||||
    delete dev;
 | 
			
		||||
    dev = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
 | 
			
		||||
####################
 | 
			
		||||
# UNIT TESTS
 | 
			
		||||
####################
 | 
			
		||||
 | 
			
		||||
# Add test specific include paths
 | 
			
		||||
set(unittest-includes ${unittest-includes}
 | 
			
		||||
    /features/cellular/framework/device/cellularstatemachine
 | 
			
		||||
  ../features/cellular/framework/device
 | 
			
		||||
  ../features/cellular/framework/common
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Source files
 | 
			
		||||
set(unittest-sources
 | 
			
		||||
  ../features/cellular/framework/device/CellularStateMachine.cpp
 | 
			
		||||
  ../features/cellular/framework/AT/ATHandler_factory.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Test files
 | 
			
		||||
set(unittest-test-sources
 | 
			
		||||
  features/cellular/framework/device/cellularstatemachine/cellularstatemachinetest.cpp
 | 
			
		||||
  stubs/FileHandle_stub.cpp
 | 
			
		||||
  stubs/CellularDevice_stub.cpp
 | 
			
		||||
  stubs/EventQueue_stub.cpp
 | 
			
		||||
  stubs/mbed_assert_stub.c
 | 
			
		||||
  stubs/UARTSerial_stub.cpp
 | 
			
		||||
  stubs/SerialBase_stub.cpp
 | 
			
		||||
  stubs/ATHandler_stub.cpp
 | 
			
		||||
  stubs/AT_CellularNetwork_stub.cpp
 | 
			
		||||
  stubs/AT_CellularPower_stub.cpp
 | 
			
		||||
  stubs/AT_CellularBase_stub.cpp
 | 
			
		||||
  stubs/AT_CellularContext_stub.cpp
 | 
			
		||||
  stubs/AT_CellularDevice_stub.cpp
 | 
			
		||||
  stubs/Semaphore_stub.cpp
 | 
			
		||||
  stubs/NetworkInterface_stub.cpp
 | 
			
		||||
  stubs/Thread_stub.cpp
 | 
			
		||||
  stubs/Mutex_stub.cpp
 | 
			
		||||
  stubs/EventQueue_stub.cpp
 | 
			
		||||
  stubs/equeue_stub.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# defines
 | 
			
		||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMDMRTS=PTC0 -DMDMCTS=PTC1 -DMDMTXD=NC -DMDMRXD=NC -DMBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE=115200 -DCELLULAR_DEVICE=myCellularDevice -DDEVICE_SERIAL_FC=1")
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMDMRTS=PTC0 -DMDMCTS=PTC1 -DMDMTXD=NC -DMDMRXD=NC -DMBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE=115200 -DCELLULAR_DEVICE=myCellularDevice -DDEVICE_SERIAL_FC=1")
 | 
			
		||||
| 
						 | 
				
			
			@ -15,14 +15,24 @@
 | 
			
		|||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "AT_CellularDevice.h"
 | 
			
		||||
#include "AT_CellularDevice_stub.h"
 | 
			
		||||
#include "AT_CellularNetwork.h"
 | 
			
		||||
#include "AT_CellularPower.h"
 | 
			
		||||
#include "AT_CellularContext.h"
 | 
			
		||||
#include "ATHandler.h"
 | 
			
		||||
 | 
			
		||||
const int DEFAULT_AT_TIMEOUT = 1000;
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int AT_CellularDevice_stub::failure_count = 0;
 | 
			
		||||
nsapi_error_t AT_CellularDevice_stub::nsapi_error_value = 0;
 | 
			
		||||
int AT_CellularDevice_stub::init_module_failure_count = 0;
 | 
			
		||||
int AT_CellularDevice_stub::set_pin_failure_count = 0;
 | 
			
		||||
int AT_CellularDevice_stub::get_sim_failure_count = 0;
 | 
			
		||||
bool AT_CellularDevice_stub::pin_needed = false;
 | 
			
		||||
 | 
			
		||||
AT_CellularDevice::AT_CellularDevice(FileHandle *fh) : CellularDevice(fh), _network(0), _sms(0),
 | 
			
		||||
    _power(0), _information(0), _context_list(0), _default_timeout(DEFAULT_AT_TIMEOUT),
 | 
			
		||||
    _modem_debug_on(false)
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +41,8 @@ AT_CellularDevice::AT_CellularDevice(FileHandle *fh) : CellularDevice(fh), _netw
 | 
			
		|||
 | 
			
		||||
AT_CellularDevice::~AT_CellularDevice()
 | 
			
		||||
{
 | 
			
		||||
    delete _network;
 | 
			
		||||
    delete _power;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ATHandler *AT_CellularDevice::get_at_handler(FileHandle *fileHandle)
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +84,7 @@ CellularSMS *AT_CellularDevice::open_sms(FileHandle *fh)
 | 
			
		|||
 | 
			
		||||
CellularPower *AT_CellularDevice::open_power(FileHandle *fh)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
        return new AT_CellularPower(*ATHandler::get_instance(fh, _queue, _default_timeout, "\r", get_send_delay(), _modem_debug_on));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularInformation *AT_CellularDevice::open_information(FileHandle *fh)
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +165,11 @@ void AT_CellularDevice::modem_debug_on(bool on)
 | 
			
		|||
 | 
			
		||||
nsapi_error_t AT_CellularDevice::is_ready()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    if (AT_CellularDevice_stub::init_module_failure_count) {
 | 
			
		||||
        AT_CellularDevice_stub::init_module_failure_count--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    return AT_CellularDevice_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AT_CellularDevice::set_ready_cb(mbed::Callback<void()> callback)
 | 
			
		||||
| 
						 | 
				
			
			@ -167,25 +183,53 @@ nsapi_error_t AT_CellularDevice::set_power_save_mode(int periodic_time, int acti
 | 
			
		|||
 | 
			
		||||
nsapi_error_t AT_CellularDevice::init()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    if (AT_CellularDevice_stub::init_module_failure_count) {
 | 
			
		||||
        AT_CellularDevice_stub::init_module_failure_count--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    return AT_CellularDevice_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularDevice::reset()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    if (AT_CellularDevice_stub::init_module_failure_count) {
 | 
			
		||||
        AT_CellularDevice_stub::init_module_failure_count--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    return AT_CellularDevice_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularDevice::shutdown()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    if (AT_CellularDevice_stub::init_module_failure_count) {
 | 
			
		||||
        AT_CellularDevice_stub::init_module_failure_count--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    return AT_CellularDevice_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularDevice::set_pin(const char *sim_pin)
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    if (AT_CellularDevice_stub::set_pin_failure_count) {
 | 
			
		||||
        AT_CellularDevice_stub::set_pin_failure_count--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    return AT_CellularDevice_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularDevice::get_sim_state(SimState &state)
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    if (AT_CellularDevice_stub::get_sim_failure_count) {
 | 
			
		||||
        AT_CellularDevice_stub::get_sim_failure_count--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (AT_CellularDevice_stub::pin_needed) {
 | 
			
		||||
        AT_CellularDevice_stub::pin_needed = false;
 | 
			
		||||
        state = SimStatePinNeeded;
 | 
			
		||||
    } else {
 | 
			
		||||
        state = SimStateReady;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return AT_CellularDevice_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2018, Arm Limited and affiliates.
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef AT_CELLULARDEVICE_STUB_H_
 | 
			
		||||
#define AT_CELLULARDEVICE_STUB_H_
 | 
			
		||||
 | 
			
		||||
#include "AT_CellularDevice.h"
 | 
			
		||||
 | 
			
		||||
namespace AT_CellularDevice_stub {
 | 
			
		||||
extern int failure_count;
 | 
			
		||||
extern nsapi_error_t nsapi_error_value;
 | 
			
		||||
extern int init_module_failure_count;
 | 
			
		||||
extern int set_pin_failure_count;
 | 
			
		||||
extern int get_sim_failure_count;
 | 
			
		||||
extern bool pin_needed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* AT_CELLULARDEVICE_STUB_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +15,7 @@
 | 
			
		|||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "AT_CellularNetwork.h"
 | 
			
		||||
#include "AT_CellularNetwork_stub.h"
 | 
			
		||||
#include "CellularNetwork.h"
 | 
			
		||||
#include "CellularUtil.h"
 | 
			
		||||
#include "CellularLog.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +25,13 @@
 | 
			
		|||
using namespace mbed;
 | 
			
		||||
using namespace mbed_cellular_util;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularNetwork_stub::nsapi_error_value = 0;
 | 
			
		||||
int AT_CellularNetwork_stub::fail_counter = 0;
 | 
			
		||||
int AT_CellularNetwork_stub::set_registration_urc_fail_counter = 0;
 | 
			
		||||
int AT_CellularNetwork_stub::get_registration_params_fail_counter = 0;
 | 
			
		||||
 | 
			
		||||
AT_CellularNetwork::AT_CellularNetwork(ATHandler &atHandler) : AT_CellularBase(atHandler)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +51,10 @@ nsapi_connection_status_t AT_CellularNetwork::get_connection_status() const
 | 
			
		|||
 | 
			
		||||
nsapi_error_t AT_CellularNetwork::set_registration_urc(RegistrationType type, bool urc_on)
 | 
			
		||||
{
 | 
			
		||||
    if (AT_CellularNetwork_stub::set_registration_urc_fail_counter) {
 | 
			
		||||
        AT_CellularNetwork_stub::set_registration_urc_fail_counter--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +71,12 @@ nsapi_error_t AT_CellularNetwork::set_registration(const char *plmn)
 | 
			
		|||
 | 
			
		||||
nsapi_error_t AT_CellularNetwork::get_registration_params(RegistrationType type, registration_params_t ®_params)
 | 
			
		||||
{
 | 
			
		||||
    if (AT_CellularNetwork_stub::get_registration_params_fail_counter) {
 | 
			
		||||
        AT_CellularNetwork_stub::get_registration_params_fail_counter--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    reg_params._status = CellularNetwork::RegisteredHomeNetwork;
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +160,7 @@ nsapi_error_t AT_CellularNetwork::get_operator_names(operator_names_list &op_nam
 | 
			
		|||
 | 
			
		||||
bool AT_CellularNetwork::is_active_context()
 | 
			
		||||
{
 | 
			
		||||
    return true;
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularNetwork::set_receive_period(int mode, EDRXAccessTechnology act_type, uint8_t edrx_value)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2018, Arm Limited and affiliates.
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef AT_CELLULARNETWORK_STUB_H_
 | 
			
		||||
#define AT_CELLULARNETWORK_STUB_H_
 | 
			
		||||
 | 
			
		||||
#include "AT_CellularNetwork.h"
 | 
			
		||||
 | 
			
		||||
namespace AT_CellularNetwork_stub {
 | 
			
		||||
extern nsapi_error_t nsapi_error_value;
 | 
			
		||||
extern int fail_counter;
 | 
			
		||||
extern int set_registration_urc_fail_counter;
 | 
			
		||||
extern int get_registration_params_fail_counter;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* AT_CELLULARNETWORK_STUB_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -15,13 +15,17 @@
 | 
			
		|||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "AT_CellularPower.h"
 | 
			
		||||
#include "AT_CellularPower_stub.h"
 | 
			
		||||
#include "CellularUtil.h"
 | 
			
		||||
#include "CellularLog.h"
 | 
			
		||||
 | 
			
		||||
using namespace mbed_cellular_util;
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularPower_stub::nsapi_error_value = 0;
 | 
			
		||||
int AT_CellularPower_stub::fail_counter = 0;
 | 
			
		||||
int AT_CellularPower_stub::set_at_fail_counter = 0;
 | 
			
		||||
 | 
			
		||||
AT_CellularPower::AT_CellularPower(ATHandler &at) : AT_CellularBase(at)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -32,10 +36,18 @@ AT_CellularPower::~AT_CellularPower()
 | 
			
		|||
 | 
			
		||||
nsapi_error_t AT_CellularPower::on()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    if (AT_CellularPower_stub::fail_counter) {
 | 
			
		||||
        AT_CellularPower_stub::fail_counter--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    return AT_CellularPower_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularPower::off()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    if (AT_CellularPower_stub::fail_counter) {
 | 
			
		||||
        AT_CellularPower_stub::fail_counter--;
 | 
			
		||||
        return NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
    return AT_CellularPower_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2018, Arm Limited and affiliates.
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef AT_CELLULARPOWER_STUB_H_
 | 
			
		||||
#define AT_CELLULARPOWER_STUB_H_
 | 
			
		||||
 | 
			
		||||
#include "AT_CellularPower.h"
 | 
			
		||||
 | 
			
		||||
namespace AT_CellularPower_stub {
 | 
			
		||||
extern nsapi_error_t nsapi_error_value;
 | 
			
		||||
extern int fail_counter;
 | 
			
		||||
extern int set_at_fail_counter;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* AT_CELLULARPOWER_STUB_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -15,13 +15,31 @@
 | 
			
		|||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "Thread.h"
 | 
			
		||||
#include "Thread_stub.h"
 | 
			
		||||
 | 
			
		||||
namespace rtos {
 | 
			
		||||
using namespace rtos;
 | 
			
		||||
 | 
			
		||||
osStatus Thread_stub::osStatus_value = osOK;
 | 
			
		||||
 | 
			
		||||
osStatus Thread::wait_until(uint64_t millisec)
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
osStatus Thread::terminate()
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
osStatus Thread::start(mbed::Callback<void()> task)
 | 
			
		||||
{
 | 
			
		||||
    return Thread_stub::osStatus_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Thread::constructor(osPriority priority, uint32_t stack_size, unsigned char *stack_mem, const char *name)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Thread::~Thread()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2018, Arm Limited and affiliates.
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef THREAD_STUB_H_
 | 
			
		||||
#define THREAD_STUB_H_
 | 
			
		||||
 | 
			
		||||
#include "Thread.h"
 | 
			
		||||
 | 
			
		||||
namespace Thread_stub {
 | 
			
		||||
extern osStatus osStatus_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* THREAD_STUB_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +24,7 @@
 | 
			
		|||
typedef int32_t                  osStatus;
 | 
			
		||||
 | 
			
		||||
#define osOK 0
 | 
			
		||||
 | 
			
		||||
#define osErrorNoMemory -5
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//These are from cmsis_os2.h
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,6 +85,7 @@ void CellularStateMachine::reset()
 | 
			
		|||
    _plmn_network_found = false;
 | 
			
		||||
    _is_retry = false;
 | 
			
		||||
    _network_status = 0;
 | 
			
		||||
    _target_state = STATE_INIT;
 | 
			
		||||
    enter_to_state(STATE_INIT);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -526,8 +527,13 @@ void CellularStateMachine::continue_from_state(CellularState state)
 | 
			
		|||
nsapi_error_t CellularStateMachine::run_to_state(CellularStateMachine::CellularState state)
 | 
			
		||||
{
 | 
			
		||||
    _mutex.lock();
 | 
			
		||||
 | 
			
		||||
    CellularState tmp_state = state;
 | 
			
		||||
    if (_plmn && tmp_state == STATE_REGISTERING_NETWORK) {
 | 
			
		||||
        tmp_state = STATE_MANUAL_REGISTERING_NETWORK;
 | 
			
		||||
    }
 | 
			
		||||
    // call pre_event via queue so that it's in same thread and it's safe to decisions
 | 
			
		||||
    int id = _queue.call_in(0, this, &CellularStateMachine::pre_event, state);
 | 
			
		||||
    int id = _queue.call_in(0, this, &CellularStateMachine::pre_event, tmp_state);
 | 
			
		||||
    if (!id) {
 | 
			
		||||
        stop();
 | 
			
		||||
        _mutex.unlock();
 | 
			
		||||
| 
						 | 
				
			
			@ -569,7 +575,11 @@ bool CellularStateMachine::get_current_status(CellularStateMachine::CellularStat
 | 
			
		|||
    _mutex.lock();
 | 
			
		||||
    current_state = _state;
 | 
			
		||||
    target_state = _target_state;
 | 
			
		||||
    is_running = _event_id != -1;
 | 
			
		||||
    if (_event_id == -1 || _event_id == STM_STOPPED) {
 | 
			
		||||
        is_running = false;
 | 
			
		||||
    } else {
 | 
			
		||||
        is_running = true;
 | 
			
		||||
    }
 | 
			
		||||
    _mutex.unlock();
 | 
			
		||||
    return is_running;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -671,8 +681,12 @@ void CellularStateMachine::set_cellular_callback(mbed::Callback<void(nsapi_event
 | 
			
		|||
 | 
			
		||||
bool CellularStateMachine::check_is_target_reached()
 | 
			
		||||
{
 | 
			
		||||
    tr_debug("check_is_target_reached(): target state %s, _state: %s, _cb_data.error: %d, _event_id: %d, _is_retry: %d", get_state_string(_target_state), get_state_string(_state), _cb_data.error, _event_id, _is_retry);
 | 
			
		||||
    if ((_target_state == _state && _cb_data.error == NSAPI_ERROR_OK && !_is_retry) || _event_id == STM_STOPPED) {
 | 
			
		||||
    if (((_target_state == _state || _target_state < _next_state) && _cb_data.error == NSAPI_ERROR_OK && !_is_retry) ||
 | 
			
		||||
            _event_id == STM_STOPPED) {
 | 
			
		||||
        if (_target_state != _state && _target_state < _next_state) {
 | 
			
		||||
            // we are skipping the state, update _state to current state because we have reached it
 | 
			
		||||
            _state = _target_state;
 | 
			
		||||
        }
 | 
			
		||||
        _event_id = -1;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -728,8 +742,12 @@ void CellularStateMachine::device_ready_cb()
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CellularStateMachine::set_retry_timeout_array(uint16_t timeout[], int array_len)
 | 
			
		||||
void CellularStateMachine::set_retry_timeout_array(const uint16_t timeout[], int array_len)
 | 
			
		||||
{
 | 
			
		||||
    if (!timeout || array_len <= 0) {
 | 
			
		||||
        tr_warn("set_retry_timeout_array, timeout array null or invalid length");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    _retry_array_length = array_len > RETRY_ARRAY_SIZE ? RETRY_ARRAY_SIZE : array_len;
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < _retry_array_length; i++) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -99,7 +99,7 @@ private:
 | 
			
		|||
     *  @param timeout      timeout array using seconds
 | 
			
		||||
     *  @param array_len    length of the array
 | 
			
		||||
     */
 | 
			
		||||
    void set_retry_timeout_array(uint16_t *timeout, int array_len);
 | 
			
		||||
    void set_retry_timeout_array(const uint16_t timeout[], int array_len);
 | 
			
		||||
 | 
			
		||||
    /** Sets the operator plmn which is used when registering to a network specified by plmn. If plmn is not set then automatic
 | 
			
		||||
     *  registering is used when registering to a cellular network. Does not start any operations.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue