mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Cellular: adding unit tests for new class CellularContext and changed classes.
							parent
							
								
									8a2044b5fc
								
							
						
					
					
						commit
						e5c3024849
					
				| 
						 | 
				
			
			@ -24,6 +24,10 @@
 | 
			
		|||
#include "CellularLog.h"
 | 
			
		||||
#include "ATHandler_stub.h"
 | 
			
		||||
#include "AT_CellularStack.h"
 | 
			
		||||
#include "Semaphore_stub.h"
 | 
			
		||||
#include "CellularDevice_stub.h"
 | 
			
		||||
#include "equeue_stub.h"
 | 
			
		||||
#include "CellularSIM.h"
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
using namespace events;
 | 
			
		||||
| 
						 | 
				
			
			@ -35,11 +39,30 @@ protected:
 | 
			
		|||
 | 
			
		||||
    void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        ATHandler_stub::nsapi_error_value = 0;
 | 
			
		||||
        ATHandler_stub::nsapi_error_ok_counter = 0;
 | 
			
		||||
        ATHandler_stub::int_value = -1;
 | 
			
		||||
        ATHandler_stub::ref_count = 0;
 | 
			
		||||
        ATHandler_stub::timeout = 0;
 | 
			
		||||
        ATHandler_stub::default_timeout = 0;
 | 
			
		||||
        ATHandler_stub::debug_on = 0;
 | 
			
		||||
        ATHandler_stub::ssize_value = 0;
 | 
			
		||||
        ATHandler_stub::read_string_value = NULL;
 | 
			
		||||
        ATHandler_stub::size_value = 0;
 | 
			
		||||
        ATHandler_stub::return_given_size = false;
 | 
			
		||||
        ATHandler_stub::bool_value = false;
 | 
			
		||||
        ATHandler_stub::uint8_value = 0;
 | 
			
		||||
        ATHandler_stub::fh_value = NULL;
 | 
			
		||||
        ATHandler_stub::callback = NULL;
 | 
			
		||||
        ATHandler_stub::call_immediately = false;
 | 
			
		||||
        ATHandler_stub::resp_info_true_counter = false;
 | 
			
		||||
        ATHandler_stub::info_elem_true_counter = false;
 | 
			
		||||
        ATHandler_stub::int_valid_count_table[kRead_int_table_size];
 | 
			
		||||
        ATHandler_stub::int_count = kRead_int_table_size;
 | 
			
		||||
        ATHandler_stub::read_string_index = kRead_string_table_size;
 | 
			
		||||
        ATHandler_stub::read_string_table[kRead_string_table_size];
 | 
			
		||||
        ATHandler_stub::resp_stop_success_count = kResp_stop_count_default;
 | 
			
		||||
        ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
        ATHandler_stub::int_value = -1;
 | 
			
		||||
        CellularDevice_stub::connect_counter = 2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void TearDown()
 | 
			
		||||
