package radio_module;
public class XBeeFrameGenerator {
public static void main(String [] arts) {
//System.out.println(at("ATCH"));
//System.out.println(byteToBinaryStreem("F"));
System.out.println(data16("Bonjour", "12", "23"));
System.out.println(data16InBin("Bonjour", "12", "23", 500));
}
public static String at(String ats) {
String code = "7E" ;
code += "00" ;
int n = ats.length()-2;
String [] s = new String [n];
String szs = Integer.toHexString(4+(n/2));
if (szs.length()==1) szs = "0"+szs;
code += szs ;
code += "09" ;
code += "00" ;
int v1 = ats.charAt(0);
int v2 = ats.charAt(1);
code += Integer.toHexString(v1) ;
code += Integer.toHexString(v2) ;
int x = 0x09 + v1 + v2;
for (int i=0; i<(n/2); i++) {
s[i] = ats.substring(i+2, i+4);
code += s[i] ;
x = x + Integer.parseInt(s[i],16);
}
String ss = Integer.toHexString(x);
ss = ss.substring(ss.length()-2, ss.length());
x = Integer.parseInt(ss,16);
ss = Integer.toHexString(255-x);
code += ss ;
return code;
}
public static String data16InBin(String data, String dl, String dh, int n) {
String s = byteToBinaryStreem(data16(data, dl, dh));
int diff = n - s.length();
for (int j=0; j<diff; j++) {
s = s + "0";
}
return s;
}
public static String data16(String data, String dl, String dh) {
if(dl.length()==1) dl = "0"+dl;
if(dh.length()==1) dh = "0"+dh;
String code = "";
code += "7E" ;
code += "00" ;
int n = data.length()+5;
String szs = Integer.toHexString(n);
if (szs.length()==1) szs = "0"+szs;
code += szs ;
code += "01" ;
code += "00" ;
code += dl ;
code += dh ;
code += "00" ;
int x = 0x01 + Integer.parseInt(dl,16) + Integer.parseInt(dh,16);
String s ="";
for (int i=0; i<data.length(); i++) {
s = Integer.toHexString(data.charAt(i));
if(s.length()==1) s="0"+s;
code += s ;
x = x + Integer.parseInt(s,16);
}
String ss = Integer.toHexString(x);
ss = ss.substring(ss.length()-2, ss.length());
x = Integer.parseInt(ss,16);
ss = Integer.toHexString(255-x);
code += ss ;
return code.toUpperCase();
}
public static String data64(String data, String dl, String dh) {
if(dl.length()==1) dl = "0"+dl;
if(dh.length()==1) dh = "0"+dh;
String code = "";
code += "7E" ;
code += "00" ;
int n = data.length()+5;
String szs = Integer.toHexString(n);
if (szs.length()==1) szs = "0"+szs;
code += szs ;
code += "01" ;
code += "00" ;
code += dl ;
code += dh ;
code += "00" ;
int x = 0x01 + Integer.parseInt(dl,16) + Integer.parseInt(dh,16);
String s ="";
for (int i=0; i<data.length(); i++) {
s = Integer.toHexString(data.charAt(i));
if(s.length()==1) s="0"+s;
code += s ;
x = x + Integer.parseInt(s,16);
}
String ss = Integer.toHexString(x);
ss = ss.substring(ss.length()-2, ss.length());
x = Integer.parseInt(ss,16);
ss = Integer.toHexString(255-x);
code += ss ;
return code.toUpperCase();
}
public static String ack(String data, String dl, String dh) {
if(dl.length()==1) dl = "0"+dl;
if(dh.length()==1) dh = "0"+dh;
String code = "";
code += "7E" ;
code += "00" ;
int n = data.length()+5;
String szs = Integer.toHexString(n);
if (szs.length()==1) szs = "0"+szs;
code += szs ;
code += "01" ;
code += "00" ;
code += dl ;
code += dh ;
code += "00" ;
int x = 0x01 + Integer.parseInt(dl,16) + Integer.parseInt(dh,16);
String s ="";
for (int i=0; i<data.length(); i++) {
s = Integer.toHexString(data.charAt(i));
if(s.length()==1) s="0"+s;
code += s ;
x = x + Integer.parseInt(s,16);
}
String ss = Integer.toHexString(x);
ss = ss.substring(ss.length()-2, ss.length());
x = Integer.parseInt(ss,16);
ss = Integer.toHexString(255-x);
code += ss ;
return code.toUpperCase();
}
public static String byteToBinaryStreem(String byteStreem) {
String result = "" ;
String r = "";
//Integer.Integer.parseInt("AA0F245C", 16);
for(int i=0; i<byteStreem.length(); i++) {
r = Integer.toBinaryString(Integer.parseInt(""+byteStreem.charAt(i),16));
int n = 4-r.length();
for (int j=0; j<n; j++) {
r = "0" + r ;
}
result += r;
}
return result;
}
public static String ackInBin(String data, String dl, String dh, int n) {
return data16InBin(data, dl, dh, n);
}
}