Skip to content

Commit ef14aef

Browse files
jarvteAri Parkkila
authored andcommitted
review and dynamic alloc (#3)
* Review fixes. Changed apn, username and password to be dynamically allocated.
1 parent 4457e36 commit ef14aef

File tree

6 files changed

+172
-70
lines changed

6 files changed

+172
-70
lines changed

features/cellular/easy_cellular/CellularConnectionUtil.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -503,11 +503,7 @@ CellularNetwork* CellularConnectionUtil::get_network()
503503

504504
CellularDevice* CellularConnectionUtil::get_device()
505505
{
506-
if (_cellularDevice) {
507-
return _cellularDevice;
508-
} else {
509-
return NULL;
510-
}
506+
return _cellularDevice;
511507
}
512508

513509
NetworkStack *CellularConnectionUtil::get_stack()

features/cellular/easy_cellular/CellularConnectionUtil.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#include CELLULAR_STRINGIFY(CELLULAR_DEVICE.h)
3636

3737
namespace mbed {
38-
38+
3939
const int PIN_SIZE = 8;
4040

4141
/** CellularConnectionUtil class
@@ -80,7 +80,7 @@ class CellularConnectionUtil
8080
* @param status_callback function to call on state changes
8181
*/
8282
void set_callback(mbed::Callback<bool(int, int)> status_callback);
83-
83+
8484
/** Get event queue that can be chained to main event queue (or use start_dispatch)
8585
* @return event queue
8686
*/
@@ -94,7 +94,7 @@ class CellularConnectionUtil
9494
/** Stop event queue dispatching and close cellular interfaces
9595
*/
9696
void stop();
97-
97+
9898
/** Get cellular network interface
9999
* @return network interface, NULL on failure
100100
*/

features/cellular/easy_cellular/EasyCellularConnection.cpp

Lines changed: 85 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@
3131

3232
namespace mbed {
3333

34-
static CellularConnectionUtil cellularConnection;
35-
static rtos::Semaphore cellularSemaphore(0);
36-
static UARTSerial cellularSerial(MDMTXD, MDMRXD, MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE);
37-
38-
3934
bool EasyCellularConnection::cellular_status(int state, int next_state)
4035
{
4136
tr_info("cellular_status %d=>%d", state, next_state);
@@ -45,7 +40,7 @@ bool EasyCellularConnection::cellular_status(int state, int next_state)
4540
} else {
4641
_is_connected = false;
4742
}
48-
MBED_ASSERT(cellularSemaphore.release() == osOK);
43+
MBED_ASSERT(_cellularSemaphore.release() == osOK);
4944
return false;
5045
}
5146
else {
@@ -54,61 +49,110 @@ bool EasyCellularConnection::cellular_status(int state, int next_state)
5449
return true;
5550
}
5651

57-
EasyCellularConnection::EasyCellularConnection() : _is_connected(false), _target_state(CellularConnectionUtil::STATE_POWER_ON)
52+
EasyCellularConnection::EasyCellularConnection() : _is_connected(false), _is_initialized(false),
53+
_target_state(CellularConnectionUtil::STATE_POWER_ON),
54+
_cellularSerial(MDMTXD, MDMRXD, MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE),
55+
_cellularSemaphore(0), _cellularConnectionUtil(), _credentials_err(NSAPI_ERROR_OK)
5856
{
5957
tr_info("EasyCellularConnection()");
6058
}
6159

6260
EasyCellularConnection::~EasyCellularConnection()
6361
{
64-
cellularConnection.stop();
62+
_cellularConnectionUtil.stop();
6563
}
6664

6765
nsapi_error_t EasyCellularConnection::init()
6866
{
67+
nsapi_error_t err = NSAPI_ERROR_OK;
68+
if (!_is_initialized) {
6969
#if defined (MDMRTS) && defined (MDMCTS)
70-
cellularSerial.set_flow_control(SerialBase::RTSCTS, MDMRTS, MDMCTS);
70+
_cellularSerial.set_flow_control(SerialBase::RTSCTS, MDMRTS, MDMCTS);
7171
#endif
72-
cellularConnection.set_serial(&cellularSerial);
73-
cellularConnection.set_callback(callback(this, &EasyCellularConnection::cellular_status));
72+
_cellularConnectionUtil.set_serial(&_cellularSerial);
73+
_cellularConnectionUtil.set_callback(callback(this, &EasyCellularConnection::cellular_status));
7474

75-
nsapi_error_t err = cellularConnection.init();
75+
err = _cellularConnectionUtil.init();
7676

77-
if (err == NSAPI_ERROR_OK) {
78-
err = cellularConnection.start_dispatch();
77+
if (err == NSAPI_ERROR_OK) {
78+
err = _cellularConnectionUtil.start_dispatch();
79+
}
80+
_is_initialized = true;
7981
}
8082

8183
return err;
8284
}
8385

8486
void EasyCellularConnection::set_credentials(const char *apn, const char *uname, const char *pwd)
8587
{
86-
CellularNetwork * network = cellularConnection.get_network();
88+
_credentials_err = init();
89+
90+
if (_credentials_err) {
91+
return;
92+
}
93+
CellularNetwork * network = _cellularConnectionUtil.get_network();
8794
if (network) {
88-
network->set_credentials(apn, uname, pwd);
95+
_credentials_err = network->set_credentials(apn, uname, pwd);
8996
} else {
9097
tr_error("NO Network...");
9198
}
9299
}
93100

94101
void EasyCellularConnection::set_sim_pin(const char *sim_pin)
95102
{
96-
cellularConnection.set_sim_pin(sim_pin);
103+
if (sim_pin) {
104+
_cellularConnectionUtil.set_sim_pin(sim_pin);
105+
}
97106
}
98107

99108
nsapi_error_t EasyCellularConnection::connect(const char *sim_pin, const char *apn, const char *uname, const char *pwd)
100109
{
101-
cellularConnection.set_sim_pin(sim_pin);
102-
cellularConnection.get_network()->set_credentials(apn, uname, pwd);
110+
nsapi_error_t err = check_connect();
111+
if (err) {
112+
return err;
113+
}
114+
115+
if (sim_pin) {
116+
_cellularConnectionUtil.set_sim_pin(sim_pin);
117+
}
118+
119+
err = _cellularConnectionUtil.get_network()->set_credentials(apn, uname, pwd);
120+
if (err) {
121+
return err;
122+
}
123+
103124
return connect();
104125
}
105126

127+
nsapi_error_t EasyCellularConnection::check_connect()
128+
{
129+
if (_is_connected) {
130+
return NSAPI_ERROR_IS_CONNECTED;
131+
}
132+
nsapi_error_t err = init();
133+
if (err) {
134+
return err;
135+
}
136+
137+
return NSAPI_ERROR_OK;
138+
}
139+
106140
nsapi_error_t EasyCellularConnection::connect()
107141
{
142+
// there was an error while setting credentials but it's a void function so check error here...
143+
if (_credentials_err) {
144+
return _credentials_err;
145+
}
146+
147+
nsapi_error_t err = check_connect();
148+
if (err) {
149+
return err;
150+
}
151+
108152
_target_state = CellularConnectionUtil::STATE_CONNECTED;
109-
nsapi_error_t err = cellularConnection.continue_to_state(_target_state);
153+
err = _cellularConnectionUtil.continue_to_state(_target_state);
110154
if (err == NSAPI_ERROR_OK) {
111-
int ret_wait = cellularSemaphore.wait(10*60*1000); // cellular network searching may take several minutes
155+
int ret_wait = _cellularSemaphore.wait(10*60*1000); // cellular network searching may take several minutes
112156
if (ret_wait != 1) {
113157
tr_info("No cellular connection");
114158
err = NSAPI_ERROR_NO_CONNECTION;
@@ -120,11 +164,12 @@ nsapi_error_t EasyCellularConnection::connect()
120164

121165
nsapi_error_t EasyCellularConnection::disconnect()
122166
{
167+
_credentials_err = NSAPI_ERROR_OK;
123168
_is_connected = false;
124-
if (!cellularConnection.get_network()) {
169+
if (!_cellularConnectionUtil.get_network()) {
125170
return NSAPI_ERROR_NO_CONNECTION;
126171
}
127-
return cellularConnection.get_network()->disconnect();
172+
return _cellularConnectionUtil.get_network()->disconnect();
128173
}
129174

130175
bool EasyCellularConnection::is_connected()
@@ -134,39 +179,44 @@ bool EasyCellularConnection::is_connected()
134179

135180
const char *EasyCellularConnection::get_ip_address()
136181
{
137-
CellularNetwork * network = cellularConnection.get_network();
138-
if (network) {
139-
return cellularConnection.get_network()->get_ip_address();
140-
} else {
182+
CellularNetwork *network = _cellularConnectionUtil.get_network();
183+
if (!network) {
141184
return NULL;
142185
}
186+
return _cellularConnectionUtil.get_network()->get_ip_address();
143187
}
144188

145189
const char *EasyCellularConnection::get_netmask()
146190
{
147-
return cellularConnection.get_network()->get_netmask();
191+
CellularNetwork *network = _cellularConnectionUtil.get_network();
192+
if (!network) {
193+
return NULL;
194+
}
195+
196+
return network->get_netmask();
148197
}
149198

150199
const char *EasyCellularConnection::get_gateway()
151200
{
152-
return cellularConnection.get_network()->get_gateway();
201+
CellularNetwork *network = _cellularConnectionUtil.get_network();
202+
if (!network) {
203+
return NULL;
204+
}
205+
206+
return network->get_gateway();
153207
}
154208

155209
void EasyCellularConnection::attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb)
156210
{
157-
CellularNetwork * network = cellularConnection.get_network();
211+
CellularNetwork *network = _cellularConnectionUtil.get_network();
158212
if (network) {
159213
network->attach(status_cb);
160214
}
161215
}
162216

163217
NetworkStack *EasyCellularConnection::get_stack()
164218
{
165-
#if NSAPI_PPP_AVAILABLE
166-
return nsapi_ppp_get_stack();
167-
#else
168-
return cellularConnection.get_stack();
169-
#endif // #if NSAPI_PPP_AVAILABLE
219+
return _cellularConnectionUtil.get_stack();
170220
}
171221

172222
} // namespace

features/cellular/easy_cellular/EasyCellularConnection.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,6 @@ class EasyCellularConnection: public CellularBase {
3636
virtual ~EasyCellularConnection();
3737

3838
public:
39-
/** Create cellular power and start dispatcher
40-
* @remark Must be called before any other methods
41-
* @return see nsapi_error_t, 0 on success
42-
*/
43-
nsapi_error_t init();
44-
4539
/** Set the Cellular network credentials
4640
*
4741
* Please check documentation of connect() for default behaviour of APN settings.
@@ -137,9 +131,18 @@ class EasyCellularConnection: public CellularBase {
137131
* @return true to continue state machine
138132
*/
139133
bool cellular_status(int state, int next_state);
134+
nsapi_error_t init();
135+
nsapi_error_t check_connect();
140136

141137
bool _is_connected;
138+
bool _is_initialized;
142139
CellularConnectionUtil::CellularState _target_state;
140+
141+
UARTSerial _cellularSerial;
142+
rtos::Semaphore _cellularSemaphore;
143+
CellularConnectionUtil _cellularConnectionUtil;
144+
145+
nsapi_error_t _credentials_err;
143146
};
144147

145148
} // namespace

0 commit comments

Comments
 (0)