Added two new RIL commands support

Added RIL_REQUEST_SEND_DEVICE_STATE and
RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER RIL requests support.

Test: telephony sanity tests
bug: 32223897, 20125037, 28294587

Merged-In: I55adc30b11eac269331c54ff08947dd5eefc463b
Change-Id: I55adc30b11eac269331c54ff08947dd5eefc463b
diff --git a/libril/ril_commands.h b/libril/ril_commands.h
index 08a4428..95ea491 100644
--- a/libril/ril_commands.h
+++ b/libril/ril_commands.h
@@ -75,7 +75,7 @@
     {RIL_REQUEST_RESET_RADIO, dispatchVoid, responseVoid},
     {RIL_REQUEST_OEM_HOOK_RAW, dispatchRaw, radio::sendRequestRawResponse},
     {RIL_REQUEST_OEM_HOOK_STRINGS, dispatchStrings, radio::sendRequestStringsResponse},
-    {RIL_REQUEST_SCREEN_STATE, dispatchInts, radio::sendScreenStateResponse},
+    {RIL_REQUEST_SCREEN_STATE, dispatchInts, radio::sendDeviceStateResponse},   // Note the response function is different.
     {RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION, dispatchInts, radio::setSuppServiceNotificationsResponse},
     {RIL_REQUEST_WRITE_SMS_TO_SIM, dispatchSmsWrite, radio::writeSmsToSimResponse},
     {RIL_REQUEST_DELETE_SMS_ON_SIM, dispatchInts, radio::deleteSmsOnSimResponse},
@@ -152,6 +152,6 @@
     {RIL_REQUEST_GET_ACTIVITY_INFO, dispatchVoid, radio::getModemActivityInfoResponse},
     {RIL_REQUEST_SET_CARRIER_RESTRICTIONS, dispatchCarrierRestrictions, radio::setAllowedCarriersResponse},
     {RIL_REQUEST_GET_CARRIER_RESTRICTIONS, dispatchVoid, radio::getAllowedCarriersResponse},
-    {RIL_REQUEST_SEND_DEVICE_STATE, dispatchVoid, NULL},
-    {RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER, dispatchVoid, NULL},
+    {RIL_REQUEST_SEND_DEVICE_STATE, dispatchInts, radio::sendDeviceStateResponse},
+    {RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER, dispatchInts, radio::setIndicationFilterResponse},
     {RIL_REQUEST_SET_SIM_CARD_POWER, dispatchInts, radio::setSimCardPowerResponse},
diff --git a/libril/ril_service.cpp b/libril/ril_service.cpp
index 59a0fd5..5aad65e 100644
--- a/libril/ril_service.cpp
+++ b/libril/ril_service.cpp
@@ -1251,8 +1251,9 @@
 }
 
 Return<void> RadioImpl::sendScreenState(int32_t serial, bool enable) {
-    RLOGD("RadioImpl::sendScreenState: serial %d", serial);
-    dispatchInts(serial, mSlotId, RIL_REQUEST_SCREEN_STATE, 1, BOOL_TO_INT(enable));
+    // TODO: Completely remove this from HIDL intreface
+    RequestInfo *pRI = android::addRequestToList(serial, mSlotId, RIL_REQUEST_SCREEN_STATE);
+    sendErrorResponse(pRI, RIL_E_REQUEST_NOT_SUPPORTED);
     return Void();
 }
 
@@ -2256,8 +2257,8 @@
     }
 
     RIL_CarrierRestrictions cr = {};
-    RIL_Carrier * allowedCarriers = NULL;
-    RIL_Carrier * excludedCarriers = NULL;
+    RIL_Carrier *allowedCarriers = NULL;
+    RIL_Carrier *excludedCarriers = NULL;
 
     cr.len_allowed_carriers = carriers.allowedCarriers.size();
     allowedCarriers = (RIL_Carrier *)calloc(cr.len_allowed_carriers, sizeof(RIL_Carrier));
@@ -2315,16 +2316,43 @@
     return Void();
 }
 
+Return<void> RadioImpl::sendDeviceState(int32_t serial, DeviceStateType deviceStateType,
+                                        bool state) {
+    RLOGD("RadioImpl::sendDeviceState: serial %d", serial);
+    if (s_vendorFunctions->version < 15) {
+        if (deviceStateType ==  DeviceStateType::LOW_DATA_EXPECTED) {
+            RLOGD("RadioImpl::sendDeviceState: calling screen state %d", BOOL_TO_INT(!state));
+            dispatchInts(serial, mSlotId, RIL_REQUEST_SCREEN_STATE, 1, BOOL_TO_INT(!state));
+        } else {
+            RequestInfo *pRI = android::addRequestToList(serial, mSlotId,
+                    RIL_REQUEST_SEND_DEVICE_STATE);
+            sendErrorResponse(pRI, RIL_E_REQUEST_NOT_SUPPORTED);
+        }
+        return Void();
+    }
+    dispatchInts(serial, mSlotId, RIL_REQUEST_SEND_DEVICE_STATE, 2, (int) deviceStateType,
+            BOOL_TO_INT(state));
+    return Void();
+}
+
+Return<void> RadioImpl::setIndicationFilter(int32_t serial, int32_t indicationFilter) {
+    RLOGD("RadioImpl::setIndicationFilter: serial %d", serial);
+    if (s_vendorFunctions->version < 15) {
+        RequestInfo *pRI = android::addRequestToList(serial, mSlotId,
+                RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER);
+        sendErrorResponse(pRI, RIL_E_REQUEST_NOT_SUPPORTED);
+        return Void();
+    }
+    dispatchInts(serial, mSlotId, RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER, 1, indicationFilter);
+    return Void();
+}
+
 Return<void> RadioImpl::setSimCardPower(int32_t serial, bool powerUp) {
     RLOGD("RadioImpl::setSimCardPower: serial %d", serial);
     dispatchInts(serial, mSlotId, RIL_REQUEST_SET_SIM_CARD_POWER, 1, BOOL_TO_INT(powerUp));
     return Void();
 }
 
