[Feature]add MT2731_MP2_MR2_SVN388 baseline version

Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/lynq/lib/liblynq-tele-ril/lynq-riltel/Ril_responsedispatch.cpp b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/Ril_responsedispatch.cpp
new file mode 100644
index 0000000..e75e26d
--- /dev/null
+++ b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/Ril_responsedispatch.cpp
@@ -0,0 +1,202 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+#include <alloca.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <vendor-ril/telephony/ril.h>
+#include "common.h"
+#undef LOG_TAG
+#define LOG_TAG "DEMO_RspDisp"
+
+//data struct
+typedef struct{
+    int request;
+    RIL_SOCKET_ID socket_id;
+    char* arg;
+}ResponseDisptachData;
+
+struct RspDisp_Event{
+    struct RspDisp_Event* next;
+    struct RspDisp_Event* prev;
+    ResponseDisptachData data;
+};
+//global variable
+static pthread_mutex_t s_listMutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_listCond = PTHREAD_COND_INITIALIZER;
+//marco define
+#define LIST_LOCK()  pthread_mutex_lock(&s_listMutex)
+#define LIST_UNLOCK() pthread_mutex_unlock(&s_listMutex)
+#define WAITLIST() pthread_cond_wait(&s_listCond,&s_listMutex)
+#define WAKEUPLIST() pthread_cond_signal(&s_listCond)
+
+//list variable and function announce
+static struct RspDisp_Event rspDisp_list;
+void initList(struct RspDisp_Event* list);
+void addToList(struct RspDisp_Event* ev, struct RspDisp_Event* list);
+void removeFromList(struct RspDisp_Event* ev);
+
+void intRspList()
+{
+    LIST_LOCK();
+    initList(&rspDisp_list);
+    LIST_UNLOCK();
+}
+
+//function define
+void initList(struct RspDisp_Event* list)
+{
+    memset(list, 0 ,sizeof(struct RspDisp_Event));
+    list->next = list;
+    list->prev = list;
+    RLOGD("Demo Ril_event init list!");
+}
+
+void addToList(struct RspDisp_Event* ev, struct RspDisp_Event* list)
+{ //add to list tail
+    ev->next = list;
+    ev->prev = list->prev;
+    ev->prev->next = ev;
+    list->prev = ev;
+    RLOGD("Demo Ril_event add an event to list!");
+}
+
+void removeFromList(struct RspDisp_Event* ev)
+{
+    ev->next->prev = ev->prev;
+    ev->prev->next = ev->next;
+    ev->next = NULL;
+    ev->prev = NULL;
+    RLOGD("Demo Ril_event remove an event from list!");
+}
+
+void ARspRequestWithArg(int request, const char* arg,RIL_SOCKET_ID socket_id)
+{
+    struct RspDisp_Event* event = (struct RspDisp_Event*)malloc(sizeof(struct RspDisp_Event));
+
+    if(event == NULL)
+    {
+        RLOGE("malloc event memory error!");
+        return;
+    }
+    RLOGD("A Request happened, request is %s!",android::requestToString(request));
+    event->data.request = request;
+    if (arg != NULL) {
+        event->data.arg = strdup(arg);
+    } else {
+        event->data.arg = NULL;
+    }
+
+    event->data.socket_id = socket_id;
+    event->prev = NULL;
+    event->next = NULL;
+    LIST_LOCK();
+    addToList(event,&rspDisp_list);
+    WAKEUPLIST();
+    LIST_UNLOCK();
+    return;
+}
+
+void ARspRequest (int request,RIL_SOCKET_ID socket_id)
+{
+    ARspRequestWithArg(request, NULL,socket_id);
+}
+
+int dispOnSupport(int request)
+{
+    switch (request){
+    case RIL_REQUEST_GET_CURRENT_CALLS:       return 1;
+    case RIL_REQUEST_ANSWER:                  return 1;
+    case RIL_REQUEST_GET_SIM_STATUS:          return 1;
+    case RIL_REQUEST_DATA_REGISTRATION_STATE: return 1;
+    case RIL_REQUEST_VOICE_REGISTRATION_STATE: return 1;
+    case RIL_REQUEST_SMS_ACKNOWLEDGE:         return 1;
+    case RIL_REQUEST_OEM_HOOK_RAW:              return 1;
+    case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return 1;
+    case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE: return 1;
+    case RIL_REQUEST_RADIO_POWER: return 1;
+    case RIL_REQUEST_ALLOW_DATA: return 1;
+    case RIL_REQUEST_CDMA_FLASH: return 1;
+    case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return 1;
+    //case :return 1;
+    default:return 0;
+    }
+}
+//ResponseDispatch function used for :
+// 1. ril request triggered by RIL_onRequestComplete flow
+// 2. ril request triggered by RIL_onUnsolicitedResponse flow
+void responseDispatch()
+{
+    struct RspDisp_Event* event = NULL;
+    RLOGD("start loop!");
+
+    prctl(PR_SET_NAME,(unsigned long)"demo_Rsp_disp");
+
+    //LIST_LOCK();
+    //initList(&rspDisp_list);
+    //LIST_UNLOCK();
+
+    for(;;){
+
+        LIST_LOCK();
+        if(rspDisp_list.next == &rspDisp_list) {    //if blank list  then wait
+            RLOGD("blank list ,then wait!");
+            while(rspDisp_list.next == &rspDisp_list){
+                WAITLIST();
+            }
+        }
+        event = rspDisp_list.next;
+        removeFromList(event);
+        LIST_UNLOCK();
+
+         // do ril request
+         if(dispOnSupport(event->data.request) != 1) {
+            RLOGD("event not support!");
+            goto event_done;
+        }
+        android::RspDispFunction(event->data.request, event->data.arg, event->data.socket_id);
+
+    event_done:
+        if(event != NULL) {
+            if(event->data.arg != NULL) {
+                free(event->data.arg);
+                event->data.arg = NULL;
+            }
+            free(event);
+            event = NULL;
+        }
+    }
+
+    return;
+}