@@ -27,6 +27,7 @@ using namespace mbed_cellular_util;
27
27
QUECTEL_BC95_CellularStack::QUECTEL_BC95_CellularStack (ATHandler &atHandler, int cid, nsapi_ip_stack_t stack_type) : AT_CellularStack(atHandler, cid, stack_type)
28
28
{
29
29
_at.set_urc_handler (" +NSONMI:" , mbed::Callback<void ()>(this , &QUECTEL_BC95_CellularStack::urc_nsonmi));
30
+ _at.set_urc_handler (" +NSOCLI:" , mbed::Callback<void ()>(this , &QUECTEL_BC95_CellularStack::urc_nsocli));
30
31
}
31
32
32
33
QUECTEL_BC95_CellularStack::~QUECTEL_BC95_CellularStack ()
@@ -88,6 +89,28 @@ void QUECTEL_BC95_CellularStack::urc_nsonmi()
88
89
}
89
90
}
90
91
92
+ void QUECTEL_BC95_CellularStack::urc_nsocli ()
93
+ {
94
+ int sock_id = _at.read_int ();
95
+
96
+ const nsapi_error_t err = _at.get_last_error ();
97
+
98
+ if (err != NSAPI_ERROR_OK) {
99
+ return ;
100
+ }
101
+
102
+ CellularSocket *sock = find_socket (sock_id);
103
+
104
+ if (sock) {
105
+ sock->closed = true ;
106
+ if (sock->_cb ) {
107
+ sock->_cb (sock->_data );
108
+ }
109
+ tr_error (" Socket closed %d" , sock_id);
110
+ }
111
+ }
112
+
113
+
91
114
int QUECTEL_BC95_CellularStack::get_max_socket_count ()
92
115
{
93
116
return BC95_SOCKET_MAX;
@@ -100,6 +123,11 @@ bool QUECTEL_BC95_CellularStack::is_protocol_supported(nsapi_protocol_t protocol
100
123
101
124
nsapi_error_t QUECTEL_BC95_CellularStack::socket_close_impl (int sock_id)
102
125
{
126
+ CellularSocket *sock = find_socket (sock_id);
127
+
128
+ if (sock && sock->closed ) {
129
+ return NSAPI_ERROR_OK;
130
+ }
103
131
_at.cmd_start (" AT+NSOCL=" );
104
132
_at.write_int (sock_id);
105
133
_at.cmd_stop_read_resp ();
0 commit comments