Merge "Handle ProvideLocalInfo stk command." into honeycomb-LTE
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user