Teleca 090414 & 090423 patches for CDMA to complete phase1 work.
diff --git a/libril/ril.cpp b/libril/ril.cpp
index ebc2f2d..b5749c3 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -970,33 +970,44 @@
status_t status;
int32_t digitCount;
- memset(&rcbsc, 0, sizeof(rcbsc));
-
status = p.readInt32(&t);
rcbsc.size = (int) t;
- status = p.readInt32(&t);
- rcbsc.entries->uServiceCategory = (int) t;
+ LOGE("RIL_CPP: dispatchCdmaBrSmsCnf(), isize=%d", rcbsc.size);
- status = p.readInt32(&t);
- rcbsc.entries->uLanguage = (int) t;
+ if (rcbsc.size != 0) {
+ RIL_CDMA_BroadcastServiceInfo cdmaBsi[rcbsc.size];
+ for (int i = 0 ; i < rcbsc.size ; i++ ) {
+ status = p.readInt32(&t);
+ cdmaBsi[i].uServiceCategory = (int) t;
- status = p.read(&ut, sizeof(ut));
- rcbsc.entries->bSelected = (uint8_t) ut;
+ status = p.readInt32(&t);
+ cdmaBsi[i].uLanguage = (int) t;
+
+ status = p.readInt32(&t);
+ cdmaBsi[i].bSelected = (uint8_t) t;
+
+ startRequest;
+ appendPrintBuf("%sentries.uServicecategory=%d, entries.uLanguage =%d, \
+ entries.bSelected =%d, ", printBuf, cdmaBsi[i].uServiceCategory,
+ cdmaBsi[i].uLanguage, cdmaBsi[i].bSelected);
+ closeRequest;
+ }
+ rcbsc.entries = (RIL_CDMA_BroadcastServiceInfo *)calloc(rcbsc.size,
+ sizeof(RIL_CDMA_BroadcastServiceInfo));
+ memcpy(rcbsc.entries, cdmaBsi, (sizeof(RIL_CDMA_BroadcastServiceInfo) * rcbsc.size));
+ } else {
+ rcbsc.entries = NULL;
+ }
if (status != NO_ERROR) {
goto invalid;
}
- startRequest;
- appendPrintBuf("%ssize=%d, entries.uServicecategory=%d, \
- entries.uLanguage =%d, entries.bSelected =%d, ", printBuf, rcbsc.size,
- rcbsc.entries->uServiceCategory,rcbsc.entries->uLanguage, rcbsc.entries->bSelected);
- closeRequest;
-
- printRequest(pRI->token, pRI->pCI->requestNumber);
-
- s_callbacks.onRequest(pRI->pCI->requestNumber, &rcbsc, sizeof(rcbsc),pRI);
+ s_callbacks.onRequest(pRI->pCI->requestNumber,
+ &rcbsc,
+ (sizeof(RIL_CDMA_BroadcastServiceInfo) * rcbsc.size) + sizeof(int),
+ pRI);
#ifdef MEMSET_FREED
memset(&rcbsc, 0, sizeof(rcbsc));
@@ -1643,9 +1654,9 @@
return RIL_ERRNO_INVALID_RESPONSE;
}
- if (responselen % sizeof(RIL_BroadcastSMSConfig *) != 0) {
+ if (responselen % sizeof(RIL_BroadcastSMSConfig) != 0) {
LOGE("invalid response length %d expected multiple of %d",
- (int)responselen, (int)sizeof(RIL_BroadcastSMSConfig *));
+ (int)responselen, (int)sizeof(RIL_BroadcastSMSConfig));
return RIL_ERRNO_INVALID_RESPONSE;
}
@@ -1670,35 +1681,48 @@
}
static int responseCdmaBrCnf(Parcel &p, void *response, size_t responselen) {
- int num;
+ int numServiceCategories;
if (response == NULL && responselen != 0) {
LOGE("invalid response: NULL");
return RIL_ERRNO_INVALID_RESPONSE;
}
- if (responselen % sizeof(RIL_CDMA_BroadcastSMSConfig*) != 0) {
- LOGE("invalid response length %d expected multiple of %d",
- (int)responselen, (int)sizeof(RIL_CDMA_BroadcastSMSConfig *));
+ if (responselen == 0) {
+ LOGE("invalid response length %d expected >= of %d",
+ (int)responselen, (int)sizeof(RIL_BroadcastSMSConfig));
return RIL_ERRNO_INVALID_RESPONSE;
}
- /* number of call info's */
- num = responselen / sizeof(RIL_CDMA_BroadcastSMSConfig *);
- p.writeInt32(num);
+ RIL_CDMA_BroadcastSMSConfig *p_cur = (RIL_CDMA_BroadcastSMSConfig *) response;
- RIL_CDMA_BroadcastSMSConfig *p_cur = (RIL_CDMA_BroadcastSMSConfig * ) response;
+ numServiceCategories = p_cur->size;
p.writeInt32(p_cur->size);
- p.writeInt32(p_cur->entries->uServiceCategory);
- p.writeInt32(p_cur->entries->uLanguage);
- p.write(&(p_cur->entries->bSelected),sizeof(p_cur->entries->bSelected));
startResponse;
- appendPrintBuf("%ssize=%d, entries.uServicecategory=%d, entries.uLanguage =%d, \
- entries.bSelected =%d, ", printBuf,p_cur->size, p_cur->entries->uServiceCategory,
- p_cur->entries->uLanguage, p_cur->entries->bSelected);
+ appendPrintBuf("%ssize=%d ", printBuf,p_cur->size);
closeResponse;
+ if (numServiceCategories != 0) {
+ RIL_CDMA_BroadcastServiceInfo cdmaBsi[numServiceCategories];
+ memcpy(cdmaBsi, p_cur->entries,
+ sizeof(RIL_CDMA_BroadcastServiceInfo) * numServiceCategories);
+
+ for (int i = 0 ; i < numServiceCategories ; i++ ) {
+ p.writeInt32(cdmaBsi[i].uServiceCategory);
+ p.writeInt32(cdmaBsi[i].uLanguage);
+ p.writeInt32(cdmaBsi[i].bSelected);
+
+ startResponse;
+ appendPrintBuf("%sentries[%d].uServicecategory=%d, entries[%d].uLanguage =%d, \
+ entries[%d].bSelected =%d, ", printBuf, i, cdmaBsi[i].uServiceCategory, i,
+ cdmaBsi[i].uLanguage, i, cdmaBsi[i].bSelected);
+ closeResponse;
+ }
+ } else {
+ p.writeInt32(NULL);
+ }
+
return 0;
}
@@ -1709,14 +1733,16 @@
uint8_t uct;
void* dest;
+ LOGD("Inside responseCdmaSms");
+
if (response == NULL && responselen != 0) {
LOGE("invalid response: NULL");
return RIL_ERRNO_INVALID_RESPONSE;
}
- if (responselen != sizeof(RIL_CDMA_SMS_Message*)) {
+ if (responselen != sizeof(RIL_CDMA_SMS_Message)) {
LOGE("invalid response length was %d expected %d",
- (int)responselen, (int)sizeof(RIL_CDMA_SMS_Message *));
+ (int)responselen, (int)sizeof(RIL_CDMA_SMS_Message));
return RIL_ERRNO_INVALID_RESPONSE;
}