a7firm/src/sega/a7/CommandServer.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);
}
}