/*
CanZE
Take a closer look at your ZE car
Copyright (C) 2015 - The CanZE Team
http://canze.fisch.lu
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package lu.fisch.canze.actors;
import java.util.ArrayList;
import java.util.Calendar;
/**
* Frame
*/
public class Frame {
private int id;
private String responseId = null;
private int interval; // in ms
private Ecu sendingEcu;
private final ArrayList<Field> fields = new ArrayList<>();
private final ArrayList<Field> queriedFields = new ArrayList<>();
private Frame containingFrame = null;
protected long lastRequest = 0;
public Frame (int id, int interval, Ecu sendingEcu, String responseId, Frame containingFrame) {
this.id = id;
this.interval = interval;
this.sendingEcu = sendingEcu;
this.responseId = responseId;
this.containingFrame = containingFrame;
}
/* --------------------------------
* Scheduling
* ------------------------------ */
public void updateLastRequest()
{
lastRequest = Calendar.getInstance().getTimeInMillis();
}
public long getLastRequest()
{
return lastRequest;
}
public boolean isDue(long referenceTime)
{
return lastRequest+interval<referenceTime;
}
public int getInterval() {
return interval;
}
public void setInterval (int interval) { this.interval = interval; }
public boolean isIsoTp()
{
if (this.responseId == null) return false;
return !responseId.trim().isEmpty();
}
public int getId() {
return id;
}
public String getRID()
{
if(responseId!=null && !responseId.trim().isEmpty())
return (getHexId()+"."+responseId.trim()).toLowerCase();
else
return (getHexId()).toLowerCase();
}
public String getHexId() {
return Integer.toHexString(id);
}
public Ecu getSendingEcu() {
return sendingEcu;
}
public String getResponseId() {
return responseId;
}
public ArrayList<Field> getAllFields() {
return fields;
}
public void addField(Field field) {
this.fields.add(field);
}
public ArrayList<Field> getQueriedFields() {
return queriedFields;
}
public void addQueriedField(Field field) {
this.queriedFields.add(field);
}
public void removeQueriedField(Field field) {
this.queriedFields.remove(field);
}
public String getRequestId () {
if (responseId.compareTo("") == 0) return ("");
char[] tmpChars = responseId.toCharArray();
tmpChars[0] -= 0x04;
return String.valueOf(tmpChars);
}
public Frame getContainingFrame() {
return containingFrame;
}
}