Skip to content

Commit 7e2f5a3

Browse files
authored
Merge pull request #12281 from AriParkkila/cell-stack-deinit
Cellular: Refactor socket_stack_init() from generic to modem specific
2 parents 48f90c0 + 2871721 commit 7e2f5a3

File tree

9 files changed

+30
-56
lines changed

9 files changed

+30
-56
lines changed

UNITTESTS/features/cellular/framework/AT/at_cellularstack/at_cellularstacktest.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -197,21 +197,18 @@ TEST_F(TestAT_CellularStack, test_AT_CellularStack_socket_open)
197197

198198
MyStack st(at, 0, IPV6_STACK, *_dev);
199199
AT_CellularDevice_stub::supported_bool = 0;
200-
AT_CellularDevice_stub::max_sock_value = 1;
201200
EXPECT_EQ(st.socket_open(NULL, NSAPI_TCP), NSAPI_ERROR_UNSUPPORTED);
202201

203202
AT_CellularDevice_stub::supported_bool = 1;
204203
nsapi_socket_t sock = &st.socket;
205204
AT_CellularDevice_stub::max_sock_value = 0;
206205
EXPECT_EQ(st.socket_open(&sock, NSAPI_TCP), NSAPI_ERROR_NO_SOCKET);
206+
AT_CellularDevice_stub::max_sock_value = 1;
207207

208208
MyStack st2(at, 0, IPV6_STACK, *_dev);
209209
st2.bool_value = true;
210-
AT_CellularDevice_stub::max_sock_value = 1;
211210
sock = &st2.socket;
212211
EXPECT_EQ(st2.socket_open(&sock, NSAPI_TCP), NSAPI_ERROR_OK);
213-
214-
AT_CellularDevice_stub::max_sock_value = 1; // value must be the same as before the first open
215212
}
216213

217214
TEST_F(TestAT_CellularStack, test_AT_CellularStack_socket_close)
@@ -225,13 +222,12 @@ TEST_F(TestAT_CellularStack, test_AT_CellularStack_socket_close)
225222

226223
nsapi_socket_t sock = &st.socket;
227224
st.bool_value = true;
228-
AT_CellularDevice_stub::max_sock_value = 1;
229225
EXPECT_EQ(st.socket_open(&sock, NSAPI_TCP), NSAPI_ERROR_OK);
230226
AT_CellularDevice_stub::max_sock_value = 0;
231227
EXPECT_EQ(st.socket_close(sock), NSAPI_ERROR_DEVICE_ERROR);
228+
AT_CellularDevice_stub::max_sock_value = 1;
232229

233230
MyStack st2(at, 0, IPV6_STACK, *_dev);
234-
AT_CellularDevice_stub::max_sock_value = 1;
235231
st2.bool_value = true;
236232
sock = &st2.socket;
237233
EXPECT_EQ(st2.socket_open(&sock, NSAPI_TCP), NSAPI_ERROR_OK);
@@ -298,7 +294,6 @@ TEST_F(TestAT_CellularStack, test_AT_CellularStack_socket_send)
298294
EXPECT_EQ(st.socket_send(&st.socket, "addr", 4), NSAPI_ERROR_NO_CONNECTION);
299295

300296
SocketAddress addr("fc00::", 123);
301-
AT_CellularDevice_stub::max_sock_value = 1;
302297
st.bool_value = true;
303298
nsapi_socket_t sock = &st.socket;
304299
st.socket_open(&sock, NSAPI_TCP);
@@ -317,7 +312,6 @@ TEST_F(TestAT_CellularStack, test_AT_CellularStack_socket_sendto)
317312
SocketAddress addr("fc00::", 123);
318313
EXPECT_EQ(st.socket_sendto(NULL, addr, "addr", 4), NSAPI_ERROR_NO_SOCKET);
319314

320-
AT_CellularDevice_stub::max_sock_value = 1;
321315
st.bool_value = true;
322316
nsapi_socket_t sock = &st.socket;
323317
st.socket_open(&sock, NSAPI_TCP);
@@ -351,7 +345,6 @@ TEST_F(TestAT_CellularStack, test_AT_CellularStack_socket_recvfrom)
351345
EXPECT_EQ(st.socket_recvfrom(NULL, NULL, table, 4), NSAPI_ERROR_NO_SOCKET);
352346

