summaryrefslogtreecommitdiffstats
path: root/libril/ril.cpp
diff options
context:
space:
mode:
authorJake Hamby <jhamby@google.com>2014-01-15 13:12:05 -0800
committerJake Hamby <jhamby@google.com>2014-02-03 00:53:32 -0800
commit8a4a233bb9503eddee83569e647c25099a8e15b3 (patch)
tree6fb0d4cd670a04ce280ff2e2b25bc83409bf0130 /libril/ril.cpp
parentbfb41c60d52805e72734e90c85ac64a9cd96691a (diff)
downloadandroid_hardware_ril-8a4a233bb9503eddee83569e647c25099a8e15b3.tar.gz
android_hardware_ril-8a4a233bb9503eddee83569e647c25099a8e15b3.tar.bz2
android_hardware_ril-8a4a233bb9503eddee83569e647c25099a8e15b3.zip
Add new RIL commands to read, write, and reset NV items.
Add new RIL commands to read, write, and reset NV items, including the CDMA Preferred Roaming List (PRL). Used for device configuration by some CDMA operators. Bug: 12864208 Change-Id: I792e272438b56bca725e6c034baac19244e5563f
Diffstat (limited to 'libril/ril.cpp')
-rw-r--r--libril/ril.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/libril/ril.cpp b/libril/ril.cpp
index 03a075f..7eeabc0 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -216,6 +216,9 @@ static void dispatchCdmaSmsAck(Parcel &p, RequestInfo *pRI);
static void dispatchGsmBrSmsCnf(Parcel &p, RequestInfo *pRI);
static void dispatchCdmaBrSmsCnf(Parcel &p, RequestInfo *pRI);
static void dispatchRilCdmaSmsWriteArgs(Parcel &p, RequestInfo *pRI);
+static void dispatchNVReadItem(Parcel &p, RequestInfo *pRI);
+static void dispatchNVWriteItem(Parcel &p, RequestInfo *pRI);
+
static int responseInts(Parcel &p, void *response, size_t responselen);
static int responseStrings(Parcel &p, void *response, size_t responselen);
static int responseString(Parcel &p, void *response, size_t responselen);
@@ -1582,6 +1585,82 @@ invalid:
return;
}
+static void dispatchNVReadItem(Parcel &p, RequestInfo *pRI) {
+ RIL_NV_ReadItem nvri;
+ int32_t t;
+ status_t status;
+
+ memset(&nvri, 0, sizeof(nvri));
+
+ status = p.readInt32(&t);
+ nvri.itemID = (RIL_NV_Item) t;
+
+ if (status != NO_ERROR) {
+ goto invalid;
+ }
+
+ startRequest;
+ appendPrintBuf("%snvri.itemID=%d, ", printBuf, nvri.itemID);
+ closeRequest;
+
+ printRequest(pRI->token, pRI->pCI->requestNumber);
+
+ s_callbacks.onRequest(pRI->pCI->requestNumber, &nvri, sizeof(nvri), pRI);
+
+#ifdef MEMSET_FREED
+ memset(&nvri, 0, sizeof(nvri));
+#endif
+
+ return;
+
+invalid:
+ invalidCommandBlock(pRI);
+ return;
+}
+
+static void dispatchNVWriteItem(Parcel &p, RequestInfo *pRI) {
+ RIL_NV_WriteItem nvwi;
+ int32_t t;
+ status_t status;
+
+ memset(&nvwi, 0, sizeof(nvwi));
+
+ status = p.readInt32(&t);
+ nvwi.itemID = (RIL_NV_Item) t;
+
+ nvwi.value = strdupReadString(p);
+
+ if (status != NO_ERROR || nvwi.value == NULL) {
+ goto invalid;
+ }
+
+ startRequest;
+ appendPrintBuf("%snvwi.itemID=%d, value=%s, ", printBuf, nvwi.itemID,
+ nvwi.value);
+ closeRequest;
+
+ printRequest(pRI->token, pRI->pCI->requestNumber);
+
+ s_callbacks.onRequest(pRI->pCI->requestNumber, &nvwi, sizeof(nvwi), pRI);
+
+#ifdef MEMSET_FREED
+ memsetString(nvwi.value);
+#endif
+
+ free(nvwi.value);
+
+#ifdef MEMSET_FREED
+ memset(&nvwi, 0, sizeof(nvwi));
+#endif
+
+ return;
+
+invalid:
+ invalidCommandBlock(pRI);
+ return;
+}
+
+
static int
blockingWrite(int fd, const void *buffer, size_t len) {
size_t writeOffset = 0;