blob: 9f36d1d046cb88db88bc0fdca026a5105f5553ca [file] [log] [blame]
#define LOG_TAG "NW_ADAPTER"
#include "mtk_log.h"
#include <utils/Log.h>
#include "RpNwAdapter.h"
#include "Rfx.h"
RpNwAdapter* RpNwAdapter::sInstance = NULL;
RpNwAdapter::RpNwAdapter() {
}
RpNwAdapter::~RpNwAdapter() {
}
RpNwAdapter *RpNwAdapter::getInstance() {
if (sInstance == NULL) {
RLOGD("RpNwAdapter getInstance \n");
sInstance = new RpNwAdapter();
sInstance->init();
}
return sInstance;
}
void RpNwAdapter::closeInstance() {
if (sInstance != NULL) {
sInstance->deInit();
sInstance = NULL;
}
}
void RpNwAdapter::init() {
//Start Thread
RLOGD("RpNwAdapter init\n");
mResponseHandleThread = new ResponseHandleThread(this);
mResponseHandleThread->run("response thread");
}
void RpNwAdapter::deInit() {
}
void RpNwAdapter::responseConditionSignal() {
m_RespMutex.lock();
m_RespCondition.signal();
m_RespMutex.unlock();
}
void RpNwAdapter::responseConditionWait() {
m_RespMutex.lock();
m_RespCondition.wait(m_RespMutex);
m_RespMutex.unlock();
}
// Method implements of ResponseHandleThread
RpNwAdapter::ResponseHandleThread::ResponseHandleThread(RpNwAdapter* adapter) : m_looper(NULL) {
mAdapter = adapter;
RLOGD("ResponseHandleThread created");
}
RpNwAdapter::ResponseHandleThread::~ResponseHandleThread() {
mAdapter = NULL;
RLOGD("ResponseHandleThread destroyed");
}
bool RpNwAdapter::ResponseHandleThread::threadLoop() {
RLOGD("ResponseHandleThread threadLoop");
// start message loop
m_looper = Looper::prepare(0);
int result;
do {
result = m_looper->pollAll(-1);
RLOGD("ResponseHandleThread threadLoop, pull message result = %d", result);
} while (result == Looper::POLL_WAKE || result == Looper::POLL_CALLBACK);
return true;
}
sp<Looper> RpNwAdapter::ResponseHandleThread::getLooper() {
return m_looper;
}
//Response Message
RpNwAdapter::ResponseMessage::ResponseMessage() {
}
RpNwAdapter::ResponseHandler::ResponseHandler(RpNwAdapter* adapter) {
mAdapter = adapter;
}
extern void RFX_onRequestComplete(RIL_Token t, RIL_Errno e, Parcel *parcel);
//Response Handler
void RpNwAdapter::ResponseHandler::handleMessage(const Message& message) {
int token = mMsg->mToken;
switch (token) {
case 99:
{
RLOGD("Message handler receive message token=%d\n",token);
mipc_sim_ps_id_enum ps_id = MIPC_API_PS0;
mipc_nw_signal_state_struct signal_state_result;
signal_state_result.result_code =(mipc_result_enum)0;
signal_state_result.info_count = 1;
#if 0
signal_state_result.infos[0].current_data_class = MIPC_ENUM_DATA_LTE;
signal_state_result.infos[0].rssi = 90;
signal_state_result.infos[0].rsrp = 80;
#endif
RLOGD("handleMessage PrivateData %x\n",mMsg->mPrivateData);
//mMsg->mCb(ps_id,&signal_state_result,mMsg->mPrivateData);
RFX_onRequestComplete(mMsg->mPrivateData, RIL_E_REQUEST_NOT_SUPPORTED, NULL);
//rfx_enqueue_response_message(RADIO_TECH_GROUP_GSM,NULL,mMsg->mPrivateData,(RIL_SOCKET_ID)0,RIL_E_REQUEST_NOT_SUPPORTED);
break;
}
default:
break;
}
}
//Called by other thread to send message to Response handle
sp<RpNwAdapter::ResponseHandler> RpNwAdapter::sendMessage(sp<ResponseMessage> msg, int delayms) {
ALOGD("sendMessage msg token=%d delayms=%d", msg->mToken, delayms);
// Create a handler to handle this message
sp<ResponseHandler> handler = new ResponseHandler(this);
handler->mMsg = msg;
// Sand message to looper
if (delayms > 0) {
mResponseHandleThread->getLooper()->sendMessageDelayed(ms2ns(delayms),
handler, handler->m_dummyMsg);
} else {
mResponseHandleThread->getLooper()->sendMessage(handler, handler->m_dummyMsg);
}
return handler;
}
void RpNwAdapter::test(MIPC_NW_SIGNAL_STATE_GET_CB cb,void *privateData) {
RLOGD("releaseDedicatedApn_handler");
// Create a request message
sp<ResponseMessage> msg = new ResponseMessage();
msg->mToken = 99;
msg->mPrivateData = privateData;
msg->mCb = cb;
RLOGD("test PrivateData %x\n",privateData);
sendMessage(msg, 0);
}