353347
SocketAddress addr;
354-
AT_CellularDevice_stub::max_sock_value = 1;
355348
st.bool_value = true;
356349
nsapi_socket_t sock = &st.socket;
357350
st.socket_open(&sock, NSAPI_TCP);
@@ -372,7 +365,6 @@ TEST_F(TestAT_CellularStack, test_AT_CellularStack_socket_attach)
372365
MyStack st(at, 0, IPV6_STACK, *_dev);
373366

374367
st.socket_attach(NULL, NULL, NULL);
375-
AT_CellularDevice_stub::max_sock_value = 1;
376368
st.bool_value = true;
377369
nsapi_socket_t sock = &st.socket;
378370
st.socket_open(&sock, NSAPI_TCP);

UNITTESTS/stubs/AT_CellularDevice_stub.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ int AT_CellularDevice_stub::set_pin_failure_count = 0;
3131
int AT_CellularDevice_stub::get_sim_failure_count = 0;
3232
bool AT_CellularDevice_stub::pin_needed = false;
3333
bool AT_CellularDevice_stub::supported_bool = false;
34-
int AT_CellularDevice_stub::max_sock_value = 0;
34+
int AT_CellularDevice_stub::max_sock_value = 1;
3535

3636
AT_CellularDevice::AT_CellularDevice(FileHandle *fh) : CellularDevice(fh),
3737
#if MBED_CONF_CELLULAR_USE_SMS

UNITTESTS/stubs/AT_CellularStack_stub.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@ AT_CellularStack::~AT_CellularStack()
3131
{
3232
}
3333

