Close MDM node on shutdown

Added call to close mdm power node
as part of procedure to shutdown

CRs-fixed: 640576

Change-Id: Ie0c05272249401f6cf13e9443417b0ba5de1be52
This commit is contained in:
Tushar Janefalkar 2014-04-01 13:34:07 -07:00
parent 6af016354e
commit 25244b3660
9 changed files with 102 additions and 13 deletions

View file

@ -128,4 +128,8 @@ DEFAULT_IMPL(false)
bool LocAdapterBase::
requestNiNotify(GpsNiNotification &notify, const void* data)
DEFAULT_IMPL(false)
void LocAdapterBase::
shutdown()
DEFAULT_IMPL()
} // namespace loc_core

View file

@ -100,6 +100,7 @@ public:
virtual bool requestNiNotify(GpsNiNotification &notify,
const void* data);
inline virtual bool isInSession() { return false; }
virtual void shutdown();
};
} // namespace loc_core

View file

@ -53,6 +53,10 @@ void LocInternalAdapter::getZppInt() {
sendMsg(new LocEngGetZpp(mLocEngAdapter));
}
void LocInternalAdapter::shutdown() {
sendMsg(new LocEngShutdown(mLocEngAdapter));
}
LocEngAdapter::LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask,
void* owner, ContextBase* context,
MsgTask::tCreate tCreator) :

View file

@ -64,6 +64,7 @@ public:
virtual void stopFixInt();
virtual void getZppInt();
virtual void setUlpProxy(UlpProxyBase* ulp);
virtual void shutdown();
};
typedef void (*loc_msg_sender)(void* loc_eng_data_p, void* msgp);

View file

