Teleca 2b changes.
diff --git a/include/telephony/ril.h b/include/telephony/ril.h
index 56a94fb..329767c 100644
--- a/include/telephony/ril.h
+++ b/include/telephony/ril.h
@@ -57,15 +57,13 @@
call on a Class C GPRS device */
RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW = 9, /* data ops are not allowed before device
registers in network */
- RIL_E_SMS_SEND_FAIL_RETRY = 10, /* fail to send sms and need retry */
- RIL_E_SIM_ABSENT = 11, /* fail to set the location where CDMA subscription
- shall be retrieved because of SIM or RUIM
+ RIL_E_SMS_SEND_FAIL_RETRY = 10, /* fail to send sms and need retry */
+ RIL_E_SIM_ABSENT = 11, /* fail to set the location where CDMA subscription
+ shall be retrieved because of SIM or RUIM
card absent */
-#ifdef FEATURE_MULTIMODE_ANDROID
- RIL_E_SUBSCRIPTION_NOT_AVAILABLE = 12, /* fail to find CDMA subscription from specified
+ RIL_E_SUBSCRIPTION_NOT_AVAILABLE = 12, /* fail to find CDMA subscription from specified
location */
RIL_E_MODE_NOT_SUPPORTED = 13 /* HW does not support preferred network type */
-#endif
} RIL_Errno;
typedef enum {
@@ -206,14 +204,14 @@
* 4 = erasure
*/
- int reason; /* from TS 27.007 7.11 "reason" */
- int serviceClass; /* From 27.007 +CCFC/+CLCK "class"
- See table for Android mapping from
- MMI service code
- 0 means user doesn't input class */
- int toa; /* "type" from TS 27.007 7.11 */
- char * number; /* "number" from TS 27.007 7.11. May be NULL */
- int timeSeconds; /* for CF no reply only */
+ int reason; /* from TS 27.007 7.11 "reason" */
+ int serviceClass;/* From 27.007 +CCFC/+CLCK "class"
+ See table for Android mapping from
+ MMI service code
+ 0 means user doesn't input class */
+ int toa; /* "type" from TS 27.007 7.11 */
+ char * number; /* "number" from TS 27.007 7.11. May be NULL */
+ int timeSeconds; /* for CF no reply only */
}RIL_CallForwardInfo;
typedef struct {
@@ -273,15 +271,15 @@
(MT only, may be NULL). */
} RIL_SuppSvcNotification;
-#define RIL_SIM_ABSENT 0
-#define RIL_SIM_NOT_READY 1
+#define RIL_SIM_ABSENT 0
+#define RIL_SIM_NOT_READY 1
/* RIL_SIM_READY means that the radio state is RADIO_STATE_SIM_READY.
* This is more
* than "+CPIN: READY". It also means the radio is ready for SIM I/O
*/
-#define RIL_SIM_READY 2
-#define RIL_SIM_PIN 3
-#define RIL_SIM_PUK 4
+#define RIL_SIM_READY 2
+#define RIL_SIM_PIN 3
+#define RIL_SIM_PUK 4
#define RIL_SIM_NETWORK_PERSONALIZATION 5
/* see RIL_REQUEST_GET_SIM_STATUS */
@@ -389,7 +387,7 @@
char * number; /* Remote party number */
int numberPresentation; /* 0=Allowed, 1=Restricted, 2=Not Specified/Unknown */
char * name; /* Remote party name */
- RIL_CDMA_SignalInfoRecord * signalInfoRecord;
+ RIL_CDMA_SignalInfoRecord signalInfoRecord;
} RIL_CDMA_CallWaiting;
/* Used by RIL_REQUEST_GET_BROADCAST_CONFIG and RIL_REQUEST_SET_BROADCAST_CONFIG */
@@ -405,7 +403,6 @@
RIL_BroadcastServiceInfo *entries;
} RIL_BroadcastSMSConfig;
-
/* No restriction at all including voice/SMS/USSD/SS/AV64 and packet data. */
#define RIL_RESTRICTED_STATE_NONE 0x00
/* Block emergency call due to restriction. But allow all normal voice/SMS/USSD/SS/AV64. */
@@ -966,8 +963,8 @@
* SUCCESS
* RADIO_NOT_AVAILABLE
*/
-
#define RIL_REQUEST_SIGNAL_STRENGTH 19
+
/**
* RIL_REQUEST_REGISTRATION_STATE
*
@@ -1225,7 +1222,7 @@
* and NULL for CDMA
*
* FIXME may need way to configure QoS settings
- *
+ *
* replaces RIL_REQUEST_SETUP_DEFAULT_PDP
*
* Valid errors:
@@ -2293,7 +2290,7 @@
/**
* RIL_REQUEST_SET_LOCATION_UPDATES
- *
+ *
* Enables/disables network state change notifications due to changes in
* LAC and/or CID (basically, +CREG=2 vs. +CREG=1).
*
@@ -2305,7 +2302,7 @@
* ((int *)data)[0] is == 0 for updates disabled (+CREG=1)
*
* "response" is NULL
- *
+ *
* Valid errors:
* SUCCESS
* RADIO_NOT_AVAILABLE
@@ -3062,7 +3059,8 @@
*
* Ring indication for an incoming call (eg, RING or CRING event).
*
- * "data" is const RIL_CDMA_SignalInfoRecord *
+ * "data" is null for GSM
+ * "data" is const RIL_CDMA_SignalInfoRecord * if CDMA
*/
#define RIL_UNSOL_CALL_RING 1018
@@ -3070,7 +3068,7 @@
* RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED
*
* Indicates that SIM state changes.
- *
+ *
* Callee will invoke RIL_REQUEST_GET_SIM_STATUS on main thread
* "data" is null
@@ -3081,15 +3079,15 @@
* RIL_UNSOL_RESPONSE_CDMA_NEW_SMS
*
* Called when new CDMA SMS is received
- *
+ *
* "data" is const RIL_CDMA_SMS_Message *
- *
+ *
* Callee will subsequently confirm the receipt of the SMS with
* a RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE
- *
+ *
* No new RIL_UNSOL_RESPONSE_CDMA_NEW_SMS should be sent until
* RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE has been received
- *
+ *
*/
#define RIL_UNSOL_RESPONSE_CDMA_NEW_SMS 1020
@@ -3315,7 +3313,7 @@
* RIL_onRequestComplete will return as soon as possible
*
* @param t is parameter passed in on previous call to RIL_Notification
- * routine.
+ * routine.
* @param e error code
* if "e" != SUCCESS, then response can be null/is ignored
* @param response is owned by caller, and should not be modified or
diff --git a/libril/ril.cpp b/libril/ril.cpp
index fd1d508..d06f0f3 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -135,7 +135,7 @@
char local; // responses to local commands do not go back to command process
} RequestInfo;
-typedef struct UserCallbackInfo{
+typedef struct UserCallbackInfo {
RIL_TimedCallback p_callback;
void *userParam;
struct ril_event event;
@@ -223,6 +223,11 @@
static int responseCdmaBrCnf(Parcel &p, void *response, size_t responselen);
static int responseCdmaSms(Parcel &p, void *response, size_t responselen);
static int responseCellList(Parcel &p, void *response, size_t responselen);
+static int responseCdmaInformationRecords(Parcel &p,void *response, size_t responselen);
+static int responseRilSignalStrength(Parcel &p,void *response, size_t responselen);
+static int responseCallRing(Parcel &p, void *response, size_t responselen);
+static int responseCdmaSignalInfoRecord(Parcel &p,void *response, size_t responselen);
+static int responseCdmaCallWaiting(Parcel &p,void *response, size_t responselen);
extern "C" const char * requestToString(int request);
extern "C" const char * failCauseToString(RIL_Errno);
@@ -973,8 +978,6 @@
status = p.readInt32(&t);
rcbsc.size = (int) t;
- LOGE("RIL_CPP: dispatchCdmaBrSmsCnf(), isize=%d", rcbsc.size);
-
if (rcbsc.size != 0) {
RIL_CDMA_BroadcastServiceInfo cdmaBsi[rcbsc.size];
for (int i = 0 ; i < rcbsc.size ; i++ ) {
@@ -1287,7 +1290,7 @@
}
if (responselen % sizeof (RIL_Call *) != 0) {
- LOGE("invalid response length %d expected multiple of %d\n",
+ LOGE("invalid response length %d expected multiple of %d\n",
(int)responselen, (int)sizeof (RIL_Call *));
return RIL_ERRNO_INVALID_RESPONSE;
}
@@ -1315,16 +1318,20 @@
p.writeInt32(p_cur->numberPresentation);
writeStringToParcel(p, p_cur->name);
p.writeInt32(p_cur->namePresentation);
- appendPrintBuf("%s[id=%d,%s,toa=%d,%s,%s,als=%d,%s,%s,%s,cli=%d,name='%s',%d],",
+ appendPrintBuf("%s[id=%d,%s,toa=%d,",
printBuf,
p_cur->index,
callStateToString(p_cur->state),
- p_cur->toa,
+ p_cur->toa);
+ appendPrintBuf("%s%s,%s,als=%d,%s,%s,",
+ printBuf,
(p_cur->isMpty)?"conf":"norm",
(p_cur->isMT)?"mt":"mo",
p_cur->als,
(p_cur->isVoice)?"voc":"nonvoc",
- (p_cur->isVoicePrivacy)?"evp":"noevp",
+ (p_cur->isVoicePrivacy)?"evp":"noevp");
+ appendPrintBuf("%s%s,cli=%d,name='%s',%d]",
+ printBuf,
p_cur->number,
p_cur->numberPresentation,
p_cur->name,
@@ -1345,20 +1352,21 @@
p.writeInt32(p_cur->numberPresentation);
writeStringToParcel (p, "a-person");
p.writeInt32(2); // p_cur->namePresentation);
- appendPrintBuf("%s[id=%d,%s,toa=%d,%s,%s,als=%d,%s,%s,%s,cli=%d,name='%s',%d],",
+ appendPrintBuf("%s[id=%d,%s,toa=%d,",
printBuf,
p_cur->index,
callStateToString(p_cur->state),
- p_cur->toa,
+ p_cur->toa);
+ appendPrintBuf("%s%s,%s,als=%d,%s,%s,",
+ printBuf,
(p_cur->isMpty)?"conf":"norm",
(p_cur->isMT)?"mt":"mo",
p_cur->als,
- (p_cur->isVoice)?"voc":"nonvoc",
- (p_cur->isVoicePrivacy)?"evp":"noevp",
+ (p_cur->isVoice)?"voc":"nonvoc");
+ appendPrintBuf("%s%s,cli=%d]",
+ printBuf,
p_cur->number,
- p_cur->numberPresentation,
- p_cur->name,
- p_cur->namePresentation);
+ p_cur->numberPresentation);
#endif
}
removeLastChar;
@@ -1543,8 +1551,7 @@
return 0;
}
-static int responseCellList(Parcel &p, void *response, size_t responselen)
-{
+static int responseCellList(Parcel &p, void *response, size_t responselen) {
int num;
if (response == NULL && responselen != 0) {
@@ -1559,14 +1566,13 @@
}
startResponse;
- /* number of cell info's */
+ /* number of records */
num = responselen / sizeof(RIL_NeighboringCell *);
p.writeInt32(num);
for (int i = 0 ; i < num ; i++) {
RIL_NeighboringCell *p_cur = ((RIL_NeighboringCell **) response)[i];
- /* each cell info */
p.writeInt32(p_cur->rssi);
writeStringToParcel (p, p_cur->cid);
@@ -1579,8 +1585,317 @@
return 0;
}
-static void triggerEvLoop()
-{
+/**
+ * Marshall the signalInfoRecord into the parcel if it exists.
+ */
+static void marshallSignalInfoRecord(Parcel &p, RIL_CDMA_SignalInfoRecord &p_signalInfoRecord) {
+ p.writeInt32(p_signalInfoRecord.isPresent);
+ p.writeInt32(p_signalInfoRecord.signalType);
+ p.writeInt32(p_signalInfoRecord.alertPitch);
+ p.writeInt32(p_signalInfoRecord.signal);
+}
+
+static int responseCdmaInformationRecords(Parcel &p,void *response, size_t responselen) {
+ int num;
+ int digitCount;
+ int digitLimit;
+
+ if (response == NULL && responselen != 0) {
+ LOGE("invalid response: NULL");
+ return RIL_ERRNO_INVALID_RESPONSE;
+ }
+
+ if (responselen != sizeof(RIL_CDMA_InformationRecords)) {
+ LOGE("invalid response length %d expected %d\n",
+ (int)responselen, (int)sizeof (RIL_CDMA_InformationRecords));
+ return RIL_ERRNO_INVALID_RESPONSE;
+ }
+
+
+ /* TODO(Teleca): Wink believes this should be deleted? */
+// num = responselen / sizeof(RIL_CDMA_InformationRecords *);
+// p.writeInt32(num);
+
+ RIL_CDMA_InformationRecords *p_cur = ((RIL_CDMA_InformationRecords *) response);
+
+ /* Number of records */
+ p.writeInt32(p_cur->numberOfInfoRecs);
+
+ startResponse;
+
+ digitLimit = MIN((p_cur->numberOfInfoRecs),RIL_CDMA_MAX_NUMBER_OF_INFO_RECS);
+ for (digitCount = 0 ; digitCount < digitLimit; digitCount ++) {
+ switch(p_cur->infoRec[digitCount].name){
+ case RIL_CDMA_DISPLAY_INFO_REC:
+ p.writeInt32(p_cur->infoRec[digitCount].rec.display.alpha_len);
+ for(int i =0;i<(int)(p_cur->infoRec[digitCount].rec.display.alpha_len);i++){
+ p.writeInt32(p_cur->infoRec[digitCount].rec.display.alpha_buf[i]);
+ }
+ appendPrintBuf("%s[rec.display.alpha_len%c, rec.display.alpha_buf%s],",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.display.alpha_len,
+ p_cur->infoRec[digitCount].rec.display.alpha_buf);
+ break;
+ case RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC:
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.len);
+ for(int i =0;i<(int)(p_cur->infoRec[digitCount].rec.number.len);i++){
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.buf[i]);
+ }
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.number_type);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.number_plan);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.pi);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.si);
+ appendPrintBuf("%s[len=%c,buf=%s,number_type=%c,number_plan=%c,",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.number.len,
+ p_cur->infoRec[digitCount].rec.number.buf,
+ p_cur->infoRec[digitCount].rec.number.number_type,
+ p_cur->infoRec[digitCount].rec.number.number_plan);
+ appendPrintBuf("%spi=%c,si=%c]",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.number.pi,
+ p_cur->infoRec[digitCount].rec.number.si);
+ break;
+ case RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC:
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.len);
+ for (int i =0;i<(int)(p_cur->infoRec[digitCount].rec.number.len);i++) {
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.buf[i]);
+ }
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.number_type);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.number_plan);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.pi);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.si);
+ appendPrintBuf("%s[len=%c,buf=%s,number_type=%c,number_plan=%c,",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.number.len,
+ p_cur->infoRec[digitCount].rec.number.buf,
+ p_cur->infoRec[digitCount].rec.number.number_type,
+ p_cur->infoRec[digitCount].rec.number.number_plan);
+ appendPrintBuf("%spi=%c,si=%c]",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.number.pi,
+ p_cur->infoRec[digitCount].rec.number.si);
+ break;
+ case RIL_CDMA_CONNECTED_NUMBER_INFO_REC:
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.len);
+ for(int i =0;i<(int)(p_cur->infoRec[digitCount].rec.number.len);i++){
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.buf[i]);
+ }
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.number_type);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.number_plan);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.pi);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.number.si);
+ appendPrintBuf("%s[len=%c,buf=%s,number_type=%c,number_plan=%c,",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.number.len,
+ p_cur->infoRec[digitCount].rec.number.buf,
+ p_cur->infoRec[digitCount].rec.number.number_type,
+ p_cur->infoRec[digitCount].rec.number.number_plan);
+ appendPrintBuf("%spi=%c,si=%c]",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.number.pi,
+ p_cur->infoRec[digitCount].rec.number.si);
+ break;
+ case RIL_CDMA_SIGNAL_INFO_REC:
+ marshallSignalInfoRecord(p, p_cur->infoRec[digitCount].rec.signal);
+ appendPrintBuf("%s[isPresent=%c,signalType=%c,alertPitch=%c,signal=%c]",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.signal.isPresent,
+ p_cur->infoRec[digitCount].rec.signal.signalType,
+ p_cur->infoRec[digitCount].rec.signal.alertPitch,
+ p_cur->infoRec[digitCount].rec.signal.signal);
+ break;
+ case RIL_CDMA_REDIRECTING_NUMBER_INFO_REC:
+ p.writeInt32(p_cur->infoRec[digitCount].rec.redir.redirectingNumber.len);
+ for (int i =0;\
+ i<(int)(p_cur->infoRec[digitCount].rec.redir.redirectingNumber.len);i++){
+ p.writeInt32(p_cur->infoRec[digitCount].rec.redir.redirectingNumber.buf[i]);
+ }
+ p.writeInt32(p_cur->infoRec[digitCount].rec.redir.redirectingNumber.number_type);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.redir.redirectingNumber.number_plan);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.redir.redirectingNumber.pi);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.redir.redirectingNumber.si);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.redir.redirectingReason);
+ appendPrintBuf("%s[len=%c,buf=%s,number_type=%c,number_plan=%c,",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.number.len,
+ p_cur->infoRec[digitCount].rec.number.buf,
+ p_cur->infoRec[digitCount].rec.number.number_type,
+ p_cur->infoRec[digitCount].rec.number.number_plan);
+ appendPrintBuf("%spi=%c,si=%c]",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.number.pi,
+ p_cur->infoRec[digitCount].rec.number.si);
+ break;
+ case RIL_CDMA_LINE_CONTROL_INFO_REC:
+ p.writeInt32(p_cur->infoRec[digitCount].rec.lineCtrl.lineCtrlPolarityIncluded);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.lineCtrl.lineCtrlToggle);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.lineCtrl.lineCtrlReverse);
+ p.writeInt32( p_cur->infoRec[digitCount].rec.lineCtrl.lineCtrlPowerDenial);
+ appendPrintBuf("%s[PolarityIncluded=%c,CtrlToggle=%c,CtrlReverse=%c,\
+ CtrlPowerDenial=%c]",
+ printBuf,
+ p_cur->infoRec[digitCount].rec.lineCtrl.lineCtrlPolarityIncluded,
+ p_cur->infoRec[digitCount].rec.lineCtrl.lineCtrlToggle,
+ p_cur->infoRec[digitCount].rec.lineCtrl.lineCtrlReverse,
+ p_cur->infoRec[digitCount].rec.lineCtrl.lineCtrlPowerDenial);
+ break;
+ case RIL_CDMA_EXTENDED_DISPLAY_INFO_REC:
+ break;
+ case RIL_CDMA_T53_CLIR_INFO_REC:
+ p.writeInt32(p_cur->infoRec[digitCount].rec.clir.cause);
+ appendPrintBuf("%s[cause=%c]",printBuf,p_cur->infoRec[digitCount].rec.clir.cause);
+ break;
+
+ case RIL_CDMA_T53_RELEASE_INFO_REC:
+ break;
+ case RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC:
+ p.writeInt32(p_cur->infoRec[digitCount].rec.audioCtrl.upLink);
+ p.writeInt32(p_cur->infoRec[digitCount].rec.audioCtrl.downLink);
+ appendPrintBuf("%s[uplink=%c,downlink=%c]",
+ printBuf,p_cur->infoRec[digitCount].rec.audioCtrl.upLink,
+ p_cur->infoRec[digitCount].rec.audioCtrl.downLink);
+ break;
+ default:
+ LOGE ("Invalid request");
+ break;
+ }
+ }
+
+
+ closeResponse;
+
+ return 0;
+}
+
+static int responseRilSignalStrength(Parcel &p, void *response, size_t responselen) {
+ if (response == NULL && responselen != 0) {
+ LOGE("invalid response: NULL");
+ return RIL_ERRNO_INVALID_RESPONSE;
+ }
+
+ if ((responselen != sizeof (RIL_SignalStrength))
+ && (responselen % sizeof (void *) == 0)) {
+ // Old RIL deprecated
+ RIL_GW_SignalStrength *p_cur = ((RIL_GW_SignalStrength *) response);
+
+ p.writeInt32(7);
+ p.writeInt32(p_cur->signalStrength);
+ p.writeInt32(p_cur->bitErrorRate);
+ for (int i = 0; i < 5; i++) {
+ p.writeInt32(0);
+ }
+ } else if (responselen == sizeof (RIL_SignalStrength)) {
+ // New RIL
+ RIL_SignalStrength *p_cur = ((RIL_SignalStrength *) response);
+
+ p.writeInt32(7);
+ p.writeInt32(p_cur->GW_SignalStrength.signalStrength);
+ p.writeInt32(p_cur->GW_SignalStrength.bitErrorRate);
+ p.writeInt32(p_cur->CDMA_SignalStrength.dbm);
+ p.writeInt32(p_cur->CDMA_SignalStrength.ecio);
+ p.writeInt32(p_cur->EVDO_SignalStrength.dbm);
+ p.writeInt32(p_cur->EVDO_SignalStrength.ecio);
+ p.writeInt32(p_cur->EVDO_SignalStrength.signalNoiseRatio);
+ } else {
+ LOGE("invalid response length");
+ return RIL_ERRNO_INVALID_RESPONSE;
+ }
+
+ startResponse;
+ appendPrintBuf("%s[signalStrength=%d,bitErrorRate=%d,\
+ CDMA_SignalStrength.dbm=%d,CDMA_SignalStrength.ecio=%d,\
+ EVDO_SignalStrength.dbm =%d,EVDO_SignalStrength.ecio=%d,\
+ EVDO_SignalStrength.signalNoiseRatio=%d]",
+ printBuf,
+ p_cur->GW_SignalStrength.signalStrength,
+ p_cur->GW_SignalStrength.bitErrorRate,
+ p_cur->CDMA_SignalStrength.dbm,
+ p_cur->CDMA_SignalStrength.ecio,
+ p_cur->EVDO_SignalStrength.dbm,
+ p_cur->EVDO_SignalStrength.ecio,
+ p_cur->EVDO_SignalStrength.signalNoiseRatio);
+
+ closeResponse;
+
+ return 0;
+}
+
+static int responseCallRing(Parcel &p, void *response, size_t responselen) {
+ if ((response == NULL) || (responselen == 0)) {
+ return responseVoid(p, response, responselen);
+ } else {
+ return responseCdmaSignalInfoRecord(p, response, responselen);
+ }
+}
+
+static int responseCdmaSignalInfoRecord(Parcel &p, void *response, size_t responselen) {
+ if (response == NULL || responselen == 0) {
+ LOGE("invalid response: NULL");
+ return RIL_ERRNO_INVALID_RESPONSE;
+ }
+
+ if (responselen != sizeof (RIL_CDMA_SignalInfoRecord)) {
+ LOGE("invalid response length %d expected sizeof (RIL_CDMA_SignalInfoRecord) of %d\n",
+ (int)responselen, (int)sizeof (RIL_CDMA_SignalInfoRecord));
+ return RIL_ERRNO_INVALID_RESPONSE;
+ }
+
+ startResponse;
+
+ RIL_CDMA_SignalInfoRecord *p_cur = ((RIL_CDMA_SignalInfoRecord *) response);
+ marshallSignalInfoRecord(p, *p_cur);
+
+ appendPrintBuf("%s[isPresent=%d,signalType=%d,alertPitch=%d\
+ signal=%d]",
+ printBuf,
+ p_cur->isPresent,
+ p_cur->signalType,
+ p_cur->alertPitch,
+ p_cur->signal);
+
+ closeResponse;
+ return 0;
+}
+
+static int responseCdmaCallWaiting(Parcel &p,void *response, size_t responselen) {
+ if (response == NULL && responselen != 0) {
+ LOGE("invalid response: NULL");
+ return RIL_ERRNO_INVALID_RESPONSE;
+ }
+
+ if (responselen != sizeof(RIL_CDMA_CallWaiting)) {
+ LOGE("invalid response length %d expected %d\n",
+ (int)responselen, (int)sizeof(RIL_CDMA_CallWaiting));
+ return RIL_ERRNO_INVALID_RESPONSE;
+ }
+
+ startResponse;
+ RIL_CDMA_CallWaiting *p_cur = ((RIL_CDMA_CallWaiting *) response);
+
+ writeStringToParcel (p, p_cur->number);
+ p.writeInt32(p_cur->numberPresentation);
+ writeStringToParcel (p, p_cur->name);
+ marshallSignalInfoRecord(p, p_cur->signalInfoRecord);
+
+ appendPrintBuf("%snumber=%s,numberPresentation=%d, name=%s,\
+ signalInfoRecord[isPresent=%d,signalType=%d,alertPitch=%d\
+ signal=%d]",
+ printBuf,
+ p_cur->number,
+ p_cur->numberPresentation,
+ p_cur->name,
+ p_cur->signalInfoRecord.isPresent,
+ p_cur->signalInfoRecord.signalType,
+ p_cur->signalInfoRecord.alertPitch,
+ p_cur->signalInfoRecord.signal);
+
+ closeResponse;
+
+ return 0;
+}
+
+static void triggerEvLoop() {
int ret;
if (!pthread_equal(pthread_self(), s_tid_dispatch)) {
/* trigger event loop to wakeup. No reason to do this,
@@ -1591,8 +1906,7 @@
}
}
-static void rilEventAddWakeup(struct ril_event *ev)
-{
+static void rilEventAddWakeup(struct ril_event *ev) {
ril_event_add(ev);
triggerEvLoop();
}
@@ -1606,7 +1920,7 @@
}
if (responselen % sizeof (RIL_CardStatus *) != 0) {
- LOGE("invalid response length %d expected multiple of %d\n",
+ LOGE("invalid response length %d expected multiple of %d\n",
(int)responselen, (int)sizeof (RIL_CardStatus *));
return RIL_ERRNO_INVALID_RESPONSE;
}
@@ -1644,7 +1958,7 @@
closeResponse;
return 0;
-}
+}
static int responseBrSmsCnf(Parcel &p, void *response, size_t responselen) {
int num;
@@ -1655,7 +1969,7 @@
}
if (responselen % sizeof(RIL_BroadcastSMSConfig) != 0) {
- LOGE("invalid response length %d expected multiple of %d",
+ LOGE("invalid response length %d expected multiple of %d",
(int)responselen, (int)sizeof(RIL_BroadcastSMSConfig));
return RIL_ERRNO_INVALID_RESPONSE;
}
@@ -1669,7 +1983,7 @@
p.writeInt32(p_cur->entries->uFromServiceID);
p.writeInt32(p_cur->entries->uToserviceID);
p.write(&(p_cur->entries->bSelected),sizeof(p_cur->entries->bSelected));
-
+
startResponse;
appendPrintBuf("%s size=%d, entries.uFromServiceID=%d, \
entries.uToserviceID=%d, entries.bSelected =%d, ",
@@ -2529,7 +2843,6 @@
return;
error_exit:
- // There was an error and we've got the wake lock so release it.
if (shouldScheduleTimeout) {
releaseWakeLock();
}
@@ -2755,11 +3068,15 @@
case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
- case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_NEW_CDMA_SMS";
case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_NEW_BROADCAST_SMS";
case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
+ case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
+ case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
+ case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
+ case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
+ case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
default: return "<unknown request>";
}
diff --git a/libril/ril_unsol_commands.h b/libril/ril_unsol_commands.h
index 4cfa3aa..7eff708 100644
--- a/libril/ril_unsol_commands.h
+++ b/libril/ril_unsol_commands.h
@@ -23,7 +23,7 @@
{RIL_UNSOL_ON_USSD, responseStrings, WAKE_PARTIAL},
{RIL_UNSOL_ON_USSD_REQUEST, responseVoid, DONT_WAKE},
{RIL_UNSOL_NITZ_TIME_RECEIVED, responseString, WAKE_PARTIAL},
- {RIL_UNSOL_SIGNAL_STRENGTH, responseInts, DONT_WAKE},
+ {RIL_UNSOL_SIGNAL_STRENGTH, responseRilSignalStrength, DONT_WAKE},
{RIL_UNSOL_DATA_CALL_LIST_CHANGED, responseDataCallList, WAKE_PARTIAL},
{RIL_UNSOL_SUPP_SVC_NOTIFICATION, responseSsn, WAKE_PARTIAL},
{RIL_UNSOL_STK_SESSION_END, responseVoid, WAKE_PARTIAL},
@@ -32,16 +32,14 @@
{RIL_UNSOL_STK_CALL_SETUP, responseInts, WAKE_PARTIAL},
{RIL_UNSOL_SIM_SMS_STORAGE_FULL, responseVoid, WAKE_PARTIAL},
{RIL_UNSOL_SIM_REFRESH, responseInts, WAKE_PARTIAL},
- {RIL_UNSOL_CALL_RING, responseVoid, WAKE_PARTIAL},
+ {RIL_UNSOL_CALL_RING, responseCallRing, WAKE_PARTIAL},
{RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, responseVoid, WAKE_PARTIAL},
{RIL_UNSOL_RESPONSE_CDMA_NEW_SMS, responseCdmaSms, WAKE_PARTIAL},
{RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS, responseString, WAKE_PARTIAL},
{RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL, responseVoid, WAKE_PARTIAL},
{RIL_UNSOL_RESTRICTED_STATE_CHANGED, responseInts, WAKE_PARTIAL},
- // TODO(): Need to update the response func for the following 4 commands,
- // once they've been implemented.
{RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE, responseVoid, WAKE_PARTIAL},
- {RIL_UNSOL_CDMA_CALL_WAITING, responseVoid, WAKE_PARTIAL},
+ {RIL_UNSOL_CDMA_CALL_WAITING, responseCdmaCallWaiting, WAKE_PARTIAL},
{RIL_UNSOL_CDMA_OTA_PROVISION_STATUS, responseInts, WAKE_PARTIAL},
- {RIL_UNSOL_CDMA_INFO_REC, responseVoid, WAKE_PARTIAL},
+ {RIL_UNSOL_CDMA_INFO_REC, responseCdmaInformationRecords, WAKE_PARTIAL},
{RIL_UNSOL_OEM_HOOK_RAW, responseRaw, WAKE_PARTIAL}
diff --git a/reference-ril/reference-ril.c b/reference-ril/reference-ril.c
index bf3889c..348234d 100644
--- a/reference-ril/reference-ril.c
+++ b/reference-ril/reference-ril.c
@@ -141,7 +141,11 @@
* Note: directly modified line and has *p_call point directly into
* modified line
*/
+#if NEWRIL
+static int callFromCLCCLine(char *line, RIL_Call *p_call)
+#else
static int callFromCLCCLine(char *line, RIL_CallOld *p_call)
+#endif
{
//+CLCC: 1,0,2,0,0,\"+18005551212\",145
// index,isMT,state,mode,isMpty(,number,TOA)?
@@ -470,8 +474,13 @@
ATLine *p_cur;
int countCalls;
int countValidCalls;
+#if NEWRIL
+ RIL_Call *p_calls;
+ RIL_Call **pp_calls;
+#else
RIL_CallOld *p_calls;
RIL_CallOld **pp_calls;
+#endif
int i;
int needRepoll = 0;
@@ -499,9 +508,15 @@
/* yes, there's an array of pointers and then an array of structures */
+#if NEWRIL
+ pp_calls = (RIL_Call **)alloca(countCalls * sizeof(RIL_Call *));
+ p_calls = (RIL_Call *)alloca(countCalls * sizeof(RIL_Call));
+ memset (p_calls, 0, countCalls * sizeof(RIL_Call));
+#else
pp_calls = (RIL_CallOld **)alloca(countCalls * sizeof(RIL_CallOld *));
p_calls = (RIL_CallOld *)alloca(countCalls * sizeof(RIL_CallOld));
memset (p_calls, 0, countCalls * sizeof(RIL_CallOld));
+#endif
/* init the pointer array */
for(i = 0; i < countCalls ; i++) {
@@ -566,8 +581,13 @@
s_repollCallsCount = 0;
#endif /*WORKAROUND_ERRONEOUS_ANSWER*/
+#if NEWRIL
+ RIL_onRequestComplete(t, RIL_E_SUCCESS, pp_calls,
+ countValidCalls * sizeof (RIL_Call *));
+#else
RIL_onRequestComplete(t, RIL_E_SUCCESS, pp_calls,
countValidCalls * sizeof (RIL_CallOld *));
+#endif
at_response_free(p_response);