Loading telephony/java/com/android/internal/telephony/cat/ResponseData.java +45 −21 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,10 @@ package com.android.internal.telephony.cat; import com.android.internal.telephony.EncodeException; import com.android.internal.telephony.EncodeException; import com.android.internal.telephony.GsmAlphabet; import com.android.internal.telephony.GsmAlphabet; import java.util.Calendar; import java.util.Calendar; import java.util.TimeZone; import android.os.SystemProperties; import android.text.TextUtils; import com.android.internal.telephony.cat.AppInterface.CommandType; import com.android.internal.telephony.cat.AppInterface.CommandType; import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream; Loading Loading @@ -209,7 +213,6 @@ class DTTZResponseData extends ResponseData { buf.write(tag); // tag buf.write(tag); // tag byte[] data = new byte[8]; byte[] data = new byte[8]; byte btmp; // temp variable data[0] = 0x07; // Write length of DTTZ data data[0] = 0x07; // Write length of DTTZ data Loading @@ -217,41 +220,62 @@ class DTTZResponseData extends ResponseData { calendar = Calendar.getInstance(); calendar = Calendar.getInstance(); } } // Fill year byte // Fill year byte btmp = (byte) (calendar.get(java.util.Calendar.YEAR) % 100); data[1] = byteToBCD(calendar.get(java.util.Calendar.YEAR) % 100); data[1] = (byte) (btmp / 10); data[1] += (byte) ((btmp % 10) << 4); // Fill month byte // Fill month byte btmp = (byte) (calendar.get(java.util.Calendar.MONTH) + 1); data[2] = byteToBCD(calendar.get(java.util.Calendar.MONTH) + 1); data[2] = (byte) (btmp / 10); data[2] += (byte) ((btmp % 10) << 4); // Fill day byte // Fill day byte btmp = (byte) (calendar.get(java.util.Calendar.DATE)); data[3] = byteToBCD(calendar.get(java.util.Calendar.DATE)); data[3] = (byte) (btmp / 10); data[3] += (byte) ((btmp % 10) << 4); // Fill hour byte // Fill hour byte btmp = (byte) (calendar.get(java.util.Calendar.HOUR_OF_DAY)); data[4] = byteToBCD(calendar.get(java.util.Calendar.HOUR_OF_DAY)); data[4] = (byte) (btmp / 10); data[4] += (byte) ((btmp % 10) << 4); // Fill minute byte // Fill minute byte btmp = (byte) (calendar.get(java.util.Calendar.MINUTE)); data[5] = byteToBCD(calendar.get(java.util.Calendar.MINUTE)); data[5] = (byte) (btmp / 10); data[5] += (byte) ((btmp % 10) << 4); // Fill second byte // Fill second byte btmp = (byte) (calendar.get(java.util.Calendar.SECOND)); data[6] = byteToBCD(calendar.get(java.util.Calendar.SECOND)); data[6] = (byte) (btmp / 10); data[6] += (byte) ((btmp % 10) << 4); // No time zone info String tz = SystemProperties.get("persist.sys.timezone", ""); data[7] = (byte) 0xFF; if (TextUtils.isEmpty(tz)) { data[7] = (byte) 0xFF; // set FF in terminal response } else { TimeZone zone = TimeZone.getTimeZone(tz); int zoneOffset = zone.getRawOffset() + zone.getDSTSavings(); data[7] = getTZOffSetByte(zoneOffset); } for (byte b : data) { for (byte b : data) { buf.write(b); buf.write(b); } } } } private byte byteToBCD(int value) { if (value < 0 && value > 99) { CatLog.d(this, "Err: byteToBCD conversion Value is " + value + " Value has to be between 0 and 99"); return 0; } return (byte) ((value / 10) | ((value % 10) << 4)); } private byte getTZOffSetByte(long offSetVal) { boolean isNegative = (offSetVal < 0); /* * The 'offSetVal' is in milliseconds. Convert it to hours and compute * offset While sending T.R to UICC, offset is expressed is 'quarters of * hours' */ long tzOffset = offSetVal / (15 * 60 * 1000); tzOffset = (isNegative ? -1 : 1) * tzOffset; byte bcdVal = byteToBCD((int) tzOffset); // For negative offsets, put '1' in the msb return isNegative ? (bcdVal |= 0x08) : bcdVal; } } } Loading
telephony/java/com/android/internal/telephony/cat/ResponseData.java +45 −21 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,10 @@ package com.android.internal.telephony.cat; import com.android.internal.telephony.EncodeException; import com.android.internal.telephony.EncodeException; import com.android.internal.telephony.GsmAlphabet; import com.android.internal.telephony.GsmAlphabet; import java.util.Calendar; import java.util.Calendar; import java.util.TimeZone; import android.os.SystemProperties; import android.text.TextUtils; import com.android.internal.telephony.cat.AppInterface.CommandType; import com.android.internal.telephony.cat.AppInterface.CommandType; import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream; Loading Loading @@ -209,7 +213,6 @@ class DTTZResponseData extends ResponseData { buf.write(tag); // tag buf.write(tag); // tag byte[] data = new byte[8]; byte[] data = new byte[8]; byte btmp; // temp variable data[0] = 0x07; // Write length of DTTZ data data[0] = 0x07; // Write length of DTTZ data Loading @@ -217,41 +220,62 @@ class DTTZResponseData extends ResponseData { calendar = Calendar.getInstance(); calendar = Calendar.getInstance(); } } // Fill year byte // Fill year byte btmp = (byte) (calendar.get(java.util.Calendar.YEAR) % 100); data[1] = byteToBCD(calendar.get(java.util.Calendar.YEAR) % 100); data[1] = (byte) (btmp / 10); data[1] += (byte) ((btmp % 10) << 4); // Fill month byte // Fill month byte btmp = (byte) (calendar.get(java.util.Calendar.MONTH) + 1); data[2] = byteToBCD(calendar.get(java.util.Calendar.MONTH) + 1); data[2] = (byte) (btmp / 10); data[2] += (byte) ((btmp % 10) << 4); // Fill day byte // Fill day byte btmp = (byte) (calendar.get(java.util.Calendar.DATE)); data[3] = byteToBCD(calendar.get(java.util.Calendar.DATE)); data[3] = (byte) (btmp / 10); data[3] += (byte) ((btmp % 10) << 4); // Fill hour byte // Fill hour byte btmp = (byte) (calendar.get(java.util.Calendar.HOUR_OF_DAY)); data[4] = byteToBCD(calendar.get(java.util.Calendar.HOUR_OF_DAY)); data[4] = (byte) (btmp / 10); data[4] += (byte) ((btmp % 10) << 4); // Fill minute byte // Fill minute byte btmp = (byte) (calendar.get(java.util.Calendar.MINUTE)); data[5] = byteToBCD(calendar.get(java.util.Calendar.MINUTE)); data[5] = (byte) (btmp / 10); data[5] += (byte) ((btmp % 10) << 4); // Fill second byte // Fill second byte btmp = (byte) (calendar.get(java.util.Calendar.SECOND)); data[6] = byteToBCD(calendar.get(java.util.Calendar.SECOND)); data[6] = (byte) (btmp / 10); data[6] += (byte) ((btmp % 10) << 4); // No time zone info String tz = SystemProperties.get("persist.sys.timezone", ""); data[7] = (byte) 0xFF; if (TextUtils.isEmpty(tz)) { data[7] = (byte) 0xFF; // set FF in terminal response } else { TimeZone zone = TimeZone.getTimeZone(tz); int zoneOffset = zone.getRawOffset() + zone.getDSTSavings(); data[7] = getTZOffSetByte(zoneOffset); } for (byte b : data) { for (byte b : data) { buf.write(b); buf.write(b); } } } } private byte byteToBCD(int value) { if (value < 0 && value > 99) { CatLog.d(this, "Err: byteToBCD conversion Value is " + value + " Value has to be between 0 and 99"); return 0; } return (byte) ((value / 10) | ((value % 10) << 4)); } private byte getTZOffSetByte(long offSetVal) { boolean isNegative = (offSetVal < 0); /* * The 'offSetVal' is in milliseconds. Convert it to hours and compute * offset While sending T.R to UICC, offset is expressed is 'quarters of * hours' */ long tzOffset = offSetVal / (15 * 60 * 1000); tzOffset = (isNegative ? -1 : 1) * tzOffset; byte bcdVal = byteToBCD((int) tzOffset); // For negative offsets, put '1' in the msb return isNegative ? (bcdVal |= 0x08) : bcdVal; } } }