diff options
author | Jake Hamby <jhamby@google.com> | 2014-01-15 13:12:05 -0800 |
---|---|---|
committer | Jake Hamby <jhamby@google.com> | 2014-02-03 00:53:32 -0800 |
commit | 8a4a233bb9503eddee83569e647c25099a8e15b3 (patch) | |
tree | 6fb0d4cd670a04ce280ff2e2b25bc83409bf0130 /libril/ril.cpp | |
parent | bfb41c60d52805e72734e90c85ac64a9cd96691a (diff) | |
download | android_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.cpp | 79 |
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; |