/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package skdsswing.transfer;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import skdsswing.transfer.InitPacket;
public class FileSpecification {
private short packetnumber;
private boolean longPacket;
private boolean isPacketInit;
private boolean isEnd;
private byte[] packet;
private byte[] data;
private byte[] innerdata;
private byte[] header;
private byte[] crcfooter;
private File file;
private String filename;
private InitPacket initpack,sendpacket;
private FileInputStream in;
private boolean ack;
public byte[] getInnerData(){
return innerdata;
}
public void setInnerData(byte[] data){
this.innerdata = data;
}
public FileSpecification(String filename){
this.filename = filename;
try{
initialBinaryFile(filename,in);
}catch(IOException ex){
}
}
public FileSpecification(String filename,FileInputStream input){
this.filename = filename;
this.in = input;
try{
int k = input.available();
byte[] bytes = new byte[in.available()];
sendBinaryFile(bytes,filename,input);
}catch(IOException ex){
}
}
/**
* Create a Binary File
* @param filename
* @throws IOException
*/
private void initialBinaryFile(String filename, FileInputStream in)throws IOException{
//FileInputStream inz = new FileInputStream(filename);
//in = new FileInputStream(filename);
byte[] bytes = new byte[in.available()];
sendBinaryFile(bytes,filename,in);
}
/**
* Send the binary file
* @param bytes
* @param filename
*/
public void sendBinaryFile(byte[] bytes, String filename,FileInputStream inputstream){
byte[] cp = new byte[2];
// evtl. noch einen Befehl to Start the download
// sp.Write("AT+pBINARYUPLOAD");
// sendNewLine();
// waitfor('C');
short packetnum = 0;
initpack = new InitPacket();
initpack.setIsPacketInit(true);
initpack.setPacketnumber(packetnum);
initpack.setFilelength(bytes.length);
initpack.setFilename(filename);
if(filename.length() > 125){
initpack.setLongPacket(true);
}
else{
initpack.setLongPacket(false);
}
try {
initpack.createPacket();
// sp.Write(initpacket.packet, 0, initpacket.packet.Length);
// waitforack();
//waitfor('C');
byte[] temparray = new byte[1024];
//int k = inputstream.available();
long size = Math.abs((long)inputstream.available() /(long) 1024);
for(int m = 0; m< size;m++){
sendpacket = new InitPacket();
inputstream.read(temparray,0,1024);
packetnum++;
sendpacket.setPacketnumber(packetnum);
sendpacket.setLongPacket(true);
sendpacket.setIsPacketInit(false);
sendpacket.setData(temparray);
sendpacket.createPacket();
//sp.Write(sendPacket.packet, 0, sendPacket.packet.Length);
//waitforack();
}
// sendEndOftransmision();
// waitforack();
// waitforline();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void waitForAck(){
while(ack!=true){
}
}
private void sendOfTransmission(){
InitPacket endPacket = new InitPacket();
endPacket.setIsEnd(true);
endPacket.setLongPacket(false);
endPacket.setPacketnumber((short)0);
endPacket.setData(new byte[128]);
try{
endPacket.createPacket();
}catch(IOException ex){
ex.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void waitForAnswer(char p){
}
}