| 
						 | 
				
			
			@ -80,20 +103,32 @@ public:
 | 
			
		|||
    {
 | 
			
		||||
        return 100;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual const char *get_ip_address() { return "1.2.3.4";}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class my_AT_CTX : public AT_CellularContext {
 | 
			
		||||
public:
 | 
			
		||||
    my_AT_CTX(ATHandler &at, CellularDevice *device, const char *apn = MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN) :
 | 
			
		||||
        AT_CellularContext(at, device, apn) {}
 | 
			
		||||
        AT_CellularContext(at, device, apn), _st(at) {}
 | 
			
		||||
    virtual ~my_AT_CTX() {}
 | 
			
		||||
    virtual bool stack_type_supported(nsapi_ip_stack_t stack_type) { return false;}
 | 
			
		||||
    virtual NetworkStack *get_stack() {return &_st;}
 | 
			
		||||
    virtual uint32_t get_timeout_for_operation(ContextOperation op) const { return 10;}
 | 
			
		||||
    virtual void cellular_callback(nsapi_event_t ev, intptr_t ptr) { AT_CellularContext::cellular_callback(ev, ptr);}
 | 
			
		||||
 | 
			
		||||
    my_stack _st;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class my_AT_CTXIPV6 : public AT_CellularContext {
 | 
			
		||||
public:
 | 
			
		||||
    my_AT_CTXIPV6(ATHandler &at, CellularDevice *device, const char *apn = MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN) :
 | 
			
		||||
        AT_CellularContext(at, device, apn) {}
 | 
			
		||||
        AT_CellularContext(at, device, apn), _st(at) {}
 | 
			
		||||
    virtual ~my_AT_CTXIPV6() {}
 | 
			
		||||
    virtual bool stack_type_supported(nsapi_ip_stack_t stack_type) {return true;}
 | 
			
		||||
    virtual NetworkStack *get_stack() {return &_st;}
 | 
			
		||||
    virtual uint32_t get_timeout_for_operation(ContextOperation op) const { return 10;}
 | 
			
		||||
    my_stack _st;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int network_cb_count;
 | 
			
		||||
| 
						 | 
				
			
			@ -107,8 +142,438 @@ TEST_F(TestAT_CellularContext, Create)
 | 
			
		|||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
 | 
			
		||||
    AT_CellularContext *ctx = new AT_CellularContext(at, NULL);
 | 
			
		||||
    EXPECT_TRUE(ctx != NULL);
 | 
			
		||||
    delete ctx;
 | 
			
		||||
 | 
			
		||||
    ctx = new AT_CellularContext(at, &dev);
 | 
			
		||||
    EXPECT_TRUE(ctx != NULL);
 | 
			
		||||
    delete ctx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, set_blocking)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ctx.set_blocking(false));
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ctx.set_blocking(true));
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ctx.set_blocking(false));
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ctx.set_blocking(true));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, get_stack)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
    NetworkStack *stack = ctx.get_stack();
 | 
			
		||||
    EXPECT_TRUE(stack == NULL);
 | 
			
		||||
 | 
			
		||||
    my_AT_CTX ctx1(at, NULL);
 | 
			
		||||
    stack = ctx1.get_stack();
 | 
			
		||||
    EXPECT_TRUE(stack != NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, get_ip_address)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
    const char *ip = ctx.get_ip_address();
 | 
			
		||||
    EXPECT_TRUE(ip == NULL);
 | 
			
		||||
 | 
			
		||||
    my_AT_CTX ctx1(at, NULL);
 | 
			
		||||
    ip = ctx1.get_ip_address();
 | 
			
		||||
    EXPECT_TRUE(ip != NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, attach)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
    ctx.attach(&network_cb);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, set_plmn)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
    ctx.set_plmn(NULL);
 | 
			
		||||
    ctx.set_plmn("12345");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, set_sim_pin)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
    ctx.set_sim_pin(NULL);
 | 
			
		||||
    ctx.set_sim_pin("12345");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, set_credentials)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
 | 
			
		||||
    ctx.set_credentials(NULL);
 | 
			
		||||
    ctx.set_credentials("apn");
 | 
			
		||||
    ctx.set_credentials("apn", NULL);
 | 
			
		||||
    ctx.set_credentials("apn", NULL, NULL);
 | 
			
		||||
    ctx.set_credentials("apn", NULL, "passwd");
 | 
			
		||||
    ctx.set_credentials("apn", "user", NULL);
 | 
			
		||||
    ctx.set_credentials("apn", "user");
 | 
			
		||||
    ctx.set_credentials("apn", "user", "passwd");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, get_netmask_gateway)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
    const char* gg = ctx.get_netmask();
 | 
			
		||||
    EXPECT_TRUE(gg == NULL);
 | 
			
		||||
    gg = ctx.get_gateway();
 | 
			
		||||
    EXPECT_TRUE(gg == NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, get_pdpcontext_params)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext cn(at, &dev);
 | 
			
		||||
    CellularContext::pdpContextList_t list;
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    EXPECT_TRUE(NSAPI_ERROR_DEVICE_ERROR == cn.get_pdpcontext_params(list));
 | 
			
		||||
 | 
			
		||||
    // don't got to while loop
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ATHandler_stub::bool_value = false;
 | 
			
		||||
    ATHandler_stub::resp_info_true_counter = 0;
 | 
			
		||||
    ASSERT_EQ(cn.get_pdpcontext_params(list), NSAPI_ERROR_OK);
 | 
			
		||||
    EXPECT_TRUE(NULL == list.get_head());
 | 
			
		||||
 | 
			
		||||
    // go to while loop and check values
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ATHandler_stub::resp_info_true_counter = 1;
 | 
			
		||||
    ATHandler_stub::int_count = 9;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[8] = 1;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[7] = 2;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[6] = 3;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[5] = 4;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[4] = 5;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[3] = 6;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[2] = 7;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[1] = 8;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[0] = 9;
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::read_string_index = 7;
 | 
			
		||||
    ATHandler_stub::read_string_table[6] = (char *)"internet";
 | 
			
		||||
    ATHandler_stub::read_string_table[5] = (char *)"1.2.3.4.5.6.7.8.9.10.11.112.13.14.15.16.1.2.3.44.55.6.7.8.9.10.11.12.13.14.15.16";
 | 
			
		||||
    ATHandler_stub::read_string_table[4] = (char *)"23.33.44.1.2.3.55.123.225.34.11.1.0.0.123.234";
 | 
			
		||||
    ATHandler_stub::read_string_table[3] = (char *)"1.2.3.4";
 | 
			
		||||
    ATHandler_stub::read_string_table[2] = (char *)"0.255.0.255";
 | 
			
		||||
    ATHandler_stub::read_string_table[1] = (char *)"25.66.77.88";
 | 
			
		||||
    ATHandler_stub::read_string_table[0] = (char *)"004.003.002.001";
 | 
			
		||||
 | 
			
		||||
    EXPECT_TRUE(NSAPI_ERROR_OK == cn.get_pdpcontext_params(list));
 | 
			
		||||
    CellularContext::pdpcontext_params_t *params = list.get_head();
 | 
			
		||||
    EXPECT_TRUE(params != NULL);
 | 
			
		||||
    EXPECT_TRUE(params->next == NULL);
 | 
			
		||||
    ASSERT_EQ(params->cid,  1);
 | 
			
		||||
    ASSERT_EQ(params->bearer_id, 2);
 | 
			
		||||
    ASSERT_EQ(params->im_signalling_flag, 3);
 | 
			
		||||
    ASSERT_EQ(params->lipa_indication,  4);
 | 
			
		||||
    ASSERT_EQ(params->ipv4_mtu, 5);
 | 
			
		||||
    ASSERT_EQ(params->wlan_offload, 6);
 | 
			
		||||
    ASSERT_EQ(params->local_addr_ind, 7);
 | 
			
		||||
    ASSERT_EQ(params->non_ip_mtu, 8);
 | 
			
		||||
    ASSERT_EQ(params->serving_plmn_rate_control_value,  9);
 | 
			
		||||
    ASSERT_STREQ(params->apn, "internet");
 | 
			
		||||
    ASSERT_STREQ(params->local_addr, "102:304:506:708:90A:B70:D0E:F10");
 | 
			
		||||
    ASSERT_STREQ(params->local_subnet_mask, "102:32C:3706:708:90A:B0C:D0E:F10");
 | 
			
		||||
    ASSERT_STREQ(params->gateway_addr, "1721:2C01:203:377B:E122:B01:000:7BEA");
 | 
			
		||||
    ASSERT_STREQ(params->dns_primary_addr, "1.2.3.4");
 | 
			
		||||
    ASSERT_STREQ(params->dns_secondary_addr, "0.255.0.255");
 | 
			
		||||
    ASSERT_STREQ(params->p_cscf_prim_addr, "25.66.77.88");
 | 
			
		||||
    ASSERT_STREQ(params->p_cscf_sec_addr, "004.003.002.001");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, get_rate_control)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext cn(at, &dev);
 | 
			
		||||
    int ur = -1;
 | 
			
		||||
    CellularContext::RateControlExceptionReports reports = CellularContext::NotAllowedToBeSent;
 | 
			
		||||
    CellularContext::RateControlUplinkTimeUnit timeUnit = CellularContext::Unrestricted;
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_DEVICE_ERROR, cn.get_rate_control(reports, timeUnit, ur));
 | 
			
		||||
    ASSERT_EQ(reports, CellularContext::NotAllowedToBeSent);
 | 
			
		||||
    ASSERT_EQ(timeUnit, CellularContext::Unrestricted);
 | 
			
		||||
    ASSERT_EQ(ur, -1);
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ATHandler_stub::int_value = 1;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, cn.get_rate_control(reports, timeUnit, ur));
 | 
			
		||||
    ASSERT_EQ(reports,  CellularContext::AllowedToBeSent);
 | 
			
		||||
    ASSERT_EQ(timeUnit, CellularContext::Minute);
 | 
			
		||||
    ASSERT_EQ(ur, 1);
 | 
			
		||||
 | 
			
		||||
    // test second if in get_rate_control
 | 
			
		||||
    reports = CellularContext::NotAllowedToBeSent;
 | 
			
		||||
    timeUnit = CellularContext::Unrestricted;
 | 
			
		||||
    ur = -1;
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::int_count = 1;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[0] = 1;
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_DEVICE_ERROR, cn.get_rate_control(reports, timeUnit, ur));
 | 
			
		||||
    ASSERT_EQ(reports, CellularContext::NotAllowedToBeSent);
 | 
			
		||||
    ASSERT_EQ(timeUnit, CellularContext::Unrestricted);
 | 
			
		||||
    ASSERT_EQ(ur, -1);
 | 
			
		||||
 | 
			
		||||
    // test second if in get_rate_control
 | 
			
		||||
    ATHandler_stub::int_count = 2;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[0] = 1;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[1] = 1;
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_DEVICE_ERROR, cn.get_rate_control(reports, timeUnit, ur));
 | 
			
		||||
    ASSERT_EQ(reports, CellularContext::AllowedToBeSent);
 | 
			
		||||
    ASSERT_EQ(timeUnit, CellularContext::Unrestricted);
 | 
			
		||||
    ASSERT_EQ(ur, -1);
 | 
			
		||||
 | 
			
		||||
    // test third if in get_rate_control
 | 
			
		||||
    ATHandler_stub::int_count = 3;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[0] = 3;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[1] = 1;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[2] = 1;
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    EXPECT_TRUE(NSAPI_ERROR_DEVICE_ERROR == cn.get_rate_control(reports, timeUnit, ur));
 | 
			
		||||
    EXPECT_TRUE(reports == CellularContext::AllowedToBeSent);
 | 
			
		||||
    EXPECT_TRUE(timeUnit == CellularContext::Day);
 | 
			
		||||
    EXPECT_TRUE(ur == -1);
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::int_count = 4;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[0] = 5;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[1] = 3;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[2] = 1;
 | 
			
		||||
    ATHandler_stub::int_valid_count_table[3] = 1;
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, cn.get_rate_control(reports, timeUnit, ur));
 | 
			
		||||
    ASSERT_EQ(reports, CellularContext::AllowedToBeSent);
 | 
			
		||||
    ASSERT_EQ(timeUnit, CellularContext::Day);
 | 
			
		||||
    ASSERT_EQ(ur, 5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, get_apn_backoff_timer)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext cn(at, &dev);
 | 
			
		||||
    int time = -1;
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_PARAMETER, cn.get_apn_backoff_timer(time));
 | 
			
		||||
    ASSERT_EQ(time, -1);
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_PARAMETER, cn.get_apn_backoff_timer(time));
 | 
			
		||||
    ASSERT_EQ(time, -1);
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::resp_info_true_counter = 0;
 | 
			
		||||
    ATHandler_stub::bool_value = false;
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    cn.set_credentials("internet", NULL, NULL);
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, cn.get_apn_backoff_timer(time));
 | 
			
		||||
    ASSERT_EQ(time, -1);
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::resp_info_true_counter = 0;
 | 
			
		||||
    ATHandler_stub::bool_value = true;
 | 
			
		||||
    ATHandler_stub::int_value = 55;
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    cn.set_credentials("internet", NULL, NULL);
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, cn.get_apn_backoff_timer(time));
 | 
			
		||||
    ASSERT_EQ(time, 55);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, set_file_handle)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
    ctx.set_file_handle(&fh1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, connect_disconnect_sync)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    AT_CellularContext ctx(at, &dev);
 | 
			
		||||
    ctx.attach(&network_cb);
 | 
			
		||||
    network_cb_count = 0;
 | 
			
		||||
    // connect in sync mode, semaphore will return 0 so timeout is returned
 | 
			
		||||
    ASSERT_EQ(ctx.connect(), NSAPI_ERROR_TIMEOUT);
 | 
			
		||||
    ASSERT_EQ(network_cb_count, 0);
 | 
			
		||||
 | 
			
		||||
    my_AT_CTX ctx1(at, &dev);
 | 
			
		||||
    ctx1.attach(&network_cb);
 | 
			
		||||
    Semaphore_stub::wait_return_value = 1;
 | 
			
		||||
 | 
			
		||||
    // call callback so that network is opened which is needed in disconnect
 | 
			
		||||
    cell_callback_data_t data;
 | 
			
		||||
    data.error = NSAPI_ERROR_OK;
 | 
			
		||||
    ctx1.cellular_callback((nsapi_event_t)CellularDeviceReady, (intptr_t)&data);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(ctx1.connect(),  NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(network_cb_count, 4);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(ctx1.connect(), NSAPI_ERROR_IS_CONNECTED);
 | 
			
		||||
 | 
			
		||||
    EXPECT_TRUE(ctx1.is_connected() == true);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(ctx1.disconnect(), NSAPI_ERROR_OK);
 | 
			
		||||
    EXPECT_TRUE(ctx1.is_connected() == false);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(ctx1.connect("1234", "internet", "usern", "pwd"), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    // More connect test after we are re-writted getting of PDP context...
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, set_device_ready_sync)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    my_AT_CTX ctx(at, &dev);
 | 
			
		||||
    cell_callback_data_t data;
 | 
			
		||||
    data.error = NSAPI_ERROR_OK;
 | 
			
		||||
    ctx.cellular_callback((nsapi_event_t)CellularDeviceReady, (intptr_t)&data);
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ctx.set_device_ready());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, set_sim_ready)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    my_AT_CTX ctx(at, &dev);
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ctx.set_sim_ready());
 | 
			
		||||
    cell_callback_data_t data;
 | 
			
		||||
    data.error = NSAPI_ERROR_OK;
 | 
			
		||||
    ctx.cellular_callback((nsapi_event_t)CellularDeviceReady, (intptr_t)&data);
 | 
			
		||||
    data.status_data = CellularSIM::SimStateReady;
 | 
			
		||||
    ctx.cellular_callback((nsapi_event_t)CellularSIMStatusChanged, (intptr_t)&data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, register_to_network)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    my_AT_CTX ctx(at, &dev);
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ctx.register_to_network());
 | 
			
		||||
    cell_callback_data_t data;
 | 
			
		||||
    data.error = NSAPI_ERROR_OK;
 | 
			
		||||
    ctx.cellular_callback((nsapi_event_t)CellularDeviceReady, (intptr_t)&data);
 | 
			
		||||
    data.status_data = CellularNetwork::RegisteredHomeNetwork;
 | 
			
		||||
    ctx.cellular_callback((nsapi_event_t)CellularRegistrationStatusChanged, (intptr_t)&data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, attach_to_network)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    my_AT_CTX ctx(at, &dev);
 | 
			
		||||
    ASSERT_EQ(NSAPI_ERROR_OK, ctx.attach_to_network());
 | 
			
		||||
    cell_callback_data_t data;
 | 
			
		||||
    data.error = NSAPI_ERROR_OK;
 | 
			
		||||
    ctx.cellular_callback((nsapi_event_t)CellularDeviceReady, (intptr_t)&data);
 | 
			
		||||
    data.status_data = CellularNetwork::Attached;
 | 
			
		||||
    ctx.cellular_callback((nsapi_event_t)CellularAttachNetwork, (intptr_t)&data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularContext, connect_disconnect_async)
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    network_cb_count = 0;
 | 
			
		||||
 | 
			
		||||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    my_AT_CTX ctx1(at, &dev);
 | 
			
		||||
    ctx1.attach(&network_cb);
 | 
			
		||||
    ASSERT_EQ(ctx1.set_blocking(false), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(ctx1.connect(),  NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    // call callback so that network is opened which is needed in disconnect
 | 
			
		||||
    cell_callback_data_t data;
 | 
			
		||||
    data.error = NSAPI_ERROR_OK;
 | 
			
		||||
    ctx1.cellular_callback((nsapi_event_t)CellularDeviceReady, (intptr_t)&data);
 | 
			
		||||
 | 
			
		||||
    // attach ready, ctx will continue in callback
 | 
			
		||||
    data.status_data = CellularNetwork::Attached;
 | 
			
		||||
    ctx1.cellular_callback((nsapi_event_t)CellularAttachNetwork, (intptr_t)&data);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(network_cb_count, 5);
 | 
			
		||||
    ASSERT_EQ(ctx1.connect(), NSAPI_ERROR_IS_CONNECTED);
 | 
			
		||||
    EXPECT_TRUE(ctx1.is_connected() == true);
 | 
			
		||||
    ASSERT_EQ(ctx1.disconnect(), NSAPI_ERROR_OK);
 | 
			
		||||
    EXPECT_TRUE(ctx1.is_connected() == false);
 | 
			
		||||
 | 
			
		||||
    // sdet CellularDevice_stub::connect_counter = 0 so device is already attached and will return NSAPI_ERROR_ALREADY to context when calling connect
 | 
			
		||||
    CellularDevice_stub::connect_counter = 0;
 | 
			
		||||
    // queue can't allocate so return NSAPI_ERROR_NO_MEMORY
 | 
			
		||||
    ASSERT_EQ(ctx1.connect(), NSAPI_ERROR_NO_MEMORY);
 | 
			
		||||
 | 
			
		||||
    struct equeue_event ptr;
 | 
			
		||||
    equeue_stub.void_ptr = &ptr;
 | 
			
		||||
    equeue_stub.call_cb_immediately = true;
 | 
			
		||||
    ASSERT_EQ(ctx1.connect(), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    // More connect test after we are re-writted getting of PDP context...
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ set(unittest-includes ${unittest-includes}
 | 
			
		|||
# Source files
 | 
			
		||||
set(unittest-sources
 | 
			
		||||
  ../features/cellular/framework/AT/AT_CellularContext.cpp
 | 
			
		||||
  ../features/cellular/framework/common/CellularUtil.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Test files
 | 
			
		||||
| 
						 | 
				
			
			@ -21,15 +22,18 @@ set(unittest-test-sources
 | 
			
		|||
  features/cellular/framework/AT/at_cellularcontext/at_cellularcontexttest.cpp
 | 
			
		||||
  stubs/ATHandler_stub.cpp
 | 
			
		||||
  stubs/AT_CellularBase_stub.cpp
 | 
			
		||||
  stubs/EventQueue_stub.cpp
 | 
			
		||||
  stubs/FileHandle_stub.cpp
 | 
			
		||||
  stubs/NetworkInterface_stub.cpp
 | 
			
		||||
  stubs/NetworkStack_stub.cpp
 | 
			
		||||
  stubs/us_ticker_stub.cpp
 | 
			
		||||
  stubs/mbed_assert_stub.c
 | 
			
		||||
  stubs/AT_CellularDevice_stub.cpp
 | 
			
		||||
  stubs/AT_CellularStack_stub.cpp
 | 
			
		||||
  stubs/AT_CellularNetwork_stub.cpp
 | 
			
		||||
  stubs/CellularDevice_stub.cpp
 | 
			
		||||
  stubs/CellularStateMachine_stub.cpp
 | 
			
		||||
  stubs/Semaphore_stub.cpp
 | 
			
		||||
  stubs/CellularUtil_stub.cpp
 | 
			
		||||
  stubs/equeue_stub.c
 | 
			
		||||
  stubs/EventQueue_stub.cpp
 | 
			
		||||
  stubs/FileHandle_stub.cpp
 | 
			
		||||
  stubs/mbed_assert_stub.c
 | 
			
		||||
  stubs/NetworkInterface_stub.cpp
 | 
			
		||||
  stubs/NetworkStack_stub.cpp
 | 
			
		||||
  stubs/randLIB_stub.cpp
 | 
			
		||||
  stubs/Semaphore_stub.cpp
 | 
			
		||||
  stubs/us_ticker_stub.cpp
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,10 +15,10 @@
 | 
			
		|||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
#include "gtest/gtest.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "AT_CellularDevice.h"
 | 
			
		||||
#include "ATHandler_stub.h"
 | 
			
		||||
#include "AT_CellularBase_stub.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
using namespace events;
 | 
			
		||||
| 
						 | 
				
			
			@ -270,3 +270,40 @@ TEST_F(TestAT_CellularDevice, test_AT_CellularDevice_init_module)
 | 
			
		|||
    AT_CellularDevice dev(&fh1);
 | 
			
		||||
    EXPECT_TRUE(NSAPI_ERROR_OK == dev.init_module());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestAT_CellularDevice, test_AT_CellularDevice_create_delete_context)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    AT_CellularDevice *dev = new AT_CellularDevice(&fh1);
 | 
			
		||||
 | 
			
		||||
    CellularContext *ctx = dev->create_context(NULL);
 | 
			
		||||
    delete dev;
 | 
			
		||||
 | 
			
		||||
    dev = new AT_CellularDevice(&fh1);
 | 
			
		||||
    ctx = dev->create_context(NULL);
 | 
			
		||||
    CellularContext *ctx1 = dev->create_context(&fh1);
 | 
			
		||||
    CellularContext *ctx2 = dev->create_context(&fh1);
 | 
			
		||||
 | 
			
		||||
    EXPECT_TRUE(ctx);
 | 
			
		||||
    EXPECT_TRUE(ctx1);
 | 
			
		||||
    EXPECT_TRUE(ctx1 != ctx);
 | 
			
		||||
    EXPECT_TRUE(ctx1 != ctx2);
 | 
			
		||||
 | 
			
		||||
    CellularContext *xx = dev->get_context_list();
 | 
			
		||||
    EXPECT_TRUE(xx);
 | 
			
		||||
 | 
			
		||||
    dev->delete_context(ctx);
 | 
			
		||||
    dev->delete_context(ctx1);
 | 
			
		||||
    dev->delete_context(NULL);
 | 
			
		||||
    dev->delete_context(ctx2);
 | 
			
		||||
 | 
			
		||||
    ctx = dev->create_context(NULL);
 | 
			
		||||
    ctx1 = dev->create_context(&fh1);
 | 
			
		||||
    ctx2 = dev->create_context(&fh1);
 | 
			
		||||
    EXPECT_TRUE(ctx);
 | 
			
		||||
    EXPECT_TRUE(ctx1);
 | 
			
		||||
    EXPECT_TRUE(ctx1 != ctx);
 | 
			
		||||
    EXPECT_TRUE(ctx1 != ctx2);
 | 
			
		||||
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
 | 
			
		||||
# Add test specific include paths
 | 
			
		||||
set(unittest-includes ${unittest-includes}
 | 
			
		||||
  features/cellular/framework/common/util
 | 
			
		||||
  ../features/cellular/framework/common/util
 | 
			
		||||
  ../features/cellular/framework/common
 | 
			
		||||
  ../features/cellular/framework/AT
 | 
			
		||||
  ../features/cellular/framework/device
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,231 @@
 | 
			
		|||
/*
 | 
			
		||||
 * 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 "FileHandle_stub.h"
 | 
			
		||||
#include "myCellularDevice.h"
 | 
			
		||||
#include "CellularStateMachine_stub.h"
 | 
			
		||||
#include "CellularSIM.h"
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
 | 
			
		||||
// AStyle ignored as the definition is not clear due to preprocessor usage
 | 
			
		||||
// *INDENT-OFF*
 | 
			
		||||
class TestCellularDevice : public testing::Test {
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
    void SetUp()
 | 
			
		||||
    {
 | 
			
		||||
        CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
        CellularStateMachine_stub::get_current_target_state = STATE_INIT;
 | 
			
		||||
        CellularStateMachine_stub::get_current_current_state = STATE_INIT;
 | 
			
		||||
        CellularStateMachine_stub::bool_value = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void TearDown()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// *INDENT-ON*
 | 
			
		||||
TEST_F(TestCellularDevice, test_create_delete)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
    delete dev;
 | 
			
		||||
    dev = NULL;
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev1 = CellularDevice::get_default_instance();
 | 
			
		||||
    EXPECT_TRUE(dev1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_set_sim_pin)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    // MAX_PIN_SIZE = 8; so let's try a longer one
 | 
			
		||||
    dev->set_sim_pin("123480375462074360276407");
 | 
			
		||||
    dev->set_sim_pin(NULL);
 | 
			
		||||
    dev->set_sim_pin("1234");
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_set_plmn)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // MAX_PLMN_SIZE = 16; so let's try a longer one
 | 
			
		||||
    dev->set_plmn("123480327465023746502734602736073264076340");
 | 
			
		||||
    dev->set_plmn("1234");
 | 
			
		||||
    dev->set_plmn(NULL);
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_set_device_ready)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_NO_MEMORY;
 | 
			
		||||
    ASSERT_EQ(dev->set_device_ready(), NSAPI_ERROR_NO_MEMORY);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->set_device_ready(), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::get_current_current_state = STATE_SIM_PIN;
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->set_device_ready(), NSAPI_ERROR_ALREADY);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::bool_value = true;
 | 
			
		||||
    CellularStateMachine_stub::get_current_target_state = STATE_SIM_PIN;
 | 
			
		||||
    CellularStateMachine_stub::get_current_current_state = STATE_POWER_ON;
 | 
			
		||||
    ASSERT_EQ(dev->set_device_ready(), NSAPI_ERROR_IN_PROGRESS);
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_set_sim_ready)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_NO_MEMORY;
 | 
			
		||||
    ASSERT_EQ(dev->set_sim_ready(), NSAPI_ERROR_NO_MEMORY);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->set_sim_ready(), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::get_current_current_state = STATE_MANUAL_REGISTERING_NETWORK;
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->set_sim_ready(), NSAPI_ERROR_ALREADY);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::bool_value = true;
 | 
			
		||||
    CellularStateMachine_stub::get_current_target_state = STATE_MANUAL_REGISTERING_NETWORK;
 | 
			
		||||
    CellularStateMachine_stub::get_current_current_state = STATE_POWER_ON;
 | 
			
		||||
    ASSERT_EQ(dev->set_sim_ready(), NSAPI_ERROR_IN_PROGRESS);
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_register_to_network)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_NO_MEMORY;
 | 
			
		||||
    ASSERT_EQ(dev->register_to_network(), NSAPI_ERROR_NO_MEMORY);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->register_to_network(), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::get_current_current_state = STATE_ATTACHING_NETWORK;
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->register_to_network(), NSAPI_ERROR_ALREADY);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::bool_value = true;
 | 
			
		||||
    CellularStateMachine_stub::get_current_target_state = STATE_ATTACHING_NETWORK;
 | 
			
		||||
    CellularStateMachine_stub::get_current_current_state = STATE_POWER_ON;
 | 
			
		||||
    ASSERT_EQ(dev->register_to_network(), NSAPI_ERROR_IN_PROGRESS);
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_attach_to_network)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_NO_MEMORY;
 | 
			
		||||
    ASSERT_EQ(dev->attach_to_network(), NSAPI_ERROR_NO_MEMORY);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->attach_to_network(), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::get_current_current_state = STATE_ATTACHING_NETWORK;
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->attach_to_network(), NSAPI_ERROR_ALREADY);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::bool_value = true;
 | 
			
		||||
    CellularStateMachine_stub::get_current_target_state = STATE_ATTACHING_NETWORK;
 | 
			
		||||
    CellularStateMachine_stub::get_current_current_state = STATE_POWER_ON;
 | 
			
		||||
    ASSERT_EQ(dev->attach_to_network(), NSAPI_ERROR_IN_PROGRESS);
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_get_context_list)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
    CellularContext *ctx = dev->create_context();
 | 
			
		||||
    EXPECT_TRUE(dev->get_context_list());
 | 
			
		||||
    delete dev;
 | 
			
		||||
    dev = NULL;
 | 
			
		||||
 | 
			
		||||
    dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
    EXPECT_FALSE(dev->get_context_list());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_stop)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    CellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
    ASSERT_EQ(dev->attach_to_network(), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    dev->stop();
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestCellularDevice, test_cellular_callback)
 | 
			
		||||
{
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    myCellularDevice *dev = new myCellularDevice(&fh1);
 | 
			
		||||
    EXPECT_TRUE(dev);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(dev->attach_to_network(), NSAPI_ERROR_OK);
 | 
			
		||||
 | 
			
		||||
    cell_callback_data_t data;
 | 
			
		||||
    dev->cellular_callback((nsapi_event_t)CellularRegistrationStatusChanged, (intptr_t)&data);
 | 
			
		||||
 | 
			
		||||
    data.error = NSAPI_ERROR_OK;
 | 
			
		||||
    dev->set_plmn("1234");
 | 
			
		||||
    dev->cellular_callback((nsapi_event_t)CellularDeviceReady, (intptr_t)&data);
 | 
			
		||||
 | 
			
		||||
    dev->set_sim_pin("1234");
 | 
			
		||||
    data.status_data = CellularSIM::SimStatePinNeeded;
 | 
			
		||||
    dev->cellular_callback((nsapi_event_t)CellularSIMStatusChanged, (intptr_t)&data);
 | 
			
		||||
 | 
			
		||||
    CellularContext *ctx = dev->create_context();
 | 
			
		||||
    dev->cellular_callback(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, NSAPI_STATUS_DISCONNECTED);
 | 
			
		||||
 | 
			
		||||
    delete dev;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
 | 
			
		||||
####################
 | 
			
		||||
# UNIT TESTS
 | 
			
		||||
####################
 | 
			
		||||
 | 
			
		||||
# Add test specific include paths
 | 
			
		||||
set(unittest-includes ${unittest-includes}
 | 
			
		||||
    /features/cellular/framework/device/cellulardevice
 | 
			
		||||
  ../features/cellular/framework/device
 | 
			
		||||
  ../features/cellular/framework/common
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Source files
 | 
			
		||||
set(unittest-sources
 | 
			
		||||
  ../features/cellular/framework/device/CellularDevice.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Test files
 | 
			
		||||
set(unittest-test-sources
 | 
			
		||||
  features/cellular/framework/device/cellulardevice/cellulardevicetest.cpp
 | 
			
		||||
  stubs/FileHandle_stub.cpp
 | 
			
		||||
  stubs/CellularStateMachine_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_CellularBase_stub.cpp
 | 
			
		||||
  stubs/AT_CellularContext_stub.cpp
 | 
			
		||||
  stubs/Semaphore_stub.cpp
 | 
			
		||||
  stubs/NetworkInterface_stub.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# 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")
 | 
			
		||||
| 
						 | 
				
			
			@ -170,6 +170,7 @@ ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag)
 | 
			
		|||
    if (ATHandler_stub::read_string_index == kRead_string_table_size) {
 | 
			
		||||
        if (ATHandler_stub::read_string_value && ATHandler_stub::ssize_value >= 0) {
 | 
			
		||||
            memcpy(buf, ATHandler_stub::read_string_value, ATHandler_stub::ssize_value + 1);
 | 
			
		||||
            buf[ATHandler_stub::ssize_value] = '\0';
 | 
			
		||||
        }
 | 
			
		||||
        return ATHandler_stub::ssize_value;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -179,6 +180,7 @@ ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag)
 | 
			
		|||
        const char *tmp = ATHandler_stub::read_string_table[ATHandler_stub::read_string_index];
 | 
			
		||||
        ssize_t len = strlen(tmp);
 | 
			
		||||
        memcpy(buf, tmp, len + 1);
 | 
			
		||||
        buf[len] = '\0';
 | 
			
		||||
        return len;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,19 +16,28 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
#include "AT_CellularDevice.h"
 | 
			
		||||
#include "AT_CellularNetwork.h"
 | 
			
		||||
#include "ATHandler.h"
 | 
			
		||||
 | 
			
		||||
AT_CellularDevice::AT_CellularDevice(EventQueue &queue) :
 | 
			
		||||
    _atHandlers(0), _network(0), _sms(0), _sim(0), _power(0), _multiplexer(0), _information(0), _queue(queue)
 | 
			
		||||
const int DEFAULT_AT_TIMEOUT = 1000;
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
 | 
			
		||||
AT_CellularDevice::AT_CellularDevice(FileHandle *fh) : CellularDevice(fh), _network(0), _sms(0),
 | 
			
		||||
        _sim(0), _power(0), _information(0), _context_list(0), _default_timeout(DEFAULT_AT_TIMEOUT),
 | 
			
		||||
        _modem_debug_on(false)
 | 
			
		||||
{
 | 
			
		||||
    _atHandlers = new ATHandler(fh, _queue, 0, ",");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AT_CellularDevice::~AT_CellularDevice()
 | 
			
		||||
{
 | 
			
		||||
    delete _atHandlers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ATHandler *AT_CellularDevice::get_at_handler(FileHandle *fileHandle)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return _atHandlers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AT_CellularDevice::release_at_handler(ATHandler *at_handler)
 | 
			
		||||
| 
						 | 
				
			
			@ -36,9 +45,19 @@ void AT_CellularDevice::release_at_handler(ATHandler *at_handler)
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularContext *create_context(FileHandle *fh = NULL, const char *apn = MBED_CONF_NSAPI_DEFAULT_CELLULAR_APN)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void delete_context(CellularContext *context)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularNetwork *AT_CellularDevice::open_network(FileHandle *fh)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return new AT_CellularNetwork(*_atHandlers);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularSMS *AT_CellularDevice::open_sms(FileHandle *fh)
 | 
			
		||||
| 
						 | 
				
			
			@ -56,11 +75,6 @@ CellularPower *AT_CellularDevice::open_power(FileHandle *fh)
 | 
			
		|||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularMultiplexer *AT_CellularDevice::open_multiplexer(FileHandle *fh)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularInformation *AT_CellularDevice::open_information(FileHandle *fh)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -82,10 +96,72 @@ void AT_CellularDevice::close_sim()
 | 
			
		|||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AT_CellularDevice::close_multiplexer()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AT_CellularDevice::close_information()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularContext *AT_CellularDevice::get_context_list() const
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularContext *AT_CellularDevice::create_context(FileHandle *fh, const char *apn)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AT_CellularContext *AT_CellularDevice::create_context_impl(ATHandler &at, const char *apn)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AT_CellularDevice::delete_context(CellularContext *context)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AT_CellularNetwork *AT_CellularDevice::open_network_impl(ATHandler &at)
 | 
			
		||||
{
 | 
			
		||||
    return new AT_CellularNetwork(at);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AT_CellularSMS *AT_CellularDevice::open_sms_impl(ATHandler &at)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AT_CellularPower *AT_CellularDevice::open_power_impl(ATHandler &at)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AT_CellularSIM *AT_CellularDevice::open_sim_impl(ATHandler &at)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AT_CellularInformation *AT_CellularDevice::open_information_impl(ATHandler &at)
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AT_CellularDevice::set_timeout(int timeout)
 | 
			
		||||
{
 | 
			
		||||
    _default_timeout = timeout;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint16_t AT_CellularDevice::get_send_delay() const
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AT_CellularDevice::modem_debug_on(bool on)
 | 
			
		||||
{
 | 
			
		||||
    _modem_debug_on = on;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularDevice::init_module()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,9 +19,10 @@
 | 
			
		|||
#include "CellularUtil.h"
 | 
			
		||||
#include "CellularLog.h"
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
using namespace mbed_cellular_util;
 | 
			
		||||
 | 
			
		||||
AT_CellularStack::AT_CellularStack(ATHandler &atHandler, int cid, nsapi_ip_stack_t stack_type) : _at(atHandler), _socket(NULL), _cid(cid), _stack_type(stack_type)
 | 
			
		||||
AT_CellularStack::AT_CellularStack(ATHandler &atHandler, int cid, nsapi_ip_stack_t stack_type) : AT_CellularBase(atHandler), _socket(NULL), _cid(cid), _stack_type(stack_type)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -29,6 +30,11 @@ AT_CellularStack::~AT_CellularStack()
 | 
			
		|||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t AT_CellularStack::socket_stack_init()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *AT_CellularStack::get_ip_address()
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,10 +16,14 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
#include "CellularDevice.h"
 | 
			
		||||
#include "CellularDevice_stub.h"
 | 
			
		||||
#include "EventQueue.h"
 | 
			
		||||
#include "CellularUtil.h"
 | 
			
		||||
 | 
			
		||||
namespace mbed {
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
 | 
			
		||||
int CellularDevice_stub::connect_counter = -1;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MBED_WEAK CellularDevice *CellularDevice::get_default_instance()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +42,7 @@ CellularDevice::~CellularDevice()
 | 
			
		|||
 | 
			
		||||
events::EventQueue *CellularDevice::get_queue()
 | 
			
		||||
{
 | 
			
		||||
    return NULL;
 | 
			
		||||
    return &_queue;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CellularDevice::set_plmn(char const *)
 | 
			
		||||
| 
						 | 
				
			
			@ -71,9 +75,15 @@ nsapi_error_t CellularDevice::register_to_network()
 | 
			
		|||
 | 
			
		||||
nsapi_error_t CellularDevice::attach_to_network()
 | 
			
		||||
{
 | 
			
		||||
    if (CellularDevice_stub::connect_counter == 0) {
 | 
			
		||||
        return NSAPI_ERROR_ALREADY;
 | 
			
		||||
    } else  if (CellularDevice_stub::connect_counter == 1) {
 | 
			
		||||
        CellularDevice_stub::connect_counter--;
 | 
			
		||||
        return NSAPI_ERROR_IN_PROGRESS;
 | 
			
		||||
    } else if (CellularDevice_stub::connect_counter == 2) {
 | 
			
		||||
        CellularDevice_stub::connect_counter--;
 | 
			
		||||
        return NSAPI_ERROR_OK;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 CELLULARDEVICE_STUB_H_
 | 
			
		||||
#define CELLULARDEVICE_STUB_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace CellularDevice_stub {
 | 
			
		||||
extern int connect_counter;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* CELLULARDEVICE_STUB_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -15,23 +15,29 @@
 | 
			
		|||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "CellularStateMachine.h"
 | 
			
		||||
#include "CellularStateMachine_stub.h"
 | 
			
		||||
#include "CellularDevice.h"
 | 
			
		||||
 | 
			
		||||
namespace mbed {
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
 | 
			
		||||
nsapi_error_t CellularStateMachine_stub::nsapi_error_value = NSAPI_ERROR_OK;
 | 
			
		||||
CellularStubState CellularStateMachine_stub::get_current_target_state = STATE_INIT;
 | 
			
		||||
CellularStubState CellularStateMachine_stub::get_current_current_state = STATE_INIT;
 | 
			
		||||
bool CellularStateMachine_stub::bool_value = false;
 | 
			
		||||
 | 
			
		||||
CellularStateMachine::CellularStateMachine(CellularDevice &device, events::EventQueue &queue) :
 | 
			
		||||
    _cellularDevice(device), _queue(queue)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CellularStateMachine::~CellularStateMachine()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CellularStateMachine::reset()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CellularStateMachine::stop()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -46,21 +52,25 @@ void CellularStateMachine::set_plmn(const char *plmn)
 | 
			
		|||
 | 
			
		||||
nsapi_error_t CellularStateMachine::run_to_state(CellularStateMachine::CellularState state)
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    return CellularStateMachine_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CellularStateMachine::get_current_status(CellularStateMachine::CellularState ¤t_state, CellularStateMachine::CellularState &target_state)
 | 
			
		||||
{
 | 
			
		||||
    return true;
 | 
			
		||||
    target_state = (CellularStateMachine::CellularState)CellularStateMachine_stub::get_current_target_state;
 | 
			
		||||
    current_state = (CellularStateMachine::CellularState)CellularStateMachine_stub::get_current_current_state;
 | 
			
		||||
    return CellularStateMachine_stub::bool_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t CellularStateMachine::start_dispatch()
 | 
			
		||||
{
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    return CellularStateMachine_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CellularStateMachine::set_cellular_callback(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CellularStateMachine::cellular_event_changed(nsapi_event_t ev, intptr_t ptr)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
/*
 | 
			
		||||
 * 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 CELLULARSTATEMACHINE_STUB_H_
 | 
			
		||||
#define CELLULARSTATEMACHINE_STUB_H_
 | 
			
		||||
 | 
			
		||||
#include "CellularStateMachine.h"
 | 
			
		||||
 | 
			
		||||
enum CellularStubState {
 | 
			
		||||
        STATE_INIT = 0,
 | 
			
		||||
        STATE_POWER_ON,
 | 
			
		||||
        STATE_DEVICE_READY,
 | 
			
		||||
        STATE_SIM_PIN,
 | 
			
		||||
        STATE_REGISTERING_NETWORK,
 | 
			
		||||
        STATE_MANUAL_REGISTERING_NETWORK,
 | 
			
		||||
        STATE_ATTACHING_NETWORK,
 | 
			
		||||
        STATE_MAX_FSM_STATE
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
namespace CellularStateMachine_stub {
 | 
			
		||||
extern nsapi_error_t nsapi_error_value;
 | 
			
		||||
extern CellularStubState get_current_target_state;
 | 
			
		||||
extern CellularStubState get_current_current_state;
 | 
			
		||||
extern bool bool_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* CELLULARSTATEMACHINE_STUB_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,9 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
#include "Semaphore.h"
 | 
			
		||||
#include "Semaphore_stub.h"
 | 
			
		||||
 | 
			
		||||
int Semaphore_stub::wait_return_value = 0;
 | 
			
		||||
 | 
			
		||||
namespace rtos {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -36,12 +39,12 @@ void Semaphore::constructor(int32_t count, uint16_t max_count)
 | 
			
		|||
 | 
			
		||||
int32_t Semaphore::wait(uint32_t millisec)
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
    return Semaphore_stub::wait_return_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t Semaphore::wait_until(uint64_t millisec)
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
    return Semaphore_stub::wait_return_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
osStatus Semaphore::release(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 MBED_OS_UNITTESTS_STUBS_SEMAPHORE_STUB_H_
 | 
			
		||||
#define MBED_OS_UNITTESTS_STUBS_SEMAPHORE_STUB_H_
 | 
			
		||||
 | 
			
		||||
namespace Semaphore_stub {
 | 
			
		||||
extern int wait_return_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* MBED_OS_UNITTESTS_STUBS_SEMAPHORE_STUB_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -124,4 +124,10 @@ void UARTSerial::wait_ms(uint32_t millisec)
 | 
			
		|||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UARTSerial::set_flow_control(mbed::SerialBase::Flow, PinName, PinName)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,8 @@ typedef enum {
 | 
			
		|||
} PinDirection;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    PTC0 = 0,
 | 
			
		||||
    PTC1 = 1,
 | 
			
		||||
    NC = (int)0xFFFFFFFF
 | 
			
		||||
} PinName;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
/*
 | 
			
		||||
 * 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 MY_CELLULARDEVICE_H_
 | 
			
		||||
#define MY_CELLULARDEVICE_H_
 | 
			
		||||
 | 
			
		||||
#include "CellularDevice.h"
 | 
			
		||||
#include "AT_CellularNetwork.h"
 | 
			
		||||
#include "FileHandle_stub.h"
 | 
			
		||||
#include "ATHandler_stub.h"
 | 
			
		||||
#include "AT_CellularContext.h"
 | 
			
		||||
 | 
			
		||||
using namespace events;
 | 
			
		||||
 | 
			
		||||
namespace mbed {
 | 
			
		||||
 | 
			
		||||
class CellularPower;
 | 
			
		||||
class CellularSMS;
 | 
			
		||||
class CellularSIM;
 | 
			
		||||
class CellularInformation;
 | 
			
		||||
class CellularContext;
 | 
			
		||||
class FileHandle;
 | 
			
		||||
 | 
			
		||||
class myCellularDevice : public CellularDevice
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    myCellularDevice(FileHandle *fh) : CellularDevice (fh), _context_list(0), _network(0) {}
 | 
			
		||||
    ~myCellularDevice() {
 | 
			
		||||
        delete _context_list;
 | 
			
		||||
        delete _network;
 | 
			
		||||
    }
 | 
			
		||||
    virtual CellularContext *create_context(FileHandle *fh = NULL, const char *apn = NULL) {
 | 
			
		||||
        EventQueue que;
 | 
			
		||||
        FileHandle_stub fh1;
 | 
			
		||||
        ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
        _context_list = new AT_CellularContext(at, NULL);
 | 
			
		||||
        return _context_list;}
 | 
			
		||||
    virtual void delete_context(CellularContext *context) { delete _context_list;}
 | 
			
		||||
 | 
			
		||||
    virtual CellularNetwork *open_network(FileHandle *fh = NULL) {
 | 
			
		||||
        EventQueue que;
 | 
			
		||||
        FileHandle_stub fh1;
 | 
			
		||||
        ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
        _network = new AT_CellularNetwork(at);
 | 
			
		||||
        return _network;}
 | 
			
		||||
 | 
			
		||||
    virtual CellularSMS *open_sms(FileHandle *fh = NULL) {return NULL;}
 | 
			
		||||
 | 
			
		||||
    virtual CellularPower *open_power(FileHandle *fh = NULL) {return NULL;}
 | 
			
		||||
 | 
			
		||||
    virtual CellularSIM *open_sim(FileHandle *fh = NULL) {return NULL;}
 | 
			
		||||
 | 
			
		||||
    virtual CellularInformation *open_information(FileHandle *fh = NULL) {return NULL;}
 | 
			
		||||
 | 
			
		||||
    virtual void close_network(){delete _network;}
 | 
			
		||||
 | 
			
		||||
    virtual void close_sms(){}
 | 
			
		||||
 | 
			
		||||
    virtual void close_power(){}
 | 
			
		||||
 | 
			
		||||
    virtual void close_sim(){}
 | 
			
		||||
 | 
			
		||||
    virtual void close_information(){}
 | 
			
		||||
 | 
			
		||||
    virtual void set_timeout(int timeout){}
 | 
			
		||||
 | 
			
		||||
    virtual uint16_t get_send_delay() const{ return 0;}
 | 
			
		||||
 | 
			
		||||
    virtual void modem_debug_on(bool on){}
 | 
			
		||||
 | 
			
		||||
    virtual nsapi_error_t init_module(){ return 0;}
 | 
			
		||||
 | 
			
		||||
    virtual CellularContext *get_context_list() const { return _context_list;}
 | 
			
		||||
    void cellular_callback(nsapi_event_t ev, intptr_t ptr) {CellularDevice::cellular_callback(ev, ptr);}
 | 
			
		||||
    AT_CellularNetwork *_network;
 | 
			
		||||
    AT_CellularContext *_context_list;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace
 | 
			
		||||
#endif /* MY_CELLULARDEVICE_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -1,272 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * 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 "CppUTest/TestHarness.h"
 | 
			
		||||
#include "test_at_cellulardevice.h"
 | 
			
		||||
#include "AT_CellularDevice.h"
 | 
			
		||||
#include "ATHandler_stub.h"
 | 
			
		||||
#include "AT_CellularBase_stub.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
using namespace events;
 | 
			
		||||
 | 
			
		||||
Test_AT_CellularDevice::Test_AT_CellularDevice()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Test_AT_CellularDevice::~Test_AT_CellularDevice()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_constructor()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
 | 
			
		||||
    CellularDevice *dev2 = new AT_CellularDevice(que);
 | 
			
		||||
    delete dev2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_get_at_handler()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    FileHandle_stub fh2;
 | 
			
		||||
    FileHandle_stub fh3;
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_network(&fh1));
 | 
			
		||||
    CHECK(dev.open_sms(&fh2));
 | 
			
		||||
    AT_CellularBase_stub::handler_value = AT_CellularBase_stub::handler_at_constructor_value;
 | 
			
		||||
    CHECK(dev.open_sim(&fh3));
 | 
			
		||||
    ATHandler_stub::fh_value = &fh1;
 | 
			
		||||
    CHECK(dev.open_power(&fh1));
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::fh_value = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_open_network()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CHECK(!dev.open_network(NULL));
 | 
			
		||||
    CHECK(dev.open_network(&fh1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_open_sms()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CHECK(!dev.open_sms(NULL));
 | 
			
		||||
    CHECK(dev.open_sms(&fh1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_open_power()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CHECK(!dev.open_power(NULL));
 | 
			
		||||
    CHECK(dev.open_power(&fh1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_open_sim()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CHECK(! dev.open_sim(NULL));
 | 
			
		||||
    CHECK(dev.open_sim(&fh1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_open_information()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    CHECK(!dev.open_information(NULL));
 | 
			
		||||
    CHECK(dev.open_information(&fh1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_close_network()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler_stub::ref_count = 0;
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_network(&fh1));
 | 
			
		||||
    AT_CellularBase_stub::handler_value = AT_CellularBase_stub::handler_at_constructor_value;
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    dev.close_network();
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == kATHandler_destructor_ref_ount);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_close_sms()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler_stub::ref_count = 0;
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_sms(&fh1));
 | 
			
		||||
    AT_CellularBase_stub::handler_value = AT_CellularBase_stub::handler_at_constructor_value;
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    dev.close_sms();
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == kATHandler_destructor_ref_ount);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_close_power()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler_stub::ref_count = 0;
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_power(&fh1));
 | 
			
		||||
    AT_CellularBase_stub::handler_value = AT_CellularBase_stub::handler_at_constructor_value;
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    dev.close_power();
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == kATHandler_destructor_ref_ount);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_close_sim()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler_stub::ref_count = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_sim(&fh1));
 | 
			
		||||
    AT_CellularBase_stub::handler_value = AT_CellularBase_stub::handler_at_constructor_value;
 | 
			
		||||
 | 
			
		||||
    dev.close_sms(); // this should not affect to refcount as it's not opened
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    dev.close_sim();
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == kATHandler_destructor_ref_ount);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_close_information()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler_stub::int_value = 0;
 | 
			
		||||
    ATHandler_stub::ref_count = 0;
 | 
			
		||||
    ATHandler_stub::fh_value = NULL;
 | 
			
		||||
    AT_CellularBase_stub::handler_value = NULL;
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_information(&fh1));
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    // at handler is not found as it's NULL (e.g. AT_CellularBase_stub::handler_value is NULL)
 | 
			
		||||
    dev.close_information();
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    // same filehandle but different at
 | 
			
		||||
    ATHandler_stub::fh_value = &fh1;
 | 
			
		||||
    ATHandler at(&fh1, que, 0, ",");
 | 
			
		||||
    AT_CellularBase_stub::handler_value = &at;
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_information(&fh1));
 | 
			
		||||
    // refcount is two it's one when we create athandler and then in open_information it's incremented by one
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 2);
 | 
			
		||||
 | 
			
		||||
    dev.close_information();
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::fh_value = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_set_timeout()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler_stub::timeout = 0;
 | 
			
		||||
    ATHandler_stub::default_timeout = false;
 | 
			
		||||
 | 
			
		||||
    // no interfaces open so settings timeout should not change anything
 | 
			
		||||
    dev.set_timeout(5000);
 | 
			
		||||
    CHECK(ATHandler_stub::timeout == 0);
 | 
			
		||||
    CHECK(ATHandler_stub::default_timeout == false);
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_sim(&fh1));
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    dev.set_timeout(5000);
 | 
			
		||||
    CHECK(ATHandler_stub::timeout == 5000);
 | 
			
		||||
    CHECK(ATHandler_stub::default_timeout == true);
 | 
			
		||||
 | 
			
		||||
    dev.close_sim();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_get_send_delay()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    CHECK(0 == dev.get_send_delay());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_modem_debug_on()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
    ATHandler_stub::debug_on = false;
 | 
			
		||||
 | 
			
		||||
    // no interfaces open so debug toggling should not affect
 | 
			
		||||
    dev.modem_debug_on(true);
 | 
			
		||||
    CHECK(ATHandler_stub::debug_on == false);
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_sim(&fh1));
 | 
			
		||||
    CHECK(ATHandler_stub::ref_count == 1);
 | 
			
		||||
 | 
			
		||||
    dev.modem_debug_on(true);
 | 
			
		||||
    CHECK(ATHandler_stub::debug_on == true);
 | 
			
		||||
 | 
			
		||||
    dev.close_sim();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Test_AT_CellularDevice::test_AT_CellularDevice_get_stack()
 | 
			
		||||
{
 | 
			
		||||
    EventQueue que;
 | 
			
		||||
    AT_CellularDevice dev(que);
 | 
			
		||||
    FileHandle_stub fh1;
 | 
			
		||||
 | 
			
		||||
    NetworkStack *stack = dev.get_stack();
 | 
			
		||||
    CHECK(stack == NULL);
 | 
			
		||||
 | 
			
		||||
    CHECK(dev.open_network(&fh1));
 | 
			
		||||
 | 
			
		||||
    stack = dev.get_stack();
 | 
			
		||||
    CHECK(stack == NULL); // Not in PPP so also null but this is got from the network class
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,297 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2017, 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 <ctype.h>
 | 
			
		||||
#include "nsapi_types.h"
 | 
			
		||||
#include "ATHandler.h"
 | 
			
		||||
#include "EventQueue.h"
 | 
			
		||||
#include "ATHandler_stub.h"
 | 
			
		||||
 | 
			
		||||
using namespace mbed;
 | 
			
		||||
using namespace events;
 | 
			
		||||
 | 
			
		||||
#include "CellularLog.h"
 | 
			
		||||
 | 
			
		||||
const int DEFAULT_AT_TIMEOUT = 1000; // at default timeout in milliseconds
 | 
			
		||||
 | 
			
		||||
nsapi_error_t ATHandler_stub::nsapi_error_value = 0;
 | 
			
		||||
uint8_t ATHandler_stub::nsapi_error_ok_counter = 0;
 | 
			
		||||
int ATHandler_stub::int_value = -1;
 | 
			
		||||
int ATHandler_stub::ref_count = 0;
 | 
			
		||||
int ATHandler_stub::timeout = 0;
 | 
			
		||||
bool ATHandler_stub::default_timeout = 0;
 | 
			
		||||
bool ATHandler_stub::debug_on = 0;
 | 
			
		||||
ssize_t ATHandler_stub::ssize_value = 0;
 | 
			
		||||
char *ATHandler_stub::read_string_value = NULL;
 | 
			
		||||
size_t ATHandler_stub::size_value = 0;
 | 
			
		||||
size_t ATHandler_stub::return_given_size = false;
 | 
			
		||||
bool ATHandler_stub::bool_value = false;
 | 
			
		||||
uint8_t ATHandler_stub::uint8_value = 0;
 | 
			
		||||
FileHandle_stub *ATHandler_stub::fh_value = NULL;
 | 
			
		||||
device_err_t ATHandler_stub::device_err_value;
 | 
			
		||||
Callback<void()> ATHandler_stub::callback = NULL;
 | 
			
		||||
uint8_t ATHandler_stub::resp_info_true_counter = false;
 | 
			
		||||
uint8_t ATHandler_stub::info_elem_true_counter = false;
 | 
			
		||||
int ATHandler_stub::int_valid_count_table[kRead_int_table_size];
 | 
			
		||||
int ATHandler_stub::int_count = kRead_int_table_size;
 | 
			
		||||
 | 
			
		||||
int ATHandler_stub::read_string_index = kRead_string_table_size;
 | 
			
		||||
char *ATHandler_stub::read_string_table[kRead_string_table_size];
 | 
			
		||||
int ATHandler_stub::resp_stop_success_count = kResp_stop_count_default;
 | 
			
		||||
 | 
			
		||||
ATHandler::ATHandler(FileHandle *fh, EventQueue &queue, int timeout, const char *output_delimiter, uint16_t send_delay) :
 | 
			
		||||
    _nextATHandler(0),
 | 
			
		||||
    _fileHandle(fh),
 | 
			
		||||
    _queue(queue)
 | 
			
		||||
{
 | 
			
		||||
    ATHandler_stub::ref_count = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::set_debug(bool debug_on)
 | 
			
		||||
{
 | 
			
		||||
    ATHandler_stub::debug_on = debug_on;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ATHandler::~ATHandler()
 | 
			
		||||
{
 | 
			
		||||
    ATHandler_stub::ref_count = kATHandler_destructor_ref_ount;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::inc_ref_count()
 | 
			
		||||
{
 | 
			
		||||
    ATHandler_stub::ref_count++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::dec_ref_count()
 | 
			
		||||
{
 | 
			
		||||
    ATHandler_stub::ref_count--;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ATHandler::get_ref_count()
 | 
			
		||||
{
 | 
			
		||||
    return ATHandler_stub::ref_count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
FileHandle *ATHandler::get_file_handle()
 | 
			
		||||
{
 | 
			
		||||
    return ATHandler_stub::fh_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::set_file_handle(FileHandle *fh)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t ATHandler::set_urc_handler(const char *urc, mbed::Callback<void()> cb)
 | 
			
		||||
{
 | 
			
		||||
    ATHandler_stub::callback = cb;
 | 
			
		||||
    return ATHandler_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::remove_urc_handler(const char *prefix, mbed::Callback<void()> callback)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t ATHandler::get_last_error() const
 | 
			
		||||
{
 | 
			
		||||
    if (ATHandler_stub::nsapi_error_ok_counter) {
 | 
			
		||||
        ATHandler_stub::nsapi_error_ok_counter--;
 | 
			
		||||
        return NSAPI_ERROR_OK;
 | 
			
		||||
    }
 | 
			
		||||
    return ATHandler_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::lock()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::unlock()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t ATHandler::unlock_return_error()
 | 
			
		||||
{
 | 
			
		||||
    return ATHandler_stub::nsapi_error_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::set_at_timeout(uint32_t timeout_milliseconds, bool default_timeout)
 | 
			
		||||
{
 | 
			
		||||
    ATHandler_stub::timeout = timeout_milliseconds;
 | 
			
		||||
    ATHandler_stub::default_timeout = default_timeout;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::restore_at_timeout()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::process_oob()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::clear_error()
 | 
			
		||||
{
 | 
			
		||||
    ATHandler_stub::nsapi_error_ok_counter++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::skip_param(uint32_t count)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::skip_param(ssize_t len, uint32_t count)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ssize_t ATHandler::read_bytes(uint8_t *buf, size_t len)
 | 
			
		||||
{
 | 
			
		||||
    return ATHandler_stub::ssize_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    if (ATHandler_stub::read_string_index == kRead_string_table_size) {
 | 
			
		||||
        if (ATHandler_stub::read_string_value && ATHandler_stub::ssize_value >= 0) {
 | 
			
		||||
            memcpy(buf, ATHandler_stub::read_string_value, ATHandler_stub::ssize_value + 1);
 | 
			
		||||
        }
 | 
			
		||||
        return ATHandler_stub::ssize_value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::read_string_index--;
 | 
			
		||||
    if (ATHandler_stub::read_string_index >= 0) {
 | 
			
		||||
        char *tmp = ATHandler_stub::read_string_table[ATHandler_stub::read_string_index];
 | 
			
		||||
        ssize_t len = strlen(tmp);
 | 
			
		||||
        memcpy(buf, tmp, len + 1);
 | 
			
		||||
        return len;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t ATHandler::read_int()
 | 
			
		||||
{
 | 
			
		||||
    if (ATHandler_stub::nsapi_error_value != NSAPI_ERROR_OK) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (ATHandler_stub::int_count == kRead_int_table_size) {
 | 
			
		||||
        return ATHandler_stub::int_value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //printf("ATHandler_stub::int_count: %d", ATHandler_stub::int_count);
 | 
			
		||||
    ATHandler_stub::int_count--;
 | 
			
		||||
    if (ATHandler_stub::int_count < kRead_int_table_size && ATHandler_stub::int_count >= 0) {
 | 
			
		||||
        return ATHandler_stub::int_valid_count_table[ATHandler_stub::int_count];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::set_delimiter(char delimiter)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::set_default_delimiter()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::set_stop_tag(const char *stop_tag_seq)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ATHandler::get_3gpp_error()
 | 
			
		||||
{
 | 
			
		||||
    return ATHandler_stub::int_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::resp_start(const char *prefix, bool stop)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ATHandler::info_resp()
 | 
			
		||||
{
 | 
			
		||||
    if (ATHandler_stub::resp_info_true_counter) {
 | 
			
		||||
        ATHandler_stub::resp_info_true_counter--;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return ATHandler_stub::bool_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ATHandler::info_elem(char start_tag)
 | 
			
		||||
{
 | 
			
		||||
    if (ATHandler_stub::info_elem_true_counter) {
 | 
			
		||||
        ATHandler_stub::info_elem_true_counter--;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return ATHandler_stub::bool_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ATHandler::consume_to_stop_tag()
 | 
			
		||||
{
 | 
			
		||||
    return ATHandler_stub::bool_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::resp_stop()
 | 
			
		||||
{
 | 
			
		||||
    if (ATHandler_stub::resp_stop_success_count > 0) {
 | 
			
		||||
        ATHandler_stub::resp_stop_success_count--;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::cmd_start(const char *cmd)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::write_int(int32_t param)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::write_string(const char *param, bool useQuotations)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
size_t ATHandler::write_bytes(const uint8_t *param, size_t len)
 | 
			
		||||
{
 | 
			
		||||
    if (ATHandler_stub::return_given_size) {
 | 
			
		||||
        return len;
 | 
			
		||||
    }
 | 
			
		||||
    return ATHandler_stub::size_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::cmd_stop()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::cmd_stop_read_resp()
 | 
			
		||||
{
 | 
			
		||||
    cmd_stop();
 | 
			
		||||
    resp_start();
 | 
			
		||||
    resp_stop();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
device_err_t ATHandler::get_last_device_error() const
 | 
			
		||||
{
 | 
			
		||||
    return ATHandler_stub::device_err_value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ATHandler::flush()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,56 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2017, 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 "stdint.h"
 | 
			
		||||
#include "stdbool.h"
 | 
			
		||||
#include <cstddef>
 | 
			
		||||
#include "nsapi_types.h"
 | 
			
		||||
#include "ATHandler.h"
 | 
			
		||||
#include "FileHandle_stub.h"
 | 
			
		||||
#include "Callback.h"
 | 
			
		||||
 | 
			
		||||
static const int kRead_string_table_size = 100;
 | 
			
		||||
static const int kRead_int_table_size = 100;
 | 
			
		||||
static const int kResp_stop_count_default = 100;
 | 
			
		||||
// set reference count to -909 to separate it from zero so we can test that ATHandler is really deleted.
 | 
			
		||||
static const int kATHandler_destructor_ref_ount = -909;
 | 
			
		||||
 | 
			
		||||
namespace ATHandler_stub {
 | 
			
		||||
extern nsapi_error_t nsapi_error_value;
 | 
			
		||||
extern uint8_t nsapi_error_ok_counter;
 | 
			
		||||
extern int int_value;
 | 
			
		||||
extern int ref_count;
 | 
			
		||||
extern int timeout;
 | 
			
		||||
extern bool default_timeout;
 | 
			
		||||
extern bool debug_on;
 | 
			
		||||
extern ssize_t ssize_value;
 | 
			
		||||
extern char *read_string_value;
 | 
			
		||||
extern size_t size_value;
 | 
			
		||||
extern size_t return_given_size;
 | 
			
		||||
extern bool bool_value;
 | 
			
		||||
extern uint8_t resp_info_true_counter;
 | 
			
		||||
extern uint8_t info_elem_true_counter;
 | 
			
		||||
extern uint8_t uint8_value;
 | 
			
		||||
extern mbed::FileHandle_stub *fh_value;
 | 
			
		||||
extern mbed::device_err_t device_err_value;
 | 
			
		||||
extern mbed::Callback<void()> callback;
 | 
			
		||||
extern char *read_string_table[kRead_string_table_size];
 | 
			
		||||
extern int read_string_index;
 | 
			
		||||
extern int int_valid_count_table[kRead_int_table_size];
 | 
			
		||||
extern int int_count;
 | 
			
		||||
extern int resp_stop_success_count;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -119,12 +119,17 @@ nsapi_error_t CellularDevice::attach_to_network()
 | 
			
		|||
 | 
			
		||||
nsapi_error_t CellularDevice::create_state_machine()
 | 
			
		||||
{
 | 
			
		||||
    nsapi_error_t err = NSAPI_ERROR_OK;
 | 
			
		||||
    if (!_state_machine) {
 | 
			
		||||
        _state_machine = new CellularStateMachine(*this, *get_queue());
 | 
			
		||||
        _state_machine->set_cellular_callback(callback(this, &CellularDevice::cellular_callback));
 | 
			
		||||
        return _state_machine->start_dispatch();
 | 
			
		||||
        err = _state_machine->start_dispatch();
 | 
			
		||||
        if (err) {
 | 
			
		||||
            delete _state_machine;
 | 
			
		||||
            _state_machine = NULL;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NSAPI_ERROR_OK;
 | 
			
		||||
    return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nsapi_error_t CellularDevice::start_state_machine(CellularStateMachine::CellularState target_state)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue