Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
halo
hardware_ril
Commits
8d698bb3
Commit
8d698bb3
authored
10 years ago
by
Wink Saville
Committed by
Android Git Automerger
10 years ago
Browse files
Options
Download
Plain Diff
am
8b4e4f7e
: Radio Capability Support.
* commit '
8b4e4f7e
': Radio Capability Support.
parents
9918675c
8b4e4f7e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
230 additions
and
5 deletions
+230
-5
include/telephony/ril.h
include/telephony/ril.h
+107
-4
libril/ril.cpp
libril/ril.cpp
+120
-1
libril/ril_commands.h
libril/ril_commands.h
+2
-0
libril/ril_unsol_commands.h
libril/ril_unsol_commands.h
+1
-0
No files found.
include/telephony/ril.h
View file @
8d698bb3
...
...
@@ -57,6 +57,8 @@ extern "C" {
#define MAX_CLIENT_ID_LENGTH 2
#define MAX_DEBUG_SOCKET_NAME_LENGTH 12
#define MAX_QEMU_PIPE_NAME_LENGTH 11
#define MAX_UUID_LENGTH 64
typedef
void
*
RIL_Token
;
...
...
@@ -149,6 +151,62 @@ typedef enum {
RADIO_TECH_TD_SCDMA
=
17
}
RIL_RadioTechnology
;
typedef
enum
{
RAF_UNKNOWN
=
(
1
<<
RADIO_TECH_UNKNOWN
),
RAF_GPRS
=
(
1
<<
RADIO_TECH_GPRS
),
RAF_EDGE
=
(
1
<<
RADIO_TECH_EDGE
),
RAF_UMTS
=
(
1
<<
RADIO_TECH_UMTS
),
RAF_IS95A
=
(
1
<<
RADIO_TECH_IS95A
),
RAF_IS95B
=
(
1
<<
RADIO_TECH_IS95B
),
RAF_1xRTT
=
(
1
<<
RADIO_TECH_1xRTT
),
RAF_EVDO_0
=
(
1
<<
RADIO_TECH_EVDO_0
),
RAF_EVDO_A
=
(
1
<<
RADIO_TECH_EVDO_A
),
RAF_HSDPA
=
(
1
<<
RADIO_TECH_HSDPA
),
RAF_HSUPA
=
(
1
<<
RADIO_TECH_HSUPA
),
RAF_HSPA
=
(
1
<<
RADIO_TECH_HSPA
),
RAF_EVDO_B
=
(
1
<<
RADIO_TECH_EVDO_B
),
RAF_EHRPD
=
(
1
<<
RADIO_TECH_EHRPD
),
RAF_LTE
=
(
1
<<
RADIO_TECH_LTE
),
RAF_HSPAP
=
(
1
<<
RADIO_TECH_HSPAP
),
RAF_GSM
=
(
1
<<
RADIO_TECH_GSM
),
RAF_TD_SCDMA
=
(
1
<<
RADIO_TECH_TD_SCDMA
),
}
RIL_RadioAccessFamily
;
typedef
enum
{
RC_PHASE_CONFIGURED
=
0
,
// LM is configured is initial value and value after FINISH completes
RC_PHASE_START
=
1
,
// START is sent before Apply and indicates that an APPLY will be
// forthcoming with these same parameters
RC_PHASE_APPLY
=
2
,
// APPLY is sent after all LM's receive START and returned
// RIL_RadioCapability.status = 0, if any START's fail no
// APPLY will be sent
RC_PHASE_UNSOL_RSP
=
3
,
// UNSOL_RSP is sent with RIL_UNSOL_RADIO_CAPABILITY
RC_PHASE_FINISH
=
4
// FINISH is sent after all commands have completed. If an error
// occurs in any previous command the RIL_RadioAccessesFamily and
// LogicalModem fields will be the prior configuration thus
// restoring the configuration to the previous value. An error
// returned by this command will generally be ignored or may
// cause that logical modem to be removed from service.
}
RadioCapabilityPhase
;
typedef
enum
{
RC_STATUS_NONE
=
0
,
// This parameter has no meaning with RC_PHASE_START,
// RC_PHASE_APPLY
RC_STATUS_SUCCESS
=
1
,
// Tell modem the action transaction of set radio
// capability was success with RC_PHASE_FINISH
RC_STATUS_FAIL
=
2
,
// Tell modem the action transaction of set radio
// capability is fail with RC_PHASE_FINISH.
}
RadioCapabilityStatus
;
#define RIL_RADIO_CAPABILITY_VERSION 1
typedef
struct
{
int
version
;
// Version of structure, RIL_RadioCapability_Version
int
session
;
// Unique session value defined by framework returned in all "responses/unsol"
int
phase
;
// CONFIGURED, START, APPLY, FINISH
int
rat
;
// RIL_RadioAccessFamily for the radio
char
logicalModemUuid
[
MAX_UUID_LENGTH
];
// A UUID typically "com.xxxx.lmX where X is the logical modem.
int
status
;
// Return status and an input parameter for RC_PHASE_FINISH
}
RIL_RadioCapability
;
// Do we want to split Data from Voice and the use
// RIL_RadioTechnology for get/setPreferredVoice/Data ?
typedef
enum
{
...
...
@@ -1089,8 +1147,6 @@ typedef struct {
#define RIL_CDMA_MAX_NUMBER_OF_INFO_RECS 10
#define RIL_HARDWARE_CONFIG_UUID_LENGTH 64
typedef
struct
{
char
numberOfInfoRecs
;
RIL_CDMA_InformationRecord
infoRec
[
RIL_CDMA_MAX_NUMBER_OF_INFO_RECS
];
...
...
@@ -1135,12 +1191,12 @@ typedef struct {
}
RIL_HardwareConfig_Modem
;
typedef
struct
{
char
modemUuid
[
RIL_HARDWARE_CONFIG
_UUID_LENGTH
];
char
modemUuid
[
MAX
_UUID_LENGTH
];
}
RIL_HardwareConfig_Sim
;
typedef
struct
{
RIL_HardwareConfig_Type
type
;
char
uuid
[
RIL_HARDWARE_CONFIG
_UUID_LENGTH
];
char
uuid
[
MAX
_UUID_LENGTH
];
RIL_HardwareConfig_State
state
;
union
{
RIL_HardwareConfig_Modem
modem
;
...
...
@@ -4089,6 +4145,41 @@ typedef struct {
*/
#define RIL_REQUEST_SHUTDOWN 129
/**
* RIL_REQUEST_GET_RADIO_CAPABILITY
*
* Used to get phone radio capablility.
*
* "data" is int *
* ((int *)data)[0] is the phone radio access family defined in
* RadioAccessFamily. It's a bit mask value to represent the support type.
*
* Valid errors:
* SUCCESS
* RADIO_NOT_AVAILABLE
* GENERIC_FAILURE
*/
#define RIL_REQUEST_GET_RADIO_CAPABILITY 130
/**
* RIL_REQUEST_SET_RADIO_CAPABILITY
*
* Used to set the phones radio capability. Be VERY careful
* using this request as it may cause some vendor modems to reset. Because
* of the possible modem reset any RIL commands after this one may not be
* processed.
*
* "data" is the RIL_RadioCapability structure
*
* "response" is the RIL_RadioCapability structure, used to feedback return status
*
* Valid errors:
* SUCCESS means a RIL_UNSOL_RADIO_CAPABILITY will be sent within 30 seconds.
* RADIO_NOT_AVAILABLE
* GENERIC_FAILURE
*/
#define RIL_REQUEST_SET_RADIO_CAPABILITY 131
/***********************************************************************/
...
...
@@ -4646,6 +4737,18 @@ typedef struct {
*/
#define RIL_UNSOL_DC_RT_INFO_CHANGED 1041
/**
* RIL_UNSOL_RADIO_CAPABILITY
*
* Sent when RIL_REQUEST_SET_RADIO_CAPABILITY completes.
* Returns the phone radio capability exactly as
* RIL_REQUEST_GET_RADIO_CAPABILITY and should be the
* same set as sent by RIL_REQUEST_SET_RADIO_CAPABILITY.
*
* "data" is the RIL_RadioCapability structure
*/
#define RIL_UNSOL_RADIO_CAPABILITY 1042
/***********************************************************************/
#if defined(ANDROID_MULTI_SIM)
...
...
This diff is collapsed.
Click to expand it.
libril/ril.cpp
View file @
8d698bb3
...
...
@@ -277,6 +277,7 @@ static void dispatchNVWriteItem(Parcel &p, RequestInfo *pRI);
static
void
dispatchUiccSubscripton
(
Parcel
&
p
,
RequestInfo
*
pRI
);
static
void
dispatchSimAuthentication
(
Parcel
&
p
,
RequestInfo
*
pRI
);
static
void
dispatchDataProfile
(
Parcel
&
p
,
RequestInfo
*
pRI
);
static
void
dispatchRadioCapability
(
Parcel
&
p
,
RequestInfo
*
pRI
);
static
int
responseInts
(
Parcel
&
p
,
void
*
response
,
size_t
responselen
);
static
int
responseStrings
(
Parcel
&
p
,
void
*
response
,
size_t
responselen
);
static
int
responseString
(
Parcel
&
p
,
void
*
response
,
size_t
responselen
);
...
...
@@ -303,7 +304,7 @@ static int responseSimRefresh(Parcel &p, void *response, size_t responselen);
static
int
responseCellInfoList
(
Parcel
&
p
,
void
*
response
,
size_t
responselen
);
static
int
responseHardwareConfig
(
Parcel
&
p
,
void
*
response
,
size_t
responselen
);
static
int
responseDcRtInfo
(
Parcel
&
p
,
void
*
response
,
size_t
responselen
);
static
int
responseRadioCapability
(
Parcel
&
p
,
void
*
response
,
size_t
responselen
);
static
int
decodeVoiceRadioTechnology
(
RIL_RadioState
radioState
);
static
int
decodeCdmaSubscriptionSource
(
RIL_RadioState
radioState
);
static
RIL_RadioState
processRadioState
(
RIL_RadioState
newRadioState
);
...
...
@@ -380,6 +381,26 @@ strdupReadString(Parcel &p) {
return
strndup16to8
(
s16
,
stringlen
);
}
static
status_t
readStringFromParcelInplace
(
Parcel
&
p
,
char
*
str
,
size_t
maxLen
)
{
size_t
s16Len
;
const
char16_t
*
s16
;
s16
=
p
.
readString16Inplace
(
&
s16Len
);
if
(
s16
==
NULL
)
{
return
NO_MEMORY
;
}
size_t
strLen
=
strnlen16to8
(
s16
,
s16Len
);
if
((
strLen
+
1
)
>
maxLen
)
{
return
NO_MEMORY
;
}
if
(
strncpy16to8
(
str
,
s16
,
strLen
)
==
NULL
)
{
return
NO_MEMORY
;
}
else
{
return
NO_ERROR
;
}
}
static
void
writeStringToParcel
(
Parcel
&
p
,
const
char
*
s
)
{
char16_t
*
s16
;
size_t
s16_len
;
...
...
@@ -1952,6 +1973,67 @@ invalid:
return
;
}
static
void
dispatchRadioCapability
(
Parcel
&
p
,
RequestInfo
*
pRI
){
RIL_RadioCapability
rc
;
int32_t
t
;
status_t
status
;
memset
(
&
rc
,
0
,
sizeof
(
RIL_RadioCapability
));
status
=
p
.
readInt32
(
&
t
);
rc
.
version
=
(
int
)
t
;
if
(
status
!=
NO_ERROR
)
{
goto
invalid
;
}
status
=
p
.
readInt32
(
&
t
);
rc
.
session
=
(
int
)
t
;
if
(
status
!=
NO_ERROR
)
{
goto
invalid
;
}
status
=
p
.
readInt32
(
&
t
);
rc
.
phase
=
(
int
)
t
;
if
(
status
!=
NO_ERROR
)
{
goto
invalid
;
}
status
=
p
.
readInt32
(
&
t
);
rc
.
rat
=
(
int
)
t
;
if
(
status
!=
NO_ERROR
)
{
goto
invalid
;
}
status
=
readStringFromParcelInplace
(
p
,
rc
.
logicalModemUuid
,
sizeof
(
rc
.
logicalModemUuid
));
if
(
status
!=
NO_ERROR
)
{
goto
invalid
;
}
status
=
p
.
readInt32
(
&
t
);
rc
.
status
=
(
int
)
t
;
if
(
status
!=
NO_ERROR
)
{
goto
invalid
;
}
startRequest
;
appendPrintBuf
(
"%s [version:%d, session:%d, phase:%d, rat:%d, \
logicalModem:%d, status:%d"
,
printBuf
,
rc
.
version
,
rc
.
session
rc
.
phase
,
rc
.
rat
,
rc
.
logicalModem
,
rc
.
session
);
closeRequest
;
printRequest
(
pRI
->
token
,
pRI
->
pCI
->
requestNumber
);
CALL_ONREQUEST
(
pRI
->
pCI
->
requestNumber
,
&
rc
,
sizeof
(
RIL_RadioCapability
),
pRI
,
pRI
->
socket_id
);
return
;
invalid:
invalidCommandBlock
(
pRI
);
return
;
}
static
int
blockingWrite
(
int
fd
,
const
void
*
buffer
,
size_t
len
)
{
size_t
writeOffset
=
0
;
...
...
@@ -3122,6 +3204,40 @@ static int responseHardwareConfig(Parcel &p, void *response, size_t responselen)
return
0
;
}
static
int
responseRadioCapability
(
Parcel
&
p
,
void
*
response
,
size_t
responselen
)
{
if
(
response
==
NULL
)
{
RLOGE
(
"invalid response: NULL"
);
return
RIL_ERRNO_INVALID_RESPONSE
;
}
if
(
responselen
!=
sizeof
(
RIL_RadioCapability
)
)
{
RLOGE
(
"invalid response length was %d expected %d"
,
(
int
)
responselen
,
(
int
)
sizeof
(
RIL_SIM_IO_Response
));
return
RIL_ERRNO_INVALID_RESPONSE
;
}
RIL_RadioCapability
*
p_cur
=
(
RIL_RadioCapability
*
)
response
;
p
.
writeInt32
(
p_cur
->
version
);
p
.
writeInt32
(
p_cur
->
session
);
p
.
writeInt32
(
p_cur
->
phase
);
p
.
writeInt32
(
p_cur
->
rat
);
writeStringToParcel
(
p
,
p_cur
->
logicalModemUuid
);
p
.
writeInt32
(
p_cur
->
status
);
startResponse
;
appendPrintBuf
(
"%s[version=%d,session=%d,phase=%d,\
rat=%s,logicalModem=%s,status=%d]"
,
printBuf
,
p_cur
->
version
,
p_cur
->
session
,
p_cur
->
phase
,
p_cur
->
rat
,
p_cur
->
logicalModem
,
p_cur
->
status
);
closeResponse
;
return
0
;
}
static
void
triggerEvLoop
()
{
int
ret
;
if
(
!
pthread_equal
(
pthread_self
(),
s_tid_dispatch
))
{
...
...
@@ -4662,6 +4778,8 @@ requestToString(int request) {
case
RIL_REQUEST_SIM_OPEN_CHANNEL
:
return
"SIM_OPEN_CHANNEL"
;
case
RIL_REQUEST_SIM_CLOSE_CHANNEL
:
return
"SIM_CLOSE_CHANNEL"
;
case
RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL
:
return
"SIM_TRANSMIT_APDU_CHANNEL"
;
case
RIL_REQUEST_GET_RADIO_CAPABILITY
:
return
"RIL_REQUEST_GET_RADIO_CAPABILITY"
;
case
RIL_REQUEST_SET_RADIO_CAPABILITY
:
return
"RIL_REQUEST_SET_RADIO_CAPABILITY"
;
case
RIL_REQUEST_SET_UICC_SUBSCRIPTION
:
return
"SET_UICC_SUBSCRIPTION"
;
case
RIL_REQUEST_ALLOW_DATA
:
return
"ALLOW_DATA"
;
case
RIL_REQUEST_GET_HARDWARE_CONFIG
:
return
"GET_HARDWARE_CONFIG"
;
...
...
@@ -4711,6 +4829,7 @@ requestToString(int request) {
case
RIL_UNSOL_HARDWARE_CONFIG_CHANGED
:
return
"HARDWARE_CONFIG_CHANGED"
;
case
RIL_UNSOL_DC_RT_INFO_CHANGED
:
return
"UNSOL_DC_RT_INFO_CHANGED"
;
case
RIL_REQUEST_SHUTDOWN
:
return
"SHUTDOWN"
;
case
RIL_UNSOL_RADIO_CAPABILITY
:
return
"RIL_UNSOL_RADIO_CAPABILITY"
;
default:
return
"<unknown request>"
;
}
}
...
...
This diff is collapsed.
Click to expand it.
libril/ril_commands.h
View file @
8d698bb3
...
...
@@ -144,3 +144,5 @@
{
RIL_REQUEST_SET_DC_RT_INFO_RATE
,
dispatchInts
,
responseVoid
},
{
RIL_REQUEST_SET_DATA_PROFILE
,
dispatchDataProfile
,
responseVoid
},
{
RIL_REQUEST_SHUTDOWN
,
dispatchVoid
,
responseVoid
},
{
RIL_REQUEST_GET_RADIO_CAPABILITY
,
dispatchVoid
,
responseRadioCapability
},
{
RIL_REQUEST_SET_RADIO_CAPABILITY
,
dispatchRadioCapability
,
responseRadioCapability
},
This diff is collapsed.
Click to expand it.
libril/ril_unsol_commands.h
View file @
8d698bb3
...
...
@@ -56,3 +56,4 @@
{
RIL_UNSOL_SRVCC_STATE_NOTIFY
,
responseInts
,
WAKE_PARTIAL
},
{
RIL_UNSOL_HARDWARE_CONFIG_CHANGED
,
responseHardwareConfig
,
WAKE_PARTIAL
},
{
RIL_UNSOL_DC_RT_INFO_CHANGED
,
responseDcRtInfo
,
WAKE_PARTIAL
},
{
RIL_UNSOL_RADIO_CAPABILITY
,
responseRadioCapability
,
WAKE_PARTIAL
},
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment