Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -328,15 +328,6 @@ TEST_F(TestATHandler, test_ATHandler_process_oob)
filehandle_stub_table = NULL;
}

TEST_F(TestATHandler, test_ATHandler_set_filehandle_sigio)
{
EventQueue que;
FileHandle_stub fh1;

ATHandler at(&fh1, que, 0, ",");
at.set_filehandle_sigio();
}

TEST_F(TestATHandler, test_ATHandler_flush)
{
EventQueue que;
Expand Down
4 changes: 3 additions & 1 deletion UNITTESTS/stubs/FileHandle_stub.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,9 @@ class FileHandle_stub : public FileHandle {

virtual void sigio(Callback<void()> func)
{
func();
if (func) {
func();
}
}

short short_value;
Expand Down
32 changes: 19 additions & 13 deletions features/cellular/framework/AT/ATHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ static const uint8_t map_3gpp_errors[][2] = {

ATHandler::ATHandler(FileHandle *fh, EventQueue &queue, uint32_t timeout, const char *output_delimiter, uint16_t send_delay) :
_nextATHandler(0),
_fileHandle(fh),
_fileHandle(NULL), // filehandle is set by set_file_handle()
_queue(queue),
_last_err(NSAPI_ERROR_OK),
_last_3gpp_error(0),
Expand All @@ -74,7 +74,7 @@ ATHandler::ATHandler(FileHandle *fh, EventQueue &queue, uint32_t timeout, const
_last_response_stop(0),
_oob_queued(false),
_ref_count(1),
_is_fh_usable(true),
_is_fh_usable(false),
_stop_tag(NULL),
_delimiter(DEFAULT_DELIMITER),
_prefix_matched(false),
Expand Down Expand Up @@ -114,6 +114,8 @@ void ATHandler::set_debug(bool debug_on)

ATHandler::~ATHandler()
{
set_file_handle(NULL);

while (_oobs) {
struct oob_t *oob = _oobs;
_oobs = oob->next;
Expand Down Expand Up @@ -146,17 +148,26 @@ FileHandle *ATHandler::get_file_handle()

void ATHandler::set_file_handle(FileHandle *fh)
{
if (_fileHandle) {
set_is_filehandle_usable(false);
}
_fileHandle = fh;
_fileHandle->set_blocking(false);
set_filehandle_sigio();
if (_fileHandle) {
set_is_filehandle_usable(true);
}
}

void ATHandler::set_is_filehandle_usable(bool usable)
{
_is_fh_usable = usable;
if (usable) {
// set file handle sigio and blocking mode back
set_file_handle(_fileHandle);
if (_fileHandle) {
if (usable) {
_fileHandle->set_blocking(false);
_fileHandle->sigio(Callback<void()>(this, &ATHandler::event));
} else {
_fileHandle->set_blocking(true); // set back to default state
_fileHandle->sigio(NULL);
}
_is_fh_usable = usable;
}
}

Expand Down Expand Up @@ -308,11 +319,6 @@ void ATHandler::process_oob()
unlock();
}

void ATHandler::set_filehandle_sigio()
{
_fileHandle->sigio(Callback<void()>(this, &ATHandler::event));
}

void ATHandler::reset_buffer()
{
_recv_pos = 0;
Expand Down
4 changes: 0 additions & 4 deletions features/cellular/framework/AT/ATHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,10 +190,6 @@ class ATHandler {
*/
void process_oob();

/** Set sigio for the current file handle. Sigio event goes through eventqueue so that it's handled in current thread.
*/
void set_filehandle_sigio();

/** Set file handle, which is used for reading AT responses and writing AT commands
*
* @param fh file handle used for reading AT responses and writing AT commands
Expand Down