56 lines
1.9 KiB
Java
56 lines
1.9 KiB
Java
package sega.a7;
|
|
|
|
import javacard.framework.Util;
|
|
|
|
public class CommandServer {
|
|
private Command m_ee_noCommand = null;
|
|
private Command[] m_ee_list = new Command[4];
|
|
private short m_ee_listCount = 0;
|
|
|
|
public void setNoCommand(Command cmdClass) {
|
|
this.m_ee_noCommand = cmdClass;
|
|
}
|
|
|
|
public void attachCommand(Command cmdClass) {
|
|
if (this.m_ee_listCount >= this.m_ee_list.length) {
|
|
Command[] ee_tmpCommand = new Command[this.m_ee_list.length * 2];
|
|
for (short ii = 0; ii < this.m_ee_list.length; ii++)
|
|
ee_tmpCommand[ii] = this.m_ee_list[ii];
|
|
this.m_ee_list = ee_tmpCommand;
|
|
}
|
|
this.m_ee_list[this.m_ee_listCount++] = cmdClass;
|
|
}
|
|
|
|
public short findCommand(short cmd) {
|
|
for (short ramD_ii = 0; ramD_ii < this.m_ee_listCount; ramD_ii++) {
|
|
if (this.m_ee_list[ramD_ii].getCmd_ee() == cmd)
|
|
return ramD_ii;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public boolean select() {
|
|
boolean ramD_bRet = true;
|
|
for (short ramD_ii = 0; ramD_ii < this.m_ee_listCount; ramD_ii++) {
|
|
if (!this.m_ee_list[ramD_ii].select())
|
|
ramD_bRet = false;
|
|
}
|
|
return ramD_bRet;
|
|
}
|
|
|
|
public short execute(byte[] data, short dataOffset, short dataLength, byte[] dst, short dstOffset,
|
|
short dstLength) {
|
|
short ramD_cmd = -1;
|
|
if (6 <= dataLength)
|
|
ramD_cmd = Util.getShort(data, (short) (dataOffset + AppConfig.A7_COMMAND_OFFSET));
|
|
|
|
short damD_list = findCommand(ramD_cmd);
|
|
if (damD_list >= 0)
|
|
return this.m_ee_list[damD_list].execute(data, dataOffset, dataLength, dst, dstOffset, dstLength);
|
|
|
|
if (this.m_ee_noCommand == null)
|
|
return -1;
|
|
return this.m_ee_noCommand.execute(data, ramD_cmd, dataLength, dst, dstOffset, dstLength);
|
|
}
|
|
}
|