Convert ril cpp to HIDL service.

Bug: 32020264

Test: Basic telephony sanity tests (voice calls, data, sms, APM).
Change-Id: I1327e7b07ed001e7fbb8d69a2c871bdc500f1a9f
diff --git a/libril/ril.cpp b/libril/ril.cpp
index 6a7e694..121353e 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -320,7 +320,7 @@
         RIL_Errno e, void *response, size_t responselen);
 
 static void grabPartialWakeLock();
-static void releaseWakeLock();
+void releaseWakeLock();
 static void wakeTimeoutCallback(void *);
 
 static bool isServiceTypeCfQuery(RIL_SsServiceType serType, RIL_SsRequestType reqType);
@@ -557,10 +557,11 @@
     return 0;
 }
 
-int
-addRequestToList(RequestInfo *pRI, int request, int token, RIL_SOCKET_ID socket_id) {
-    status_t status;
+RequestInfo *
+addRequestToList(int serial, int slotId, int request) {
+    RequestInfo *pRI;
     int ret;
+    RIL_SOCKET_ID socket_id = (RIL_SOCKET_ID) slotId;
     /* Hook for current context */
     /* pendingRequestsMutextHook refer to &s_pendingRequestsMutex */
     pthread_mutex_t* pendingRequestsMutexHook = &s_pendingRequestsMutex;
@@ -586,13 +587,16 @@
 #endif
 #endif
 
-    // Received an Ack for the previous result sent to RIL.java,
-    // so release wakelock and exit
-    if (request == RIL_RESPONSE_ACKNOWLEDGEMENT) {
-        releaseWakeLock();
-        return 0;
+    pRI = (RequestInfo *)calloc(1, sizeof(RequestInfo));
+    if (pRI == NULL) {
+        RLOGE("Memory allocation failed for request %s", requestToString(request));
+        return NULL;
     }
 
+    pRI->token = serial;
+    pRI->pCI = &(s_commands[request]);
+    pRI->socket_id = socket_id;
+
     ret = pthread_mutex_lock(pendingRequestsMutexHook);
     assert (ret == 0);
 
@@ -602,7 +606,7 @@
     ret = pthread_mutex_unlock(pendingRequestsMutexHook);
     assert (ret == 0);
 
-    return 0;
+    return pRI;
 }
 
 static void
@@ -4807,7 +4811,6 @@
     startListen(RIL_SOCKET_4, &s_ril_param_socket4);
 #endif /* (SIM_COUNT == 4) */
 
-    RLOGI("RILHIDL calling registerService");
     radio::registerService(&s_callbacks, s_commands);
     RLOGI("RILHIDL called registerService");
 
@@ -4984,8 +4987,23 @@
         p.writeInt32 (RESPONSE_SOLICITED_ACK);
         p.writeInt32 (pRI->token);
 
+        switch(pRI->pCI->requestNumber) {
+            case RIL_REQUEST_GET_SIM_STATUS:
+            case RIL_REQUEST_ENTER_SIM_PIN:
+            case RIL_REQUEST_ENTER_SIM_PUK:
+            case RIL_REQUEST_ENTER_SIM_PIN2:
+            case RIL_REQUEST_ENTER_SIM_PUK2:
+            case RIL_REQUEST_CHANGE_SIM_PIN:
+            case RIL_REQUEST_CHANGE_SIM_PIN2:
+            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION:
+            case RIL_REQUEST_GET_CURRENT_CALLS:
+            case RIL_REQUEST_DIAL:
+                radio::acknowledgeRequest((int) socket_id, pRI->token);
+                return;
+        }
+
         if (fd < 0) {
-            RLOGD ("RIL onRequestComplete: Command channel closed");
+            RLOGD ("RIL onRequestAck: Command channel closed");
         }
 
         sendResponse(p, socket_id);
@@ -5042,13 +5060,30 @@
 
         p.writeInt32 (e);
 
-        if (response != NULL) {
+        bool hidlized = false;
+        switch(pRI->pCI->requestNumber) {
+            case RIL_REQUEST_GET_SIM_STATUS:
+            case RIL_REQUEST_ENTER_SIM_PIN:
+            case RIL_REQUEST_ENTER_SIM_PUK:
+            case RIL_REQUEST_ENTER_SIM_PIN2:
+            case RIL_REQUEST_ENTER_SIM_PUK2:
+            case RIL_REQUEST_CHANGE_SIM_PIN:
+            case RIL_REQUEST_CHANGE_SIM_PIN2:
+            case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION:
+            case RIL_REQUEST_GET_CURRENT_CALLS:
+            case RIL_REQUEST_DIAL:
+                hidlized = true;
+                break;
+        }
+
+        if (response != NULL || hidlized) {
             // there is a response payload, no matter success or not.
             RLOGE ("Calling responseFunction() for token %d", pRI->token);
             ret = pRI->pCI->responseFunction(p, (int) socket_id, pRI->pCI->requestNumber,
                     responseType, pRI->token, e, response, responselen);
 
-            if (pRI->pCI->requestNumber == RIL_REQUEST_GET_SIM_STATUS) {
+            if (hidlized)  {
+                free(pRI);
                 return;
             }
 
@@ -5065,7 +5100,7 @@
         }
 
         if (fd < 0) {
-            RLOGD ("RIL onRequestComplete: Command channel closed");
+            RLOGD ("RIL_onRequestComplete: Command channel closed");
         }
         sendResponse(p, socket_id);
     }
@@ -5100,7 +5135,7 @@
     }
 }
 
-static void
+void
 releaseWakeLock() {
     if (s_callbacks.version >= 13) {
         int ret;
@@ -5414,6 +5449,7 @@
         case RIL_E_NO_NETWORK_FOUND: return "E_NO_NETWORK_FOUND";
         case RIL_E_DEVICE_IN_USE: return "E_DEVICE_IN_USE";
         case RIL_E_ABORTED: return "E_ABORTED";
+        case RIL_E_INVALID_RESPONSE: return "INVALID_RESPONSE";
         case RIL_E_OEM_ERROR_1: return "E_OEM_ERROR_1";
         case RIL_E_OEM_ERROR_2: return "E_OEM_ERROR_2";
         case RIL_E_OEM_ERROR_3: return "E_OEM_ERROR_3";