mirror of https://github.com/ARMmbed/mbed-os.git
Cellular: Fix setting of PDP context ID (cid)
parent
89ce27b3fc
commit
78f3292036
|
@ -279,6 +279,10 @@ void AT_CellularContext::set_disconnect()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AT_CellularContext::set_cid(int cid)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void AT_CellularContext::do_connect_with_retry()
|
void AT_CellularContext::do_connect_with_retry()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -94,3 +94,6 @@ void AT_CellularStack::socket_attach(nsapi_socket_t handle, void (*callback)(voi
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AT_CellularStack::set_cid(int cid)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
|
@ -216,6 +216,10 @@ public:
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void set_cid(int cid)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
void do_connect_with_retry()
|
void do_connect_with_retry()
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
|
@ -299,7 +299,7 @@ void AT_CellularContext::delete_current_context()
|
||||||
_at.at_cmd_discard("+CGDCONT", "=", "%d", _cid);
|
_at.at_cmd_discard("+CGDCONT", "=", "%d", _cid);
|
||||||
|
|
||||||
if (_at.get_last_error() == NSAPI_ERROR_OK) {
|
if (_at.get_last_error() == NSAPI_ERROR_OK) {
|
||||||
_cid = -1;
|
set_cid(-1);
|
||||||
_new_context_set = false;
|
_new_context_set = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,7 +347,7 @@ bool AT_CellularContext::get_context()
|
||||||
{
|
{
|
||||||
_at.cmd_start_stop("+CGDCONT", "?");
|
_at.cmd_start_stop("+CGDCONT", "?");
|
||||||
_at.resp_start("+CGDCONT:");
|
_at.resp_start("+CGDCONT:");
|
||||||
_cid = -1;
|
set_cid(-1);
|
||||||
int cid_max = 0; // needed when creating new context
|
int cid_max = 0; // needed when creating new context
|
||||||
char apn[MAX_ACCESSPOINT_NAME_LENGTH];
|
char apn[MAX_ACCESSPOINT_NAME_LENGTH];
|
||||||
int apn_len = 0;
|
int apn_len = 0;
|
||||||
|
@ -373,7 +373,7 @@ bool AT_CellularContext::get_context()
|
||||||
if (get_property(pdp_type_t_to_cellular_property(pdp_type)) ||
|
if (get_property(pdp_type_t_to_cellular_property(pdp_type)) ||
|
||||||
((pdp_type == IPV4V6_PDP_TYPE && (get_property(PROPERTY_IPV4_PDP_TYPE) && get_property(PROPERTY_IPV6_PDP_TYPE))) && !_nonip_req)) {
|
((pdp_type == IPV4V6_PDP_TYPE && (get_property(PROPERTY_IPV4_PDP_TYPE) && get_property(PROPERTY_IPV6_PDP_TYPE))) && !_nonip_req)) {
|
||||||
_pdp_type = pdp_type;
|
_pdp_type = pdp_type;
|
||||||
_cid = cid;
|
set_cid(cid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -423,7 +423,7 @@ bool AT_CellularContext::set_new_context(int cid)
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
_pdp_type = pdp_type;
|
_pdp_type = pdp_type;
|
||||||
_cid = cid;
|
set_cid(cid);
|
||||||
_new_context_set = true;
|
_new_context_set = true;
|
||||||
tr_info("New PDP context %d, type %d", _cid, pdp_type);
|
tr_info("New PDP context %d, type %d", _cid, pdp_type);
|
||||||
}
|
}
|
||||||
|
@ -661,7 +661,7 @@ void AT_CellularContext::do_disconnect()
|
||||||
if (_new_context_set) {
|
if (_new_context_set) {
|
||||||
delete_current_context();
|
delete_current_context();
|
||||||
}
|
}
|
||||||
_cid = -1;
|
set_cid(-1);
|
||||||
_cb_data.error = NSAPI_ERROR_NO_CONNECTION;
|
_cb_data.error = NSAPI_ERROR_NO_CONNECTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -697,7 +697,7 @@ void AT_CellularContext::do_disconnect()
|
||||||
if (_new_context_set) {
|
if (_new_context_set) {
|
||||||
delete_current_context();
|
delete_current_context();
|
||||||
}
|
}
|
||||||
_cid = -1;
|
set_cid(-1);
|
||||||
_cb_data.error = _at.unlock_return_error();
|
_cb_data.error = _at.unlock_return_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -994,6 +994,7 @@ void AT_CellularContext::cellular_callback(nsapi_event_t ev, intptr_t ptr)
|
||||||
} else if (ev == NSAPI_EVENT_CONNECTION_STATUS_CHANGE && ptr == NSAPI_STATUS_DISCONNECTED) {
|
} else if (ev == NSAPI_EVENT_CONNECTION_STATUS_CHANGE && ptr == NSAPI_STATUS_DISCONNECTED) {
|
||||||
tr_info("cellular_callback: PPP mode and NSAPI_STATUS_DISCONNECTED");
|
tr_info("cellular_callback: PPP mode and NSAPI_STATUS_DISCONNECTED");
|
||||||
_cb_data.error = NSAPI_ERROR_NO_CONNECTION;
|
_cb_data.error = NSAPI_ERROR_NO_CONNECTION;
|
||||||
|
set_cid(-1);
|
||||||
_is_connected = false;
|
_is_connected = false;
|
||||||
ppp_disconnected();
|
ppp_disconnected();
|
||||||
}
|
}
|
||||||
|
@ -1001,6 +1002,7 @@ void AT_CellularContext::cellular_callback(nsapi_event_t ev, intptr_t ptr)
|
||||||
#else
|
#else
|
||||||
if (ev == NSAPI_EVENT_CONNECTION_STATUS_CHANGE && ptr == NSAPI_STATUS_DISCONNECTED) {
|
if (ev == NSAPI_EVENT_CONNECTION_STATUS_CHANGE && ptr == NSAPI_STATUS_DISCONNECTED) {
|
||||||
tr_info("cb: CellularContext disconnected");
|
tr_info("cb: CellularContext disconnected");
|
||||||
|
set_cid(-1);
|
||||||
_is_connected = false;
|
_is_connected = false;
|
||||||
}
|
}
|
||||||
#endif // NSAPI_PPP_AVAILABLE
|
#endif // NSAPI_PPP_AVAILABLE
|
||||||
|
@ -1065,3 +1067,11 @@ void AT_CellularContext::set_disconnect()
|
||||||
_is_connected = false;
|
_is_connected = false;
|
||||||
_device->cellular_callback(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, NSAPI_STATUS_DISCONNECTED, this);
|
_device->cellular_callback(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, NSAPI_STATUS_DISCONNECTED, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AT_CellularContext::set_cid(int cid)
|
||||||
|
{
|
||||||
|
_cid = cid;
|
||||||
|
if (_stack) {
|
||||||
|
static_cast<AT_CellularStack *>(_stack)->set_cid(_cid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -119,6 +119,7 @@ private:
|
||||||
void ciot_opt_cb(mbed::CellularNetwork::CIoT_Supported_Opt ciot_opt);
|
void ciot_opt_cb(mbed::CellularNetwork::CIoT_Supported_Opt ciot_opt);
|
||||||
virtual void do_connect_with_retry();
|
virtual void do_connect_with_retry();
|
||||||
void do_disconnect();
|
void do_disconnect();
|
||||||
|
void set_cid(int cid);
|
||||||
private:
|
private:
|
||||||
bool _is_connected;
|
bool _is_connected;
|
||||||
ContextOperation _current_op;
|
ContextOperation _current_op;
|
||||||
|
|
|
@ -98,6 +98,11 @@ const char *AT_CellularStack::get_ip_address()
|
||||||
return (ipv4 || ipv6) ? _ip : NULL;
|
return (ipv4 || ipv6) ? _ip : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AT_CellularStack::set_cid(int cid)
|
||||||
|
{
|
||||||
|
_cid = cid;
|
||||||
|
}
|
||||||
|
|
||||||
nsapi_error_t AT_CellularStack::socket_stack_init()
|
nsapi_error_t AT_CellularStack::socket_stack_init()
|
||||||
{
|
{
|
||||||
return NSAPI_ERROR_OK;
|
return NSAPI_ERROR_OK;
|
||||||
|
|
|
@ -44,6 +44,14 @@ public:
|
||||||
public: // NetworkStack
|
public: // NetworkStack
|
||||||
|
|
||||||
virtual const char *get_ip_address();
|
virtual const char *get_ip_address();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set PDP context ID for this stack
|
||||||
|
*
|
||||||
|
* @param cid value from AT+CGDCONT, where -1 is undefined
|
||||||
|
*/
|
||||||
|
void set_cid(int cid);
|
||||||
|
|
||||||
protected: // NetworkStack
|
protected: // NetworkStack
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue