mirror of https://github.com/ARMmbed/mbed-os.git
Cellular: Fix sigio to be released in ATHandler destructor
parent
883b8b8f4f
commit
0c697f4421
|
@ -328,15 +328,6 @@ TEST_F(TestATHandler, test_ATHandler_process_oob)
|
||||||
filehandle_stub_table = NULL;
|
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)
|
TEST_F(TestATHandler, test_ATHandler_flush)
|
||||||
{
|
{
|
||||||
EventQueue que;
|
EventQueue que;
|
||||||
|
|
|
@ -80,7 +80,9 @@ public:
|
||||||
|
|
||||||
virtual void sigio(Callback<void()> func)
|
virtual void sigio(Callback<void()> func)
|
||||||
{
|
{
|
||||||
func();
|
if (func) {
|
||||||
|
func();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
short short_value;
|
short short_value;
|
||||||
|
|
|
@ -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) :
|
ATHandler::ATHandler(FileHandle *fh, EventQueue &queue, uint32_t timeout, const char *output_delimiter, uint16_t send_delay) :
|
||||||
_nextATHandler(0),
|
_nextATHandler(0),
|
||||||
_fileHandle(fh),
|
_fileHandle(NULL), // filehandle is set by set_file_handle()
|
||||||
_queue(queue),
|
_queue(queue),
|
||||||
_last_err(NSAPI_ERROR_OK),
|
_last_err(NSAPI_ERROR_OK),
|
||||||
_last_3gpp_error(0),
|
_last_3gpp_error(0),
|
||||||
|
@ -74,7 +74,7 @@ ATHandler::ATHandler(FileHandle *fh, EventQueue &queue, uint32_t timeout, const
|
||||||
_last_response_stop(0),
|
_last_response_stop(0),
|
||||||
_oob_queued(false),
|
_oob_queued(false),
|
||||||
_ref_count(1),
|
_ref_count(1),
|
||||||
_is_fh_usable(true),
|
_is_fh_usable(false),
|
||||||
_stop_tag(NULL),
|
_stop_tag(NULL),
|
||||||
_delimiter(DEFAULT_DELIMITER),
|
_delimiter(DEFAULT_DELIMITER),
|
||||||
_prefix_matched(false),
|
_prefix_matched(false),
|
||||||
|
@ -114,6 +114,8 @@ void ATHandler::set_debug(bool debug_on)
|
||||||
|
|
||||||
ATHandler::~ATHandler()
|
ATHandler::~ATHandler()
|
||||||
{
|
{
|
||||||
|
set_file_handle(NULL);
|
||||||
|
|
||||||
while (_oobs) {
|
while (_oobs) {
|
||||||
struct oob_t *oob = _oobs;
|
struct oob_t *oob = _oobs;
|
||||||
_oobs = oob->next;
|
_oobs = oob->next;
|
||||||
|
@ -146,17 +148,26 @@ FileHandle *ATHandler::get_file_handle()
|
||||||
|
|
||||||
void ATHandler::set_file_handle(FileHandle *fh)
|
void ATHandler::set_file_handle(FileHandle *fh)
|
||||||
{
|
{
|
||||||
|
if (_fileHandle) {
|
||||||
|
set_is_filehandle_usable(false);
|
||||||
|
}
|
||||||
_fileHandle = fh;
|
_fileHandle = fh;
|
||||||
_fileHandle->set_blocking(false);
|
if (_fileHandle) {
|
||||||
set_filehandle_sigio();
|
set_is_filehandle_usable(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATHandler::set_is_filehandle_usable(bool usable)
|
void ATHandler::set_is_filehandle_usable(bool usable)
|
||||||
{
|
{
|
||||||
_is_fh_usable = usable;
|
if (_fileHandle) {
|
||||||
if (usable) {
|
if (usable) {
|
||||||
// set file handle sigio and blocking mode back
|
_fileHandle->set_blocking(false);
|
||||||
set_file_handle(_fileHandle);
|
_fileHandle->sigio(Callback<void()>(this, &ATHandler::event));
|
||||||
|
} else {
|
||||||
|
_fileHandle->set_blocking(true); // set back to default state
|
||||||
|
_fileHandle->sigio(NULL);
|
||||||
|
}
|
||||||
|
_is_fh_usable = usable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,11 +319,6 @@ void ATHandler::process_oob()
|
||||||
unlock();
|
unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATHandler::set_filehandle_sigio()
|
|
||||||
{
|
|
||||||
_fileHandle->sigio(Callback<void()>(this, &ATHandler::event));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ATHandler::reset_buffer()
|
void ATHandler::reset_buffer()
|
||||||
{
|
{
|
||||||
_recv_pos = 0;
|
_recv_pos = 0;
|
||||||
|
|
|
@ -190,10 +190,6 @@ public:
|
||||||
*/
|
*/
|
||||||
void process_oob();
|
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
|
/** 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
|
* @param fh file handle used for reading AT responses and writing AT commands
|
||||||
|
|
Loading…
Reference in New Issue