ril.cpp revision 74f7e667381fae533f70843ea952db04bd2adc36
100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/* //device/libs/telephony/ril.cpp 200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project** 300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project** Copyright 2006, The Android Open Source Project 400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project** 57f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville** Licensed under the Apache License, Version 2.0 (the "License"); 67f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville** you may not use this file except in compliance with the License. 77f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville** You may obtain a copy of the License at 800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project** 97f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville** http://www.apache.org/licenses/LICENSE-2.0 1000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project** 117f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville** Unless required by applicable law or agreed to in writing, software 127f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville** distributed under the License is distributed on an "AS IS" BASIS, 137f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 147f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville** See the License for the specific language governing permissions and 1500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project** limitations under the License. 1600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project*/ 1700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define LOG_TAG "RILC" 1900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <hardware_legacy/power.h> 2100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <telephony/ril.h> 23f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#include <telephony/ril_cdma_sms.h> 2400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <cutils/sockets.h> 2500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <cutils/jstring.h> 26622bf2bf79849127cbedd1f56631615bf58aaf78Dima Zavin#include <telephony/record_stream.h> 2700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <utils/Log.h> 2800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <utils/SystemClock.h> 2900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <pthread.h> 308a3c48c4eac62f9c25ab3f0dbfd8f829a1e32778Mathias Agopian#include <binder/Parcel.h> 3100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <cutils/jstring.h> 3200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <sys/types.h> 3418e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville#include <sys/limits.h> 3500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <pwd.h> 3600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <stdio.h> 3800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <stdlib.h> 3900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <stdarg.h> 4000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <string.h> 4100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <unistd.h> 4200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <fcntl.h> 4300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <time.h> 4400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <errno.h> 4500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <assert.h> 4600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <ctype.h> 4700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <alloca.h> 4800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <sys/un.h> 4900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <assert.h> 5000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <netinet/in.h> 5100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <cutils/properties.h> 5200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 5300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include <ril_event.h> 5400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 5500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectnamespace android { 5600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 5700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define PHONE_PROCESS "radio" 5800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 5900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define SOCKET_NAME_RIL "rild" 6000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define SOCKET_NAME_RIL_DEBUG "rild-debug" 6100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define ANDROID_WAKE_LOCK_NAME "radio-interface" 6300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define PROPERTY_RIL_IMPL "gsm.version.ril-impl" 6600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project// match with constant in RIL.java 6800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define MAX_COMMAND_BYTES (8 * 1024) 6900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 7000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project// Basically: memset buffers that the client library 7100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project// shouldn't be using anymore in an attempt to find 7200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project// memory usage issues sooner. 7300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define MEMSET_FREED 1 7400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 7500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define NUM_ELEMS(a) (sizeof (a) / sizeof (a)[0]) 7600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 77f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#define MIN(a,b) ((a)<(b) ? (a) : (b)) 78f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 7900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/* Constants for response types */ 8000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define RESPONSE_SOLICITED 0 8100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define RESPONSE_UNSOLICITED 1 8200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 8300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/* Negative values for private RIL errno's */ 8400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define RIL_ERRNO_INVALID_RESPONSE -1 8500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 8600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project// request, response, and unsolicited msg print macro 8700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define PRINTBUF_SIZE 8096 8800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 8900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project// Enable RILC log 9000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#define RILC_LOG 0 9100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 9200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#if RILC_LOG 9300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define startRequest sprintf(printBuf, "(") 9400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define closeRequest sprintf(printBuf, "%s)", printBuf) 9500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define printRequest(token, req) \ 968eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD("[%04d]> %s %s", token, requestToString(req), printBuf) 9700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 9800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define startResponse sprintf(printBuf, "%s {", printBuf) 9900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define closeResponse sprintf(printBuf, "%s}", printBuf) 1008eb2a12cb7b525e74736300962a5f3848427275aWink Saville #define printResponse RLOGD("%s", printBuf) 10100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 10200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define clearPrintBuf printBuf[0] = 0 10300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define removeLastChar printBuf[strlen(printBuf)-1] = 0 10400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define appendPrintBuf(x...) sprintf(printBuf, x) 10500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#else 10600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define startRequest 10700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define closeRequest 10800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define printRequest(token, req) 10900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define startResponse 11000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define closeResponse 11100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define printResponse 11200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define clearPrintBuf 11300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define removeLastChar 11400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project #define appendPrintBuf(x...) 11500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 11600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 11700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectenum WakeType {DONT_WAKE, WAKE_PARTIAL}; 11800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 11900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projecttypedef struct { 12000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int requestNumber; 12100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project void (*dispatchFunction) (Parcel &p, struct RequestInfo *pRI); 12200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int(*responseFunction) (Parcel &p, void *response, size_t responselen); 12300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} CommandInfo; 12400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 12500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projecttypedef struct { 12600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int requestNumber; 12700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int (*responseFunction) (Parcel &p, void *response, size_t responselen); 12800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project WakeType wakeType; 12900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} UnsolResponseInfo; 13000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 13100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projecttypedef struct RequestInfo { 1327f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville int32_t token; //this is not RIL_Token 13300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project CommandInfo *pCI; 13400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project struct RequestInfo *p_next; 13500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char cancelled; 13600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char local; // responses to local commands do not go back to command process 13700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} RequestInfo; 13800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1393d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savilletypedef struct UserCallbackInfo { 14000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_TimedCallback p_callback; 14100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project void *userParam; 14200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project struct ril_event event; 14300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project struct UserCallbackInfo *p_next; 14400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} UserCallbackInfo; 14500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1460d9f0c0ea45a0239653e04f2c63ccecb1bc62c6bDianne Hackborn 14700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/*******************************************************************/ 14800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 14900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source ProjectRIL_RadioFunctions s_callbacks = {0, NULL, NULL, NULL, NULL, NULL}; 15000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int s_registerCalled = 0; 15100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 15200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic pthread_t s_tid_dispatch; 15300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic pthread_t s_tid_reader; 15400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int s_started = 0; 15500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 15600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int s_fdListen = -1; 15700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int s_fdCommand = -1; 15800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int s_fdDebug = -1; 15900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 16000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int s_fdWakeupRead; 16100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int s_fdWakeupWrite; 16200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 16300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic struct ril_event s_commands_event; 16400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic struct ril_event s_wakeupfd_event; 16500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic struct ril_event s_listen_event; 16600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic struct ril_event s_wake_timeout_event; 16700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic struct ril_event s_debug_event; 16800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 16900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 17000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic const struct timeval TIMEVAL_WAKE_TIMEOUT = {1,0}; 17100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 17200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic pthread_mutex_t s_pendingRequestsMutex = PTHREAD_MUTEX_INITIALIZER; 17300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic pthread_mutex_t s_writeMutex = PTHREAD_MUTEX_INITIALIZER; 17400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic pthread_mutex_t s_startupMutex = PTHREAD_MUTEX_INITIALIZER; 17500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic pthread_cond_t s_startupCond = PTHREAD_COND_INITIALIZER; 17600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 17700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic pthread_mutex_t s_dispatchMutex = PTHREAD_MUTEX_INITIALIZER; 17800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic pthread_cond_t s_dispatchCond = PTHREAD_COND_INITIALIZER; 17900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 18000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic RequestInfo *s_pendingRequests = NULL; 18100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 18200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic RequestInfo *s_toDispatchHead = NULL; 18300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic RequestInfo *s_toDispatchTail = NULL; 18400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 18500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic UserCallbackInfo *s_last_wake_timeout_info = NULL; 18600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 18700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void *s_lastNITZTimeData = NULL; 18800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic size_t s_lastNITZTimeDataSize; 18900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 19000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#if RILC_LOG 19100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project static char printBuf[PRINTBUF_SIZE]; 19200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 19300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 19400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/*******************************************************************/ 19500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 19600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchVoid (Parcel& p, RequestInfo *pRI); 19700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchString (Parcel& p, RequestInfo *pRI); 19800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchStrings (Parcel& p, RequestInfo *pRI); 19900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchInts (Parcel& p, RequestInfo *pRI); 20000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchDial (Parcel& p, RequestInfo *pRI); 20100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchSIM_IO (Parcel& p, RequestInfo *pRI); 2022458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawalstatic void dispatchSIM_APDU (Parcel& p, RequestInfo *pRI); 20300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchCallForward(Parcel& p, RequestInfo *pRI); 20400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchRaw(Parcel& p, RequestInfo *pRI); 20500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void dispatchSmsWrite (Parcel &p, RequestInfo *pRI); 2064f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colittistatic void dispatchDataCall (Parcel& p, RequestInfo *pRI); 2072bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic void dispatchVoiceRadioTech (Parcel& p, RequestInfo *pRI); 20875697538e485ea2981960dcd4878bfdd032731acSungmin Choistatic void dispatchSetInitialAttachApn (Parcel& p, RequestInfo *pRI); 2092bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic void dispatchCdmaSubscriptionSource (Parcel& p, RequestInfo *pRI); 21000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 211f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void dispatchCdmaSms(Parcel &p, RequestInfo *pRI); 212a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowastatic void dispatchImsSms(Parcel &p, RequestInfo *pRI); 213a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowastatic void dispatchImsCdmaSms(Parcel &p, RequestInfo *pRI, uint8_t retry, int32_t messageRef); 214a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowastatic void dispatchImsGsmSms(Parcel &p, RequestInfo *pRI, uint8_t retry, int32_t messageRef); 215f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void dispatchCdmaSmsAck(Parcel &p, RequestInfo *pRI); 216a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic void dispatchGsmBrSmsCnf(Parcel &p, RequestInfo *pRI); 217f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void dispatchCdmaBrSmsCnf(Parcel &p, RequestInfo *pRI); 218f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void dispatchRilCdmaSmsWriteArgs(Parcel &p, RequestInfo *pRI); 2198a4a233bb9503eddee83569e647c25099a8e15b3Jake Hambystatic void dispatchNVReadItem(Parcel &p, RequestInfo *pRI); 2208a4a233bb9503eddee83569e647c25099a8e15b3Jake Hambystatic void dispatchNVWriteItem(Parcel &p, RequestInfo *pRI); 2218a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 22200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseInts(Parcel &p, void *response, size_t responselen); 22300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseStrings(Parcel &p, void *response, size_t responselen); 22400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseString(Parcel &p, void *response, size_t responselen); 22500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseVoid(Parcel &p, void *response, size_t responselen); 22600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseCallList(Parcel &p, void *response, size_t responselen); 22700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseSMS(Parcel &p, void *response, size_t responselen); 22800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseSIM_IO(Parcel &p, void *response, size_t responselen); 22900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseCallForwards(Parcel &p, void *response, size_t responselen); 230f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseDataCallList(Parcel &p, void *response, size_t responselen); 2314380897c6cdc99486a061b819943e3b290ebcf09Wink Savillestatic int responseSetupDataCall(Parcel &p, void *response, size_t responselen); 23200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseRaw(Parcel &p, void *response, size_t responselen); 23300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseSsn(Parcel &p, void *response, size_t responselen); 234f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseSimStatus(Parcel &p, void *response, size_t responselen); 235a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic int responseGsmBrSmsCnf(Parcel &p, void *response, size_t responselen); 236a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic int responseCdmaBrSmsCnf(Parcel &p, void *response, size_t responselen); 237f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseCdmaSms(Parcel &p, void *response, size_t responselen); 23800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int responseCellList(Parcel &p, void *response, size_t responselen); 2393d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic int responseCdmaInformationRecords(Parcel &p,void *response, size_t responselen); 2403d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic int responseRilSignalStrength(Parcel &p,void *response, size_t responselen); 2413d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic int responseCallRing(Parcel &p, void *response, size_t responselen); 2423d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic int responseCdmaSignalInfoRecord(Parcel &p,void *response, size_t responselen); 2433d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic int responseCdmaCallWaiting(Parcel &p,void *response, size_t responselen); 24445e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenkastatic int responseSimRefresh(Parcel &p, void *response, size_t responselen); 2458a9e02161271505de274db0c3a88087056dd5dfcWink Savillestatic int responseCellInfoList(Parcel &p, void *response, size_t responselen); 24600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2472bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic int decodeVoiceRadioTechnology (RIL_RadioState radioState); 2482bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic int decodeCdmaSubscriptionSource (RIL_RadioState radioState); 2492bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic RIL_RadioState processRadioState(RIL_RadioState newRadioState); 2502bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 25100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectextern "C" const char * requestToString(int request); 25200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectextern "C" const char * failCauseToString(RIL_Errno); 25300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectextern "C" const char * callStateToString(RIL_CallState); 25400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectextern "C" const char * radioStateToString(RIL_RadioState); 25500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 25600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef RIL_SHLIB 2577f8568086f2ea14885b0091c793e14c2656f0da2Wink Savilleextern "C" void RIL_onUnsolicitedResponse(int unsolResponse, void *data, 25800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t datalen); 25900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 26000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2617f8568086f2ea14885b0091c793e14c2656f0da2Wink Savillestatic UserCallbackInfo * internalRequestTimedCallback 2620d9f0c0ea45a0239653e04f2c63ccecb1bc62c6bDianne Hackborn (RIL_TimedCallback callback, void *param, 2630d9f0c0ea45a0239653e04f2c63ccecb1bc62c6bDianne Hackborn const struct timeval *relativeTime); 26400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 26500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** Index == requestNumber */ 26600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic CommandInfo s_commands[] = { 26700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include "ril_commands.h" 26800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project}; 26900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 27000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic UnsolResponseInfo s_unsolResponses[] = { 27100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#include "ril_unsol_commands.h" 27200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project}; 27300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2742bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla/* For older RILs that do not support new commands RIL_REQUEST_VOICE_RADIO_TECH and 2752bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_UNSOL_VOICE_RADIO_TECH_CHANGED messages, decode the voice radio tech from 2762bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla radio state message and store it. Every time there is a change in Radio State 2772bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla check to see if voice radio tech changes and notify telephony 2782bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla */ 2792bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallaint voiceRadioTech = -1; 2802bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 2812bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla/* For older RILs that do not support new commands RIL_REQUEST_GET_CDMA_SUBSCRIPTION_SOURCE 2822bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla and RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED messages, decode the subscription 2832bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla source from radio state and store it. Every time there is a change in Radio State 2842bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla check to see if subscription source changed and notify telephony 2852bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla */ 2862bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallaint cdmaSubscriptionSource = -1; 2872bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 2882bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla/* For older RILs that do not send RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, decode the 2892bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla SIM/RUIM state from radio state and store it. Every time there is a change in Radio State, 2902bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla check to see if SIM/RUIM status changed and notify telephony 2912bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla */ 2922bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallaint simRuimStatus = -1; 29300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 29400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic char * 295f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillestrdupReadString(Parcel &p) { 29600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t stringlen; 29700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project const char16_t *s16; 2987f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 29900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s16 = p.readString16Inplace(&stringlen); 3007f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 30100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return strndup16to8(s16, stringlen); 30200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 30300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 304f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void writeStringToParcel(Parcel &p, const char *s) { 30500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char16_t *s16; 30600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t s16_len; 30700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s16 = strdup8to16(s, &s16_len); 30800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeString16(s16, s16_len); 30900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free(s16); 31000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 31100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 31200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 31300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 314f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillememsetString (char *s) { 31500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s != NULL) { 31600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset (s, 0, strlen(s)); 31700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 31800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 31900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 32000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectvoid nullParcelReleaseFunction (const uint8_t* data, size_t dataSize, 32100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project const size_t* objects, size_t objectsSize, 322f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville void* cookie) { 32300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // do nothing -- the data reference lives longer than the Parcel object 32400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 32500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3267f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville/** 32700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * To be called from dispatch thread 32800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * Issue a single local request, ensuring that the response 3297f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville * is not sent back up to the command process 33000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project */ 33100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 332f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleissueLocalRequest(int request, void *data, int len) { 33300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RequestInfo *pRI; 33400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 33500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 33600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI = (RequestInfo *)calloc(1, sizeof(RequestInfo)); 33700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 33800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->local = 1; 33900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->token = 0xffffffff; // token is not used in this context 34000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->pCI = &(s_commands[request]); 34100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 34200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = pthread_mutex_lock(&s_pendingRequestsMutex); 34300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert (ret == 0); 34400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 34500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->p_next = s_pendingRequests; 34600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_pendingRequests = pRI; 34700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 34800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = pthread_mutex_unlock(&s_pendingRequestsMutex); 34900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert (ret == 0); 35000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3518eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD("C[locl]> %s", requestToString(request)); 35200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 35300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_callbacks.onRequest(request, data, len, pRI); 35400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 35500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 35600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 35700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 35800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int 359f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleprocessCommandBuffer(void *buffer, size_t buflen) { 36000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project Parcel p; 36100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 36200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t request; 36300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t token; 36400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RequestInfo *pRI; 36500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 36600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 36700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.setData((uint8_t *) buffer, buflen); 36800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 36900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // status checked at end 37000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&request); 37100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32 (&token); 37200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 37300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR) { 3748eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid request block"); 37500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 37600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 37700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 37800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (request < 1 || request >= (int32_t)NUM_ELEMS(s_commands)) { 3798eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("unsupported request code %d token %d", request, token); 38000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // FIXME this should perhaps return a response 38100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 38200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 38300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 38400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 38500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI = (RequestInfo *)calloc(1, sizeof(RequestInfo)); 38600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 38700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->token = token; 38800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->pCI = &(s_commands[request]); 38900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 39000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = pthread_mutex_lock(&s_pendingRequestsMutex); 39100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert (ret == 0); 39200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 39300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->p_next = s_pendingRequests; 39400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_pendingRequests = pRI; 39500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 39600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = pthread_mutex_unlock(&s_pendingRequestsMutex); 39700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert (ret == 0); 39800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 39900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/* sLastDispatchedToken = token; */ 40000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 4017f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville pRI->pCI->dispatchFunction(p, pRI); 40200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 40300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 40400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 40500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 40600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 407f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleinvalidCommandBlock (RequestInfo *pRI) { 4088eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid command block for token %d request %s", 40900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->token, requestToString(pRI->pCI->requestNumber)); 41000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 41100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 41200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** Callee expects NULL */ 4137f8568086f2ea14885b0091c793e14c2656f0da2Wink Savillestatic void 414f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchVoid (Parcel& p, RequestInfo *pRI) { 41500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project clearPrintBuf; 41600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 41700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_callbacks.onRequest(pRI->pCI->requestNumber, NULL, 0, pRI); 41800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 41900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 42000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** Callee expects const char * */ 42100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 422f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchString (Parcel& p, RequestInfo *pRI) { 42300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 42400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t datalen; 42500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t stringlen; 42600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char *string8 = NULL; 42700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 42800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project string8 = strdupReadString(p); 42900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 43000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startRequest; 43100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s%s", printBuf, string8); 43200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeRequest; 43300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 43400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 43500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_callbacks.onRequest(pRI->pCI->requestNumber, string8, 43600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project sizeof(char *), pRI); 43700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 43800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 43900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memsetString(string8); 44000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 44100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 44200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free(string8); 44300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 44400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectinvalid: 44500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project invalidCommandBlock(pRI); 44600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 44700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 44800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 44900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** Callee expects const char ** */ 45000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 451f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchStrings (Parcel &p, RequestInfo *pRI) { 45200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t countStrings; 45300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 45400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t datalen; 45500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char **pStrings; 45600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 45700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32 (&countStrings); 45800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 45900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR) { 46000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto invalid; 46100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 46200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 46300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startRequest; 46400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (countStrings == 0) { 46500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // just some non-null pointer 46600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pStrings = (char **)alloca(sizeof(char *)); 46700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project datalen = 0; 46800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else if (((int)countStrings) == -1) { 46900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pStrings = NULL; 47000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project datalen = 0; 47100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { 47200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project datalen = sizeof(char *) * countStrings; 4737f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 47400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pStrings = (char **)alloca(datalen); 47500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 47600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0 ; i < countStrings ; i++) { 47700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pStrings[i] = strdupReadString(p); 47800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s%s,", printBuf, pStrings[i]); 47900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 48000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 48100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 48200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeRequest; 48300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 48400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 48500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_callbacks.onRequest(pRI->pCI->requestNumber, pStrings, datalen, pRI); 48600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 48700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (pStrings != NULL) { 48800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0 ; i < countStrings ; i++) { 48900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 49000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memsetString (pStrings[i]); 49100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 49200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free(pStrings[i]); 49300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 49400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 49500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 49600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset(pStrings, 0, datalen); 49700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 49800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 4997f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 50000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 50100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectinvalid: 50200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project invalidCommandBlock(pRI); 50300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 50400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 50500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 50600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** Callee expects const int * */ 50700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 508f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchInts (Parcel &p, RequestInfo *pRI) { 50900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t count; 51000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 51100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t datalen; 51200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int *pInts; 51300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 51400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32 (&count); 51500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 51600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR || count == 0) { 51700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto invalid; 51800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 51900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 52000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project datalen = sizeof(int) * count; 52100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pInts = (int *)alloca(datalen); 52200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 52300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startRequest; 52400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0 ; i < count ; i++) { 52500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t t; 52600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 52700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 52800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pInts[i] = (int)t; 52900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s%d,", printBuf, t); 53000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 53100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR) { 53200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto invalid; 53300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 53400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 53500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 53600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeRequest; 53700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 53800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 5397f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville s_callbacks.onRequest(pRI->pCI->requestNumber, const_cast<int *>(pInts), 54000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project datalen, pRI); 54100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 54200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 54300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset(pInts, 0, datalen); 54400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 54500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 54600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 54700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectinvalid: 54800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project invalidCommandBlock(pRI); 54900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 55000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 55100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 55200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 5537f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville/** 5547f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville * Callee expects const RIL_SMS_WriteArgs * 55500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * Payload is: 55600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t status 55700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * String pdu 55800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project */ 55900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 560f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchSmsWrite (Parcel &p, RequestInfo *pRI) { 56100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_SMS_WriteArgs args; 56200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t t; 56300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 56400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 56500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset (&args, 0, sizeof(args)); 56600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 56700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 56800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project args.status = (int)t; 56900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 57000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project args.pdu = strdupReadString(p); 57100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 57200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR || args.pdu == NULL) { 57300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto invalid; 57400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 57500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 57600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project args.smsc = strdupReadString(p); 57700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 57800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startRequest; 57900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s%d,%s,smsc=%s", printBuf, args.status, 58000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (char*)args.pdu, (char*)args.smsc); 58100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeRequest; 58200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 5837f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 58400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_callbacks.onRequest(pRI->pCI->requestNumber, &args, sizeof(args), pRI); 58500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 58600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 58700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memsetString (args.pdu); 58800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 58900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 59000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free (args.pdu); 5917f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 59200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 59300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset(&args, 0, sizeof(args)); 59400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 59500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 59600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 59700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectinvalid: 59800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project invalidCommandBlock(pRI); 59900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 60000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 60100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6027f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville/** 6037f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville * Callee expects const RIL_Dial * 60400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * Payload is: 60500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * String address 60600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t clir 60700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project */ 60800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 609f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchDial (Parcel &p, RequestInfo *pRI) { 61000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_Dial dial; 61174fa38884320698c1623764850e3131b9769dff0Wink Saville RIL_UUS_Info uusInfo; 6127bce082edcee07339ebb06a35970b4b218ab8288Wink Saville int32_t sizeOfDial; 61300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t t; 61474fa38884320698c1623764850e3131b9769dff0Wink Saville int32_t uusPresent; 61500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 61600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 61700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset (&dial, 0, sizeof(dial)); 61800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 61900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project dial.address = strdupReadString(p); 62000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 62100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 62200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project dial.clir = (int)t; 62300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 62400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR || dial.address == NULL) { 62500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto invalid; 62600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 62700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6283a4840bea36ce53bc0fb181811ebf9d1cd0aa261Wink Saville if (s_callbacks.version < 3) { // Remove when partners upgrade to version 3 62974fa38884320698c1623764850e3131b9769dff0Wink Saville uusPresent = 0; 6307bce082edcee07339ebb06a35970b4b218ab8288Wink Saville sizeOfDial = sizeof(dial) - sizeof(RIL_UUS_Info *); 63174fa38884320698c1623764850e3131b9769dff0Wink Saville } else { 63274fa38884320698c1623764850e3131b9769dff0Wink Saville status = p.readInt32(&uusPresent); 63374fa38884320698c1623764850e3131b9769dff0Wink Saville 63474fa38884320698c1623764850e3131b9769dff0Wink Saville if (status != NO_ERROR) { 63574fa38884320698c1623764850e3131b9769dff0Wink Saville goto invalid; 63674fa38884320698c1623764850e3131b9769dff0Wink Saville } 63774fa38884320698c1623764850e3131b9769dff0Wink Saville 63874fa38884320698c1623764850e3131b9769dff0Wink Saville if (uusPresent == 0) { 63974fa38884320698c1623764850e3131b9769dff0Wink Saville dial.uusInfo = NULL; 64074fa38884320698c1623764850e3131b9769dff0Wink Saville } else { 64174fa38884320698c1623764850e3131b9769dff0Wink Saville int32_t len; 64274fa38884320698c1623764850e3131b9769dff0Wink Saville 64374fa38884320698c1623764850e3131b9769dff0Wink Saville memset(&uusInfo, 0, sizeof(RIL_UUS_Info)); 64474fa38884320698c1623764850e3131b9769dff0Wink Saville 64574fa38884320698c1623764850e3131b9769dff0Wink Saville status = p.readInt32(&t); 64674fa38884320698c1623764850e3131b9769dff0Wink Saville uusInfo.uusType = (RIL_UUS_Type) t; 64774fa38884320698c1623764850e3131b9769dff0Wink Saville 64874fa38884320698c1623764850e3131b9769dff0Wink Saville status = p.readInt32(&t); 64974fa38884320698c1623764850e3131b9769dff0Wink Saville uusInfo.uusDcs = (RIL_UUS_DCS) t; 65074fa38884320698c1623764850e3131b9769dff0Wink Saville 65174fa38884320698c1623764850e3131b9769dff0Wink Saville status = p.readInt32(&len); 65274fa38884320698c1623764850e3131b9769dff0Wink Saville if (status != NO_ERROR) { 65374fa38884320698c1623764850e3131b9769dff0Wink Saville goto invalid; 65474fa38884320698c1623764850e3131b9769dff0Wink Saville } 65574fa38884320698c1623764850e3131b9769dff0Wink Saville 65674fa38884320698c1623764850e3131b9769dff0Wink Saville // The java code writes -1 for null arrays 65774fa38884320698c1623764850e3131b9769dff0Wink Saville if (((int) len) == -1) { 65874fa38884320698c1623764850e3131b9769dff0Wink Saville uusInfo.uusData = NULL; 65974fa38884320698c1623764850e3131b9769dff0Wink Saville len = 0; 66074fa38884320698c1623764850e3131b9769dff0Wink Saville } else { 66174fa38884320698c1623764850e3131b9769dff0Wink Saville uusInfo.uusData = (char*) p.readInplace(len); 66274fa38884320698c1623764850e3131b9769dff0Wink Saville } 66374fa38884320698c1623764850e3131b9769dff0Wink Saville 66474fa38884320698c1623764850e3131b9769dff0Wink Saville uusInfo.uusLength = len; 66574fa38884320698c1623764850e3131b9769dff0Wink Saville dial.uusInfo = &uusInfo; 66674fa38884320698c1623764850e3131b9769dff0Wink Saville } 6677bce082edcee07339ebb06a35970b4b218ab8288Wink Saville sizeOfDial = sizeof(dial); 66874fa38884320698c1623764850e3131b9769dff0Wink Saville } 66974fa38884320698c1623764850e3131b9769dff0Wink Saville 67000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startRequest; 67100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%snum=%s,clir=%d", printBuf, dial.address, dial.clir); 67274fa38884320698c1623764850e3131b9769dff0Wink Saville if (uusPresent) { 67374fa38884320698c1623764850e3131b9769dff0Wink Saville appendPrintBuf("%s,uusType=%d,uusDcs=%d,uusLen=%d", printBuf, 67474fa38884320698c1623764850e3131b9769dff0Wink Saville dial.uusInfo->uusType, dial.uusInfo->uusDcs, 67574fa38884320698c1623764850e3131b9769dff0Wink Saville dial.uusInfo->uusLength); 67674fa38884320698c1623764850e3131b9769dff0Wink Saville } 67700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeRequest; 67800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 67900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6807bce082edcee07339ebb06a35970b4b218ab8288Wink Saville s_callbacks.onRequest(pRI->pCI->requestNumber, &dial, sizeOfDial, pRI); 68100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 68200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 68300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memsetString (dial.address); 68400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 68500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 68600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free (dial.address); 6877f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 68800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 68974fa38884320698c1623764850e3131b9769dff0Wink Saville memset(&uusInfo, 0, sizeof(RIL_UUS_Info)); 69000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset(&dial, 0, sizeof(dial)); 69100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 69200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 69300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 69400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectinvalid: 69500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project invalidCommandBlock(pRI); 69600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 69700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 69800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6997f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville/** 7007f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville * Callee expects const RIL_SIM_IO * 70100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * Payload is: 70200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t command 70300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t fileid 70400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * String path 70500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t p1, p2, p3 7067f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville * String data 7077f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville * String pin2 708c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville * String aidPtr 70900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project */ 71000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 711f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchSIM_IO (Parcel &p, RequestInfo *pRI) { 712c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville union RIL_SIM_IO { 713c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville RIL_SIM_IO_v6 v6; 714c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville RIL_SIM_IO_v5 v5; 715c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville } simIO; 716c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville 71700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t t; 718c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville int size; 71900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 72000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 72100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset (&simIO, 0, sizeof(simIO)); 72200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 7237f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville // note we only check status at the end 7247f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 72500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 726c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.command = (int)t; 72700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 72800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 729c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.fileid = (int)t; 73000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 731c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.path = strdupReadString(p); 73200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 73300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 734c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.p1 = (int)t; 73500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 73600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 737c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.p2 = (int)t; 73800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 73900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 740c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.p3 = (int)t; 74100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 742c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.data = strdupReadString(p); 743c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.pin2 = strdupReadString(p); 744c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.aidPtr = strdupReadString(p); 74500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 74600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startRequest; 747c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville appendPrintBuf("%scmd=0x%X,efid=0x%X,path=%s,%d,%d,%d,%s,pin2=%s,aid=%s", printBuf, 748c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.command, simIO.v6.fileid, (char*)simIO.v6.path, 749c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville simIO.v6.p1, simIO.v6.p2, simIO.v6.p3, 750c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville (char*)simIO.v6.data, (char*)simIO.v6.pin2, simIO.v6.aidPtr); 75100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeRequest; 75200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 7537f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 75400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR) { 75500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto invalid; 75600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 75700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 758c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville size = (s_callbacks.version < 6) ? sizeof(simIO.v5) : sizeof(simIO.v6); 759c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville s_callbacks.onRequest(pRI->pCI->requestNumber, &simIO, size, pRI); 76000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 76100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 762c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville memsetString (simIO.v6.path); 763c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville memsetString (simIO.v6.data); 764c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville memsetString (simIO.v6.pin2); 765c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville memsetString (simIO.v6.aidPtr); 76600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 76700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 768c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville free (simIO.v6.path); 769c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville free (simIO.v6.data); 770c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville free (simIO.v6.pin2); 771c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville free (simIO.v6.aidPtr); 7727f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 77300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 77400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset(&simIO, 0, sizeof(simIO)); 77500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 77600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 77700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 77800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectinvalid: 77900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project invalidCommandBlock(pRI); 78000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 78100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 78200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 78300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** 7842458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal * Callee expects const RIL_SIM_APDU * 7852458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal * Payload is: 7862458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal * int32_t sessionid 7872458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal * int32_t cla 7882458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal * int32_t instruction 7892458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal * int32_t p1, p2, p3 7902458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal * String data 7912458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal */ 7922458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawalstatic void 7932458d8d1e56faae7b00511ceeab19730572c22d9Shishir AgrawaldispatchSIM_APDU (Parcel &p, RequestInfo *pRI) { 7942458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal int32_t t; 7952458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal status_t status; 7962458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal RIL_SIM_APDU apdu; 7972458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 7982458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal memset (&apdu, 0, sizeof(RIL_SIM_APDU)); 7992458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8002458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal // Note we only check status at the end. Any single failure leads to 8012458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal // subsequent reads filing. 8022458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal status = p.readInt32(&t); 8032458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal apdu.sessionid = (int)t; 8042458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8052458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal status = p.readInt32(&t); 8062458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal apdu.cla = (int)t; 8072458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8082458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal status = p.readInt32(&t); 8092458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal apdu.instruction = (int)t; 8102458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8112458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal status = p.readInt32(&t); 8122458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal apdu.p1 = (int)t; 8132458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8142458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal status = p.readInt32(&t); 8152458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal apdu.p2 = (int)t; 8162458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8172458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal status = p.readInt32(&t); 8182458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal apdu.p3 = (int)t; 8192458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8202458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal apdu.data = strdupReadString(p); 8212458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8222458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal startRequest; 8232458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal appendPrintBuf("%ssessionid=%d,cla=%d,ins=%d,p1=%d,p2=%d,p3=%d,data=%s", 8242458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal printBuf, apdu.sessionid, apdu.cla, apdu.instruction, apdu.p1, apdu.p2, 8252458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal apdu.p3, (char*)apdu.data); 8262458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal closeRequest; 8272458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal printRequest(pRI->token, pRI->pCI->requestNumber); 8282458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8292458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal if (status != NO_ERROR) { 8302458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal goto invalid; 8312458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal } 8322458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8332458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal s_callbacks.onRequest(pRI->pCI->requestNumber, &apdu, sizeof(RIL_SIM_APDU), pRI); 8342458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8352458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal#ifdef MEMSET_FREED 8362458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal memsetString(apdu.data); 8372458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal#endif 8382458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal free(apdu.data); 8392458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8402458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal#ifdef MEMSET_FREED 8412458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal memset(&apdu, 0, sizeof(RIL_SIM_APDU)); 8422458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal#endif 8432458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8442458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal return; 8452458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawalinvalid: 8462458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal invalidCommandBlock(pRI); 8472458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal return; 8482458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal} 8492458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8502458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal 8512458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal/** 85200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * Callee expects const RIL_CallForwardInfo * 85300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * Payload is: 85400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t status/action 85500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t reason 85600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t serviceCode 85700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t toa 85800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * String number (0 length -> null) 85900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * int32_t timeSeconds 86000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project */ 8617f8568086f2ea14885b0091c793e14c2656f0da2Wink Savillestatic void 862f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchCallForward(Parcel &p, RequestInfo *pRI) { 86300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_CallForwardInfo cff; 86400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t t; 86500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 86600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 86700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset (&cff, 0, sizeof(cff)); 86800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 8697f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville // note we only check status at the end 87000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 87100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 87200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cff.status = (int)t; 8737f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 87400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 87500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cff.reason = (int)t; 87600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 87700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 87800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cff.serviceClass = (int)t; 87900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 88000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 88100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cff.toa = (int)t; 88200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 88300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cff.number = strdupReadString(p); 88400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 88500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&t); 88600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cff.timeSeconds = (int)t; 88700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 88800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR) { 88900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto invalid; 89000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 89100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 89200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // special case: number 0-length fields is null 89300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 89400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (cff.number != NULL && strlen (cff.number) == 0) { 89500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cff.number = NULL; 89600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 89700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 89800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startRequest; 89900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%sstat=%d,reason=%d,serv=%d,toa=%d,%s,tout=%d", printBuf, 90000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cff.status, cff.reason, cff.serviceClass, cff.toa, 90100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (char*)cff.number, cff.timeSeconds); 90200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeRequest; 90300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 90400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 90500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_callbacks.onRequest(pRI->pCI->requestNumber, &cff, sizeof(cff), pRI); 90600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 90700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 90800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memsetString(cff.number); 90900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 91000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 91100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free (cff.number); 91200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 91300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#ifdef MEMSET_FREED 91400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset(&cff, 0, sizeof(cff)); 91500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 91600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 91700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 91800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectinvalid: 91900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project invalidCommandBlock(pRI); 92000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 92100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 92200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 92300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 9247f8568086f2ea14885b0091c793e14c2656f0da2Wink Savillestatic void 925f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchRaw(Parcel &p, RequestInfo *pRI) { 92600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int32_t len; 92700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status_t status; 92800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project const void *data; 92900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 93000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project status = p.readInt32(&len); 93100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 93200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (status != NO_ERROR) { 93300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto invalid; 93400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 93500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 93600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // The java code writes -1 for null arrays 93700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (((int)len) == -1) { 93800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project data = NULL; 93900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project len = 0; 9407f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville } 94100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 94200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project data = p.readInplace(len); 94300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 94400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startRequest; 94500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%sraw_size=%d", printBuf, len); 94600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeRequest; 94700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printRequest(pRI->token, pRI->pCI->requestNumber); 94800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 94900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_callbacks.onRequest(pRI->pCI->requestNumber, const_cast<void *>(data), len, pRI); 95000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 95100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 95200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectinvalid: 95300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project invalidCommandBlock(pRI); 95400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 95500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 95600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 957a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowastatic status_t 958a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya RajkhowaconstructCdmaSms(Parcel &p, RequestInfo *pRI, RIL_CDMA_SMS_Message& rcsm) { 959f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int32_t t; 960f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville uint8_t ut; 961f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status_t status; 962f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int32_t digitCount; 963f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int digitLimit; 9647f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 965f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville memset(&rcsm, 0, sizeof(rcsm)); 966f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 967f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 968f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.uTeleserviceID = (int) t; 969f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 970f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.read(&ut,sizeof(ut)); 971f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.bIsServicePresent = (uint8_t) ut; 972f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 973f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 974f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.uServicecategory = (int) t; 975f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 976f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 977f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sAddress.digit_mode = (RIL_CDMA_SMS_DigitMode) t; 978f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 979f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 980f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sAddress.number_mode = (RIL_CDMA_SMS_NumberMode) t; 981f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 982f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 983f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sAddress.number_type = (RIL_CDMA_SMS_NumberType) t; 984f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 985f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 986f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sAddress.number_plan = (RIL_CDMA_SMS_NumberPlan) t; 987f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 988f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.read(&ut,sizeof(ut)); 989f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sAddress.number_of_digits= (uint8_t) ut; 990f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 991f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville digitLimit= MIN((rcsm.sAddress.number_of_digits), RIL_CDMA_SMS_ADDRESS_MAX); 992f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for(digitCount =0 ; digitCount < digitLimit; digitCount ++) { 993f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.read(&ut,sizeof(ut)); 994f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sAddress.digits[digitCount] = (uint8_t) ut; 995f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 996f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 9977f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville status = p.readInt32(&t); 998f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sSubAddress.subaddressType = (RIL_CDMA_SMS_SubaddressType) t; 999f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 10007f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville status = p.read(&ut,sizeof(ut)); 1001f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sSubAddress.odd = (uint8_t) ut; 1002f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1003f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.read(&ut,sizeof(ut)); 1004f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sSubAddress.number_of_digits = (uint8_t) ut; 1005f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1006f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville digitLimit= MIN((rcsm.sSubAddress.number_of_digits), RIL_CDMA_SMS_SUBADDRESS_MAX); 10077f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville for(digitCount =0 ; digitCount < digitLimit; digitCount ++) { 10087f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville status = p.read(&ut,sizeof(ut)); 1009f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.sSubAddress.digits[digitCount] = (uint8_t) ut; 1010f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 1011f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 10127f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville status = p.readInt32(&t); 1013f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.uBearerDataLen = (int) t; 1014f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1015f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville digitLimit= MIN((rcsm.uBearerDataLen), RIL_CDMA_SMS_BEARER_DATA_MAX); 10167f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville for(digitCount =0 ; digitCount < digitLimit; digitCount ++) { 10177f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville status = p.read(&ut, sizeof(ut)); 1018f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsm.aBearerData[digitCount] = (uint8_t) ut; 1019f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 1020f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1021f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville if (status != NO_ERROR) { 1022a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa return status; 1023f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 1024f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1025f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville startRequest; 1026f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville appendPrintBuf("%suTeleserviceID=%d, bIsServicePresent=%d, uServicecategory=%d, \ 10271b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville sAddress.digit_mode=%d, sAddress.Number_mode=%d, sAddress.number_type=%d, ", 1028f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville printBuf, rcsm.uTeleserviceID,rcsm.bIsServicePresent,rcsm.uServicecategory, 10291b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville rcsm.sAddress.digit_mode, rcsm.sAddress.number_mode,rcsm.sAddress.number_type); 1030f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville closeRequest; 10317f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 1032f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville printRequest(pRI->token, pRI->pCI->requestNumber); 1033f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1034a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa return status; 1035a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa} 1036a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1037a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowastatic void 1038a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya RajkhowadispatchCdmaSms(Parcel &p, RequestInfo *pRI) { 1039a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa RIL_CDMA_SMS_Message rcsm; 1040a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1041a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa ALOGD("dispatchCdmaSms"); 1042a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (NO_ERROR != constructCdmaSms(p, pRI, rcsm)) { 1043a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa goto invalid; 1044a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1045a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1046f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville s_callbacks.onRequest(pRI->pCI->requestNumber, &rcsm, sizeof(rcsm),pRI); 1047f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1048f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#ifdef MEMSET_FREED 1049f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville memset(&rcsm, 0, sizeof(rcsm)); 1050f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#endif 1051f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1052f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1053f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1054f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savilleinvalid: 1055f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville invalidCommandBlock(pRI); 1056f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1057f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville} 1058f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 10597f8568086f2ea14885b0091c793e14c2656f0da2Wink Savillestatic void 1060a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya RajkhowadispatchImsCdmaSms(Parcel &p, RequestInfo *pRI, uint8_t retry, int32_t messageRef) { 1061a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa RIL_IMS_SMS_Message rism; 1062a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa RIL_CDMA_SMS_Message rcsm; 1063a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1064a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa ALOGD("dispatchImsCdmaSms: retry=%d, messageRef=%d", retry, messageRef); 1065a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1066a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (NO_ERROR != constructCdmaSms(p, pRI, rcsm)) { 1067a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa goto invalid; 1068a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1069a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa memset(&rism, 0, sizeof(rism)); 1070a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa rism.tech = RADIO_TECH_3GPP2; 1071a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa rism.retry = retry; 1072a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa rism.messageRef = messageRef; 1073a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa rism.message.cdmaMessage = &rcsm; 1074a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1075a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa s_callbacks.onRequest(pRI->pCI->requestNumber, &rism, 1076a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa sizeof(RIL_RadioTechnologyFamily)+sizeof(uint8_t)+sizeof(int32_t) 1077a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa +sizeof(rcsm),pRI); 1078a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1079a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa#ifdef MEMSET_FREED 1080a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa memset(&rcsm, 0, sizeof(rcsm)); 1081a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa memset(&rism, 0, sizeof(rism)); 1082a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa#endif 1083a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1084a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa return; 1085a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1086a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowainvalid: 1087a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa invalidCommandBlock(pRI); 1088a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa return; 1089a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa} 1090a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1091a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowastatic void 1092a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya RajkhowadispatchImsGsmSms(Parcel &p, RequestInfo *pRI, uint8_t retry, int32_t messageRef) { 1093a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa RIL_IMS_SMS_Message rism; 1094a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa int32_t countStrings; 1095a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa status_t status; 1096a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa size_t datalen; 1097a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa char **pStrings; 1098a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa ALOGD("dispatchImsGsmSms: retry=%d, messageRef=%d", retry, messageRef); 1099a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1100a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa status = p.readInt32 (&countStrings); 1101a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1102a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (status != NO_ERROR) { 1103a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa goto invalid; 1104a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1105a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1106a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa memset(&rism, 0, sizeof(rism)); 1107a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa rism.tech = RADIO_TECH_3GPP; 1108a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa rism.retry = retry; 1109a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa rism.messageRef = messageRef; 1110a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1111a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa startRequest; 11125d891b7991dd22c105e97180e0fb02d4b42911ebEtan Cohen appendPrintBuf("%stech=%d, retry=%d, messageRef=%d, ", printBuf, 11135d891b7991dd22c105e97180e0fb02d4b42911ebEtan Cohen (int)rism.tech, (int)rism.retry, rism.messageRef); 1114a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (countStrings == 0) { 1115a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa // just some non-null pointer 1116a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa pStrings = (char **)alloca(sizeof(char *)); 1117a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa datalen = 0; 1118a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } else if (((int)countStrings) == -1) { 1119a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa pStrings = NULL; 1120a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa datalen = 0; 1121a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } else { 1122a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa datalen = sizeof(char *) * countStrings; 1123a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1124a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa pStrings = (char **)alloca(datalen); 1125a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1126a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa for (int i = 0 ; i < countStrings ; i++) { 1127a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa pStrings[i] = strdupReadString(p); 1128a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa appendPrintBuf("%s%s,", printBuf, pStrings[i]); 1129a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1130a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1131a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa removeLastChar; 1132a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa closeRequest; 1133a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa printRequest(pRI->token, pRI->pCI->requestNumber); 1134a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1135a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa rism.message.gsmMessage = pStrings; 1136a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa s_callbacks.onRequest(pRI->pCI->requestNumber, &rism, 1137a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa sizeof(RIL_RadioTechnologyFamily)+sizeof(uint8_t)+sizeof(int32_t) 1138a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa +datalen, pRI); 1139a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1140a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (pStrings != NULL) { 1141a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa for (int i = 0 ; i < countStrings ; i++) { 1142a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa#ifdef MEMSET_FREED 1143a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa memsetString (pStrings[i]); 1144a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa#endif 1145a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa free(pStrings[i]); 1146a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1147a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1148a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa#ifdef MEMSET_FREED 1149a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa memset(pStrings, 0, datalen); 1150a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa#endif 1151a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1152a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1153a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa#ifdef MEMSET_FREED 1154a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa memset(&rism, 0, sizeof(rism)); 1155a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa#endif 1156a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa return; 1157a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowainvalid: 1158a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa ALOGE("dispatchImsGsmSms invalid block"); 1159a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa invalidCommandBlock(pRI); 1160a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa return; 1161a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa} 1162a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1163a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowastatic void 1164a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya RajkhowadispatchImsSms(Parcel &p, RequestInfo *pRI) { 1165a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa int32_t t; 1166a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa status_t status = p.readInt32(&t); 1167a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa RIL_RadioTechnologyFamily format; 1168a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa uint8_t retry; 1169a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa int32_t messageRef; 1170a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1171a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa ALOGD("dispatchImsSms"); 1172a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (status != NO_ERROR) { 1173a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa goto invalid; 1174a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1175a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa format = (RIL_RadioTechnologyFamily) t; 1176a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1177a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa // read retry field 1178a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa status = p.read(&retry,sizeof(retry)); 1179a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (status != NO_ERROR) { 1180a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa goto invalid; 1181a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1182a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa // read messageRef field 1183a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa status = p.read(&messageRef,sizeof(messageRef)); 1184a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (status != NO_ERROR) { 1185a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa goto invalid; 1186a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1187a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1188a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa if (RADIO_TECH_3GPP == format) { 1189a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa dispatchImsGsmSms(p, pRI, retry, messageRef); 1190a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } else if (RADIO_TECH_3GPP2 == format) { 1191a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa dispatchImsCdmaSms(p, pRI, retry, messageRef); 1192a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } else { 1193a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa ALOGE("requestImsSendSMS invalid format value =%d", format); 1194a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa } 1195a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1196a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa return; 1197a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1198a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowainvalid: 1199a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa invalidCommandBlock(pRI); 1200a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa return; 1201a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa} 1202a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa 1203a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowastatic void 1204f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchCdmaSmsAck(Parcel &p, RequestInfo *pRI) { 1205f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville RIL_CDMA_SMS_Ack rcsa; 1206f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int32_t t; 1207f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status_t status; 1208f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int32_t digitCount; 1209f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1210f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville memset(&rcsa, 0, sizeof(rcsa)); 1211f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1212f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1213f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsa.uErrorClass = (RIL_CDMA_SMS_ErrorClass) t; 1214f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1215f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1216f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsa.uSMSCauseCode = (int) t; 1217f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1218f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville if (status != NO_ERROR) { 1219f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville goto invalid; 1220f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 1221f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1222f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville startRequest; 12231b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville appendPrintBuf("%suErrorClass=%d, uTLStatus=%d, ", 12241b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville printBuf, rcsa.uErrorClass, rcsa.uSMSCauseCode); 1225f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville closeRequest; 1226f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1227f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville printRequest(pRI->token, pRI->pCI->requestNumber); 1228f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1229f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville s_callbacks.onRequest(pRI->pCI->requestNumber, &rcsa, sizeof(rcsa),pRI); 1230f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1231f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#ifdef MEMSET_FREED 1232f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville memset(&rcsa, 0, sizeof(rcsa)); 1233f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#endif 1234f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1235f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1236f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1237f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savilleinvalid: 1238f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville invalidCommandBlock(pRI); 1239f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1240f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville} 1241f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1242a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic void 1243a592eebc476a3d234f47f93e58252f8c822fc772Wink SavilledispatchGsmBrSmsCnf(Parcel &p, RequestInfo *pRI) { 1244a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville int32_t t; 1245f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status_t status; 1246a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville int32_t num; 1247f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1248a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville status = p.readInt32(&num); 1249a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville if (status != NO_ERROR) { 1250a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville goto invalid; 1251a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville } 1252f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 125396dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel { 125496dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel RIL_GSM_BroadcastSmsConfigInfo gsmBci[num]; 125596dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel RIL_GSM_BroadcastSmsConfigInfo *gsmBciPtrs[num]; 1256f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 125796dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel startRequest; 125896dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel for (int i = 0 ; i < num ; i++ ) { 125996dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBciPtrs[i] = &gsmBci[i]; 1260f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 126196dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel status = p.readInt32(&t); 126296dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBci[i].fromServiceId = (int) t; 1263f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 126496dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel status = p.readInt32(&t); 126596dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBci[i].toServiceId = (int) t; 1266f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 126796dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel status = p.readInt32(&t); 126896dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBci[i].fromCodeScheme = (int) t; 1269f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 127096dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel status = p.readInt32(&t); 127196dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBci[i].toCodeScheme = (int) t; 1272a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 127396dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel status = p.readInt32(&t); 127496dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBci[i].selected = (uint8_t) t; 1275a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 127696dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel appendPrintBuf("%s [%d: fromServiceId=%d, toServiceId =%d, \ 127796dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel fromCodeScheme=%d, toCodeScheme=%d, selected =%d]", printBuf, i, 127896dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBci[i].fromServiceId, gsmBci[i].toServiceId, 127996dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBci[i].fromCodeScheme, gsmBci[i].toCodeScheme, 128096dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBci[i].selected); 128196dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel } 128296dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel closeRequest; 1283f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 128496dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel if (status != NO_ERROR) { 128596dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel goto invalid; 128696dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel } 1287f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 128896dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel s_callbacks.onRequest(pRI->pCI->requestNumber, 128996dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel gsmBciPtrs, 129096dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel num * sizeof(RIL_GSM_BroadcastSmsConfigInfo *), 129196dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel pRI); 1292f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1293f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#ifdef MEMSET_FREED 129496dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel memset(gsmBci, 0, num * sizeof(RIL_GSM_BroadcastSmsConfigInfo)); 129596dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel memset(gsmBciPtrs, 0, num * sizeof(RIL_GSM_BroadcastSmsConfigInfo *)); 1296f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#endif 129796dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel } 1298f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1299f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1300f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1301f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savilleinvalid: 1302f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville invalidCommandBlock(pRI); 1303f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1304f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville} 1305f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1306a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic void 1307f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilledispatchCdmaBrSmsCnf(Parcel &p, RequestInfo *pRI) { 1308a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville int32_t t; 1309f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status_t status; 1310a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville int32_t num; 1311f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1312a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville status = p.readInt32(&num); 1313a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville if (status != NO_ERROR) { 1314a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville goto invalid; 1315a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville } 1316a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 131796dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel { 131896dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel RIL_CDMA_BroadcastSmsConfigInfo cdmaBci[num]; 131996dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel RIL_CDMA_BroadcastSmsConfigInfo *cdmaBciPtrs[num]; 1320a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 132196dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel startRequest; 132296dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel for (int i = 0 ; i < num ; i++ ) { 132396dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel cdmaBciPtrs[i] = &cdmaBci[i]; 1324f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 132596dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel status = p.readInt32(&t); 132696dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel cdmaBci[i].service_category = (int) t; 1327f5903dfd25c2ef104b3e9267b53f6ee3e7588063Wink Saville 132896dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel status = p.readInt32(&t); 132996dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel cdmaBci[i].language = (int) t; 1330f5903dfd25c2ef104b3e9267b53f6ee3e7588063Wink Saville 133196dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel status = p.readInt32(&t); 133296dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel cdmaBci[i].selected = (uint8_t) t; 1333f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 133496dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel appendPrintBuf("%s [%d: service_category=%d, language =%d, \ 133596dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel entries.bSelected =%d]", printBuf, i, cdmaBci[i].service_category, 133696dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel cdmaBci[i].language, cdmaBci[i].selected); 133796dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel } 133896dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel closeRequest; 1339f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 134096dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel if (status != NO_ERROR) { 134196dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel goto invalid; 134296dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel } 1343f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 134496dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel s_callbacks.onRequest(pRI->pCI->requestNumber, 134596dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel cdmaBciPtrs, 134696dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel num * sizeof(RIL_CDMA_BroadcastSmsConfigInfo *), 134796dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel pRI); 1348f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1349f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#ifdef MEMSET_FREED 135096dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel memset(cdmaBci, 0, num * sizeof(RIL_CDMA_BroadcastSmsConfigInfo)); 135196dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel memset(cdmaBciPtrs, 0, num * sizeof(RIL_CDMA_BroadcastSmsConfigInfo *)); 1352f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#endif 135396dcdbcfe5111346f1a1f4542a8533a0a6611c01Kevin Schoedel } 1354f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1355f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1356f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1357f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savilleinvalid: 1358f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville invalidCommandBlock(pRI); 1359f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1360f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville} 1361f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1362f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void dispatchRilCdmaSmsWriteArgs(Parcel &p, RequestInfo *pRI) { 1363f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville RIL_CDMA_SMS_WriteArgs rcsw; 1364f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int32_t t; 1365f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville uint32_t ut; 1366f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville uint8_t uct; 1367f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status_t status; 1368f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int32_t digitCount; 1369f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1370f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville memset(&rcsw, 0, sizeof(rcsw)); 1371f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1372f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1373f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.status = t; 1374a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 1375f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1376f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.uTeleserviceID = (int) t; 1377f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1378f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.read(&uct,sizeof(uct)); 1379f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.bIsServicePresent = (uint8_t) uct; 1380f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1381f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1382f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.uServicecategory = (int) t; 1383f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1384f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1385f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sAddress.digit_mode = (RIL_CDMA_SMS_DigitMode) t; 1386f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1387f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1388f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sAddress.number_mode = (RIL_CDMA_SMS_NumberMode) t; 1389f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1390f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1391f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sAddress.number_type = (RIL_CDMA_SMS_NumberType) t; 1392f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1393f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.readInt32(&t); 1394f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sAddress.number_plan = (RIL_CDMA_SMS_NumberPlan) t; 1395f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1396f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.read(&uct,sizeof(uct)); 1397f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sAddress.number_of_digits = (uint8_t) uct; 1398f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1399f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for(digitCount = 0 ; digitCount < RIL_CDMA_SMS_ADDRESS_MAX; digitCount ++) { 1400f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.read(&uct,sizeof(uct)); 1401f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sAddress.digits[digitCount] = (uint8_t) uct; 1402f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 1403f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1404a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville status = p.readInt32(&t); 1405f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sSubAddress.subaddressType = (RIL_CDMA_SMS_SubaddressType) t; 1406f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1407a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville status = p.read(&uct,sizeof(uct)); 1408f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sSubAddress.odd = (uint8_t) uct; 1409f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1410f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville status = p.read(&uct,sizeof(uct)); 1411f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sSubAddress.number_of_digits = (uint8_t) uct; 1412f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1413f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for(digitCount = 0 ; digitCount < RIL_CDMA_SMS_SUBADDRESS_MAX; digitCount ++) { 1414a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville status = p.read(&uct,sizeof(uct)); 1415f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.sSubAddress.digits[digitCount] = (uint8_t) uct; 1416f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 1417f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1418a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville status = p.readInt32(&t); 1419f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.uBearerDataLen = (int) t; 1420f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1421f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for(digitCount = 0 ; digitCount < RIL_CDMA_SMS_BEARER_DATA_MAX; digitCount ++) { 1422a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville status = p.read(&uct, sizeof(uct)); 1423f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville rcsw.message.aBearerData[digitCount] = (uint8_t) uct; 1424f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 1425f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1426f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville if (status != NO_ERROR) { 1427f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville goto invalid; 1428f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 1429f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1430f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville startRequest; 14311b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville appendPrintBuf("%sstatus=%d, message.uTeleserviceID=%d, message.bIsServicePresent=%d, \ 14321b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville message.uServicecategory=%d, message.sAddress.digit_mode=%d, \ 14331b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville message.sAddress.number_mode=%d, \ 14341b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville message.sAddress.number_type=%d, ", 1435f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville printBuf, rcsw.status, rcsw.message.uTeleserviceID, rcsw.message.bIsServicePresent, 14361b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville rcsw.message.uServicecategory, rcsw.message.sAddress.digit_mode, 14371b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville rcsw.message.sAddress.number_mode, 14381b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville rcsw.message.sAddress.number_type); 1439f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville closeRequest; 1440f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1441f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville printRequest(pRI->token, pRI->pCI->requestNumber); 1442f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1443f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville s_callbacks.onRequest(pRI->pCI->requestNumber, &rcsw, sizeof(rcsw),pRI); 1444f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1445f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#ifdef MEMSET_FREED 1446f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville memset(&rcsw, 0, sizeof(rcsw)); 1447f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#endif 1448f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1449f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1450f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1451f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savilleinvalid: 1452f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville invalidCommandBlock(pRI); 1453f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 1454f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 1455f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville} 1456f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 14574f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti// For backwards compatibility in RIL_REQUEST_SETUP_DATA_CALL. 14584f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti// Version 4 of the RIL interface adds a new PDP type parameter to support 14594f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti// IPv6 and dual-stack PDP contexts. When dealing with a previous version of 14604f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti// RIL, remove the parameter from the request. 14614f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colittistatic void dispatchDataCall(Parcel& p, RequestInfo *pRI) { 14624f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti // In RIL v3, REQUEST_SETUP_DATA_CALL takes 6 parameters. 14634f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti const int numParamsRilV3 = 6; 14644f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti 14654f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti // The first bytes of the RIL parcel contain the request number and the 14664f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti // serial number - see processCommandBuffer(). Copy them over too. 14674f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti int pos = p.dataPosition(); 14684f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti 14694f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti int numParams = p.readInt32(); 14704f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti if (s_callbacks.version < 4 && numParams > numParamsRilV3) { 14714f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti Parcel p2; 14724f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti p2.appendFrom(&p, 0, pos); 14734f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti p2.writeInt32(numParamsRilV3); 14744f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti for(int i = 0; i < numParamsRilV3; i++) { 14754f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti p2.writeString16(p.readString16()); 14764f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti } 14774f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti p2.setDataPosition(pos); 14784f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti dispatchStrings(p2, pRI); 14794f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti } else { 148057ce1f2709484ef8911cabe9b5629d0c21557bd4Lorenzo Colitti p.setDataPosition(pos); 14814f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti dispatchStrings(p, pRI); 14824f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti } 14834f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti} 14844f81dcf2a9bc84cbfbb6d3d658c452c22e9b6e83Lorenzo Colitti 14852bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla// For backwards compatibility with RILs that dont support RIL_REQUEST_VOICE_RADIO_TECH. 14862bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla// When all RILs handle this request, this function can be removed and 14872bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla// the request can be sent directly to the RIL using dispatchVoid. 14882bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic void dispatchVoiceRadioTech(Parcel& p, RequestInfo *pRI) { 14892bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_RadioState state = s_callbacks.onStateRequest(); 14902bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 14912bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if ((RADIO_STATE_UNAVAILABLE == state) || (RADIO_STATE_OFF == state)) { 14922bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onRequestComplete(pRI, RIL_E_RADIO_NOT_AVAILABLE, NULL, 0); 14932bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 14942bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 14952bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla // RILs that support RADIO_STATE_ON should support this request. 14962bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if (RADIO_STATE_ON == state) { 14972bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla dispatchVoid(p, pRI); 14982bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return; 14992bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 15002bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 15012bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla // For Older RILs, that do not support RADIO_STATE_ON, assume that they 15022bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla // will not support this new request either and decode Voice Radio Technology 15032bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla // from Radio State 15042bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla voiceRadioTech = decodeVoiceRadioTechnology(state); 15052bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 15062bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if (voiceRadioTech < 0) 15072bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onRequestComplete(pRI, RIL_E_GENERIC_FAILURE, NULL, 0); 15082bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla else 15092bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onRequestComplete(pRI, RIL_E_SUCCESS, &voiceRadioTech, sizeof(int)); 15102bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla} 15112bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 15122bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla// For backwards compatibility in RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE:. 15132bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla// When all RILs handle this request, this function can be removed and 15142bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla// the request can be sent directly to the RIL using dispatchVoid. 15152bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic void dispatchCdmaSubscriptionSource(Parcel& p, RequestInfo *pRI) { 15162bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_RadioState state = s_callbacks.onStateRequest(); 15172bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 15182bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if ((RADIO_STATE_UNAVAILABLE == state) || (RADIO_STATE_OFF == state)) { 15192bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onRequestComplete(pRI, RIL_E_RADIO_NOT_AVAILABLE, NULL, 0); 15202bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 15212bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 15222bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla // RILs that support RADIO_STATE_ON should support this request. 15232bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if (RADIO_STATE_ON == state) { 15242bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla dispatchVoid(p, pRI); 15252bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return; 15262bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 15272bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 15282bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla // For Older RILs, that do not support RADIO_STATE_ON, assume that they 15292bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla // will not support this new request either and decode CDMA Subscription Source 15302bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla // from Radio State 15312bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla cdmaSubscriptionSource = decodeCdmaSubscriptionSource(state); 15322bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 15332bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if (cdmaSubscriptionSource < 0) 15342bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onRequestComplete(pRI, RIL_E_GENERIC_FAILURE, NULL, 0); 15352bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla else 15362bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onRequestComplete(pRI, RIL_E_SUCCESS, &cdmaSubscriptionSource, sizeof(int)); 15372bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla} 15382bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 153975697538e485ea2981960dcd4878bfdd032731acSungmin Choistatic void dispatchSetInitialAttachApn(Parcel &p, RequestInfo *pRI) 154075697538e485ea2981960dcd4878bfdd032731acSungmin Choi{ 154175697538e485ea2981960dcd4878bfdd032731acSungmin Choi RIL_InitialAttachApn pf; 154275697538e485ea2981960dcd4878bfdd032731acSungmin Choi int32_t t; 154375697538e485ea2981960dcd4878bfdd032731acSungmin Choi status_t status; 154475697538e485ea2981960dcd4878bfdd032731acSungmin Choi 154575697538e485ea2981960dcd4878bfdd032731acSungmin Choi memset(&pf, 0, sizeof(pf)); 154675697538e485ea2981960dcd4878bfdd032731acSungmin Choi 154775697538e485ea2981960dcd4878bfdd032731acSungmin Choi pf.apn = strdupReadString(p); 154875697538e485ea2981960dcd4878bfdd032731acSungmin Choi pf.protocol = strdupReadString(p); 154975697538e485ea2981960dcd4878bfdd032731acSungmin Choi 155075697538e485ea2981960dcd4878bfdd032731acSungmin Choi status = p.readInt32(&t); 155175697538e485ea2981960dcd4878bfdd032731acSungmin Choi pf.authtype = (int) t; 155275697538e485ea2981960dcd4878bfdd032731acSungmin Choi 155375697538e485ea2981960dcd4878bfdd032731acSungmin Choi pf.username = strdupReadString(p); 155475697538e485ea2981960dcd4878bfdd032731acSungmin Choi pf.password = strdupReadString(p); 155575697538e485ea2981960dcd4878bfdd032731acSungmin Choi 155675697538e485ea2981960dcd4878bfdd032731acSungmin Choi startRequest; 15575d891b7991dd22c105e97180e0fb02d4b42911ebEtan Cohen appendPrintBuf("%sapn=%s, protocol=%s, authtype=%d, username=%s, password=%s", 15585d891b7991dd22c105e97180e0fb02d4b42911ebEtan Cohen printBuf, pf.apn, pf.protocol, pf.authtype, pf.username, pf.password); 155975697538e485ea2981960dcd4878bfdd032731acSungmin Choi closeRequest; 156075697538e485ea2981960dcd4878bfdd032731acSungmin Choi printRequest(pRI->token, pRI->pCI->requestNumber); 156175697538e485ea2981960dcd4878bfdd032731acSungmin Choi 156275697538e485ea2981960dcd4878bfdd032731acSungmin Choi if (status != NO_ERROR) { 156375697538e485ea2981960dcd4878bfdd032731acSungmin Choi goto invalid; 156475697538e485ea2981960dcd4878bfdd032731acSungmin Choi } 156575697538e485ea2981960dcd4878bfdd032731acSungmin Choi s_callbacks.onRequest(pRI->pCI->requestNumber, &pf, sizeof(pf), pRI); 156675697538e485ea2981960dcd4878bfdd032731acSungmin Choi 156775697538e485ea2981960dcd4878bfdd032731acSungmin Choi#ifdef MEMSET_FREED 156875697538e485ea2981960dcd4878bfdd032731acSungmin Choi memsetString(pf.apn); 156975697538e485ea2981960dcd4878bfdd032731acSungmin Choi memsetString(pf.protocol); 157075697538e485ea2981960dcd4878bfdd032731acSungmin Choi memsetString(pf.username); 157175697538e485ea2981960dcd4878bfdd032731acSungmin Choi memsetString(pf.password); 157275697538e485ea2981960dcd4878bfdd032731acSungmin Choi#endif 157375697538e485ea2981960dcd4878bfdd032731acSungmin Choi 157475697538e485ea2981960dcd4878bfdd032731acSungmin Choi free(pf.apn); 157575697538e485ea2981960dcd4878bfdd032731acSungmin Choi free(pf.protocol); 157675697538e485ea2981960dcd4878bfdd032731acSungmin Choi free(pf.username); 157775697538e485ea2981960dcd4878bfdd032731acSungmin Choi free(pf.password); 157875697538e485ea2981960dcd4878bfdd032731acSungmin Choi 157975697538e485ea2981960dcd4878bfdd032731acSungmin Choi#ifdef MEMSET_FREED 158075697538e485ea2981960dcd4878bfdd032731acSungmin Choi memset(&pf, 0, sizeof(pf)); 158175697538e485ea2981960dcd4878bfdd032731acSungmin Choi#endif 158275697538e485ea2981960dcd4878bfdd032731acSungmin Choi 158375697538e485ea2981960dcd4878bfdd032731acSungmin Choi return; 158475697538e485ea2981960dcd4878bfdd032731acSungmin Choiinvalid: 158575697538e485ea2981960dcd4878bfdd032731acSungmin Choi invalidCommandBlock(pRI); 158675697538e485ea2981960dcd4878bfdd032731acSungmin Choi return; 158775697538e485ea2981960dcd4878bfdd032731acSungmin Choi} 158875697538e485ea2981960dcd4878bfdd032731acSungmin Choi 15898a4a233bb9503eddee83569e647c25099a8e15b3Jake Hambystatic void dispatchNVReadItem(Parcel &p, RequestInfo *pRI) { 15908a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby RIL_NV_ReadItem nvri; 15918a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby int32_t t; 15928a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby status_t status; 15938a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 15948a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby memset(&nvri, 0, sizeof(nvri)); 15958a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 15968a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby status = p.readInt32(&t); 15978a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby nvri.itemID = (RIL_NV_Item) t; 15988a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 15998a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby if (status != NO_ERROR) { 16008a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby goto invalid; 16018a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby } 16028a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16038a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby startRequest; 16048a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby appendPrintBuf("%snvri.itemID=%d, ", printBuf, nvri.itemID); 16058a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby closeRequest; 16068a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16078a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby printRequest(pRI->token, pRI->pCI->requestNumber); 16088a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16098a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby s_callbacks.onRequest(pRI->pCI->requestNumber, &nvri, sizeof(nvri), pRI); 16108a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16118a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby#ifdef MEMSET_FREED 16128a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby memset(&nvri, 0, sizeof(nvri)); 16138a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby#endif 16148a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16158a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby return; 16168a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16178a4a233bb9503eddee83569e647c25099a8e15b3Jake Hambyinvalid: 16188a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby invalidCommandBlock(pRI); 16198a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby return; 16208a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby} 16218a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16228a4a233bb9503eddee83569e647c25099a8e15b3Jake Hambystatic void dispatchNVWriteItem(Parcel &p, RequestInfo *pRI) { 16238a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby RIL_NV_WriteItem nvwi; 16248a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby int32_t t; 16258a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby status_t status; 16268a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16278a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby memset(&nvwi, 0, sizeof(nvwi)); 16288a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16298a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby status = p.readInt32(&t); 16308a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby nvwi.itemID = (RIL_NV_Item) t; 16318a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16328a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby nvwi.value = strdupReadString(p); 16338a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16348a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby if (status != NO_ERROR || nvwi.value == NULL) { 16358a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby goto invalid; 16368a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby } 16378a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16388a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby startRequest; 16398a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby appendPrintBuf("%snvwi.itemID=%d, value=%s, ", printBuf, nvwi.itemID, 16408a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby nvwi.value); 16418a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby closeRequest; 16428a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16438a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby printRequest(pRI->token, pRI->pCI->requestNumber); 16448a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16458a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby s_callbacks.onRequest(pRI->pCI->requestNumber, &nvwi, sizeof(nvwi), pRI); 16468a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16478a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby#ifdef MEMSET_FREED 16488a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby memsetString(nvwi.value); 16498a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby#endif 16508a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16518a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby free(nvwi.value); 16528a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16538a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby#ifdef MEMSET_FREED 16548a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby memset(&nvwi, 0, sizeof(nvwi)); 16558a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby#endif 16568a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16578a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby return; 16588a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16598a4a233bb9503eddee83569e647c25099a8e15b3Jake Hambyinvalid: 16608a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby invalidCommandBlock(pRI); 16618a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby return; 16628a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby} 16638a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 16648a4a233bb9503eddee83569e647c25099a8e15b3Jake Hamby 166500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int 1666f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleblockingWrite(int fd, const void *buffer, size_t len) { 16677f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville size_t writeOffset = 0; 166800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project const uint8_t *toWrite; 166900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 167000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project toWrite = (const uint8_t *)buffer; 167100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 167200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project while (writeOffset < len) { 167300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ssize_t written; 167400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project do { 167500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project written = write (fd, toWrite + writeOffset, 167600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project len - writeOffset); 1677388849057a8cc91dbc3fff357d2df524ffec9a4dBanavathu, Srinivas Naik } while (written < 0 && ((errno == EINTR) || (errno == EAGAIN))); 167800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 167900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (written >= 0) { 168000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeOffset += written; 168100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { // written < 0 16828eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("RIL Response: unexpected error on write errno:%d", errno); 168300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project close(fd); 168400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return -1; 168500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 168600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 168700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 168800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 168900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 169000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 169100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int 1692f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillesendResponseRaw (const void *data, size_t dataSize) { 169300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int fd = s_fdCommand; 169400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 169500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project uint32_t header; 169600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 169700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_fdCommand < 0) { 169800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return -1; 169900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 170000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 170100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (dataSize > MAX_COMMAND_BYTES) { 17028eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RIL: packet larger than %u (%u)", 170300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project MAX_COMMAND_BYTES, (unsigned int )dataSize); 170400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 170500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return -1; 170600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 17077f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 170800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_mutex_lock(&s_writeMutex); 170900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 171000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project header = htonl(dataSize); 171100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 171200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = blockingWrite(fd, (void *)&header, sizeof(header)); 171300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 171400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret < 0) { 1715084f6708312265b501561a9c6d6e9cb38943985cJaikumar Ganesh pthread_mutex_unlock(&s_writeMutex); 171600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return ret; 171700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 171800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1719ee1fadc192a63724e416b05666844a62d1e75d38Kenny ret = blockingWrite(fd, data, dataSize); 172000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 172100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret < 0) { 1722084f6708312265b501561a9c6d6e9cb38943985cJaikumar Ganesh pthread_mutex_unlock(&s_writeMutex); 172300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return ret; 172400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 172500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 172600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_mutex_unlock(&s_writeMutex); 172700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 172800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 172900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 173000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 173100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int 1732f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillesendResponse (Parcel &p) { 173300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project printResponse; 173400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return sendResponseRaw(p.data(), p.dataSize()); 173500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 173600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 173774f7e667381fae533f70843ea952db04bd2adc36Mohamad Ayyash/** response is an int* pointing to an array of ints */ 17387f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 17397f8568086f2ea14885b0091c793e14c2656f0da2Wink Savillestatic int 1740f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleresponseInts(Parcel &p, void *response, size_t responselen) { 174100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int numInts; 174200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 174300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL && responselen != 0) { 17448eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 174500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 174600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 174700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (responselen % sizeof(int) != 0) { 17488eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected multiple of %d\n", 174900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (int)responselen, (int)sizeof(int)); 175000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 175100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 175200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 175300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int *p_int = (int *) response; 175400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 175574f7e667381fae533f70843ea952db04bd2adc36Mohamad Ayyash numInts = responselen / sizeof(int); 175600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (numInts); 175700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 175800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* each int*/ 175900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 176000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0 ; i < numInts ; i++) { 176100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s%d,", printBuf, p_int[i]); 176200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_int[i]); 176300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 176400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 176500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 176600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 176700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 176800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 176900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 17704380897c6cdc99486a061b819943e3b290ebcf09Wink Saville/** response is a char **, pointing to an array of char *'s 17714380897c6cdc99486a061b819943e3b290ebcf09Wink Saville The parcel will begin with the version */ 17724380897c6cdc99486a061b819943e3b290ebcf09Wink Savillestatic int responseStringsWithVersion(int version, Parcel &p, void *response, size_t responselen) { 17734380897c6cdc99486a061b819943e3b290ebcf09Wink Saville p.writeInt32(version); 17744380897c6cdc99486a061b819943e3b290ebcf09Wink Saville return responseStrings(p, response, responselen); 17754380897c6cdc99486a061b819943e3b290ebcf09Wink Saville} 17764380897c6cdc99486a061b819943e3b290ebcf09Wink Saville 177700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** response is a char **, pointing to an array of char *'s */ 1778f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseStrings(Parcel &p, void *response, size_t responselen) { 177900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int numStrings; 17807f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 178100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL && responselen != 0) { 17828eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 178300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 178400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 178500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (responselen % sizeof(char *) != 0) { 17868eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected multiple of %d\n", 178700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (int)responselen, (int)sizeof(char *)); 178800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 178900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 179000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 179100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL) { 179200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (0); 179300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { 179400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char **p_cur = (char **) response; 179500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 179600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project numStrings = responselen / sizeof(char *); 179700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (numStrings); 179800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 179900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* each string*/ 180000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 180100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0 ; i < numStrings ; i++) { 180200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s%s,", printBuf, (char*)p_cur[i]); 180300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel (p, p_cur[i]); 180400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 180500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 180600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 180700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 180800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 180900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 181000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 181100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 181200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** 18137f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville * NULL strings are accepted 181400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * FIXME currently ignores responselen 181500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project */ 1816f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseString(Parcel &p, void *response, size_t responselen) { 181700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* one string only */ 181800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 181900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s%s", printBuf, (char*)response); 182000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 182100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 182200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel(p, (const char *)response); 182300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 182400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 182500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 182600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1827f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseVoid(Parcel &p, void *response, size_t responselen) { 182800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 182900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 183000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 183100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 183200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1833f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseCallList(Parcel &p, void *response, size_t responselen) { 183400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int num; 183500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 183600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL && responselen != 0) { 18378eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 183800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 183900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 184000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 184100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (responselen % sizeof (RIL_Call *) != 0) { 18428eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected multiple of %d\n", 184300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (int)responselen, (int)sizeof (RIL_Call *)); 184400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 184500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 184600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 184700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 184800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* number of call info's */ 184900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project num = responselen / sizeof(RIL_Call *); 185000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(num); 185100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 185200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0 ; i < num ; i++) { 185300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_Call *p_cur = ((RIL_Call **) response)[i]; 185400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* each call info */ 185500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->state); 185600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->index); 185700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->toa); 185800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->isMpty); 185900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->isMT); 186000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->als); 186100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->isVoice); 18621b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p.writeInt32(p_cur->isVoicePrivacy); 18631b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville writeStringToParcel(p, p_cur->number); 18641b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p.writeInt32(p_cur->numberPresentation); 18651b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville writeStringToParcel(p, p_cur->name); 18661b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p.writeInt32(p_cur->namePresentation); 18673a4840bea36ce53bc0fb181811ebf9d1cd0aa261Wink Saville // Remove when partners upgrade to version 3 186874fa38884320698c1623764850e3131b9769dff0Wink Saville if ((s_callbacks.version < 3) || (p_cur->uusInfo == NULL || p_cur->uusInfo->uusData == NULL)) { 186974fa38884320698c1623764850e3131b9769dff0Wink Saville p.writeInt32(0); /* UUS Information is absent */ 187074fa38884320698c1623764850e3131b9769dff0Wink Saville } else { 187174fa38884320698c1623764850e3131b9769dff0Wink Saville RIL_UUS_Info *uusInfo = p_cur->uusInfo; 187274fa38884320698c1623764850e3131b9769dff0Wink Saville p.writeInt32(1); /* UUS Information is present */ 187374fa38884320698c1623764850e3131b9769dff0Wink Saville p.writeInt32(uusInfo->uusType); 187474fa38884320698c1623764850e3131b9769dff0Wink Saville p.writeInt32(uusInfo->uusDcs); 187574fa38884320698c1623764850e3131b9769dff0Wink Saville p.writeInt32(uusInfo->uusLength); 187674fa38884320698c1623764850e3131b9769dff0Wink Saville p.write(uusInfo->uusData, uusInfo->uusLength); 187774fa38884320698c1623764850e3131b9769dff0Wink Saville } 18783d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville appendPrintBuf("%s[id=%d,%s,toa=%d,", 18791b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville printBuf, 18801b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p_cur->index, 18811b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville callStateToString(p_cur->state), 18823d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->toa); 18833d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville appendPrintBuf("%s%s,%s,als=%d,%s,%s,", 18843d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville printBuf, 18851b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville (p_cur->isMpty)?"conf":"norm", 18861b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville (p_cur->isMT)?"mt":"mo", 18871b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p_cur->als, 18881b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville (p_cur->isVoice)?"voc":"nonvoc", 18893d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville (p_cur->isVoicePrivacy)?"evp":"noevp"); 18903d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville appendPrintBuf("%s%s,cli=%d,name='%s',%d]", 18913d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville printBuf, 18921b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p_cur->number, 18931b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p_cur->numberPresentation, 18941b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p_cur->name, 18951b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville p_cur->namePresentation); 189600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 189700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 189800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 189900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 190000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 190100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 190200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1903f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseSMS(Parcel &p, void *response, size_t responselen) { 190400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL) { 19058eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 190600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 190700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 190800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 190900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (responselen != sizeof (RIL_SMS_Response) ) { 19108eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected %d", 191100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (int)responselen, (int)sizeof (RIL_SMS_Response)); 191200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 191300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 191400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 191500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_SMS_Response *p_cur = (RIL_SMS_Response *) response; 191600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 191700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->messageRef); 191800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel(p, p_cur->ackPDU); 1919920c78f166e787dc799bf5df7d6be30034ac0e77Jaikumar Ganesh p.writeInt32(p_cur->errorCode); 192000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 192100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 1922920c78f166e787dc799bf5df7d6be30034ac0e77Jaikumar Ganesh appendPrintBuf("%s%d,%s,%d", printBuf, p_cur->messageRef, 1923920c78f166e787dc799bf5df7d6be30034ac0e77Jaikumar Ganesh (char*)p_cur->ackPDU, p_cur->errorCode); 192400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 192500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 192600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 192700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 192800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1929c0114b325877907fcdf7a5baa24e54a752e7e58bWink Savillestatic int responseDataCallListV4(Parcel &p, void *response, size_t responselen) 193000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project{ 193100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL && responselen != 0) { 19328eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 193300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 193400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 193500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1936c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville if (responselen % sizeof(RIL_Data_Call_Response_v4) != 0) { 19378eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected multiple of %d", 1938c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville (int)responselen, (int)sizeof(RIL_Data_Call_Response_v4)); 193900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 194000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 194100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1942c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville int num = responselen / sizeof(RIL_Data_Call_Response_v4); 194300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(num); 194400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 1945c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville RIL_Data_Call_Response_v4 *p_cur = (RIL_Data_Call_Response_v4 *) response; 194600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 194700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int i; 194800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (i = 0; i < num; i++) { 194900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur[i].cid); 195000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur[i].active); 195100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel(p, p_cur[i].type); 1952c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville // apn is not used, so don't send. 195300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel(p, p_cur[i].address); 1954c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville appendPrintBuf("%s[cid=%d,%s,%s,%s],", printBuf, 195500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_cur[i].cid, 195600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (p_cur[i].active==0)?"down":"up", 195700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (char*)p_cur[i].type, 195800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (char*)p_cur[i].address); 195900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 196000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 196100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 196200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 196300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 196400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 196500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 19664380897c6cdc99486a061b819943e3b290ebcf09Wink Savillestatic int responseDataCallList(Parcel &p, void *response, size_t responselen) 19674380897c6cdc99486a061b819943e3b290ebcf09Wink Saville{ 19684380897c6cdc99486a061b819943e3b290ebcf09Wink Saville // Write version 19694380897c6cdc99486a061b819943e3b290ebcf09Wink Saville p.writeInt32(s_callbacks.version); 19704380897c6cdc99486a061b819943e3b290ebcf09Wink Saville 19714380897c6cdc99486a061b819943e3b290ebcf09Wink Saville if (s_callbacks.version < 5) { 1972c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville return responseDataCallListV4(p, response, responselen); 19734380897c6cdc99486a061b819943e3b290ebcf09Wink Saville } else { 19744380897c6cdc99486a061b819943e3b290ebcf09Wink Saville if (response == NULL && responselen != 0) { 19758eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 19764380897c6cdc99486a061b819943e3b290ebcf09Wink Saville return RIL_ERRNO_INVALID_RESPONSE; 19774380897c6cdc99486a061b819943e3b290ebcf09Wink Saville } 19784380897c6cdc99486a061b819943e3b290ebcf09Wink Saville 1979c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville if (responselen % sizeof(RIL_Data_Call_Response_v6) != 0) { 19808eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected multiple of %d", 1981c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville (int)responselen, (int)sizeof(RIL_Data_Call_Response_v6)); 19824380897c6cdc99486a061b819943e3b290ebcf09Wink Saville return RIL_ERRNO_INVALID_RESPONSE; 19834380897c6cdc99486a061b819943e3b290ebcf09Wink Saville } 19844380897c6cdc99486a061b819943e3b290ebcf09Wink Saville 1985c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville int num = responselen / sizeof(RIL_Data_Call_Response_v6); 19864380897c6cdc99486a061b819943e3b290ebcf09Wink Saville p.writeInt32(num); 19874380897c6cdc99486a061b819943e3b290ebcf09Wink Saville 1988c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville RIL_Data_Call_Response_v6 *p_cur = (RIL_Data_Call_Response_v6 *) response; 19894380897c6cdc99486a061b819943e3b290ebcf09Wink Saville startResponse; 19904380897c6cdc99486a061b819943e3b290ebcf09Wink Saville int i; 19914380897c6cdc99486a061b819943e3b290ebcf09Wink Saville for (i = 0; i < num; i++) { 19924380897c6cdc99486a061b819943e3b290ebcf09Wink Saville p.writeInt32((int)p_cur[i].status); 1993beb25b58dcb48a2cfa2cfe10f5fb15908ff465f8Kazuhiro Ondo p.writeInt32(p_cur[i].suggestedRetryTime); 19944380897c6cdc99486a061b819943e3b290ebcf09Wink Saville p.writeInt32(p_cur[i].cid); 19954380897c6cdc99486a061b819943e3b290ebcf09Wink Saville p.writeInt32(p_cur[i].active); 1996af1298d72fd6a8b2d5bed7db15f6d181240fce83David 'Digit' Turner writeStringToParcel(p, p_cur[i].type); 19974380897c6cdc99486a061b819943e3b290ebcf09Wink Saville writeStringToParcel(p, p_cur[i].ifname); 19984380897c6cdc99486a061b819943e3b290ebcf09Wink Saville writeStringToParcel(p, p_cur[i].addresses); 19994380897c6cdc99486a061b819943e3b290ebcf09Wink Saville writeStringToParcel(p, p_cur[i].dnses); 2000c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville writeStringToParcel(p, p_cur[i].gateways); 200156384157f32856066ee9c1b77cbcf96d4ee90a98Naveen Kalla appendPrintBuf("%s[status=%d,retry=%d,cid=%d,%s,%s,%s,%s,%s,%s],", printBuf, 20024380897c6cdc99486a061b819943e3b290ebcf09Wink Saville p_cur[i].status, 2003beb25b58dcb48a2cfa2cfe10f5fb15908ff465f8Kazuhiro Ondo p_cur[i].suggestedRetryTime, 20044380897c6cdc99486a061b819943e3b290ebcf09Wink Saville p_cur[i].cid, 20054380897c6cdc99486a061b819943e3b290ebcf09Wink Saville (p_cur[i].active==0)?"down":"up", 200656384157f32856066ee9c1b77cbcf96d4ee90a98Naveen Kalla (char*)p_cur[i].type, 20074380897c6cdc99486a061b819943e3b290ebcf09Wink Saville (char*)p_cur[i].ifname, 20084380897c6cdc99486a061b819943e3b290ebcf09Wink Saville (char*)p_cur[i].addresses, 2009c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville (char*)p_cur[i].dnses, 2010c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville (char*)p_cur[i].gateways); 20114380897c6cdc99486a061b819943e3b290ebcf09Wink Saville } 20124380897c6cdc99486a061b819943e3b290ebcf09Wink Saville removeLastChar; 20134380897c6cdc99486a061b819943e3b290ebcf09Wink Saville closeResponse; 20144380897c6cdc99486a061b819943e3b290ebcf09Wink Saville } 20154380897c6cdc99486a061b819943e3b290ebcf09Wink Saville 20164380897c6cdc99486a061b819943e3b290ebcf09Wink Saville return 0; 20174380897c6cdc99486a061b819943e3b290ebcf09Wink Saville} 20184380897c6cdc99486a061b819943e3b290ebcf09Wink Saville 20194380897c6cdc99486a061b819943e3b290ebcf09Wink Savillestatic int responseSetupDataCall(Parcel &p, void *response, size_t responselen) 20204380897c6cdc99486a061b819943e3b290ebcf09Wink Saville{ 20214380897c6cdc99486a061b819943e3b290ebcf09Wink Saville if (s_callbacks.version < 5) { 20224380897c6cdc99486a061b819943e3b290ebcf09Wink Saville return responseStringsWithVersion(s_callbacks.version, p, response, responselen); 20234380897c6cdc99486a061b819943e3b290ebcf09Wink Saville } else { 20244380897c6cdc99486a061b819943e3b290ebcf09Wink Saville return responseDataCallList(p, response, responselen); 20254380897c6cdc99486a061b819943e3b290ebcf09Wink Saville } 20264380897c6cdc99486a061b819943e3b290ebcf09Wink Saville} 20274380897c6cdc99486a061b819943e3b290ebcf09Wink Saville 2028f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseRaw(Parcel &p, void *response, size_t responselen) { 202900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL && responselen != 0) { 20308eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL with responselen != 0"); 203100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 203200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 203300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 203400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // The java code reads -1 size as null byte array 203500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL) { 20367f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville p.writeInt32(-1); 203700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { 203800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(responselen); 203900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.write(response, responselen); 204000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 204100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 204200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 204300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 204400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 204500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2046f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseSIM_IO(Parcel &p, void *response, size_t responselen) { 204700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL) { 20488eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 204900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 205000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 205100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 205200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (responselen != sizeof (RIL_SIM_IO_Response) ) { 20538eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length was %d expected %d", 205400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (int)responselen, (int)sizeof (RIL_SIM_IO_Response)); 205500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 205600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 205700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 205800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_SIM_IO_Response *p_cur = (RIL_SIM_IO_Response *) response; 205900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->sw1); 206000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->sw2); 206100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel(p, p_cur->simResponse); 206200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 206300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 206400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%ssw1=0x%X,sw2=0x%X,%s", printBuf, p_cur->sw1, p_cur->sw2, 206500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (char*)p_cur->simResponse); 206600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 206700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 206800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 206900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 207000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 207100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2072f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseCallForwards(Parcel &p, void *response, size_t responselen) { 207300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int num; 20747f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 207500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL && responselen != 0) { 20768eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 207700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 207800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 207900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 208000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (responselen % sizeof(RIL_CallForwardInfo *) != 0) { 20818eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected multiple of %d", 208200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (int)responselen, (int)sizeof(RIL_CallForwardInfo *)); 208300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 208400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 208500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 208600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* number of call info's */ 208700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project num = responselen / sizeof(RIL_CallForwardInfo *); 208800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(num); 208900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 209000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 209100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0 ; i < num ; i++) { 209200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_CallForwardInfo *p_cur = ((RIL_CallForwardInfo **) response)[i]; 209300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 209400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->status); 209500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->reason); 209600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->serviceClass); 209700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->toa); 209800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel(p, p_cur->number); 209900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->timeSeconds); 210000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s[%s,reason=%d,cls=%d,toa=%d,%s,tout=%d],", printBuf, 210100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (p_cur->status==1)?"enable":"disable", 210200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_cur->reason, p_cur->serviceClass, p_cur->toa, 210300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (char*)p_cur->number, 210400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_cur->timeSeconds); 210500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 210600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 210700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 21087f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 210900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 211000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 211100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2112f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseSsn(Parcel &p, void *response, size_t responselen) { 211300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL) { 21148eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 211500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 211600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 211700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 211800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (responselen != sizeof(RIL_SuppSvcNotification)) { 21198eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length was %d expected %d", 212000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (int)responselen, (int)sizeof (RIL_SuppSvcNotification)); 212100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 212200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 212300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 212400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_SuppSvcNotification *p_cur = (RIL_SuppSvcNotification *) response; 212500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->notificationType); 212600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->code); 212700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->index); 212800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->type); 212900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel(p, p_cur->number); 213000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 213100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 213200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s%s,code=%d,id=%d,type=%d,%s", printBuf, 213300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (p_cur->notificationType==0)?"mo":"mt", 213400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_cur->code, p_cur->index, p_cur->type, 213500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (char*)p_cur->number); 213600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 213700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 213800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 213900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 214000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 21413d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic int responseCellList(Parcel &p, void *response, size_t responselen) { 214200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int num; 214300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 214400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (response == NULL && responselen != 0) { 21458eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 214600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 214700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 214800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 214900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (responselen % sizeof (RIL_NeighboringCell *) != 0) { 21508eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected multiple of %d\n", 215100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project (int)responselen, (int)sizeof (RIL_NeighboringCell *)); 215200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return RIL_ERRNO_INVALID_RESPONSE; 215300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 215400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 215500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project startResponse; 21563d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville /* number of records */ 215700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project num = responselen / sizeof(RIL_NeighboringCell *); 215800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(num); 215900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 216000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0 ; i < num ; i++) { 216100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_NeighboringCell *p_cur = ((RIL_NeighboringCell **) response)[i]; 216200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 216300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32(p_cur->rssi); 216400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project writeStringToParcel (p, p_cur->cid); 216500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 216600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s[cid=%s,rssi=%d],", printBuf, 216700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_cur->cid, p_cur->rssi); 216800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 216900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project removeLastChar; 217000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project closeResponse; 217100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 217200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 217300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 217400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 21753d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville/** 21763d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville * Marshall the signalInfoRecord into the parcel if it exists. 21773d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville */ 2178a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic void marshallSignalInfoRecord(Parcel &p, 2179a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville RIL_CDMA_SignalInfoRecord &p_signalInfoRecord) { 21803d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_signalInfoRecord.isPresent); 21813d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_signalInfoRecord.signalType); 21823d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_signalInfoRecord.alertPitch); 21833d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_signalInfoRecord.signal); 21843d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville} 21853d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2186a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic int responseCdmaInformationRecords(Parcel &p, 2187a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville void *response, size_t responselen) { 21883d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville int num; 2189a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville char* string8 = NULL; 2190a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville int buffer_lenght; 2191a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville RIL_CDMA_InformationRecord *infoRec; 21923d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 21933d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville if (response == NULL && responselen != 0) { 21948eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 21953d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return RIL_ERRNO_INVALID_RESPONSE; 21963d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 21973d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2198a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville if (responselen != sizeof (RIL_CDMA_InformationRecords)) { 21998eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected multiple of %d\n", 2200a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)responselen, (int)sizeof (RIL_CDMA_InformationRecords *)); 22013d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return RIL_ERRNO_INVALID_RESPONSE; 22023d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 22033d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2204a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville RIL_CDMA_InformationRecords *p_cur = 2205a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (RIL_CDMA_InformationRecords *) response; 2206a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville num = MIN(p_cur->numberOfInfoRecs, RIL_CDMA_MAX_NUMBER_OF_INFO_RECS); 22073d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 22083d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville startResponse; 2209a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(num); 22103d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2211a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville for (int i = 0 ; i < num ; i++) { 2212a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville infoRec = &p_cur->infoRec[i]; 2213a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->name); 2214a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville switch (infoRec->name) { 22153d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_CDMA_DISPLAY_INFO_REC: 2216a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville case RIL_CDMA_EXTENDED_DISPLAY_INFO_REC: 2217a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville if (infoRec->rec.display.alpha_len > 2218a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville CDMA_ALPHA_INFO_BUFFER_LENGTH) { 22198eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid display info response length %d \ 2220a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville expected not more than %d\n", 2221a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.display.alpha_len, 2222a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville CDMA_ALPHA_INFO_BUFFER_LENGTH); 2223a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville return RIL_ERRNO_INVALID_RESPONSE; 22243d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 2225a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8 = (char*) malloc((infoRec->rec.display.alpha_len + 1) 2226a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville * sizeof(char) ); 2227a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville for (int i = 0 ; i < infoRec->rec.display.alpha_len ; i++) { 2228a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8[i] = infoRec->rec.display.alpha_buf[i]; 22293d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 22304380897c6cdc99486a061b819943e3b290ebcf09Wink Saville string8[(int)infoRec->rec.display.alpha_len] = '\0'; 2231a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville writeStringToParcel(p, (const char*)string8); 2232a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville free(string8); 2233a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8 = NULL; 22343d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville break; 2235a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville case RIL_CDMA_CALLED_PARTY_NUMBER_INFO_REC: 22363d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_CDMA_CALLING_PARTY_NUMBER_INFO_REC: 22373d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_CDMA_CONNECTED_NUMBER_INFO_REC: 2238a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville if (infoRec->rec.number.len > CDMA_NUMBER_INFO_BUFFER_LENGTH) { 22398eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid display info response length %d \ 2240a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville expected not more than %d\n", 2241a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.number.len, 2242a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville CDMA_NUMBER_INFO_BUFFER_LENGTH); 2243a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville return RIL_ERRNO_INVALID_RESPONSE; 22443d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 2245a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8 = (char*) malloc((infoRec->rec.number.len + 1) 2246a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville * sizeof(char) ); 2247a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville for (int i = 0 ; i < infoRec->rec.number.len; i++) { 2248a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8[i] = infoRec->rec.number.buf[i]; 2249a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville } 22504380897c6cdc99486a061b819943e3b290ebcf09Wink Saville string8[(int)infoRec->rec.number.len] = '\0'; 2251a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville writeStringToParcel(p, (const char*)string8); 2252a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville free(string8); 2253a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8 = NULL; 2254a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.number.number_type); 2255a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.number.number_plan); 2256a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.number.pi); 2257a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.number.si); 22583d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville break; 22593d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_CDMA_SIGNAL_INFO_REC: 2260a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.signal.isPresent); 2261a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.signal.signalType); 2262a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.signal.alertPitch); 2263a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.signal.signal); 2264a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 2265a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville appendPrintBuf("%sisPresent=%X, signalType=%X, \ 2266a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville alertPitch=%X, signal=%X, ", 2267a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville printBuf, (int)infoRec->rec.signal.isPresent, 2268a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.signal.signalType, 2269a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.signal.alertPitch, 2270a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.signal.signal); 2271a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville removeLastChar; 22723d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville break; 22733d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_CDMA_REDIRECTING_NUMBER_INFO_REC: 2274a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville if (infoRec->rec.redir.redirectingNumber.len > 2275a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville CDMA_NUMBER_INFO_BUFFER_LENGTH) { 22768eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid display info response length %d \ 2277a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville expected not more than %d\n", 2278a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.redir.redirectingNumber.len, 2279a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville CDMA_NUMBER_INFO_BUFFER_LENGTH); 2280a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville return RIL_ERRNO_INVALID_RESPONSE; 2281a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville } 2282a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8 = (char*) malloc((infoRec->rec.redir.redirectingNumber 2283a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville .len + 1) * sizeof(char) ); 2284a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville for (int i = 0; 2285a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville i < infoRec->rec.redir.redirectingNumber.len; 2286a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville i++) { 2287a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8[i] = infoRec->rec.redir.redirectingNumber.buf[i]; 22883d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 22894380897c6cdc99486a061b819943e3b290ebcf09Wink Saville string8[(int)infoRec->rec.redir.redirectingNumber.len] = '\0'; 2290a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville writeStringToParcel(p, (const char*)string8); 2291a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville free(string8); 2292a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville string8 = NULL; 2293a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.redir.redirectingNumber.number_type); 2294a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.redir.redirectingNumber.number_plan); 2295a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.redir.redirectingNumber.pi); 2296a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.redir.redirectingNumber.si); 2297a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.redir.redirectingReason); 22983d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville break; 22993d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_CDMA_LINE_CONTROL_INFO_REC: 2300a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.lineCtrl.lineCtrlPolarityIncluded); 2301a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.lineCtrl.lineCtrlToggle); 2302a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.lineCtrl.lineCtrlReverse); 2303a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.lineCtrl.lineCtrlPowerDenial); 2304a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 2305a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville appendPrintBuf("%slineCtrlPolarityIncluded=%d, \ 2306a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville lineCtrlToggle=%d, lineCtrlReverse=%d, \ 2307a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville lineCtrlPowerDenial=%d, ", printBuf, 2308a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.lineCtrl.lineCtrlPolarityIncluded, 2309a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.lineCtrl.lineCtrlToggle, 2310a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.lineCtrl.lineCtrlReverse, 2311a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (int)infoRec->rec.lineCtrl.lineCtrlPowerDenial); 2312a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville removeLastChar; 23133d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville break; 23143d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_CDMA_T53_CLIR_INFO_REC: 2315a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32((int)(infoRec->rec.clir.cause)); 23163d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2317a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville appendPrintBuf("%scause%d", printBuf, infoRec->rec.clir.cause); 2318a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville removeLastChar; 23193d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville break; 23203d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_CDMA_T53_AUDIO_CONTROL_INFO_REC: 2321a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.audioCtrl.upLink); 2322a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(infoRec->rec.audioCtrl.downLink); 2323a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 2324a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville appendPrintBuf("%supLink=%d, downLink=%d, ", printBuf, 2325a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville infoRec->rec.audioCtrl.upLink, 2326a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville infoRec->rec.audioCtrl.downLink); 2327a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville removeLastChar; 23283d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville break; 2329a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville case RIL_CDMA_T53_RELEASE_INFO_REC: 2330a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville // TODO(Moto): See David Krause, he has the answer:) 23318eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RIL_CDMA_T53_RELEASE_INFO_REC: return INVALID_RESPONSE"); 2332a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville return RIL_ERRNO_INVALID_RESPONSE; 2333a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville default: 23348eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Incorrect name value"); 2335a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville return RIL_ERRNO_INVALID_RESPONSE; 23363d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 23373d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 2338a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville closeResponse; 23393d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2340a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville return 0; 23413d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville} 23423d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2343a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic int responseRilSignalStrength(Parcel &p, 2344a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville void *response, size_t responselen) { 2345a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville if (response == NULL && responselen != 0) { 23468eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 23473d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return RIL_ERRNO_INVALID_RESPONSE; 23483d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 23493d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2350c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville if (responselen >= sizeof (RIL_SignalStrength_v5)) { 2351c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville RIL_SignalStrength_v6 *p_cur = ((RIL_SignalStrength_v6 *) response); 23523d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 23533d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_cur->GW_SignalStrength.signalStrength); 23543d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_cur->GW_SignalStrength.bitErrorRate); 23553d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_cur->CDMA_SignalStrength.dbm); 23563d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_cur->CDMA_SignalStrength.ecio); 23573d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_cur->EVDO_SignalStrength.dbm); 23583d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_cur->EVDO_SignalStrength.ecio); 23593d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_cur->EVDO_SignalStrength.signalNoiseRatio); 2360c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville if (responselen >= sizeof (RIL_SignalStrength_v6)) { 23619efcac5782b93564d47c1687e67e85849c72afedUma Maheswari Ramalingam /* 236218e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville * Fixup LTE for backwards compatibility 23639efcac5782b93564d47c1687e67e85849c72afedUma Maheswari Ramalingam */ 236418e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville if (s_callbacks.version <= 6) { 236518e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville // signalStrength: -1 -> 99 236618e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville if (p_cur->LTE_SignalStrength.signalStrength == -1) { 236718e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p_cur->LTE_SignalStrength.signalStrength = 99; 236818e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville } 236918e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville // rsrp: -1 -> INT_MAX all other negative value to positive. 237018e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville // So remap here 237118e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville if (p_cur->LTE_SignalStrength.rsrp == -1) { 237218e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p_cur->LTE_SignalStrength.rsrp = INT_MAX; 237318e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville } else if (p_cur->LTE_SignalStrength.rsrp < -1) { 237418e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p_cur->LTE_SignalStrength.rsrp = -p_cur->LTE_SignalStrength.rsrp; 237518e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville } 237618e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville // rsrq: -1 -> INT_MAX 237718e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville if (p_cur->LTE_SignalStrength.rsrq == -1) { 237818e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p_cur->LTE_SignalStrength.rsrq = INT_MAX; 237918e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville } 238018e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville // Not remapping rssnr is already using INT_MAX 23819efcac5782b93564d47c1687e67e85849c72afedUma Maheswari Ramalingam 238218e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville // cqi: -1 -> INT_MAX 238318e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville if (p_cur->LTE_SignalStrength.cqi == -1) { 238418e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p_cur->LTE_SignalStrength.cqi = INT_MAX; 238518e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville } 238618e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville } 238718e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p.writeInt32(p_cur->LTE_SignalStrength.signalStrength); 2388c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(p_cur->LTE_SignalStrength.rsrp); 2389c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(p_cur->LTE_SignalStrength.rsrq); 2390c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(p_cur->LTE_SignalStrength.rssnr); 2391c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(p_cur->LTE_SignalStrength.cqi); 2392c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville } else { 239318e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p.writeInt32(99); 239418e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p.writeInt32(INT_MAX); 239518e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p.writeInt32(INT_MAX); 239618e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p.writeInt32(INT_MAX); 239718e4ab167c7d8549a360ab5ae1fadddcad8c0523Wink Saville p.writeInt32(INT_MAX); 2398c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville } 2399fdf825f9d0dc639787b8523638bb61874ed0b540johnwang 2400fdf825f9d0dc639787b8523638bb61874ed0b540johnwang startResponse; 2401a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville appendPrintBuf("%s[signalStrength=%d,bitErrorRate=%d,\ 2402c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville CDMA_SS.dbm=%d,CDMA_SSecio=%d,\ 2403c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville EVDO_SS.dbm=%d,EVDO_SS.ecio=%d,\ 2404c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville EVDO_SS.signalNoiseRatio=%d,\ 2405c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville LTE_SS.signalStrength=%d,LTE_SS.rsrp=%d,LTE_SS.rsrq=%d,\ 2406c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville LTE_SS.rssnr=%d,LTE_SS.cqi=%d]", 2407a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville printBuf, 2408a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur->GW_SignalStrength.signalStrength, 2409a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur->GW_SignalStrength.bitErrorRate, 2410a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur->CDMA_SignalStrength.dbm, 2411a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur->CDMA_SignalStrength.ecio, 2412a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur->EVDO_SignalStrength.dbm, 2413a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur->EVDO_SignalStrength.ecio, 2414c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->EVDO_SignalStrength.signalNoiseRatio, 2415c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->LTE_SignalStrength.signalStrength, 2416c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->LTE_SignalStrength.rsrp, 2417c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->LTE_SignalStrength.rsrq, 2418c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->LTE_SignalStrength.rssnr, 2419c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->LTE_SignalStrength.cqi); 2420a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville closeResponse; 2421a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 24223d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } else { 24238eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length"); 24243d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return RIL_ERRNO_INVALID_RESPONSE; 24253d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 24263d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 24273d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return 0; 24283d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville} 24293d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 24303d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic int responseCallRing(Parcel &p, void *response, size_t responselen) { 24313d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville if ((response == NULL) || (responselen == 0)) { 24323d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return responseVoid(p, response, responselen); 24333d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } else { 24343d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return responseCdmaSignalInfoRecord(p, response, responselen); 24353d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 24363d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville} 24373d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 24383d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic int responseCdmaSignalInfoRecord(Parcel &p, void *response, size_t responselen) { 24393d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville if (response == NULL || responselen == 0) { 24408eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 24413d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return RIL_ERRNO_INVALID_RESPONSE; 24423d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 24433d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 24443d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville if (responselen != sizeof (RIL_CDMA_SignalInfoRecord)) { 24458eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length %d expected sizeof (RIL_CDMA_SignalInfoRecord) of %d\n", 24463d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville (int)responselen, (int)sizeof (RIL_CDMA_SignalInfoRecord)); 24473d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return RIL_ERRNO_INVALID_RESPONSE; 24483d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 24493d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 24503d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville startResponse; 24513d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 24523d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville RIL_CDMA_SignalInfoRecord *p_cur = ((RIL_CDMA_SignalInfoRecord *) response); 24533d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville marshallSignalInfoRecord(p, *p_cur); 24543d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 24553d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville appendPrintBuf("%s[isPresent=%d,signalType=%d,alertPitch=%d\ 24563d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville signal=%d]", 24573d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville printBuf, 24583d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->isPresent, 24593d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->signalType, 24603d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->alertPitch, 24613d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->signal); 24623d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 24633d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville closeResponse; 24643d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return 0; 24653d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville} 24663d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2467a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic int responseCdmaCallWaiting(Parcel &p, void *response, 2468a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville size_t responselen) { 24693d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville if (response == NULL && responselen != 0) { 24708eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 24713d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return RIL_ERRNO_INVALID_RESPONSE; 24723d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 24733d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2474c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville if (responselen < sizeof(RIL_CDMA_CallWaiting_v6)) { 24758eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGW("Upgrade to ril version %d\n", RIL_VERSION); 24763d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville } 24773d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2478c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville RIL_CDMA_CallWaiting_v6 *p_cur = ((RIL_CDMA_CallWaiting_v6 *) response); 24793d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2480c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville writeStringToParcel(p, p_cur->number); 24813d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p.writeInt32(p_cur->numberPresentation); 2482c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville writeStringToParcel(p, p_cur->name); 24833d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville marshallSignalInfoRecord(p, p_cur->signalInfoRecord); 24843d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 2485c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville if (responselen >= sizeof(RIL_CDMA_CallWaiting_v6)) { 2486c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(p_cur->number_type); 2487c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(p_cur->number_plan); 2488c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville } else { 2489c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(0); 2490c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(0); 2491c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville } 2492c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville 2493c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville startResponse; 24943d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville appendPrintBuf("%snumber=%s,numberPresentation=%d, name=%s,\ 24953d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville signalInfoRecord[isPresent=%d,signalType=%d,alertPitch=%d\ 2496c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville signal=%d,number_type=%d,number_plan=%d]", 24973d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville printBuf, 24983d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->number, 24993d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->numberPresentation, 25003d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->name, 25013d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->signalInfoRecord.isPresent, 25023d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->signalInfoRecord.signalType, 25033d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville p_cur->signalInfoRecord.alertPitch, 2504c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->signalInfoRecord.signal, 2505c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->number_type, 2506c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p_cur->number_plan); 25073d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville closeResponse; 25083d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 25093d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville return 0; 25103d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville} 25113d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville 251245e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenkastatic int responseSimRefresh(Parcel &p, void *response, size_t responselen) { 251345e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka if (response == NULL && responselen != 0) { 25148eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("responseSimRefresh: invalid response: NULL"); 251545e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka return RIL_ERRNO_INVALID_RESPONSE; 251645e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka } 251745e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka 251845e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka startResponse; 251945e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka if (s_callbacks.version == 7) { 252045e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka RIL_SimRefreshResponse_v7 *p_cur = ((RIL_SimRefreshResponse_v7 *) response); 252145e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p.writeInt32(p_cur->result); 252245e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p.writeInt32(p_cur->ef_id); 252345e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka writeStringToParcel(p, p_cur->aid); 252445e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka 252545e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka appendPrintBuf("%sresult=%d, ef_id=%d, aid=%s", 252645e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka printBuf, 252745e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p_cur->result, 252845e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p_cur->ef_id, 252945e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p_cur->aid); 253045e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka } else { 253145e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka int *p_cur = ((int *) response); 253245e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p.writeInt32(p_cur[0]); 253345e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p.writeInt32(p_cur[1]); 253445e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka writeStringToParcel(p, NULL); 253545e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka 253645e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka appendPrintBuf("%sresult=%d, ef_id=%d", 253745e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka printBuf, 253845e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p_cur[0], 253945e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka p_cur[1]); 254045e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka } 254145e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka closeResponse; 254245e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka 254345e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka return 0; 254445e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka} 254545e740ef3c422bf75aadca21f98614fc120f49fbAlex Yakavenka 25468a9e02161271505de274db0c3a88087056dd5dfcWink Savillestatic int responseCellInfoList(Parcel &p, void *response, size_t responselen) 25478a9e02161271505de274db0c3a88087056dd5dfcWink Saville{ 25488a9e02161271505de274db0c3a88087056dd5dfcWink Saville if (response == NULL && responselen != 0) { 25498a9e02161271505de274db0c3a88087056dd5dfcWink Saville RLOGE("invalid response: NULL"); 25508a9e02161271505de274db0c3a88087056dd5dfcWink Saville return RIL_ERRNO_INVALID_RESPONSE; 25518a9e02161271505de274db0c3a88087056dd5dfcWink Saville } 25528a9e02161271505de274db0c3a88087056dd5dfcWink Saville 25538a9e02161271505de274db0c3a88087056dd5dfcWink Saville if (responselen % sizeof(RIL_CellInfo) != 0) { 25548a9e02161271505de274db0c3a88087056dd5dfcWink Saville RLOGE("invalid response length %d expected multiple of %d", 25558a9e02161271505de274db0c3a88087056dd5dfcWink Saville (int)responselen, (int)sizeof(RIL_CellInfo)); 25568a9e02161271505de274db0c3a88087056dd5dfcWink Saville return RIL_ERRNO_INVALID_RESPONSE; 25578a9e02161271505de274db0c3a88087056dd5dfcWink Saville } 25588a9e02161271505de274db0c3a88087056dd5dfcWink Saville 25598a9e02161271505de274db0c3a88087056dd5dfcWink Saville int num = responselen / sizeof(RIL_CellInfo); 25608a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(num); 25618a9e02161271505de274db0c3a88087056dd5dfcWink Saville 25628a9e02161271505de274db0c3a88087056dd5dfcWink Saville RIL_CellInfo *p_cur = (RIL_CellInfo *) response; 25638a9e02161271505de274db0c3a88087056dd5dfcWink Saville startResponse; 25648a9e02161271505de274db0c3a88087056dd5dfcWink Saville int i; 25658a9e02161271505de274db0c3a88087056dd5dfcWink Saville for (i = 0; i < num; i++) { 25668a9e02161271505de274db0c3a88087056dd5dfcWink Saville appendPrintBuf("%s[%d: type=%d,registered=%d,timeStampType=%d,timeStamp=%lld", printBuf, i, 25678a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->cellInfoType, p_cur->registered, p_cur->timeStampType, p_cur->timeStamp); 25688a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32((int)p_cur->cellInfoType); 25698a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->registered); 25708a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->timeStampType); 25718a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt64(p_cur->timeStamp); 25728a9e02161271505de274db0c3a88087056dd5dfcWink Saville switch(p_cur->cellInfoType) { 25738a9e02161271505de274db0c3a88087056dd5dfcWink Saville case RIL_CELL_INFO_TYPE_GSM: { 2574c57b3eb525db241bd3e6092453f48388bc880447Wink Saville appendPrintBuf("%s GSM id: mcc=%d,mnc=%d,lac=%d,cid=%d,", printBuf, 25758a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.gsm.cellIdentityGsm.mcc, 25768a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.gsm.cellIdentityGsm.mnc, 25778a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.gsm.cellIdentityGsm.lac, 2578c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p_cur->CellInfo.gsm.cellIdentityGsm.cid); 2579c57b3eb525db241bd3e6092453f48388bc880447Wink Saville appendPrintBuf("%s gsmSS: ss=%d,ber=%d],", printBuf, 25808a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.gsm.signalStrengthGsm.signalStrength, 25818a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.gsm.signalStrengthGsm.bitErrorRate); 25828a9e02161271505de274db0c3a88087056dd5dfcWink Saville 25838a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.gsm.cellIdentityGsm.mcc); 25848a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.gsm.cellIdentityGsm.mnc); 25858a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.gsm.cellIdentityGsm.lac); 25868a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.gsm.cellIdentityGsm.cid); 25878a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.gsm.signalStrengthGsm.signalStrength); 25888a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.gsm.signalStrengthGsm.bitErrorRate); 25898a9e02161271505de274db0c3a88087056dd5dfcWink Saville break; 25908a9e02161271505de274db0c3a88087056dd5dfcWink Saville } 2591c57b3eb525db241bd3e6092453f48388bc880447Wink Saville case RIL_CELL_INFO_TYPE_WCDMA: { 2592c57b3eb525db241bd3e6092453f48388bc880447Wink Saville appendPrintBuf("%s WCDMA id: mcc=%d,mnc=%d,lac=%d,cid=%d,psc=%d,", printBuf, 2593c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p_cur->CellInfo.wcdma.cellIdentityWcdma.mcc, 2594c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p_cur->CellInfo.wcdma.cellIdentityWcdma.mnc, 2595c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p_cur->CellInfo.wcdma.cellIdentityWcdma.lac, 2596c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p_cur->CellInfo.wcdma.cellIdentityWcdma.cid, 2597c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p_cur->CellInfo.wcdma.cellIdentityWcdma.psc); 2598c57b3eb525db241bd3e6092453f48388bc880447Wink Saville appendPrintBuf("%s wcdmaSS: ss=%d,ber=%d],", printBuf, 2599c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p_cur->CellInfo.wcdma.signalStrengthWcdma.signalStrength, 2600c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p_cur->CellInfo.wcdma.signalStrengthWcdma.bitErrorRate); 2601c57b3eb525db241bd3e6092453f48388bc880447Wink Saville 2602c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p.writeInt32(p_cur->CellInfo.wcdma.cellIdentityWcdma.mcc); 2603c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p.writeInt32(p_cur->CellInfo.wcdma.cellIdentityWcdma.mnc); 2604c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p.writeInt32(p_cur->CellInfo.wcdma.cellIdentityWcdma.lac); 2605c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p.writeInt32(p_cur->CellInfo.wcdma.cellIdentityWcdma.cid); 2606c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p.writeInt32(p_cur->CellInfo.wcdma.cellIdentityWcdma.psc); 2607c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p.writeInt32(p_cur->CellInfo.wcdma.signalStrengthWcdma.signalStrength); 2608c57b3eb525db241bd3e6092453f48388bc880447Wink Saville p.writeInt32(p_cur->CellInfo.wcdma.signalStrengthWcdma.bitErrorRate); 2609c57b3eb525db241bd3e6092453f48388bc880447Wink Saville break; 2610c57b3eb525db241bd3e6092453f48388bc880447Wink Saville } 26118a9e02161271505de274db0c3a88087056dd5dfcWink Saville case RIL_CELL_INFO_TYPE_CDMA: { 26128a9e02161271505de274db0c3a88087056dd5dfcWink Saville appendPrintBuf("%s CDMA id: nId=%d,sId=%d,bsId=%d,long=%d,lat=%d", printBuf, 26138a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.cellIdentityCdma.networkId, 26148a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.cellIdentityCdma.systemId, 26158a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.cellIdentityCdma.basestationId, 26168a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.cellIdentityCdma.longitude, 26178a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.cellIdentityCdma.latitude); 26188a9e02161271505de274db0c3a88087056dd5dfcWink Saville 26198a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.cellIdentityCdma.networkId); 26208a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.cellIdentityCdma.systemId); 26218a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.cellIdentityCdma.basestationId); 26228a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.cellIdentityCdma.longitude); 26238a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.cellIdentityCdma.latitude); 26248a9e02161271505de274db0c3a88087056dd5dfcWink Saville 26258a9e02161271505de274db0c3a88087056dd5dfcWink Saville appendPrintBuf("%s cdmaSS: dbm=%d ecio=%d evdoSS: dbm=%d,ecio=%d,snr=%d", printBuf, 26268a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.signalStrengthCdma.dbm, 26278a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.signalStrengthCdma.ecio, 26288a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.signalStrengthEvdo.dbm, 26298a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.signalStrengthEvdo.ecio, 26308a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.cdma.signalStrengthEvdo.signalNoiseRatio); 26318a9e02161271505de274db0c3a88087056dd5dfcWink Saville 26328a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.signalStrengthCdma.dbm); 26338a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.signalStrengthCdma.ecio); 26348a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.signalStrengthEvdo.dbm); 26358a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.signalStrengthEvdo.ecio); 26368a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.cdma.signalStrengthEvdo.signalNoiseRatio); 26378a9e02161271505de274db0c3a88087056dd5dfcWink Saville break; 26388a9e02161271505de274db0c3a88087056dd5dfcWink Saville } 26398a9e02161271505de274db0c3a88087056dd5dfcWink Saville case RIL_CELL_INFO_TYPE_LTE: { 26408a9e02161271505de274db0c3a88087056dd5dfcWink Saville appendPrintBuf("%s LTE id: mcc=%d,mnc=%d,ci=%d,pci=%d,tac=%d", printBuf, 26418a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.cellIdentityLte.mcc, 26428a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.cellIdentityLte.mnc, 26438a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.cellIdentityLte.ci, 26448a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.cellIdentityLte.pci, 26458a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.cellIdentityLte.tac); 26468a9e02161271505de274db0c3a88087056dd5dfcWink Saville 26478a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.cellIdentityLte.mcc); 26488a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.cellIdentityLte.mnc); 26498a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.cellIdentityLte.ci); 26508a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.cellIdentityLte.pci); 26518a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.cellIdentityLte.tac); 26528a9e02161271505de274db0c3a88087056dd5dfcWink Saville 26538a9e02161271505de274db0c3a88087056dd5dfcWink Saville appendPrintBuf("%s lteSS: ss=%d,rsrp=%d,rsrq=%d,rssnr=%d,cqi=%d,ta=%d", printBuf, 26548a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.signalStrengthLte.signalStrength, 26558a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.signalStrengthLte.rsrp, 26568a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.signalStrengthLte.rsrq, 26578a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.signalStrengthLte.rssnr, 26588a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.signalStrengthLte.cqi, 26598a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur->CellInfo.lte.signalStrengthLte.timingAdvance); 26608a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.signalStrengthLte.signalStrength); 26618a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.signalStrengthLte.rsrp); 26628a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.signalStrengthLte.rsrq); 26638a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.signalStrengthLte.rssnr); 26648a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.signalStrengthLte.cqi); 26658a9e02161271505de274db0c3a88087056dd5dfcWink Saville p.writeInt32(p_cur->CellInfo.lte.signalStrengthLte.timingAdvance); 26668a9e02161271505de274db0c3a88087056dd5dfcWink Saville break; 26678a9e02161271505de274db0c3a88087056dd5dfcWink Saville } 26688a9e02161271505de274db0c3a88087056dd5dfcWink Saville } 26698a9e02161271505de274db0c3a88087056dd5dfcWink Saville p_cur += 1; 26708a9e02161271505de274db0c3a88087056dd5dfcWink Saville } 26718a9e02161271505de274db0c3a88087056dd5dfcWink Saville removeLastChar; 26728a9e02161271505de274db0c3a88087056dd5dfcWink Saville closeResponse; 26738a9e02161271505de274db0c3a88087056dd5dfcWink Saville 26748a9e02161271505de274db0c3a88087056dd5dfcWink Saville return 0; 26758a9e02161271505de274db0c3a88087056dd5dfcWink Saville} 26768a9e02161271505de274db0c3a88087056dd5dfcWink Saville 26773d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic void triggerEvLoop() { 267800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 267900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (!pthread_equal(pthread_self(), s_tid_dispatch)) { 268000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* trigger event loop to wakeup. No reason to do this, 268100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * if we're in the event loop thread */ 268200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project do { 268300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = write (s_fdWakeupWrite, " ", 1); 268400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } while (ret < 0 && errno == EINTR); 268500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 268600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 268700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 26883d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Savillestatic void rilEventAddWakeup(struct ril_event *ev) { 268900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ril_event_add(ev); 269000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project triggerEvLoop(); 269100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 269200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2693fd7293711394c422711ff07d15a357955ff2194fWink Savillestatic void sendSimStatusAppInfo(Parcel &p, int num_apps, RIL_AppStatus appStatus[]) { 2694fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(num_apps); 2695fd7293711394c422711ff07d15a357955ff2194fWink Saville startResponse; 2696fd7293711394c422711ff07d15a357955ff2194fWink Saville for (int i = 0; i < num_apps; i++) { 2697fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(appStatus[i].app_type); 2698fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(appStatus[i].app_state); 2699fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(appStatus[i].perso_substate); 2700fd7293711394c422711ff07d15a357955ff2194fWink Saville writeStringToParcel(p, (const char*)(appStatus[i].aid_ptr)); 2701fd7293711394c422711ff07d15a357955ff2194fWink Saville writeStringToParcel(p, (const char*) 2702fd7293711394c422711ff07d15a357955ff2194fWink Saville (appStatus[i].app_label_ptr)); 2703fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(appStatus[i].pin1_replaced); 2704fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(appStatus[i].pin1); 2705fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(appStatus[i].pin2); 2706fd7293711394c422711ff07d15a357955ff2194fWink Saville appendPrintBuf("%s[app_type=%d,app_state=%d,perso_substate=%d,\ 2707fd7293711394c422711ff07d15a357955ff2194fWink Saville aid_ptr=%s,app_label_ptr=%s,pin1_replaced=%d,pin1=%d,pin2=%d],", 2708fd7293711394c422711ff07d15a357955ff2194fWink Saville printBuf, 2709fd7293711394c422711ff07d15a357955ff2194fWink Saville appStatus[i].app_type, 2710fd7293711394c422711ff07d15a357955ff2194fWink Saville appStatus[i].app_state, 2711fd7293711394c422711ff07d15a357955ff2194fWink Saville appStatus[i].perso_substate, 2712fd7293711394c422711ff07d15a357955ff2194fWink Saville appStatus[i].aid_ptr, 2713fd7293711394c422711ff07d15a357955ff2194fWink Saville appStatus[i].app_label_ptr, 2714fd7293711394c422711ff07d15a357955ff2194fWink Saville appStatus[i].pin1_replaced, 2715fd7293711394c422711ff07d15a357955ff2194fWink Saville appStatus[i].pin1, 2716fd7293711394c422711ff07d15a357955ff2194fWink Saville appStatus[i].pin2); 2717fd7293711394c422711ff07d15a357955ff2194fWink Saville } 2718fd7293711394c422711ff07d15a357955ff2194fWink Saville closeResponse; 2719fd7293711394c422711ff07d15a357955ff2194fWink Saville} 2720fd7293711394c422711ff07d15a357955ff2194fWink Saville 2721f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseSimStatus(Parcel &p, void *response, size_t responselen) { 2722f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int i; 2723f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2724f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville if (response == NULL && responselen != 0) { 27258eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 2726f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return RIL_ERRNO_INVALID_RESPONSE; 2727f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 2728f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 27292c1fb3a4e7aa8039bdefacceec98aa43cfe5784cWink Saville if (responselen == sizeof (RIL_CardStatus_v6)) { 2730fd7293711394c422711ff07d15a357955ff2194fWink Saville RIL_CardStatus_v6 *p_cur = ((RIL_CardStatus_v6 *) response); 2731fd7293711394c422711ff07d15a357955ff2194fWink Saville 2732fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(p_cur->card_state); 2733fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(p_cur->universal_pin_state); 2734fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(p_cur->gsm_umts_subscription_app_index); 2735fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(p_cur->cdma_subscription_app_index); 2736c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(p_cur->ims_subscription_app_index); 2737fd7293711394c422711ff07d15a357955ff2194fWink Saville 2738fd7293711394c422711ff07d15a357955ff2194fWink Saville sendSimStatusAppInfo(p, p_cur->num_applications, p_cur->applications); 27392c1fb3a4e7aa8039bdefacceec98aa43cfe5784cWink Saville } else if (responselen == sizeof (RIL_CardStatus_v5)) { 2740fd7293711394c422711ff07d15a357955ff2194fWink Saville RIL_CardStatus_v5 *p_cur = ((RIL_CardStatus_v5 *) response); 2741fd7293711394c422711ff07d15a357955ff2194fWink Saville 2742fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(p_cur->card_state); 2743fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(p_cur->universal_pin_state); 2744fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(p_cur->gsm_umts_subscription_app_index); 2745fd7293711394c422711ff07d15a357955ff2194fWink Saville p.writeInt32(p_cur->cdma_subscription_app_index); 2746c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville p.writeInt32(-1); 2747f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2748fd7293711394c422711ff07d15a357955ff2194fWink Saville sendSimStatusAppInfo(p, p_cur->num_applications, p_cur->applications); 27492c1fb3a4e7aa8039bdefacceec98aa43cfe5784cWink Saville } else { 27508eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("responseSimStatus: A RilCardStatus_v6 or _v5 expected\n"); 27512c1fb3a4e7aa8039bdefacceec98aa43cfe5784cWink Saville return RIL_ERRNO_INVALID_RESPONSE; 2752f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 2753f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2754f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return 0; 27553d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville} 2756f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2757a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic int responseGsmBrSmsCnf(Parcel &p, void *response, size_t responselen) { 2758a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville int num = responselen / sizeof(RIL_GSM_BroadcastSmsConfigInfo *); 2759f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(num); 2760f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2761f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville startResponse; 2762a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville RIL_GSM_BroadcastSmsConfigInfo **p_cur = 2763a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (RIL_GSM_BroadcastSmsConfigInfo **) response; 2764a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville for (int i = 0; i < num; i++) { 2765a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(p_cur[i]->fromServiceId); 2766a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(p_cur[i]->toServiceId); 2767a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(p_cur[i]->fromCodeScheme); 2768a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(p_cur[i]->toCodeScheme); 2769a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(p_cur[i]->selected); 2770a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville 2771a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville appendPrintBuf("%s [%d: fromServiceId=%d, toServiceId=%d, \ 2772a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville fromCodeScheme=%d, toCodeScheme=%d, selected =%d]", 2773a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville printBuf, i, p_cur[i]->fromServiceId, p_cur[i]->toServiceId, 2774a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur[i]->fromCodeScheme, p_cur[i]->toCodeScheme, 2775a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur[i]->selected); 2776a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville } 2777f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville closeResponse; 2778f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2779f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return 0; 2780f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville} 2781f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2782a592eebc476a3d234f47f93e58252f8c822fc772Wink Savillestatic int responseCdmaBrSmsCnf(Parcel &p, void *response, size_t responselen) { 2783a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville RIL_CDMA_BroadcastSmsConfigInfo **p_cur = 2784a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville (RIL_CDMA_BroadcastSmsConfigInfo **) response; 2785f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2786a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville int num = responselen / sizeof (RIL_CDMA_BroadcastSmsConfigInfo *); 2787a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(num); 2788f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2789f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville startResponse; 2790a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville for (int i = 0 ; i < num ; i++ ) { 2791a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(p_cur[i]->service_category); 2792a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(p_cur[i]->language); 2793a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p.writeInt32(p_cur[i]->selected); 2794f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2795a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville appendPrintBuf("%s [%d: srvice_category=%d, language =%d, \ 2796a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville selected =%d], ", 2797a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville printBuf, i, p_cur[i]->service_category, p_cur[i]->language, 2798a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville p_cur[i]->selected); 2799f5903dfd25c2ef104b3e9267b53f6ee3e7588063Wink Saville } 2800a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville closeResponse; 2801f5903dfd25c2ef104b3e9267b53f6ee3e7588063Wink Saville 2802f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return 0; 2803f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville} 2804f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2805f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic int responseCdmaSms(Parcel &p, void *response, size_t responselen) { 2806f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int num; 2807f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int digitCount; 2808f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville int digitLimit; 2809f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville uint8_t uct; 2810f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville void* dest; 2811f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 28128eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD("Inside responseCdmaSms"); 2813f5903dfd25c2ef104b3e9267b53f6ee3e7588063Wink Saville 2814f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville if (response == NULL && responselen != 0) { 28158eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response: NULL"); 2816f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return RIL_ERRNO_INVALID_RESPONSE; 2817f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 2818f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2819f5903dfd25c2ef104b3e9267b53f6ee3e7588063Wink Saville if (responselen != sizeof(RIL_CDMA_SMS_Message)) { 28208eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("invalid response length was %d expected %d", 2821f5903dfd25c2ef104b3e9267b53f6ee3e7588063Wink Saville (int)responselen, (int)sizeof(RIL_CDMA_SMS_Message)); 2822f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return RIL_ERRNO_INVALID_RESPONSE; 2823f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 2824f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2825f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville RIL_CDMA_SMS_Message *p_cur = (RIL_CDMA_SMS_Message *) response; 2826f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(p_cur->uTeleserviceID); 2827f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.write(&(p_cur->bIsServicePresent),sizeof(uct)); 2828f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(p_cur->uServicecategory); 2829f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(p_cur->sAddress.digit_mode); 2830f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(p_cur->sAddress.number_mode); 2831f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(p_cur->sAddress.number_type); 2832f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(p_cur->sAddress.number_plan); 2833f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.write(&(p_cur->sAddress.number_of_digits), sizeof(uct)); 2834f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville digitLimit= MIN((p_cur->sAddress.number_of_digits), RIL_CDMA_SMS_ADDRESS_MAX); 2835f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for(digitCount =0 ; digitCount < digitLimit; digitCount ++) { 2836f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.write(&(p_cur->sAddress.digits[digitCount]),sizeof(uct)); 2837f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 2838f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2839f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(p_cur->sSubAddress.subaddressType); 2840f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.write(&(p_cur->sSubAddress.odd),sizeof(uct)); 2841f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.write(&(p_cur->sSubAddress.number_of_digits),sizeof(uct)); 2842f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville digitLimit= MIN((p_cur->sSubAddress.number_of_digits), RIL_CDMA_SMS_SUBADDRESS_MAX); 2843f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for(digitCount =0 ; digitCount < digitLimit; digitCount ++) { 2844f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.write(&(p_cur->sSubAddress.digits[digitCount]),sizeof(uct)); 2845f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 2846f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2847f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville digitLimit= MIN((p_cur->uBearerDataLen), RIL_CDMA_SMS_BEARER_DATA_MAX); 2848f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.writeInt32(p_cur->uBearerDataLen); 2849f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for(digitCount =0 ; digitCount < digitLimit; digitCount ++) { 2850f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p.write(&(p_cur->aBearerData[digitCount]), sizeof(uct)); 2851f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 2852f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2853f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville startResponse; 2854f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville appendPrintBuf("%suTeleserviceID=%d, bIsServicePresent=%d, uServicecategory=%d, \ 28551b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville sAddress.digit_mode=%d, sAddress.number_mode=%d, sAddress.number_type=%d, ", 2856f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville printBuf, p_cur->uTeleserviceID,p_cur->bIsServicePresent,p_cur->uServicecategory, 2857f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville p_cur->sAddress.digit_mode, p_cur->sAddress.number_mode,p_cur->sAddress.number_type); 2858f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville closeResponse; 2859f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 2860f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return 0; 2861f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville} 2862f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 286300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** 286400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * A write on the wakeup fd is done just to pop us out of select() 286500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * We empty the buffer here and then ril_event will reset the timers on the 286600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * way back down 286700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project */ 2868f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void processWakeupCallback(int fd, short flags, void *param) { 286900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char buff[16]; 287000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 287100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 28728eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGV("processWakeupCallback"); 287300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 287400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* empty our wakeup socket out */ 287500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project do { 287600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = read(s_fdWakeupRead, &buff, sizeof(buff)); 28777f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville } while (ret > 0 || (ret < 0 && errno == EINTR)); 287800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 287900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2880f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void onCommandsSocketClosed() { 288100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 288200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RequestInfo *p_cur; 288300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 288400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* mark pending requests as "cancelled" so we dont report responses */ 288500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 288600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = pthread_mutex_lock(&s_pendingRequestsMutex); 288700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert (ret == 0); 288800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 288900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_cur = s_pendingRequests; 289000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 28917f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville for (p_cur = s_pendingRequests 289200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ; p_cur != NULL 289300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ; p_cur = p_cur->p_next 289400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ) { 289500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_cur->cancelled = 1; 289600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 289700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 289800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = pthread_mutex_unlock(&s_pendingRequestsMutex); 289900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert (ret == 0); 290000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 290100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2902f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void processCommandsCallback(int fd, short flags, void *param) { 290300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RecordStream *p_rs; 290400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project void *p_record; 290500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t recordlen; 290600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 290700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 290800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert(fd == s_fdCommand); 290900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 291000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_rs = (RecordStream *)param; 291100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 291200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (;;) { 291300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* loop until EAGAIN/EINTR, end of stream, or other error */ 291400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = record_stream_get_next(p_rs, &p_record, &recordlen); 291500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 291600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret == 0 && p_record == NULL) { 291700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* end-of-stream */ 291800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 291900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else if (ret < 0) { 292000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 292100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else if (ret == 0) { /* && p_record != NULL */ 292200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project processCommandBuffer(p_record, recordlen); 292300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 292400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 292500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 292600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret == 0 || !(errno == EAGAIN || errno == EINTR)) { 292700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* fatal error or end-of-stream */ 292800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret != 0) { 29298eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("error on reading command socket errno:%d\n", errno); 293000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { 29318eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGW("EOS. Closing command socket."); 293200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 29337f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 293400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project close(s_fdCommand); 293500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdCommand = -1; 293600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 293700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ril_event_del(&s_commands_event); 293800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 293900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project record_stream_free(p_rs); 294000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 294100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* start listening for new connections again */ 294200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project rilEventAddWakeup(&s_listen_event); 294300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 294400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project onCommandsSocketClosed(); 294500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 294600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 294700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 294800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2949f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void onNewCommandConnect() { 29505b9df33c53682addaebc0b6073901a8b441d82f9Wink Saville // Inform we are connected and the ril version 2951a9c18d17769ee475cf4fd5e76e18ddfa4070c7cdJake Hamby int rilVer = s_callbacks.version; 29525b9df33c53682addaebc0b6073901a8b441d82f9Wink Saville RIL_onUnsolicitedResponse(RIL_UNSOL_RIL_CONNECTED, 29535b9df33c53682addaebc0b6073901a8b441d82f9Wink Saville &rilVer, sizeof(rilVer)); 29545b9df33c53682addaebc0b6073901a8b441d82f9Wink Saville 295500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // implicit radio state changed 295600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED, 295700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project NULL, 0); 295800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 295900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Send last NITZ time data, in case it was missed 296000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_lastNITZTimeData != NULL) { 296100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project sendResponseRaw(s_lastNITZTimeData, s_lastNITZTimeDataSize); 296200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 296300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free(s_lastNITZTimeData); 296400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_lastNITZTimeData = NULL; 296500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 296600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 296700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Get version string 296800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_callbacks.getVersion != NULL) { 296900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project const char *version; 297000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project version = s_callbacks.getVersion(); 29718eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("RIL Daemon version: %s\n", version); 29727f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 297300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project property_set(PROPERTY_RIL_IMPL, version); 297400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { 29758eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("RIL Daemon version: unavailable\n"); 297600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project property_set(PROPERTY_RIL_IMPL, "unavailable"); 297700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 297800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 297900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 298000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 2981f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void listenCallback (int fd, short flags, void *param) { 298200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 298300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int err; 298400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int is_phone_socket; 298500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RecordStream *p_rs; 298600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 298700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project struct sockaddr_un peeraddr; 298800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project socklen_t socklen = sizeof (peeraddr); 298900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 299000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project struct ucred creds; 299100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project socklen_t szCreds = sizeof(creds); 299200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 299300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project struct passwd *pwd = NULL; 299400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 299500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert (s_fdCommand < 0); 299600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert (fd == s_fdListen); 29977f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 299800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdCommand = accept(s_fdListen, (sockaddr *) &peeraddr, &socklen); 299900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 300000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_fdCommand < 0 ) { 30018eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Error on accept() errno:%d", errno); 300200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* start listening for new connections again */ 300300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project rilEventAddWakeup(&s_listen_event); 3004f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville return; 300500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 300600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 300700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* check the credential of the other side and only accept socket from 300800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * phone process 30097f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville */ 301000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project errno = 0; 301100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project is_phone_socket = 0; 3012f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 301300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project err = getsockopt(s_fdCommand, SOL_SOCKET, SO_PEERCRED, &creds, &szCreds); 3014f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville 301500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (err == 0 && szCreds > 0) { 3016f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville errno = 0; 3017f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville pwd = getpwuid(creds.uid); 3018f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville if (pwd != NULL) { 3019f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville if (strcmp(pwd->pw_name, PHONE_PROCESS) == 0) { 3020f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville is_phone_socket = 1; 3021f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } else { 30228eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RILD can't accept socket from process %s", pwd->pw_name); 3023f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 3024f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } else { 30258eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Error on getpwuid() errno: %d", errno); 3026f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville } 302700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { 30288eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD("Error on getsockopt() errno: %d", errno); 302900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 303000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 303100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if ( !is_phone_socket ) { 30328eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RILD must accept socket from %s", PHONE_PROCESS); 30337f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 303400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project close(s_fdCommand); 303500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdCommand = -1; 303600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 303700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project onCommandsSocketClosed(); 303800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 303900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* start listening for new connections again */ 304000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project rilEventAddWakeup(&s_listen_event); 304100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 304200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 304300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 304400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 304500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = fcntl(s_fdCommand, F_SETFL, O_NONBLOCK); 304600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 304700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret < 0) { 30488eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("Error setting O_NONBLOCK errno:%d", errno); 304900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 305000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 30518eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("libril: new connection"); 305200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 305300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_rs = record_stream_new(s_fdCommand, MAX_COMMAND_BYTES); 305400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 30557f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville ril_event_set (&s_commands_event, s_fdCommand, 1, 305600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project processCommandsCallback, p_rs); 305700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 305800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project rilEventAddWakeup (&s_commands_event); 305900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 306000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project onNewCommandConnect(); 306100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 306200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 306300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void freeDebugCallbackArgs(int number, char **args) { 306400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0; i < number; i++) { 306500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (args[i] != NULL) { 306600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free(args[i]); 306700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 306800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 306900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free(args); 307000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 307100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3072f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void debugCallback (int fd, short flags, void *param) { 307300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int acceptFD, option; 307400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project struct sockaddr_un peeraddr; 307500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project socklen_t socklen = sizeof (peeraddr); 307600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int data; 307700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project unsigned int qxdm_data[6]; 307800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project const char *deactData[1] = {"1"}; 307900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char *actData[1]; 308000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_Dial dialData; 308100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int hangupData[1] = {1}; 308200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int number; 308300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char **args; 308400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 308500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project acceptFD = accept (fd, (sockaddr *) &peeraddr, &socklen); 308600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 308700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (acceptFD < 0) { 30888eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("error accepting on debug port: %d\n", errno); 308900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 309000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 309100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 309200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (recv(acceptFD, &number, sizeof(int), 0) != sizeof(int)) { 30938eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("error reading on socket: number of Args: \n"); 309400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 309500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 309600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project args = (char **) malloc(sizeof(char*) * number); 309700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 309800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project for (int i = 0; i < number; i++) { 309900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int len; 310000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (recv(acceptFD, &len, sizeof(int), 0) != sizeof(int)) { 31018eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("error reading on socket: Len of Args: \n"); 310200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project freeDebugCallbackArgs(i, args); 310300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 310400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 310500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // +1 for null-term 310600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project args[i] = (char *) malloc((sizeof(char) * len) + 1); 31077f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville if (recv(acceptFD, args[i], sizeof(char) * len, 0) 31081b5fd23e2bc82e5bed48125317cf2f9837cf6ae8Wink Saville != (int)sizeof(char) * len) { 31098eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("error reading on socket: Args[%d] \n", i); 311000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project freeDebugCallbackArgs(i, args); 311100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 311200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 311300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project char * buf = args[i]; 311400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project buf[len] = 0; 311500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 311600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 311700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project switch (atoi(args[0])) { 311800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 0: 31198eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI ("Connection on debug port: issuing reset."); 312000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project issueLocalRequest(RIL_REQUEST_RESET_RADIO, NULL, 0); 312100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 312200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 1: 31238eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI ("Connection on debug port: issuing radio power off."); 312400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project data = 0; 312500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project issueLocalRequest(RIL_REQUEST_RADIO_POWER, &data, sizeof(int)); 312600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Close the socket 312700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project close(s_fdCommand); 312800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdCommand = -1; 312900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 313000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 2: 31318eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI ("Debug port: issuing unsolicited voice network change."); 3132c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED, 313300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project NULL, 0); 313400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 313500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 3: 31368eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI ("Debug port: QXDM log enable."); 3137d855ef4370e1185d79ecb3fb3434c9b5f84d15bdXia Wang qxdm_data[0] = 65536; // head.func_tag 3138d855ef4370e1185d79ecb3fb3434c9b5f84d15bdXia Wang qxdm_data[1] = 16; // head.len 3139d855ef4370e1185d79ecb3fb3434c9b5f84d15bdXia Wang qxdm_data[2] = 1; // mode: 1 for 'start logging' 3140d855ef4370e1185d79ecb3fb3434c9b5f84d15bdXia Wang qxdm_data[3] = 32; // log_file_size: 32megabytes 3141d855ef4370e1185d79ecb3fb3434c9b5f84d15bdXia Wang qxdm_data[4] = 0; // log_mask 3142d855ef4370e1185d79ecb3fb3434c9b5f84d15bdXia Wang qxdm_data[5] = 8; // log_max_fileindex 31437f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville issueLocalRequest(RIL_REQUEST_OEM_HOOK_RAW, qxdm_data, 314400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6 * sizeof(int)); 314500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 314600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 4: 31478eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI ("Debug port: QXDM log disable."); 314800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project qxdm_data[0] = 65536; 314900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project qxdm_data[1] = 16; 3150d855ef4370e1185d79ecb3fb3434c9b5f84d15bdXia Wang qxdm_data[2] = 0; // mode: 0 for 'stop logging' 315100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project qxdm_data[3] = 32; 315200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project qxdm_data[4] = 0; 3153d855ef4370e1185d79ecb3fb3434c9b5f84d15bdXia Wang qxdm_data[5] = 8; 315400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project issueLocalRequest(RIL_REQUEST_OEM_HOOK_RAW, qxdm_data, 315500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 6 * sizeof(int)); 315600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 315700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 5: 31588eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("Debug port: Radio On"); 315900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project data = 1; 316000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project issueLocalRequest(RIL_REQUEST_RADIO_POWER, &data, sizeof(int)); 316100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project sleep(2); 316200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Set network selection automatic. 316300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project issueLocalRequest(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC, NULL, 0); 316400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 316500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 6: 31668eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("Debug port: Setup Data Call, Apn :%s\n", args[1]); 316700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project actData[0] = args[1]; 31687f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville issueLocalRequest(RIL_REQUEST_SETUP_DATA_CALL, &actData, 316900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project sizeof(actData)); 317000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 317100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 7: 31728eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("Debug port: Deactivate Data Call"); 31737f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville issueLocalRequest(RIL_REQUEST_DEACTIVATE_DATA_CALL, &deactData, 317400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project sizeof(deactData)); 317500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 317600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 8: 31778eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("Debug port: Dial Call"); 317800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project dialData.clir = 0; 317900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project dialData.address = args[1]; 318000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project issueLocalRequest(RIL_REQUEST_DIAL, &dialData, sizeof(dialData)); 318100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 318200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 9: 31838eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("Debug port: Answer Call"); 318400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project issueLocalRequest(RIL_REQUEST_ANSWER, NULL, 0); 318500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 318600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case 10: 31878eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGI("Debug port: End Call"); 31887f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville issueLocalRequest(RIL_REQUEST_HANGUP, &hangupData, 318900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project sizeof(hangupData)); 319000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 319100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project default: 31928eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("Invalid request"); 319300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 319400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 319500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project freeDebugCallbackArgs(number, args); 319600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project close(acceptFD); 319700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 319800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 319900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3200f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Savillestatic void userTimerCallback (int fd, short flags, void *param) { 320100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project UserCallbackInfo *p_info; 320200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 320300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_info = (UserCallbackInfo *)param; 320400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 320500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_info->p_callback(p_info->userParam); 320600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 320700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 320800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // FIXME generalize this...there should be a cancel mechanism 320900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_last_wake_timeout_info != NULL && s_last_wake_timeout_info == p_info) { 321000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_last_wake_timeout_info = NULL; 321100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 321200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 321300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free(p_info); 321400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 321500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 321600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 321700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void * 3218f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleeventLoop(void *param) { 321900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 322000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int filedes[2]; 322100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 322200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ril_event_init(); 322300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 322400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_mutex_lock(&s_startupMutex); 322500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 322600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_started = 1; 322700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_cond_broadcast(&s_startupCond); 322800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 322900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_mutex_unlock(&s_startupMutex); 323000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 323100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = pipe(filedes); 323200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 323300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret < 0) { 32348eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Error in pipe() errno:%d", errno); 323500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return NULL; 323600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 323700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 323800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdWakeupRead = filedes[0]; 323900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdWakeupWrite = filedes[1]; 324000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 324100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project fcntl(s_fdWakeupRead, F_SETFL, O_NONBLOCK); 324200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 324300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ril_event_set (&s_wakeupfd_event, s_fdWakeupRead, true, 324400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project processWakeupCallback, NULL); 324500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 324600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project rilEventAddWakeup (&s_wakeupfd_event); 324700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 324800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Only returns on error 324900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ril_event_loop(); 32508eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("error in event_loop_base errno:%d", errno); 32515cdc1354de1e1b98347fe67c5fefdb0be7e0f589Kazuhiro Ondo // kill self to restart on error 32525cdc1354de1e1b98347fe67c5fefdb0be7e0f589Kazuhiro Ondo kill(0, SIGKILL); 325300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 325400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return NULL; 325500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 325600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 32577f8568086f2ea14885b0091c793e14c2656f0da2Wink Savilleextern "C" void 3258f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleRIL_startEventLoop(void) { 325900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* spin up eventLoop thread and wait for it to get started */ 326000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_started = 0; 326100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_mutex_lock(&s_startupMutex); 326200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3263c0d8dc63fa3a71f8731870d0e851eb47acf4f568Elliott Hughes pthread_attr_t attr; 3264c0d8dc63fa3a71f8731870d0e851eb47acf4f568Elliott Hughes pthread_attr_init(&attr); 32657f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 3266c0d8dc63fa3a71f8731870d0e851eb47acf4f568Elliott Hughes 3267fd81e7146b2e9253aa2ab131d970b9e300f1f97eElliott Hughes int result = pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL); 3268fd81e7146b2e9253aa2ab131d970b9e300f1f97eElliott Hughes if (result != 0) { 3269fd81e7146b2e9253aa2ab131d970b9e300f1f97eElliott Hughes RLOGE("Failed to create dispatch thread: %s", strerror(result)); 3270c0d8dc63fa3a71f8731870d0e851eb47acf4f568Elliott Hughes goto done; 3271c0d8dc63fa3a71f8731870d0e851eb47acf4f568Elliott Hughes } 327200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 327300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project while (s_started == 0) { 327400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_cond_wait(&s_startupCond, &s_startupMutex); 327500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 327600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3277c0d8dc63fa3a71f8731870d0e851eb47acf4f568Elliott Hughesdone: 327800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_mutex_unlock(&s_startupMutex); 327900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 328000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 328100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project// Used for testing purpose only. 328200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectextern "C" void RIL_setcallbacks (const RIL_RadioFunctions *callbacks) { 328300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memcpy(&s_callbacks, callbacks, sizeof (RIL_RadioFunctions)); 328400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 328500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 32867f8568086f2ea14885b0091c793e14c2656f0da2Wink Savilleextern "C" void 3287f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleRIL_register (const RIL_RadioFunctions *callbacks) { 328800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 328900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int flags; 329000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 32914380897c6cdc99486a061b819943e3b290ebcf09Wink Saville if (callbacks == NULL) { 32928eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RIL_register: RIL_RadioFunctions * null"); 329300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 329400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 32954380897c6cdc99486a061b819943e3b290ebcf09Wink Saville if (callbacks->version < RIL_VERSION_MIN) { 32968eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RIL_register: version %d is to old, min version is %d", 32974380897c6cdc99486a061b819943e3b290ebcf09Wink Saville callbacks->version, RIL_VERSION_MIN); 32984380897c6cdc99486a061b819943e3b290ebcf09Wink Saville return; 32994380897c6cdc99486a061b819943e3b290ebcf09Wink Saville } 33004380897c6cdc99486a061b819943e3b290ebcf09Wink Saville if (callbacks->version > RIL_VERSION) { 33018eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RIL_register: version %d is too new, max version is %d", 33024380897c6cdc99486a061b819943e3b290ebcf09Wink Saville callbacks->version, RIL_VERSION); 33034380897c6cdc99486a061b819943e3b290ebcf09Wink Saville return; 33043a4840bea36ce53bc0fb181811ebf9d1cd0aa261Wink Saville } 33058eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RIL_register: RIL version %d", callbacks->version); 330600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 330700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_registerCalled > 0) { 33088eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("RIL_register has been called more than once. " 330900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project "Subsequent call ignored"); 331000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 331100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 331200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 331300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memcpy(&s_callbacks, callbacks, sizeof (RIL_RadioFunctions)); 331400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 331500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_registerCalled = 1; 331600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 331700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Little self-check 331800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3319f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for (int i = 0; i < (int)NUM_ELEMS(s_commands); i++) { 332000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project assert(i == s_commands[i].requestNumber); 332100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 332200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3323f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville for (int i = 0; i < (int)NUM_ELEMS(s_unsolResponses); i++) { 33247f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville assert(i + RIL_UNSOL_RESPONSE_BASE 332500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project == s_unsolResponses[i].requestNumber); 332600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 332700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 332800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // New rild impl calls RIL_startEventLoop() first 332900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // old standalone impl wants it here. 333000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 333100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_started == 0) { 333200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RIL_startEventLoop(); 333300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 333400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 333500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // start listen socket 333600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 333700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#if 0 33387f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville ret = socket_local_server (SOCKET_NAME_RIL, 333900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM); 334000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 334100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret < 0) { 33428eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Unable to bind socket errno:%d", errno); 334300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project exit (-1); 334400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 334500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdListen = ret; 334600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 334700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#else 334800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdListen = android_get_control_socket(SOCKET_NAME_RIL); 334900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_fdListen < 0) { 33508eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Failed to get socket '" SOCKET_NAME_RIL "'"); 335100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project exit(-1); 335200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 335300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 335400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = listen(s_fdListen, 4); 335500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 335600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret < 0) { 33578eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Failed to listen on control socket '%d': %s", 335800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdListen, strerror(errno)); 335900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project exit(-1); 336000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 336100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 336200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 336300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 336400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* note: non-persistent so we can accept only one connection at a time */ 33657f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville ril_event_set (&s_listen_event, s_fdListen, false, 336600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project listenCallback, NULL); 336700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 336800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project rilEventAddWakeup (&s_listen_event); 336900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 337000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#if 1 337100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // start debug interface socket 337200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 337300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdDebug = android_get_control_socket(SOCKET_NAME_RIL_DEBUG); 337400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_fdDebug < 0) { 33758eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Failed to get socket '" SOCKET_NAME_RIL_DEBUG "' errno:%d", errno); 337600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project exit(-1); 337700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 337800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 337900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = listen(s_fdDebug, 4); 338000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 338100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret < 0) { 33828eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("Failed to listen on ril debug socket '%d': %s", 338300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_fdDebug, strerror(errno)); 338400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project exit(-1); 338500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 338600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 338700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ril_event_set (&s_debug_event, s_fdDebug, true, 338800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project debugCallback, NULL); 338900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 339000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project rilEventAddWakeup (&s_debug_event); 339100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project#endif 339200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 339300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 339400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 339500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic int 3396f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillecheckAndDequeueRequestInfo(struct RequestInfo *pRI) { 339700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret = 0; 33987f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 339900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (pRI == NULL) { 340000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return 0; 340100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 340200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 340300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_mutex_lock(&s_pendingRequestsMutex); 340400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 34057f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville for(RequestInfo **ppCur = &s_pendingRequests 34067f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville ; *ppCur != NULL 340700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ; ppCur = &((*ppCur)->p_next) 340800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ) { 340900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (pRI == *ppCur) { 341000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = 1; 341100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 341200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project *ppCur = (*ppCur)->p_next; 341300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 341400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 341500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 341600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 341700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pthread_mutex_unlock(&s_pendingRequestsMutex); 341800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 341900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return ret; 342000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 342100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 342200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 342300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectextern "C" void 3424f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleRIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen) { 342500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project RequestInfo *pRI; 342600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 342700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t errorOffset; 342800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 342900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI = (RequestInfo *)t; 343000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 343100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (!checkAndDequeueRequestInfo(pRI)) { 34328eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE ("RIL_onRequestComplete: invalid RIL_Token"); 343300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 343400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 343500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 343600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (pRI->local > 0) { 343700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Locally issued command...void only! 343800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // response does not go back up the command socket 34398eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD("C[locl]< %s", requestToString(pRI->pCI->requestNumber)); 344000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 344100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto done; 344200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 344300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 344400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("[%04d]< %s", 344500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project pRI->token, requestToString(pRI->pCI->requestNumber)); 344600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 344700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (pRI->cancelled == 0) { 344800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project Parcel p; 344900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 345000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (RESPONSE_SOLICITED); 345100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (pRI->token); 345200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project errorOffset = p.dataPosition(); 345300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 345400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (e); 345500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 3456b2a6184ec942c4c1728cbac723db90fbed4f85c5johnwang if (response != NULL) { 3457b2a6184ec942c4c1728cbac723db90fbed4f85c5johnwang // there is a response payload, no matter success or not. 345800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = pRI->pCI->responseFunction(p, response, responselen); 345900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 346000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* if an error occurred, rewind and mark it */ 346100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret != 0) { 346200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.setDataPosition(errorOffset); 346300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (ret); 346400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 3465b2a6184ec942c4c1728cbac723db90fbed4f85c5johnwang } 3466b2a6184ec942c4c1728cbac723db90fbed4f85c5johnwang 3467b2a6184ec942c4c1728cbac723db90fbed4f85c5johnwang if (e != RIL_E_SUCCESS) { 3468b2a6184ec942c4c1728cbac723db90fbed4f85c5johnwang appendPrintBuf("%s fails by %s", printBuf, failCauseToString(e)); 346900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 347000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 347100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_fdCommand < 0) { 34728eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD ("RIL onRequestComplete: Command channel closed"); 347300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 347400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project sendResponse(p); 347500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 347600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 347700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectdone: 347800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free(pRI); 347900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 348000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 348100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 348200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 3483f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillegrabPartialWakeLock() { 348400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project acquire_wake_lock(PARTIAL_WAKE_LOCK, ANDROID_WAKE_LOCK_NAME); 348500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 348600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 348700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 3488f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillereleaseWakeLock() { 348900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project release_wake_lock(ANDROID_WAKE_LOCK_NAME); 349000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 349100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 349200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/** 349300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project * Timer callback to put us back to sleep before the default timeout 349400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project */ 349500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic void 3496f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillewakeTimeoutCallback (void *param) { 349700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // We're using "param != NULL" as a cancellation mechanism 349800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (param == NULL) { 34998eb2a12cb7b525e74736300962a5f3848427275aWink Saville //RLOGD("wakeTimeout: releasing wake lock"); 350000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 350100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project releaseWakeLock(); 350200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { 35038eb2a12cb7b525e74736300962a5f3848427275aWink Saville //RLOGD("wakeTimeout: releasing wake lock CANCELLED"); 350400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 350500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 350600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 35072bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic int 35082bc78d614e349574426d198c37e51ccb7455b5bbNaveen KalladecodeVoiceRadioTechnology (RIL_RadioState radioState) { 35092bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla switch (radioState) { 35102bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_NOT_READY: 35112bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_LOCKED_OR_ABSENT: 35122bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_READY: 35132bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return RADIO_TECH_UMTS; 35142bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35152bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_NOT_READY: 35162bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_READY: 35172bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_LOCKED_OR_ABSENT: 35182bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_NV_NOT_READY: 35192bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_NV_READY: 35202bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return RADIO_TECH_1xRTT; 35212bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35222bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla default: 35238eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD("decodeVoiceRadioTechnology: Invoked with incorrect RadioState"); 35242bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return -1; 35252bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 35262bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla} 35272bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35282bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic int 35292bc78d614e349574426d198c37e51ccb7455b5bbNaveen KalladecodeCdmaSubscriptionSource (RIL_RadioState radioState) { 35302bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla switch (radioState) { 35312bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_NOT_READY: 35322bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_LOCKED_OR_ABSENT: 35332bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_READY: 35342bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_NOT_READY: 35352bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_READY: 35362bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_LOCKED_OR_ABSENT: 35372bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return CDMA_SUBSCRIPTION_SOURCE_RUIM_SIM; 35382bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35392bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_NV_NOT_READY: 35402bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_NV_READY: 35412bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return CDMA_SUBSCRIPTION_SOURCE_NV; 35422bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35432bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla default: 35448eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD("decodeCdmaSubscriptionSource: Invoked with incorrect RadioState"); 35452bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return -1; 35462bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 35472bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla} 35482bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35492bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic int 35502bc78d614e349574426d198c37e51ccb7455b5bbNaveen KalladecodeSimStatus (RIL_RadioState radioState) { 35512bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla switch (radioState) { 35522bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_NOT_READY: 35532bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_NOT_READY: 35542bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_NV_NOT_READY: 35552bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_NV_READY: 35562bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return -1; 35572bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_LOCKED_OR_ABSENT: 35582bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_SIM_READY: 35592bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_READY: 35602bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_RUIM_LOCKED_OR_ABSENT: 35612bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return radioState; 35622bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla default: 35638eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGD("decodeSimStatus: Invoked with incorrect RadioState"); 35642bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return -1; 35652bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 35662bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla} 35672bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35682bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic bool is3gpp2(int radioTech) { 35692bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla switch (radioTech) { 35702bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_TECH_IS95A: 35712bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_TECH_IS95B: 35722bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_TECH_1xRTT: 35732bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_TECH_EVDO_0: 35742bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_TECH_EVDO_A: 35752bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_TECH_EVDO_B: 35762bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_TECH_EHRPD: 35772bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return true; 35782bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla default: 35792bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return false; 35802bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 35812bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla} 35822bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35832bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla/* If RIL sends SIM states or RUIM states, store the voice radio 35842bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla * technology and subscription source information so that they can be 35852bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla * returned when telephony framework requests them 35862bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla */ 35872bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kallastatic RIL_RadioState 35882bc78d614e349574426d198c37e51ccb7455b5bbNaveen KallaprocessRadioState(RIL_RadioState newRadioState) { 35892bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35902bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if((newRadioState > RADIO_STATE_UNAVAILABLE) && (newRadioState < RADIO_STATE_ON)) { 35912bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla int newVoiceRadioTech; 35922bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla int newCdmaSubscriptionSource; 35932bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla int newSimStatus; 35942bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 35952bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla /* This is old RIL. Decode Subscription source and Voice Radio Technology 35962bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla from Radio State and send change notifications if there has been a change */ 35972bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla newVoiceRadioTech = decodeVoiceRadioTechnology(newRadioState); 35982bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if(newVoiceRadioTech != voiceRadioTech) { 35992bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla voiceRadioTech = newVoiceRadioTech; 36002bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onUnsolicitedResponse (RIL_UNSOL_VOICE_RADIO_TECH_CHANGED, 36012bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla &voiceRadioTech, sizeof(voiceRadioTech)); 36022bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 36032bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if(is3gpp2(newVoiceRadioTech)) { 36042bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla newCdmaSubscriptionSource = decodeCdmaSubscriptionSource(newRadioState); 36052bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if(newCdmaSubscriptionSource != cdmaSubscriptionSource) { 36062bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla cdmaSubscriptionSource = newCdmaSubscriptionSource; 36072bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onUnsolicitedResponse (RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED, 36082bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla &cdmaSubscriptionSource, sizeof(cdmaSubscriptionSource)); 36092bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 36102bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 36112bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla newSimStatus = decodeSimStatus(newRadioState); 36122bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla if(newSimStatus != simRuimStatus) { 36132bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla simRuimStatus = newSimStatus; 36142bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, NULL, 0); 36152bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 36162bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 36172bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla /* Send RADIO_ON to telephony */ 36182bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla newRadioState = RADIO_STATE_ON; 36192bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla } 36202bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 36212bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla return newRadioState; 36222bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla} 36232bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla 362400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectextern "C" 36256e7c1966c6a41b6e7c0431dcc6bf65678438c79eBernhard Rosenkränzervoid RIL_onUnsolicitedResponse(int unsolResponse, const void *data, 362600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project size_t datalen) 362700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project{ 362800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int unsolResponseIndex; 362900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int ret; 363000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project int64_t timeReceived = 0; 363100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project bool shouldScheduleTimeout = false; 36322bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla RIL_RadioState newState; 363300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 363400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_registerCalled == 0) { 363500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Ignore RIL_onUnsolicitedResponse before RIL_register 36368eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGW("RIL_onUnsolicitedResponse called before RIL_register"); 363700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 363800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 36397f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville 364000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project unsolResponseIndex = unsolResponse - RIL_UNSOL_RESPONSE_BASE; 364100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 364200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if ((unsolResponseIndex < 0) 364300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project || (unsolResponseIndex >= (int32_t)NUM_ELEMS(s_unsolResponses))) { 36448eb2a12cb7b525e74736300962a5f3848427275aWink Saville RLOGE("unsupported unsolicited response code %d", unsolResponse); 364500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 364600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 364700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 364800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Grab a wake lock if needed for this reponse, 364900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // as we exit we'll either release it immediately 365000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // or set a timer to release it later. 365100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project switch (s_unsolResponses[unsolResponseIndex].wakeType) { 365200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case WAKE_PARTIAL: 365300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project grabPartialWakeLock(); 365400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project shouldScheduleTimeout = true; 365500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 365600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 365700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case DONT_WAKE: 365800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project default: 365900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // No wake lock is grabed so don't set timeout 366000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project shouldScheduleTimeout = false; 366100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 366200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 366300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 366400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Mark the time this was received, doing this 366500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // after grabing the wakelock incase getting 366600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // the elapsedRealTime might cause us to goto 366700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // sleep. 366800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (unsolResponse == RIL_UNSOL_NITZ_TIME_RECEIVED) { 366900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project timeReceived = elapsedRealtime(); 367000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 367100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 367200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("[UNSL]< %s", requestToString(unsolResponse)); 367300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 367400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project Parcel p; 367500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 367600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (RESPONSE_UNSOLICITED); 367700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt32 (unsolResponse); 367800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 367900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = s_unsolResponses[unsolResponseIndex] 36806e7c1966c6a41b6e7c0431dcc6bf65678438c79eBernhard Rosenkränzer .responseFunction(p, const_cast<void*>(data), datalen); 368100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret != 0) { 368200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Problem with the response. Don't continue; 368300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project goto error_exit; 368400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 368500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 368600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // some things get more payload 368700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project switch(unsolResponse) { 368800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: 36892bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla newState = processRadioState(s_callbacks.onStateRequest()); 36902bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla p.writeInt32(newState); 369100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project appendPrintBuf("%s {%s}", printBuf, 369200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project radioStateToString(s_callbacks.onStateRequest())); 369300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 369400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 369500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 369600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_NITZ_TIME_RECEIVED: 369700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Store the time that this was received so the 369800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // handler of this message can account for 369900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // the time it takes to arrive and process. In 370000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // particular the system has been known to sleep 370100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // before this message can be processed. 370200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p.writeInt64(timeReceived); 370300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project break; 370400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 370500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 370600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ret = sendResponse(p); 370700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (ret != 0 && unsolResponse == RIL_UNSOL_NITZ_TIME_RECEIVED) { 370800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 370900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Unfortunately, NITZ time is not poll/update like everything 371000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // else in the system. So, if the upstream client isn't connected, 371100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // keep a copy of the last NITZ response (with receive time noted 371200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // above) around so we can deliver it when it is connected 371300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 371400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_lastNITZTimeData != NULL) { 371500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project free (s_lastNITZTimeData); 371600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_lastNITZTimeData = NULL; 371700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 371800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 371900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_lastNITZTimeData = malloc(p.dataSize()); 372000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_lastNITZTimeDataSize = p.dataSize(); 372100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memcpy(s_lastNITZTimeData, p.data(), p.dataSize()); 372200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 372300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 372400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // For now, we automatically go back to sleep after TIMEVAL_WAKE_TIMEOUT 372500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // FIXME The java code should handshake here to release wake lock 372600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 372700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (shouldScheduleTimeout) { 372800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Cancel the previous request 372900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (s_last_wake_timeout_info != NULL) { 373000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_last_wake_timeout_info->userParam = (void *)1; 373100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 373200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 373300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project s_last_wake_timeout_info 373400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project = internalRequestTimedCallback(wakeTimeoutCallback, NULL, 373500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project &TIMEVAL_WAKE_TIMEOUT); 373600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 373700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 373800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project // Normal exit 373900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return; 374000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 374100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projecterror_exit: 374200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (shouldScheduleTimeout) { 374300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project releaseWakeLock(); 374400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 374500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 374600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 37477f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville/** FIXME generalize this if you track UserCAllbackInfo, clear it 37487f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville when the callback occurs 374900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project*/ 375000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectstatic UserCallbackInfo * 37517f8568086f2ea14885b0091c793e14c2656f0da2Wink SavilleinternalRequestTimedCallback (RIL_TimedCallback callback, void *param, 37520d9f0c0ea45a0239653e04f2c63ccecb1bc62c6bDianne Hackborn const struct timeval *relativeTime) 375300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project{ 375400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project struct timeval myRelativeTime; 375500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project UserCallbackInfo *p_info; 375600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 375700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_info = (UserCallbackInfo *) malloc (sizeof(UserCallbackInfo)); 375800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 37597f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville p_info->p_callback = callback; 376000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project p_info->userParam = param; 37610d9f0c0ea45a0239653e04f2c63ccecb1bc62c6bDianne Hackborn 376200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project if (relativeTime == NULL) { 376300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* treat null parameter as a 0 relative time */ 376400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memset (&myRelativeTime, 0, sizeof(myRelativeTime)); 376500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } else { 376600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project /* FIXME I think event_add's tv param is really const anyway */ 376700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project memcpy (&myRelativeTime, relativeTime, sizeof(myRelativeTime)); 376800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 376900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 377000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ril_event_set(&(p_info->event), -1, false, userTimerCallback, p_info); 377100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 377200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project ril_timer_add(&(p_info->event), &myRelativeTime); 377300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 377400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project triggerEvLoop(); 377500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project return p_info; 377600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 377700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 377800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 37790d9f0c0ea45a0239653e04f2c63ccecb1bc62c6bDianne Hackbornextern "C" void 37807f8568086f2ea14885b0091c793e14c2656f0da2Wink SavilleRIL_requestTimedCallback (RIL_TimedCallback callback, void *param, 3781f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville const struct timeval *relativeTime) { 37820d9f0c0ea45a0239653e04f2c63ccecb1bc62c6bDianne Hackborn internalRequestTimedCallback (callback, param, relativeTime); 378300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 378400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 378500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectconst char * 3786f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillefailCauseToString(RIL_Errno e) { 378700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project switch(e) { 378800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_SUCCESS: return "E_SUCCESS"; 37892126ab2f05c1033fdca7542f38372dffd1468e1cRobert Greenwalt case RIL_E_RADIO_NOT_AVAILABLE: return "E_RADIO_NOT_AVAILABLE"; 379000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_GENERIC_FAILURE: return "E_GENERIC_FAILURE"; 379100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_PASSWORD_INCORRECT: return "E_PASSWORD_INCORRECT"; 379200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_SIM_PIN2: return "E_SIM_PIN2"; 379300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_SIM_PUK2: return "E_SIM_PUK2"; 379400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_REQUEST_NOT_SUPPORTED: return "E_REQUEST_NOT_SUPPORTED"; 379500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_CANCELLED: return "E_CANCELLED"; 379600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_OP_NOT_ALLOWED_DURING_VOICE_CALL: return "E_OP_NOT_ALLOWED_DURING_VOICE_CALL"; 379700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW: return "E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW"; 379800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_E_SMS_SEND_FAIL_RETRY: return "E_SMS_SEND_FAIL_RETRY"; 3799f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_E_SIM_ABSENT:return "E_SIM_ABSENT"; 38007553447d44bb3f494b00d573215d81398f61cfcdJohn Wang case RIL_E_ILLEGAL_SIM_OR_ME:return "E_ILLEGAL_SIM_OR_ME"; 38017f8568086f2ea14885b0091c793e14c2656f0da2Wink Saville#ifdef FEATURE_MULTIMODE_ANDROID 3802f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_E_SUBSCRIPTION_NOT_AVAILABLE:return "E_SUBSCRIPTION_NOT_AVAILABLE"; 3803f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_E_MODE_NOT_SUPPORTED:return "E_MODE_NOT_SUPPORTED"; 3804f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville#endif 380500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project default: return "<unknown error>"; 380600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 380700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 380800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 380900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectconst char * 3810f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavilleradioStateToString(RIL_RadioState s) { 381100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project switch(s) { 381200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RADIO_STATE_OFF: return "RADIO_OFF"; 381300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RADIO_STATE_UNAVAILABLE: return "RADIO_UNAVAILABLE"; 381400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RADIO_STATE_SIM_NOT_READY: return "RADIO_SIM_NOT_READY"; 381500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RADIO_STATE_SIM_LOCKED_OR_ABSENT: return "RADIO_SIM_LOCKED_OR_ABSENT"; 381600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RADIO_STATE_SIM_READY: return "RADIO_SIM_READY"; 3817f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RADIO_STATE_RUIM_NOT_READY:return"RADIO_RUIM_NOT_READY"; 3818f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RADIO_STATE_RUIM_READY:return"RADIO_RUIM_READY"; 3819f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RADIO_STATE_RUIM_LOCKED_OR_ABSENT:return"RADIO_RUIM_LOCKED_OR_ABSENT"; 3820f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RADIO_STATE_NV_NOT_READY:return"RADIO_NV_NOT_READY"; 3821f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RADIO_STATE_NV_READY:return"RADIO_NV_READY"; 38222bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RADIO_STATE_ON:return"RADIO_ON"; 382300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project default: return "<unknown state>"; 382400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 382500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 382600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 382700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectconst char * 3828f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillecallStateToString(RIL_CallState s) { 382900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project switch(s) { 383000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_CALL_ACTIVE : return "ACTIVE"; 383100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_CALL_HOLDING: return "HOLDING"; 383200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_CALL_DIALING: return "DIALING"; 383300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_CALL_ALERTING: return "ALERTING"; 383400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_CALL_INCOMING: return "INCOMING"; 383500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_CALL_WAITING: return "WAITING"; 383600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project default: return "<unknown state>"; 383700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 383800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 383900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 384000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Projectconst char * 3841f4c4d36c410a3501d282dd7de1c7c3350734f27eWink SavillerequestToString(int request) { 384200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project/* 384300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cat libs/telephony/ril_commands.h \ 384400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project | egrep "^ *{RIL_" \ 384500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/' 384600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 384700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 384800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project cat libs/telephony/ril_unsol_commands.h \ 384900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project | egrep "^ *{RIL_" \ 385000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project | sed -re 's/\{RIL_([^,]+),([^}]+).+/case RIL_\1: return "\1";/' 385100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 385200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project*/ 385300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project switch(request) { 385400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS"; 385500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN"; 385600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK"; 385700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2"; 385800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2"; 385900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN"; 386000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2"; 386100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION"; 386200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS"; 386300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_DIAL: return "DIAL"; 386400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_IMSI: return "GET_IMSI"; 386500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_HANGUP: return "HANGUP"; 386600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND"; 386700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND"; 386800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "SWITCH_WAITING_OR_HOLDING_AND_ACTIVE"; 386900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_CONFERENCE: return "CONFERENCE"; 387000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_UDUB: return "UDUB"; 387100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE"; 387200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH"; 3873c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE"; 3874c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE"; 387500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_OPERATOR: return "OPERATOR"; 387600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER"; 387700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_DTMF: return "DTMF"; 387800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SEND_SMS: return "SEND_SMS"; 387900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE"; 3880f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL"; 388100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SIM_IO: return "SIM_IO"; 388200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SEND_USSD: return "SEND_USSD"; 388300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD"; 388400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_CLIR: return "GET_CLIR"; 388500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_CLIR: return "SET_CLIR"; 388600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS"; 388700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD"; 388800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING"; 388900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING"; 389000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE"; 389100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_IMEI: return "GET_IMEI"; 389200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV"; 389300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_ANSWER: return "ANSWER"; 3894f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL"; 389500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK"; 389600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK"; 389700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD"; 389800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE"; 389900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC"; 390000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL"; 390100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS "; 390200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_DTMF_START: return "DTMF_START"; 390300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP"; 390400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION"; 390500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION"; 390600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "SET_PREFERRED_NETWORK_TYPE"; 390700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "GET_PREFERRED_NETWORK_TYPE"; 390800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "GET_NEIGHBORING_CELL_IDS"; 390900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_MUTE: return "SET_MUTE"; 391000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_GET_MUTE: return "GET_MUTE"; 391100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP"; 3912f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE"; 3913f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST"; 391400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO"; 391500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW"; 391600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS"; 3917f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE"; 3918f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE"; 391900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_STK_GET_PROFILE: return "STK_GET_PROFILE"; 392000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_STK_SET_PROFILE: return "STK_SET_PROFILE"; 392100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "STK_SEND_ENVELOPE_COMMAND"; 392200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "STK_SEND_TERMINAL_RESPONSE"; 392300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM"; 392400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE"; 392500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "EXPLICIT_CALL_TRANSFER"; 392600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_REQUEST_SET_LOCATION_UPDATES: return "SET_LOCATION_UPDATES"; 3927c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE:return"CDMA_SET_SUBSCRIPTION_SOURCE"; 3928f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:return"CDMA_SET_ROAMING_PREFERENCE"; 3929f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:return"CDMA_QUERY_ROAMING_PREFERENCE"; 3930f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_SET_TTY_MODE:return"SET_TTY_MODE"; 3931f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_QUERY_TTY_MODE:return"QUERY_TTY_MODE"; 3932f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE"; 3933f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE"; 3934f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_FLASH:return"CDMA_FLASH"; 3935f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_BURST_DTMF:return"CDMA_BURST_DTMF"; 3936f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_SEND_SMS:return"CDMA_SEND_SMS"; 3937f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:return"CDMA_SMS_ACKNOWLEDGE"; 3938a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville case RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG:return"GSM_GET_BROADCAST_SMS_CONFIG"; 3939a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville case RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG:return"GSM_SET_BROADCAST_SMS_CONFIG"; 3940a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville case RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG:return "CDMA_GET_BROADCAST_SMS_CONFIG"; 3941a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville case RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG:return "CDMA_SET_BROADCAST_SMS_CONFIG"; 3942a592eebc476a3d234f47f93e58252f8c822fc772Wink Saville case RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION:return "CDMA_SMS_BROADCAST_ACTIVATION"; 394303c1edf23e76a83b95ac6847e333cb1329bbfa1dNaveen Kalla case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return"CDMA_VALIDATE_AND_WRITE_AKEY"; 3944f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_SUBSCRIPTION: return"CDMA_SUBSCRIPTION"; 3945f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "CDMA_WRITE_SMS_TO_RUIM"; 3946f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "CDMA_DELETE_SMS_ON_RUIM"; 3947f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_REQUEST_DEVICE_IDENTITY: return "DEVICE_IDENTITY"; 3948000a9fe96fdf9111387d2bc389d2f6bb3e627d0fjsh case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "EXIT_EMERGENCY_CALLBACK_MODE"; 3949000a9fe96fdf9111387d2bc389d2f6bb3e627d0fjsh case RIL_REQUEST_GET_SMSC_ADDRESS: return "GET_SMSC_ADDRESS"; 3950000a9fe96fdf9111387d2bc389d2f6bb3e627d0fjsh case RIL_REQUEST_SET_SMSC_ADDRESS: return "SET_SMSC_ADDRESS"; 395109a68ba315ca3d6b092fd8078cc42b93b7934a1ajsh case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "REPORT_SMS_MEMORY_STATUS"; 3952563fd7207da27322bf3f3587ef6000a944a617b7jsh case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "REPORT_STK_SERVICE_IS_RUNNING"; 3953c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "CDMA_GET_SUBSCRIPTION_SOURCE"; 3954fa8d584ca7984bf7d73ff37c7c2bc1e0dfa5fb71Jake Hamby case RIL_REQUEST_ISIM_AUTHENTICATION: return "ISIM_AUTHENTICATION"; 3955300105d1487f5238940c18792b879793826b61f4Jake Hamby case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU"; 3956300105d1487f5238940c18792b879793826b61f4Jake Hamby case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS"; 39572bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RIL_REQUEST_VOICE_RADIO_TECH: return "VOICE_RADIO_TECH"; 39588a9e02161271505de274db0c3a88087056dd5dfcWink Saville case RIL_REQUEST_GET_CELL_INFO_LIST: return"GET_CELL_INFO_LIST"; 39598a9e02161271505de274db0c3a88087056dd5dfcWink Saville case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: return"SET_UNSOL_CELL_INFO_LIST_RATE"; 396075697538e485ea2981960dcd4878bfdd032731acSungmin Choi case RIL_REQUEST_SET_INITIAL_ATTACH_APN: return "RIL_REQUEST_SET_INITIAL_ATTACH_APN"; 3961a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa case RIL_REQUEST_IMS_REGISTRATION_STATE: return "IMS_REGISTRATION_STATE"; 3962a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa case RIL_REQUEST_IMS_SEND_SMS: return "IMS_SEND_SMS"; 39632458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC: return "SIM_TRANSMIT_APDU_BASIC"; 39642458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal case RIL_REQUEST_SIM_OPEN_CHANNEL: return "SIM_OPEN_CHANNEL"; 39652458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal case RIL_REQUEST_SIM_CLOSE_CHANNEL: return "SIM_CLOSE_CHANNEL"; 39662458d8d1e56faae7b00511ceeab19730572c22d9Shishir Agrawal case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: return "SIM_TRANSMIT_APDU_CHANNEL"; 396700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED"; 396800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED"; 3969c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED"; 397000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS"; 397100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT"; 397200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM"; 397300f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD"; 397400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST(obsolete)"; 397500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED"; 397600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH"; 397700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END"; 397800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND"; 397900f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY"; 398000f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP"; 398100f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FUL"; 398200f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH"; 3983f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED"; 398400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING"; 3985f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED"; 3986f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_NEW_CDMA_SMS"; 3987f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_NEW_BROADCAST_SMS"; 3988f4c4d36c410a3501d282dd7de1c7c3350734f27eWink Saville case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL"; 39893d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED"; 39903d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE"; 39913d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING"; 39923d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS"; 39933d54e74bc450bb40977e3ae6fab6185fe687bdaeWink Saville case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC"; 3994af6ecbf0fa03379818038459ee1b61ea393ffd4fJaikumar Ganesh case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW"; 39955d621da539abea83309d77317ede40126f47d5f0John Wang case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONE"; 39965909cf831f0d687e93164daaecc43a2ff792cc3aJohn Wang case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE"; 3997ee2745825fae9561c5f83fcf179bbbfa111e5224Wink Saville case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED"; 3998c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville case RIL_UNSOL_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED"; 3999c0114b325877907fcdf7a5baa24e54a752e7e58bWink Saville case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE"; 40005b9df33c53682addaebc0b6073901a8b441d82f9Wink Saville case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED"; 40012bc78d614e349574426d198c37e51ccb7455b5bbNaveen Kalla case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED"; 40028a9e02161271505de274db0c3a88087056dd5dfcWink Saville case RIL_UNSOL_CELL_INFO_LIST: return "UNSOL_CELL_INFO_LIST"; 4003a18b9d1e1a014290691d63a7f335085dadc83e46Sukanya Rajkhowa case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED: return "RESPONSE_IMS_NETWORK_STATE_CHANGED"; 400400f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project default: return "<unknown request>"; 400500f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project } 400600f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} 400700f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project 400800f06fc3fdb05d4276e76091cacb42b6f6862222The Android Open Source Project} /* namespace android */ 4009