You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
6.1 KiB
200 lines
6.1 KiB
/* |
|
* Copyright (C) 2014 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
#ifndef RIL_UIM_SOCKET_H_INCLUDED |
|
#define RIL_UIM_SOCKET_H_INCLUDED |
|
#define RIL_SHLIB |
|
#include "telephony/ril.h" |
|
#include "RilSocket.h" |
|
#include <hardware/ril/librilutils/proto/sap-api.pb.h> |
|
|
|
/** |
|
* RilSapSocket is a derived class, derived from the RilSocket abstract |
|
* class, representing sockets for communication between bluetooth SAP module and |
|
* the ril daemon. |
|
* <p> |
|
* This class performs the following functions : |
|
* <ul> |
|
* <li>Initialize the socket. |
|
* <li>Process the requests coming on the socket. |
|
* <li>Provide handlers for Unsolicited and request responses. |
|
* <li>Request and pending response queue handling. |
|
* </ul> |
|
*/ |
|
class RilSapSocket : public RilSocket { |
|
/** |
|
* Place holder for the radio functions returned by the initialization |
|
* function. Currenty only onRequest handler is being used. |
|
*/ |
|
RIL_RadioFunctions* uimFuncs; |
|
|
|
/** |
|
* Wrapper struct for handling the requests in the queue. |
|
*/ |
|
typedef struct SapSocketRequest { |
|
int token; |
|
MsgHeader* curr; |
|
struct SapSocketRequest* p_next; |
|
RIL_SOCKET_ID socketId; |
|
} SapSocketRequest; |
|
|
|
/** |
|
* Queue for requests that are pending dispatch. |
|
*/ |
|
Ril_queue<SapSocketRequest> dispatchQueue; |
|
|
|
/** |
|
* Queue for requests that are dispatched but are pending response |
|
*/ |
|
Ril_queue<SapSocketRequest> pendingResponseQueue; |
|
|
|
public: |
|
/** |
|
* Initialize the socket and add the socket to the list. |
|
* |
|
* @param Name of the socket. |
|
* @param Radio functions to be used by the socket. |
|
*/ |
|
static void initSapSocket(const char *socketName, |
|
RIL_RadioFunctions *uimFuncs); |
|
|
|
/** |
|
* Ril envoronment variable that holds the request and |
|
* unsol response handlers. |
|
*/ |
|
static struct RIL_Env uimRilEnv; |
|
|
|
/** |
|
* Function to print the socket list. |
|
*/ |
|
static void printList(); |
|
|
|
/** |
|
* Dispatches the request to the lower layers. |
|
* It calls the on request function. |
|
* |
|
* @param request The request message. |
|
*/ |
|
void dispatchRequest(MsgHeader *request); |
|
|
|
/** |
|
* Class method to get the socket from the socket list. |
|
* |
|
* @param socketId Socket id. |
|
* @return the sap socket. |
|
*/ |
|
static RilSapSocket* getSocketById(RIL_SOCKET_ID socketId); |
|
|
|
/** |
|
* Datatype to handle the socket list. |
|
*/ |
|
typedef struct RilSapSocketList { |
|
RilSapSocket* socket; |
|
RilSapSocketList *next; |
|
} RilSapSocketList; |
|
|
|
protected: |
|
/** |
|
* Socket handler to be called when a request has |
|
* been completed. |
|
* |
|
* @param Token associated with the request. |
|
* @param Error, if any, while processing the request. |
|
* @param The response payload. |
|
* @param Response payload length. |
|
*/ |
|
void onRequestComplete(RIL_Token t,RIL_Errno e, |
|
void *response, size_t response_len); |
|
|
|
/** |
|
* Socket handler to be called when there is an |
|
* unsolicited response. |
|
* |
|
* @param Message id. |
|
* @param Response data. |
|
* @param Response data length. |
|
*/ |
|
void onUnsolicitedResponse(int unsolResponse, |
|
void *data, size_t datalen); |
|
|
|
/** |
|
* Class method to add the sap socket to the list of sockets. |
|
* Does nothing if the socket is already present in the list. |
|
* Otherwise, calls the constructor of the parent class(To startlistening) |
|
* and add socket to the socket list. |
|
*/ |
|
static void addSocketToList(const char *socketName, RIL_SOCKET_ID socketid, |
|
RIL_RadioFunctions *uimFuncs); |
|
|
|
/** |
|
* Check if a socket of the given name exists in the socket list. |
|
* |
|
* @param Socket name. |
|
* @return true if exists, false otherwise. |
|
*/ |
|
static bool SocketExists(const char *socketName); |
|
|
|
private: |
|
/** |
|
* Constructor. |
|
* |
|
* @param Socket name. |
|
* @param Socket id. |
|
* @param Radio functions. |
|
*/ |
|
RilSapSocket(const char *socketName, |
|
RIL_SOCKET_ID socketId, |
|
RIL_RadioFunctions *inputUimFuncs); |
|
|
|
/** |
|
* Class method that selects the socket on which the onRequestComplete |
|
* is called. |
|
* |
|
* @param Token associated with the request. |
|
* @param Error, if any, while processing the request. |
|
* @param The response payload. |
|
* @param Response payload length. |
|
*/ |
|
static void sOnRequestComplete(RIL_Token t, |
|
RIL_Errno e, void *response, size_t responselen); |
|
|
|
#if defined(ANDROID_MULTI_SIM) |
|
/** |
|
* Class method that selects the socket on which the onUnsolicitedResponse |
|
* is called. |
|
* |
|
* @param Message id. |
|
* @param Response data. |
|
* @param Response data length. |
|
* @param Socket id. |
|
*/ |
|
static void sOnUnsolicitedResponse(int unsolResponse, const void *data, |
|
size_t datalen, RIL_SOCKET_ID socket_id); |
|
#else |
|
/** |
|
* Class method that selects the socket on which the onUnsolicitedResponse |
|
* is called. |
|
* |
|
* @param Message id. |
|
* @param Response data. |
|
* @param Response data length. |
|
*/ |
|
static void sOnUnsolicitedResponse(int unsolResponse, const void *data, |
|
size_t datalen); |
|
#endif |
|
}; |
|
|
|
#endif /*RIL_UIM_SOCKET_H_INCLUDED*/
|
|
|