Skip to content

Commit eff0cc2

Browse files
authored
Merge pull request #6314 from jarvte/improve_athandler_write
Cellular: ATHandler write improvements.
2 parents d05417a + d26bb23 commit eff0cc2

File tree

2 files changed

+19
-48
lines changed

2 files changed

+19
-48
lines changed

features/cellular/framework/AT/ATHandler.cpp

Lines changed: 18 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ void ATHandler::fill_buffer()
314314
} while ((uint32_t)timer.read_ms() < _at_timeout);
315315

316316
set_error(NSAPI_ERROR_DEVICE_ERROR);
317-
tr_error("AT TIMEOUT, scope: %d timeout: %lu", _current_scope, _at_timeout);
317+
tr_debug("AT TIMEOUT, scope: %d timeout: %lu", _current_scope, _at_timeout);
318318
}
319319

320320
int ATHandler::get_char()
@@ -846,7 +846,7 @@ bool ATHandler::consume_to_tag(const char *tag, bool consume_tag)
846846
match_pos = 0;
847847
}
848848
}
849-
tr_error("consume_to_tag not found");
849+
tr_debug("consume_to_tag not found");
850850
return false;
851851
}
852852

@@ -862,7 +862,7 @@ bool ATHandler::consume_to_stop_tag()
862862
return true;
863863
}
864864

865-
tr_error("consume_to_stop_tag not found");
865+
tr_debug("consume_to_stop_tag not found");
866866
set_error(NSAPI_ERROR_DEVICE_ERROR);
867867
return false;
868868
}
@@ -942,13 +942,7 @@ void ATHandler::cmd_start(const char* cmd)
942942
return;
943943
}
944944

945-
// write command
946-
for (size_t i = 0; i < strlen(cmd); i++) {
947-
if (write_char(cmd[i]) == false) {
948-
// writing failed ---> write_char have set the last error, return...
949-
return;
950-
}
951-
}
945+
(void)write(cmd, strlen(cmd));
952946

953947
_cmd_start = true;
954948
}
@@ -966,12 +960,7 @@ void ATHandler::write_int(int32_t param)
966960
char number_string[str_len];
967961
int32_t result = sprintf(number_string, "%ld", param);
968962
if (result > 0 && result < str_len) {
969-
for (size_t i = 0; number_string[i]; i++) {
970-
if (write_char(number_string[i]) == false) {
971-
// writing failed ---> write_char have set the last error, break out
972-
break;
973-
}
974-
}
963+
(void)write(number_string, strlen(number_string));
975964
}
976965
}
977966

@@ -984,20 +973,15 @@ void ATHandler::write_string(const char* param, bool useQuotations)
984973
}
985974

986975
// we are writing string, surround it with quotes
987-
if (useQuotations && write_char('\"') == false) {
976+
if (useQuotations && write("\"", 1) != 1) {
988977
return;
989978
}
990979

991-
for (size_t i = 0; i < strlen(param); i++) {
992-
if (write_char(param[i]) == false) {
993-
// writing failed ---> write_char have set the last error, return
994-
break;
995-
}
996-
}
980+
(void)write(param, strlen(param));
997981

998982
if (useQuotations) {
999983
// we are writing string, surround it with quotes
1000-
write_char('\"');
984+
(void)write("\"", 1);
1001985
}
1002986
}
1003987

@@ -1007,11 +991,7 @@ void ATHandler::cmd_stop()
1007991
return;
1008992
}
1009993
// Finish with CR
1010-
for (size_t i = 0; i < _output_delimiter_length; i++) {
1011-
if (write_char(_output_delimiter[i]) == false) {
1012-
break;
1013-
}
1014-
}
994+
(void)write(_output_delimiter, _output_delimiter_length);
1015995
}
1016996

1017997
size_t ATHandler::write_bytes(const uint8_t *data, size_t len)
@@ -1020,36 +1000,27 @@ size_t ATHandler::write_bytes(const uint8_t *data, size_t len)
10201000
return 0;
10211001
}
10221002

1023-
size_t i = 0;
1024-
for (; i < len; i++) {
1025-
if (write_char(data[i]) == false) {
1026-
// writing failed ---> write_char have set the last error, return
1027-
break;
1028-
}
1029-
}
1030-
1031-
return i;
1003+
ssize_t write_len = write(data, len);
1004+
return write_len < 0 ? 0 : (size_t)write_len;
10321005
}
10331006

1034-
bool ATHandler::write_char(char c)
1007+
ssize_t ATHandler::write(const void *data, size_t len)
10351008
{
10361009
pollfh fhs;
10371010
fhs.fh = _fileHandle;
10381011
fhs.events = POLLOUT;
1039-
bool retVal = true;
1012+
ssize_t write_len = -1;
10401013

10411014
int count = poll(&fhs, 1, _at_timeout);
10421015
if (count > 0 && (fhs.revents & POLLOUT)) {
1043-
retVal = _fileHandle->write(&c, 1) == 1 ? true : false;
1044-
} else {
1045-
retVal = false;
1016+
write_len = _fileHandle->write(data, len);
10461017
}
10471018

1048-
if (retVal == false) {
1019+
if (write_len < 0 || (size_t)write_len != len) {
10491020
set_error(NSAPI_ERROR_DEVICE_ERROR);
10501021
}
10511022

1052-
return retVal;
1023+
return write_len;
10531024
}
10541025

10551026
// do common checks before sending subparameters
@@ -1063,8 +1034,8 @@ bool ATHandler::check_cmd_send()
10631034
if (_cmd_start) {
10641035
_cmd_start = false;
10651036
} else {
1066-
if (write_char(_delimiter) == false) {
1067-
// writing of delimiter failed, return. write_char already have set the _last_err
1037+
if (write(&_delimiter, 1) != 1) {
1038+
// writing of delimiter failed, return. write() already have set the _last_err
10681039
return false;
10691040
}
10701041
}

features/cellular/framework/AT/ATHandler.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ class ATHandler
446446
void set_3gpp_error(int err, DeviceErrorType error_type);
447447

448448
bool check_cmd_send();
449-
bool write_char(char c);
449+
ssize_t write(const void *data, size_t len);
450450

451451
/** Copy content of one char buffer to another buffer and sets NULL terminator
452452
*

0 commit comments

Comments
 (0)