aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/android/internal/telephony/RIL.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/android/internal/telephony/RIL.java')
-rw-r--r--src/java/com/android/internal/telephony/RIL.java94
1 files changed, 93 insertions, 1 deletions
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index 11a5299cb..a35b72de5 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -1521,7 +1521,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
response);
rr.mParcel.writeInt(status);
- rr.mParcel.writeString(pdu);
+ constructCdmaWriteSmsRilRequest(rr, IccUtils.hexStringToBytes(pdu));
if (RILJ_LOGV) riljLog(rr.serialString() + "> "
+ requestToString(rr.mRequest)
@@ -1531,6 +1531,98 @@ public class RIL extends BaseCommands implements CommandsInterface {
}
/**
+ * Restructures PDU data so that it is consistent with RIL
+ * data structure.
+ *
+ * @param pdu The data to be written to the RUIM card.
+ */
+ private void constructCdmaWriteSmsRilRequest(RILRequest rr, byte[] pdu) {
+ int address_nbr_of_digits;
+ int subaddr_nbr_of_digits;
+ int bearerDataLength;
+ ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
+ DataInputStream dis = new DataInputStream(bais);
+
+ try {
+ int teleServiceId = 0;
+ byte servicePresent = 0;
+ int serviceCategory = 0;
+
+ int address_digit_mode = 0;
+ int address_nbr_mode = 0;
+ int address_ton = 0;
+ int address_nbr_plan = 0;
+
+ int subaddressType = 0;
+ byte subaddr_odd = 0;
+
+ teleServiceId = dis.readInt();
+ rr.mParcel.writeInt(teleServiceId);
+ servicePresent = (byte) dis.readInt();
+ rr.mParcel.writeByte(servicePresent);
+ serviceCategory = dis.readInt();
+ rr.mParcel.writeInt(serviceCategory);
+
+ address_digit_mode = dis.readByte();
+ rr.mParcel.writeInt(address_digit_mode);
+ address_nbr_mode = dis.readByte();
+ rr.mParcel.writeInt(address_nbr_mode);
+ address_ton = dis.readByte();
+ rr.mParcel.writeInt(address_ton);
+ address_nbr_plan = dis.readByte();
+ rr.mParcel.writeInt(address_nbr_plan);
+
+ address_nbr_of_digits = dis.readByte();
+ rr.mParcel.writeByte((byte) address_nbr_of_digits);
+ for (int i = 0; i < address_nbr_of_digits; i++) {
+ rr.mParcel.writeByte(dis.readByte()); // address_orig_bytes[i]
+ }
+
+ // int
+ subaddressType = dis.readByte();
+ rr.mParcel.writeInt(subaddressType); // subaddressType
+ subaddr_odd = (byte) dis.readByte();
+ rr.mParcel.writeByte(subaddr_odd); // subaddr_odd
+ subaddr_nbr_of_digits = (byte) dis.readByte();
+ rr.mParcel.writeByte((byte) subaddr_nbr_of_digits);
+ for (int i = 0; i < subaddr_nbr_of_digits; i++) {
+ rr.mParcel.writeByte(dis.readByte()); // subaddr_orig_bytes[i]
+ }
+
+ bearerDataLength = dis.readByte() & 0xff;
+ rr.mParcel.writeInt(bearerDataLength);
+ for (int i = 0; i < bearerDataLength; i++) {
+ rr.mParcel.writeByte(dis.readByte()); // bearerData[i]
+ }
+
+ riljLog(" teleServiceId=" + teleServiceId + " servicePresent=" + servicePresent
+ + " serviceCategory=" + serviceCategory
+ + " address_digit_mode=" + address_digit_mode
+ + " address_nbr_mode=" + address_nbr_mode + " address_ton=" + address_ton
+ + " address_nbr_plan=" + address_nbr_plan
+ + " address_nbr_of_digits=" + address_nbr_of_digits
+ + " subaddressType=" + subaddressType + " subaddr_odd= " + subaddr_odd
+ + " subaddr_nbr_of_digits=" + subaddr_nbr_of_digits
+ + " bearerDataLength=" + bearerDataLength);
+ } catch (IOException ex) {
+ if (RILJ_LOGD) riljLog("sendSmsCdma: conversion from input stream to object failed: "
+ + ex);
+ } finally {
+ try {
+ if (null != bais) {
+ bais.close();
+ }
+
+ if (null != dis) {
+ dis.close();
+ }
+ } catch (IOException e) {
+ if (RILJ_LOGD) riljLog("sendSmsCdma: close input stream exception" + e);
+ }
+ }
+ }
+
+ /**
* Translates EF_SMS status bits to a status value compatible with
* SMS AT commands. See TS 27.005 3.1.
*/