34-
nsapi_error_t AT_CellularStack::socket_stack_init()
35-
{
36-
return NSAPI_ERROR_OK;
37-
}
38-
3934
nsapi_error_t AT_CellularStack::get_ip_address(SocketAddress* address)
4035
{
4136
return NSAPI_ERROR_UNSUPPORTED;

features/cellular/framework/AT/AT_CellularStack.cpp

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,19 @@ AT_CellularStack::AT_CellularStack(ATHandler &at, int cid, nsapi_ip_stack_t stac
2929
_stack_type(stack_type), _ip_ver_sendto(NSAPI_UNSPEC), _at(at), _device(device)
3030
{
3131
memset(_ip, 0, PDP_IPV6_SIZE);
32+
33+
MBED_ASSERT(_device.get_property(AT_CellularDevice::PROPERTY_SOCKET_COUNT) > 0);
34+
_socket = new CellularSocket *[_device.get_property(AT_CellularDevice::PROPERTY_SOCKET_COUNT)]();
3235
}
3336

3437
AT_CellularStack::~AT_CellularStack()
3538
{
36-
if (_socket) {
37-
for (int i = 0; i < _device.get_property(AT_CellularDevice::PROPERTY_SOCKET_COUNT); i++) {
38-
if (_socket[i]) {
39-
delete _socket[i];
40-
_socket[i] = NULL;
41-
}
39+
for (int i = 0; i < _device.get_property(AT_CellularDevice::PROPERTY_SOCKET_COUNT); i++) {
40+
if (_socket[i]) {
41+
delete _socket[i];
4242
}
43-
delete [] _socket;
44-
_socket = NULL;
4543
}
44+
delete [] _socket;
4645
}
4746

4847
int AT_CellularStack::find_socket_index(nsapi_socket_t handle)
@@ -153,11 +152,6 @@ void AT_CellularStack::set_cid(int cid)
153152
_cid = cid;
154153
}
155154

156-
nsapi_error_t AT_CellularStack::socket_stack_init()
157-
{
158-
return NSAPI_ERROR_OK;
159-
}
160-
161155
nsapi_error_t AT_CellularStack::socket_open(nsapi_socket_t *handle, nsapi_protocol_t proto)
162156
{
163157
if (!handle) {
@@ -178,22 +172,6 @@ nsapi_error_t AT_CellularStack::socket_open(nsapi_socket_t *handle, nsapi_protoc
178172

179173
_socket_mutex.lock();
180174

181-
if (!_socket) {
182-
if (_device.get_property(AT_CellularDevice::PROPERTY_SOCKET_COUNT) == 0) {
183-
_socket_mutex.unlock();
184-
return NSAPI_ERROR_NO_SOCKET;
185-
}
186-
if (socket_stack_init() != NSAPI_ERROR_OK) {
187-
_socket_mutex.unlock();
188-
return NSAPI_ERROR_NO_SOCKET;
189-
}
190-
191-
_socket = new CellularSocket*[_device.get_property(AT_CellularDevice::PROPERTY_SOCKET_COUNT)];
192-
for (int i = 0; i < _device.get_property(AT_CellularDevice::PROPERTY_SOCKET_COUNT); i++) {
193-
_socket[i] = 0;
194-
}
195-
}
196-
197175
int index = find_socket_index(0);
198176
if (index == -1) {
199177
tr_warn("No free sockets!");

features/cellular/framework/AT/AT_CellularStack.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,6 @@ class AT_CellularStack : public NetworkStack {
5858

5959
protected: // NetworkStack
6060

61-
/**
62-
* Modem specific socket stack initialization
63-
*
64-
* @return 0 on success
65-
*/
66-
virtual nsapi_error_t socket_stack_init();
67-
6861
/**
6962
* Note: Socket_open does not actually open socket on all drivers, but that's deferred until calling `sendto`.
7063
* The reason is that IP stack implementations are very much modem specific and it's quite common that when a

features/cellular/framework/targets/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ NetworkStack *GEMALTO_CINTERION_CellularContext::get_stack()
4040

4141
if (!_stack) {
4242
_stack = new GEMALTO_CINTERION_CellularStack(get_at_handler(), _apn, _uname, _pwd, _cid, (nsapi_ip_stack_t)_pdp_type, *get_device());
43+
if (static_cast<GEMALTO_CINTERION_CellularStack *>(_stack)->socket_stack_init() != NSAPI_ERROR_OK) {
44+
delete _stack;
45+
_stack = NULL;
46+
}
4347
}
4448
return _stack;
4549
}

features/cellular/framework/targets/GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,13 @@ class GEMALTO_CINTERION_CellularStack : public AT_CellularStack {
2828
const char *password, int cid, nsapi_ip_stack_t stack_type, AT_CellularDevice &device);
2929
virtual ~GEMALTO_CINTERION_CellularStack();
3030

31-
protected:
31+
/** Initialize
32+
* Must be called immediately after constructor to initialize IP stack on the modem.
33+
* @return NSAPI_ERROR_OK on success
34+
*/
35+
nsapi_error_t socket_stack_init();
3236

33-
virtual nsapi_error_t socket_stack_init();
37+
protected:
3438

3539
virtual nsapi_error_t socket_close_impl(int sock_id);
3640

features/cellular/framework/targets/QUECTEL/M26/QUECTEL_M26_CellularContext.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ NetworkStack *QUECTEL_M26_CellularContext::get_stack()
2929
{
3030
if (!_stack) {
3131
_stack = new QUECTEL_M26_CellularStack(_at, _cid, (nsapi_ip_stack_t)_pdp_type, *get_device());
32+
if (static_cast<QUECTEL_M26_CellularStack *>(_stack)->socket_stack_init() != NSAPI_ERROR_OK) {
33+
delete _stack;
34+
_stack = NULL;
35+
}
3236
}
3337
return _stack;
3438
}

features/cellular/framework/targets/QUECTEL/M26/QUECTEL_M26_CellularStack.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ class QUECTEL_M26_CellularStack : public AT_CellularStack {
3131
QUECTEL_M26_CellularStack(ATHandler &atHandler, int cid, nsapi_ip_stack_t stack_type, AT_CellularDevice &device);
3232
virtual ~QUECTEL_M26_CellularStack();
3333

34+
/** Initialize
35+
* Must be called immediately after constructor to initialize IP stack on the modem.
36+
* @return NSAPI_ERROR_OK on success
37+
*/
38+
nsapi_error_t socket_stack_init();
39+
3440
protected: // NetworkStack
3541

3642
virtual nsapi_error_t socket_listen(nsapi_socket_t handle, int backlog);
@@ -44,8 +50,6 @@ class QUECTEL_M26_CellularStack : public AT_CellularStack {
4450

4551
protected: // AT_CellularStack
4652

47-
virtual nsapi_error_t socket_stack_init();
48-
4953
virtual nsapi_error_t socket_close_impl(int sock_id);
5054

5155
virtual nsapi_error_t create_socket_impl(CellularSocket *socket);

0 commit comments

Comments
 (0)