libril: handle samsungs unsol responses cm-10.1 cm-10.1.3
authorDaniel Hillenbrand <codeworkx@cyanogenmod.org>
Wed, 4 Sep 2013 22:01:27 +0000 (00:01 +0200)
committerDaniel Hillenbrand <codeworkx@cyanogenmod.org>
Wed, 4 Sep 2013 22:01:27 +0000 (00:01 +0200)
Change-Id: I8f13cfe68157417c36f541af7ea40680bd279c43

ril/xmm6260/libril/ril.cpp
ril/xmm6260/libril/ril_unsol_commands.h
ril/xmm6262/libril/ril.cpp
ril/xmm6262/libril/ril_unsol_commands.h

index 92b896c860b06a80fa1138a975e07a47862f1d90..ddac68b6d7ecd78b016b45259c32b4605f0d58c4 100755 (executable)
@@ -113,6 +113,9 @@ namespace android {
     #define appendPrintBuf(x...)
 #endif
 
+#define MAX_RIL_SOL     RIL_REQUEST_VOICE_RADIO_TECH
+#define MAX_RIL_UNSOL   RIL_UNSOL_VOICE_RADIO_TECH_CHANGED
+
 enum WakeType {DONT_WAKE, WAKE_PARTIAL};
 
 typedef struct {
@@ -330,8 +333,8 @@ issueLocalRequest(int request, void *data, int len) {
 
     /* Hack to include Samsung requests */
     if (request > 10000) {
-        index = request - 10000 + RIL_REQUEST_VOICE_RADIO_TECH;
-        ALOGE("SAMSUNG: request=%d, index=%d", request, index);
+        index = request - 10000 + MAX_RIL_SOL;
+        ALOGD("SAMSUNG: request=%d, index=%d", request, index);
         pRI->pCI = &(s_commands[index]);
     } else {
         pRI->pCI = &(s_commands[request]);
@@ -373,8 +376,9 @@ processCommandBuffer(void *buffer, size_t buflen) {
     }
 
     /* Hack to include Samsung requests */
-    //if (request < 1 || request >= (int32_t)NUM_ELEMS(s_commands)) {
-    if (request < 1 || ((request > RIL_REQUEST_VOICE_RADIO_TECH) && (request < RIL_REQUEST_GET_CELL_BROADCAST_CONFIG)) || request > RIL_REQUEST_HANGUP_VT) {
+    if (request < 1 || ((request > MAX_RIL_SOL) &&
+            (request < RIL_REQUEST_GET_CELL_BROADCAST_CONFIG)) ||
+            request > RIL_REQUEST_HANGUP_VT) {
         ALOGE("unsupported request code %d token %d", request, token);
         // FIXME this should perhaps return a response
         return 0;
@@ -386,8 +390,9 @@ processCommandBuffer(void *buffer, size_t buflen) {
 
     /* Hack to include Samsung requests */
     if (request > 10000) {
-        index = request - 10000 + RIL_REQUEST_VOICE_RADIO_TECH;
-        ALOGE("processCommandBuffer: samsung request=%d, index=%d", request, index);
+        index = request - 10000 + MAX_RIL_SOL;
+        ALOGD("processCommandBuffer: samsung request=%d, index=%d",
+                request, index);
         pRI->pCI = &(s_commands[index]);
     } else {
         pRI->pCI = &(s_commands[request]);
@@ -2814,8 +2819,14 @@ RIL_register (const RIL_RadioFunctions *callbacks) {
     }
 
     for (int i = 0; i < (int)NUM_ELEMS(s_unsolResponses); i++) {
-        assert(i + RIL_UNSOL_RESPONSE_BASE
+        /* Hack to include Samsung responses */
+        if (i > MAX_RIL_UNSOL - RIL_UNSOL_RESPONSE_BASE) {
+            assert(i + SAMSUNG_UNSOL_RESPONSE_BASE - MAX_RIL_UNSOL
+                == s_unsolResponses[i].requestNumber);
+        } else {
+            assert(i + RIL_UNSOL_RESPONSE_BASE
                 == s_unsolResponses[i].requestNumber);
+        }
     }
 
     // New rild impl calls RIL_startEventLoop() first
@@ -3130,7 +3141,13 @@ void RIL_onUnsolicitedResponse(int unsolResponse, void *data,
         return;
     }
 
-    unsolResponseIndex = unsolResponse - RIL_UNSOL_RESPONSE_BASE;
+    /* Hack to include Samsung responses */
+    if (unsolResponse > SAMSUNG_UNSOL_RESPONSE_BASE) {
+        unsolResponseIndex = unsolResponse - SAMSUNG_UNSOL_RESPONSE_BASE + MAX_RIL_UNSOL - RIL_UNSOL_RESPONSE_BASE;
+        ALOGD("SAMSUNG: unsolResponse=%d, unsolResponseIndex=%d", unsolResponse, unsolResponseIndex);
+    } else {
+        unsolResponseIndex = unsolResponse - RIL_UNSOL_RESPONSE_BASE;
+    }
 
     if ((unsolResponseIndex < 0)
         || (unsolResponseIndex >= (int32_t)NUM_ELEMS(s_unsolResponses))) {
@@ -3484,6 +3501,7 @@ requestToString(int request) {
         case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
         case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
         case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
+        case RIL_UNSOL_STK_SEND_SMS_RESULT: return "RIL_UNSOL_STK_SEND_SMS_RESULT";
         default: return "<unknown request>";
     }
 }
index 87c367e33bfb20d1355d56fc62074806321e395b..9254151aac57eaed7bea52c2b5fe00cb5963e336 100644 (file)
@@ -49,4 +49,6 @@
     {RIL_UNSOL_CDMA_PRL_CHANGED, responseInts, WAKE_PARTIAL},
     {RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE, responseVoid, WAKE_PARTIAL},
     {RIL_UNSOL_RIL_CONNECTED, responseInts, WAKE_PARTIAL},
-    {RIL_UNSOL_VOICE_RADIO_TECH_CHANGED, responseInts, WAKE_PARTIAL}
+    {RIL_UNSOL_VOICE_RADIO_TECH_CHANGED, responseInts, WAKE_PARTIAL}, // 1035
+    {RIL_UNSOL_RELEASE_COMPLETE_MESSAGE, responseVoid, WAKE_PARTIAL}, // 11001
+    {RIL_UNSOL_STK_SEND_SMS_RESULT, responseInts, WAKE_PARTIAL}, // 11002
\ No newline at end of file
index 933f6ee9340c134b523fb8c7793224b54a0b74d6..f30520f59e18f9a8c236635ca9c0827dbc577688 100644 (file)
@@ -113,6 +113,9 @@ namespace android {
     #define appendPrintBuf(x...)
 #endif
 
+#define MAX_RIL_SOL     RIL_REQUEST_VOICE_RADIO_TECH
+#define MAX_RIL_UNSOL   RIL_UNSOL_VOICE_RADIO_TECH_CHANGED
+
 enum WakeType {DONT_WAKE, WAKE_PARTIAL};
 
 typedef struct {
@@ -334,8 +337,8 @@ issueLocalRequest(int request, void *data, int len) {
 
     /* Hack to include Samsung requests */
     if (request > 10000) {
-        index = request - 10000 + RIL_REQUEST_VOICE_RADIO_TECH;
-        ALOGE("SAMSUNG: request=%d, index=%d", request, index);
+        index = request - 10000 + MAX_RIL_SOL;
+        ALOGD("SAMSUNG: request=%d, index=%d", request, index);
         pRI->pCI = &(s_commands[index]);
     } else {
         pRI->pCI = &(s_commands[request]);
@@ -377,8 +380,9 @@ processCommandBuffer(void *buffer, size_t buflen) {
     }
 
     /* Hack to include Samsung requests */
-    //if (request < 1 || request >= (int32_t)NUM_ELEMS(s_commands)) {
-    if (request < 1 || ((request > RIL_REQUEST_VOICE_RADIO_TECH) && (request < RIL_REQUEST_GET_CELL_BROADCAST_CONFIG)) || request > RIL_REQUEST_HANGUP_VT) {
+    if (request < 1 || ((request > MAX_RIL_SOL) &&
+            (request < RIL_REQUEST_GET_CELL_BROADCAST_CONFIG)) ||
+            request > RIL_REQUEST_HANGUP_VT) {
         ALOGE("unsupported request code %d token %d", request, token);
         // FIXME this should perhaps return a response
         return 0;
@@ -390,8 +394,9 @@ processCommandBuffer(void *buffer, size_t buflen) {
 
     /* Hack to include Samsung requests */
     if (request > 10000) {
-        index = request - 10000 + RIL_REQUEST_VOICE_RADIO_TECH;
-        ALOGE("processCommandBuffer: samsung request=%d, index=%d", request, index);
+        index = request - 10000 + MAX_RIL_SOL;
+        ALOGD("processCommandBuffer: samsung request=%d, index=%d",
+                request, index);
         pRI->pCI = &(s_commands[index]);
     } else {
         pRI->pCI = &(s_commands[request]);
@@ -2962,8 +2967,14 @@ RIL_register (const RIL_RadioFunctions *callbacks) {
     }
 
     for (int i = 0; i < (int)NUM_ELEMS(s_unsolResponses); i++) {
-        assert(i + RIL_UNSOL_RESPONSE_BASE
+        /* Hack to include Samsung responses */
+        if (i > MAX_RIL_UNSOL - RIL_UNSOL_RESPONSE_BASE) {
+            assert(i + SAMSUNG_UNSOL_RESPONSE_BASE - MAX_RIL_UNSOL
+                == s_unsolResponses[i].requestNumber);
+        } else {
+            assert(i + RIL_UNSOL_RESPONSE_BASE
                 == s_unsolResponses[i].requestNumber);
+        }
     }
 
     // New rild impl calls RIL_startEventLoop() first
@@ -3278,7 +3289,13 @@ void RIL_onUnsolicitedResponse(int unsolResponse, void *data,
         return;
     }
 
-    unsolResponseIndex = unsolResponse - RIL_UNSOL_RESPONSE_BASE;
+    /* Hack to include Samsung responses */
+    if (unsolResponse > SAMSUNG_UNSOL_RESPONSE_BASE) {
+        unsolResponseIndex = unsolResponse - SAMSUNG_UNSOL_RESPONSE_BASE + MAX_RIL_UNSOL - RIL_UNSOL_RESPONSE_BASE;
+        ALOGD("SAMSUNG: unsolResponse=%d, unsolResponseIndex=%d", unsolResponse, unsolResponseIndex);
+    } else {
+        unsolResponseIndex = unsolResponse - RIL_UNSOL_RESPONSE_BASE;
+    }
 
     if ((unsolResponseIndex < 0)
         || (unsolResponseIndex >= (int32_t)NUM_ELEMS(s_unsolResponses))) {
@@ -3632,6 +3649,7 @@ requestToString(int request) {
         case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
         case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
         case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
+        case RIL_UNSOL_STK_SEND_SMS_RESULT: return "RIL_UNSOL_STK_SEND_SMS_RESULT";
         default: return "<unknown request>";
     }
 }
index 7e3f8f05c34dfbbd53347780f573a2ec1cf55b19..9254151aac57eaed7bea52c2b5fe00cb5963e336 100644 (file)
@@ -49,4 +49,6 @@
     {RIL_UNSOL_CDMA_PRL_CHANGED, responseInts, WAKE_PARTIAL},
     {RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE, responseVoid, WAKE_PARTIAL},
     {RIL_UNSOL_RIL_CONNECTED, responseInts, WAKE_PARTIAL},
-    {RIL_UNSOL_VOICE_RADIO_TECH_CHANGED, responseInts, WAKE_PARTIAL},
+    {RIL_UNSOL_VOICE_RADIO_TECH_CHANGED, responseInts, WAKE_PARTIAL}, // 1035
+    {RIL_UNSOL_RELEASE_COMPLETE_MESSAGE, responseVoid, WAKE_PARTIAL}, // 11001
+    {RIL_UNSOL_STK_SEND_SMS_RESULT, responseInts, WAKE_PARTIAL}, // 11002
\ No newline at end of file