@@ -274,6 +274,10 @@ char *AT_CellularSMS::create_pdu(const char *phone_number, const char *message,
274
274
uint8_t msg_part_number, uint8_t &header_size)
275
275
{
276
276
int totalPDULength = 0 ;
277
+ const bool is_number_international = (phone_number[0 ] == ' +' );
278
+ if (is_number_international) {
279
+ ++phone_number;
280
+ }
277
281
int number_len = strlen (phone_number);
278
282
279
283
totalPDULength += number_len;
@@ -313,7 +317,11 @@ char *AT_CellularSMS::create_pdu(const char *phone_number, const char *message,
313
317
int_to_hex_str (number_len, pdu + x);
314
318
x += 2 ;
315
319
// Type of the Destination Phone Number
316
- pdu[x++] = ' 8' ;
320
+ if (is_number_international) {
321
+ pdu[x++] = ' 9' ; // international
322
+ } else {
323
+ pdu[x++] = ' 8' ; // unknown
324
+ }
317
325
pdu[x++] = ' 1' ;
318
326
319
327
// phone number as reverse nibble encoded
@@ -405,12 +413,11 @@ nsapi_size_or_error_t AT_CellularSMS::send_sms(const char *phone_number, const c
405
413
_at.lock ();
406
414
407
415
int write_size = 0 ;
408
- int remove_plus_sign = (phone_number[0 ] == ' +' ) ? 1 : 0 ;
409
416
410
417
ThisThread::sleep_for (_sim_wait_time);
411
418
412
419
if (_mode == CellularSMSMmodeText) {
413
- _at.cmd_start_stop (" +CMGS" , " =" , " %s" , phone_number + remove_plus_sign );
420
+ _at.cmd_start_stop (" +CMGS" , " =" , " %s" , phone_number);
414
421
415
422
ThisThread::sleep_for (_sim_wait_time);
416
423
_at.resp_start (" > " , true );
@@ -463,7 +470,7 @@ nsapi_size_or_error_t AT_CellularSMS::send_sms(const char *phone_number, const c
463
470
pdu_len = remaining_len > concatenated_sms_length ? concatenated_sms_length : remaining_len;
464
471
}
465
472
466
- pdu_str = create_pdu (phone_number + remove_plus_sign , message + i * concatenated_sms_length, pdu_len,
473
+ pdu_str = create_pdu (phone_number, message + i * concatenated_sms_length, pdu_len,
467
474
sms_count, i + 1 , header_len);
468
475
if (!pdu_str) {
469
476
_at.unlock ();
0 commit comments