REO progress
This commit is contained in:
parent
42d6aa53e8
commit
1a7154647e
|
@ -600,4 +600,10 @@ public class BinaryProtocol implements BinaryProtocolCommands {
|
||||||
throw new UnsupportedOperationException("type " + sensor.getType());
|
throw new UnsupportedOperationException("type " + sensor.getType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRange(byte[] src, int scrPos, int offset, int count) {
|
||||||
|
synchronized (imageLock) {
|
||||||
|
System.arraycopy(src, scrPos, controller.getContent(), offset, count);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ public class IoHelper {
|
||||||
return getCrc32(packet, 0, packet.length);
|
return getCrc32(packet, 0, packet.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getCrc32(byte[] packet, int offset, int length) {
|
private static int getCrc32(byte[] packet, int offset, int length) {
|
||||||
CRC32 c = new CRC32();
|
CRC32 c = new CRC32();
|
||||||
c.update(packet, offset, length);
|
c.update(packet, offset, length);
|
||||||
return (int) c.getValue();
|
return (int) c.getValue();
|
||||||
|
|
|
@ -110,43 +110,19 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
||||||
} else if (command == Fields.TS_GET_FIRMWARE_VERSION) {
|
} else if (command == Fields.TS_GET_FIRMWARE_VERSION) {
|
||||||
stream.sendPacket((TS_OK + "rusEFI proxy").getBytes(), FileLog.LOGGER);
|
stream.sendPacket((TS_OK + "rusEFI proxy").getBytes(), FileLog.LOGGER);
|
||||||
} else if (command == COMMAND_CRC_CHECK_COMMAND) {
|
} else if (command == COMMAND_CRC_CHECK_COMMAND) {
|
||||||
System.out.println("CRC check");
|
handleCrc(stream);
|
||||||
BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState();
|
|
||||||
byte[] content = bp.getControllerConfiguration().getContent();
|
|
||||||
int result = IoHelper.getCrc32(content, 0, content.length);
|
|
||||||
ByteArrayOutputStream response = new ByteArrayOutputStream();
|
|
||||||
response.write(TS_OK.charAt(0));
|
|
||||||
new DataOutputStream(response).write(result);
|
|
||||||
stream.sendPacket(response.toByteArray(), FileLog.LOGGER);
|
|
||||||
} else if (command == COMMAND_PAGE) {
|
} else if (command == COMMAND_PAGE) {
|
||||||
stream.sendPacket(TS_OK.getBytes(), FileLog.LOGGER);
|
stream.sendPacket(TS_OK.getBytes(), FileLog.LOGGER);
|
||||||
} else if (command == COMMAND_READ) {
|
} else if (command == COMMAND_READ) {
|
||||||
short page = dis.readShort();
|
handleRead(dis, stream);
|
||||||
int offset = swap16(dis.readShort());
|
|
||||||
int count = swap16(dis.readShort());
|
|
||||||
if (count <= 0) {
|
|
||||||
FileLog.MAIN.logLine("Error: negative read request " + offset + "/" + count);
|
|
||||||
} else {
|
|
||||||
System.out.println("read " + page + "/" + offset + "/" + count);
|
|
||||||
BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState();
|
|
||||||
byte[] response = new byte[1 + count];
|
|
||||||
response[0] = (byte) TS_OK.charAt(0);
|
|
||||||
System.arraycopy(bp.getControllerConfiguration().getContent(), offset, response, 1, count);
|
|
||||||
stream.sendPacket(response, FileLog.LOGGER);
|
|
||||||
}
|
|
||||||
} else if (command == Fields.TS_CHUNK_WRITE_COMMAND) {
|
} else if (command == Fields.TS_CHUNK_WRITE_COMMAND) {
|
||||||
dis.readShort(); // page
|
handleWrite(packet, dis, stream);
|
||||||
int offset = swap16(dis.readShort());
|
|
||||||
int count = swap16(dis.readShort());
|
|
||||||
FileLog.MAIN.logLine("TS_CHUNK_WRITE_COMMAND: offset=" + offset + " count=" + count);
|
|
||||||
BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState();
|
|
||||||
System.arraycopy(packet, 7, bp.getControllerConfiguration().getContent(), offset, count);
|
|
||||||
stream.sendPacket(TS_OK.getBytes(), FileLog.LOGGER);
|
|
||||||
} else if (command == Fields.TS_BURN_COMMAND) {
|
} else if (command == Fields.TS_BURN_COMMAND) {
|
||||||
stream.sendPacket(new byte[]{TS_RESPONSE_BURN_OK}, FileLog.LOGGER);
|
stream.sendPacket(new byte[]{TS_RESPONSE_BURN_OK}, FileLog.LOGGER);
|
||||||
} else if (command == Fields.TS_OUTPUT_COMMAND) {
|
} else if (command == Fields.TS_OUTPUT_COMMAND) {
|
||||||
int offset = swap16(dis.readShort());
|
int offset = swap16(dis.readShort());
|
||||||
int count = swap16(dis.readShort());
|
int count = swap16(dis.readShort());
|
||||||
|
System.out.println("TS_OUTPUT_COMMAND offset=" + offset + "/count=" + count);
|
||||||
|
|
||||||
byte[] response = new byte[1 + count];
|
byte[] response = new byte[1 + count];
|
||||||
response[0] = (byte) TS_OK.charAt(0);
|
response[0] = (byte) TS_OK.charAt(0);
|
||||||
|
@ -161,4 +137,41 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void handleWrite(byte[] packet, DataInputStream dis, TcpIoStream stream) throws IOException {
|
||||||
|
dis.readShort(); // page
|
||||||
|
int offset = swap16(dis.readShort());
|
||||||
|
int count = swap16(dis.readShort());
|
||||||
|
FileLog.MAIN.logLine("TS_CHUNK_WRITE_COMMAND: offset=" + offset + " count=" + count);
|
||||||
|
BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState();
|
||||||
|
bp.setRange(packet, 7, offset, count);
|
||||||
|
stream.sendPacket(TS_OK.getBytes(), FileLog.LOGGER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleRead(DataInputStream dis, TcpIoStream stream) throws IOException {
|
||||||
|
short page = dis.readShort();
|
||||||
|
int offset = swap16(dis.readShort());
|
||||||
|
int count = swap16(dis.readShort());
|
||||||
|
if (count <= 0) {
|
||||||
|
FileLog.MAIN.logLine("Error: negative read request " + offset + "/" + count);
|
||||||
|
} else {
|
||||||
|
System.out.println("read " + page + "/" + offset + "/" + count);
|
||||||
|
BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState();
|
||||||
|
byte[] response = new byte[1 + count];
|
||||||
|
response[0] = (byte) TS_OK.charAt(0);
|
||||||
|
System.arraycopy(bp.getControllerConfiguration().getContent(), offset, response, 1, count);
|
||||||
|
stream.sendPacket(response, FileLog.LOGGER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleCrc(TcpIoStream stream) throws IOException {
|
||||||
|
System.out.println("CRC check");
|
||||||
|
BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState();
|
||||||
|
byte[] content = bp.getControllerConfiguration().getContent();
|
||||||
|
int result = IoHelper.getCrc32(content);
|
||||||
|
ByteArrayOutputStream response = new ByteArrayOutputStream();
|
||||||
|
response.write(TS_OK.charAt(0));
|
||||||
|
new DataOutputStream(response).writeInt(result);
|
||||||
|
stream.sendPacket(response.toByteArray(), FileLog.LOGGER);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue