Merge "Handle ProvideLocalInfo stk command." into honeycomb-LTE

This commit is contained in:
Wink Saville
2011-05-24 10:06:58 -07:00
committed by Android (Google) Code Review
3 changed files with 127 additions and 2 deletions

View File

@@ -33,6 +33,7 @@ import com.android.internal.telephony.IccRecords;
import android.util.Config;
import java.io.ByteArrayOutputStream;
import java.util.Locale;
/**
* Enumeration for representing the tag value of COMPREHENSION-TLV objects. If
@@ -274,8 +275,20 @@ public class CatService extends Handler implements AppInterface {
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
break;
case PROVIDE_LOCAL_INFORMATION:
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
return;
ResponseData resp;
switch (cmdParams.cmdDet.commandQualifier) {
case CommandParamsFactory.DTTZ_SETTING:
resp = new DTTZResponseData(null);
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, resp);
break;
case CommandParamsFactory.LANGUAGE_SETTING:
resp = new LanguageResponseData(Locale.getDefault().getLanguage());
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, resp);
break;
default:
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
return;
}
case LAUNCH_BROWSER:
case SELECT_ITEM:
case GET_INPUT:

View File

@@ -53,6 +53,7 @@ class CommandParamsFactory extends Handler {
static final int REFRESH_UICC_RESET = 0x04;
// Command Qualifier values for PLI command
static final int DTTZ_SETTING = 0x03;
static final int LANGUAGE_SETTING = 0x04;
static synchronized CommandParamsFactory getInstance(RilMessageDecoder caller,
@@ -883,6 +884,10 @@ class CommandParamsFactory extends Handler {
throws ResultException {
CatLog.d(this, "process ProvideLocalInfo");
switch (cmdDet.commandQualifier) {
case DTTZ_SETTING:
CatLog.d(this, "PLI [DTTZ_SETTING]");
mCmdParams = new CommandParams(cmdDet);
break;
case LANGUAGE_SETTING:
CatLog.d(this, "PLI [LANGUAGE_SETTING]");
mCmdParams = new CommandParams(cmdDet);

View File

@@ -18,6 +18,8 @@ package com.android.internal.telephony.cat;
import com.android.internal.telephony.EncodeException;
import com.android.internal.telephony.GsmAlphabet;
import java.util.Calendar;
import com.android.internal.telephony.cat.AppInterface.CommandType;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
@@ -147,4 +149,109 @@ class GetInkeyInputResponseData extends ResponseData {
}
}
// For "PROVIDE LOCAL INFORMATION" command.
// See TS 31.111 section 6.4.15/ETSI TS 102 223
// TS 31.124 section 27.22.4.15 for test spec
class LanguageResponseData extends ResponseData {
private String lang;
public LanguageResponseData(String lang) {
super();
this.lang = lang;
}
@Override
public void format(ByteArrayOutputStream buf) {
if (buf == null) {
return;
}
// Text string object
int tag = 0x80 | ComprehensionTlvTag.LANGUAGE.value();
buf.write(tag); // tag
byte[] data;
if (lang != null && lang.length() > 0) {
data = GsmAlphabet.stringToGsm8BitPacked(lang);
}
else {
data = new byte[0];
}
buf.write(data.length);
for (byte b : data) {
buf.write(b);
}
}
}
// For "PROVIDE LOCAL INFORMATION" command.
// See TS 31.111 section 6.4.15/ETSI TS 102 223
// TS 31.124 section 27.22.4.15 for test spec
class DTTZResponseData extends ResponseData {
private Calendar calendar;
public DTTZResponseData(Calendar cal) {
super();
calendar = cal;
}
@Override
public void format(ByteArrayOutputStream buf) {
if (buf == null) {
return;
}
// DTTZ object
int tag = 0x80 | CommandType.PROVIDE_LOCAL_INFORMATION.value();
buf.write(tag); // tag
byte[] data = new byte[8];
byte btmp; // temp variable
data[0] = 0x07; // Write length of DTTZ data
if (calendar == null) {
calendar = Calendar.getInstance();
}
// Fill year byte
btmp = (byte) (calendar.get(java.util.Calendar.YEAR) % 100);
data[1] = (byte) (btmp / 10);
data[1] += (byte) ((btmp % 10) << 4);
// Fill month byte
btmp = (byte) (calendar.get(java.util.Calendar.MONTH) + 1);
data[2] = (byte) (btmp / 10);
data[2] += (byte) ((btmp % 10) << 4);
// Fill day byte
btmp = (byte) (calendar.get(java.util.Calendar.DATE));
data[3] = (byte) (btmp / 10);
data[3] += (byte) ((btmp % 10) << 4);
// Fill hour byte
btmp = (byte) (calendar.get(java.util.Calendar.HOUR_OF_DAY));
data[4] = (byte) (btmp / 10);
data[4] += (byte) ((btmp % 10) << 4);
// Fill minute byte
btmp = (byte) (calendar.get(java.util.Calendar.MINUTE));
data[5] = (byte) (btmp / 10);
data[5] += (byte) ((btmp % 10) << 4);
// Fill second byte
btmp = (byte) (calendar.get(java.util.Calendar.SECOND));
data[6] = (byte) (btmp / 10);
data[6] += (byte) ((btmp % 10) << 4);
// No time zone info
data[7] = (byte) 0xFF;
for (byte b : data) {
buf.write(b);
}
}
}