@ -74,7 +74,7 @@ static int loc_set_position_mode(GpsPositionMode mode, GpsPositionRecurrence re
uint32_t min_interval, uint32_t preferred_accuracy,
uint32_t preferred_time);
static const void* loc_get_extension(const char* name);
static void loc_close_mdm_node();
// Defines the GpsInterface in gps.h
static const GpsInterface sLocEngInterface =
{
@ -279,7 +279,8 @@ static int loc_init(GpsCallbacks* callbacks)
callbacks->create_thread_cb, /* create_thread_cb */
NULL, /* location_ext_parser */
NULL, /* sv_ext_parser */
callbacks->request_utc_time_cb /* request_utc_time_cb */};
callbacks->request_utc_time_cb, /* request_utc_time_cb */
loc_close_mdm_node /*loc_shutdown_cb*/};
gps_loc_cb = callbacks->location_cb;
gps_sv_cb = callbacks->sv_status_cb;
@ -333,6 +334,37 @@ err:
return retVal;
}
/*===========================================================================
FUNCTION loc_close_mdm_node
DESCRIPTION
closes mdm_fd which is the modem powerup node obtained in loc_init
DEPENDENCIES
None
RETURN VALUE
None
SIDE EFFECTS
N/A
===========================================================================*/
static void loc_close_mdm_node()
{
ENTRY_LOG();
if (mdm_fd >= 0) {
LOC_LOGD("closing the powerup node");
close(mdm_fd);
mdm_fd = -1;
LOC_LOGD("finished closing the powerup node");
} else {
LOC_LOGD("powerup node has not been opened yet.");
}
EXIT_LOG(%s, VOID_RET);
}
/*===========================================================================
FUNCTION loc_cleanup
@ -356,18 +388,10 @@ static void loc_cleanup()
loc_afw_data.adapter->setPowerVote(false);
loc_eng_cleanup(loc_afw_data);
loc_close_mdm_node();
gps_loc_cb = NULL;
gps_sv_cb = NULL;
if (mdm_fd >= 0) {
LOC_LOGD("closing the powerup node");
close(mdm_fd);
mdm_fd = -1;
LOC_LOGD("finished closing the powerup node");
} else {
LOC_LOGD("powerup node has not been opened yet.");
}
EXIT_LOG(%s, VOID_RET);
}

View file

@ -42,6 +42,7 @@ extern "C" {
typedef void (*loc_location_cb_ext) (UlpLocation* location, void* locExt);
typedef void (*loc_sv_status_cb_ext) (GpsSvStatus* sv_status, void* svExt);
typedef void* (*loc_ext_parser)(void* data);
typedef void (*loc_shutdown_cb) (void);
typedef struct {
loc_location_cb_ext location_cb;
@ -55,6 +56,7 @@ typedef struct {
loc_ext_parser location_ext_parser;
loc_ext_parser sv_ext_parser;
gps_request_utc_time request_utc_time_cb;
loc_shutdown_cb shutdown_cb;
} LocCallbacks;
#ifdef __cplusplus

View file

@ -187,7 +187,7 @@ static void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) ;
static int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data);
static int loc_eng_stop_handler(loc_eng_data_s_type &loc_eng_data);
static int loc_eng_get_zpp_handler(loc_eng_data_s_type &loc_eng_data);
static void loc_eng_handle_shutdown(loc_eng_data_s_type &loc_eng_data);
static void deleteAidingData(loc_eng_data_s_type &logEng);
static AgpsStateMachine*
getAgpsStateMachine(loc_eng_data_s_type& logEng, AGpsExtType agpsType);
@ -327,6 +327,27 @@ void LocEngGetZpp::send() const {
mAdapter->sendMsg(this);
}
LocEngShutdown::LocEngShutdown(LocEngAdapter* adapter) :
LocMsg(), mAdapter(adapter)
{
locallog();
}
inline void LocEngShutdown::proc() const
{
loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mAdapter->getOwner();
LOC_LOGD("%s:%d]: Calling loc_eng_handle_shutdown", __func__, __LINE__);
loc_eng_handle_shutdown(*locEng);
}
inline void LocEngShutdown::locallog() const
{
LOC_LOGV("LocEngShutdown");
}
inline void LocEngShutdown::log() const
{
locallog();
}
// case LOC_ENG_MSG_SET_TIME:
struct LocEngSetTime : public LocMsg {
LocEngAdapter* mAdapter;
@ -1521,7 +1542,7 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks,
loc_eng_data.sv_ext_parser = callbacks->sv_ext_parser ?
callbacks->sv_ext_parser : noProc;
loc_eng_data.intermediateFix = gps_conf.INTERMEDIATE_POS;
loc_eng_data.shutdown_cb = callbacks->shutdown_cb;
// initial states taken care of by the memset above
// loc_eng_data.engine_status -- GPS_STATUS_NONE;
// loc_eng_data.fix_session_status -- GPS_STATUS_NONE;
@ -2606,3 +2627,27 @@ int loc_eng_read_config(void)
EXIT_LOG(%d, 0);
return 0;
}
/*===========================================================================
FUNCTION loc_eng_handle_shutdown
DESCRIPTION
Calls the shutdown callback function in the loc interface to close
the modem node
DEPENDENCIES
None
RETURN VALUE
0: success
SIDE EFFECTS
N/A
===========================================================================*/
void loc_eng_handle_shutdown(loc_eng_data_s_type &locEng)
{
ENTRY_LOG();
locEng.shutdown_cb();
EXIT_LOG(%d, 0);
}

View file

@ -133,6 +133,7 @@ typedef struct loc_eng_data_s
loc_ext_parser location_ext_parser;
loc_ext_parser sv_ext_parser;
loc_shutdown_cb shutdown_cb;
} loc_eng_data_s_type;
/* GPS.conf support */

View file

@ -289,6 +289,13 @@ struct LocEngGetZpp : public LocMsg {
void send() const;
};
struct LocEngShutdown : public LocMsg {
LocEngAdapter* mAdapter;
LocEngShutdown(LocEngAdapter* adapter);
virtual void proc() const;
void locallog() const;
virtual void log() const;
};
#ifdef __cplusplus
}
#endif /* __cplusplus */