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