-Return<void> RadioImpl::sendDeviceState(int32_t serial, DeviceStateType deviceStateType, bool state) {return Status::ok();}
-
-Return<void> RadioImpl::setIndicationFilter(int32_t serial, int32_t indicationFilter) {return Status::ok();}
-
 Return<void> RadioImpl::responseAcknowledgement() {
     android::releaseWakeLock();
     return Void();
@@ -4012,24 +4040,6 @@
     return 0;
 }
 
-int radio::sendScreenStateResponse(android::Parcel &p, int slotId, int requestNumber,
-                          int responseType, int serial, RIL_Errno e,
-                          void *response, size_t responseLen) {
-    RLOGD("radio::sendScreenStateResponse: serial %d", serial);
-
-    if (radioService[slotId]->mRadioResponse != NULL) {
-        RadioResponseInfo responseInfo = {};
-        populateResponseInfo(responseInfo, serial, responseType, e);
-        Return<void> retStatus
-                = radioService[slotId]->mRadioResponse->sendScreenStateResponse(responseInfo);
-        radioService[slotId]->checkReturnStatus(retStatus);
-    } else {
-        RLOGE("radio::sendScreenStateResponse: radioService[%d]->mRadioResponse == NULL", slotId);
-    }
-
-    return 0;
-}
-
 int radio::setSuppServiceNotificationsResponse(android::Parcel &p, int slotId, int requestNumber,
                                               int responseType, int serial, RIL_Errno e,
                                               void *response, size_t responseLen) {
@@ -5652,6 +5662,44 @@
     return 0;
 }
 
+int radio::sendDeviceStateResponse(android::Parcel &p, int slotId, int requestNumber,
+                              int responseType, int serial, RIL_Errno e,
+                              void *response, size_t responselen) {
+    RLOGD("radio::sendDeviceStateResponse: serial %d", serial);
+
+    if (radioService[slotId]->mRadioResponse != NULL) {
+        RadioResponseInfo responseInfo = {};
+        populateResponseInfo(responseInfo, serial, responseType, e);
+        Return<void> retStatus
+                = radioService[slotId]->mRadioResponse->sendDeviceStateResponse(responseInfo);
+        radioService[slotId]->checkReturnStatus(retStatus);
+    } else {
+        RLOGE("radio::sendDeviceStateResponse: radioService[%d]->mRadioResponse == NULL", slotId);
+    }
+
+    return 0;
+}
+
+int radio::setIndicationFilterResponse(android::Parcel &p, int slotId, int requestNumber,
+                              int responseType, int serial, RIL_Errno e,
+                              void *response, size_t responselen) {
+    RLOGD("radio::setIndicationFilterResponse: serial %d", serial);
+
+    if (radioService[slotId]->mRadioResponse != NULL) {
+        RadioResponseInfo responseInfo = {};
+        populateResponseInfo(responseInfo, serial, responseType, e);
+        Return<void> retStatus
+                = radioService[slotId]->mRadioResponse->setIndicationFilterResponse(responseInfo);
+        radioService[slotId]->checkReturnStatus(retStatus);
+    } else {
+        RLOGE("radio::setIndicationFilterResponse: radioService[%d]->mRadioResponse == NULL",
+                slotId);
+    }
+
+    return 0;
+}
+
+
 int radio::setSimCardPowerResponse(android::Parcel &p, int slotId, int requestNumber,
                                    int responseType, int serial, RIL_Errno e,
                                    void *response, size_t responseLen) {
diff --git a/libril/ril_service.h b/libril/ril_service.h
index 7ee5faf..6e8e79c 100644
--- a/libril/ril_service.h
+++ b/libril/ril_service.h
@@ -230,10 +230,6 @@
                             int responseType, int serial, RIL_Errno e,
                             void *response, size_t responseLen);
 
-int sendScreenStateResponse(android::Parcel &p, int slotId, int requestNumber,
-                           int responseType, int serial, RIL_Errno e, void *response,
-                           size_t responselen);
-
 int setSuppServiceNotificationsResponse(android::Parcel &p, int slotId, int requestNumber,
                                        int responseType, int serial, RIL_Errno e, void *response,
                                        size_t responselen);
@@ -524,6 +520,14 @@
                               int responseType, int serial, RIL_Errno e,
                               void *response, size_t responselen);
 
+int sendDeviceStateResponse(android::Parcel &p, int slotId, int requestNumber,
+                              int responseType, int serial, RIL_Errno e,
+                              void *response, size_t responselen);
+
+int setIndicationFilterResponse(android::Parcel &p, int slotId, int requestNumber,
+                              int responseType, int serial, RIL_Errno e,
+                              void *response, size_t responselen);
+
 int setSimCardPowerResponse(android::Parcel &p, int slotId, int requestNumber,
                               int responseType, int serial, RIL_Errno e,
                               void *response, size_t responselen);