Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 207 → Rev 208

/branches/ligi_j2me/src/MKCommunicator.java
37,8 → 37,9
public int version_major=-1;
public int version_minor=-1;
public int version_compatible=-1;
 
public MKLCD LCD;
 
public long connection_start_time=-1;
 
52,12 → 53,16
String p_msg="--";
public String msg="BT_INIT";
 
public int data_count=0;
public int debug_data_count=0;
public int version_data_count=0;
public int other_data_count=0;
public int lcd_data_count=0;
 
 
/****************** Section: public Methods ************************************************/
public MKCommunicator(String url) // Constructor with URL string e.g. "btspp://XXXXXXXXXXXX:1" - the X-Part is the MAC-Adress of the Bluetooth-Device connected to the Fligth-Control
{
 
debug_data=new MKDebugData();
mk_url=url; // remember URL for connecting / reconnecting later
 
76,6 → 81,7
connection_start_time=System.currentTimeMillis();
connected=true; // if we get here everything seems to be OK
get_version();
LCD= new MKLCD(this);
}
catch (Exception ex)
{
125,6 → 131,7
send_command(0,'v',new int[0]);
}
 
 
// send command to FC ( add crc and pack into pseudo Base64
public void send_command(int modul,char cmd,int[] params)
{
133,6 → 140,28
send_buff[1]=(char)modul;
send_buff[2]=cmd;
for(int param_pos=0;param_pos<(params.length/3 + (params.length%3==0?0:1)) ;param_pos++)
{
int a = (param_pos<params.length)?params[param_pos]:0;
int b = ((param_pos+1)<params.length)?params[param_pos+1]:0;
int c = ((param_pos+2)<params.length)?params[param_pos+2]:0;
 
send_buff[3+param_pos*4] = (char)((a >> 2)+'=' );
send_buff[3+param_pos*4+1] = (char)('=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)));
send_buff[3+param_pos*4+2] = (char)('=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)));
send_buff[3+param_pos*4+3] = (char)('=' + ( c & 0x3f));
 
//send_buff[3+foo]='=';
}
 
/* for(int foo=0;foo<(params.length/3 + (params.length%3==0?0:1) )*4;foo++)
{
int a = (foo<params.length) params[foo];
int a = params[foo];
//send_buff[3+foo]='=';
}
*/
try
{
int tmp_crc=0;
165,10 → 194,9
case 'D': // debug Data
decoded_data=Decode64(data,3,50);
debug_data=new MKDebugData(decoded_data);
msg="Got Debug Data s:" + debug_data.sekunden + "zy:"+debug_data.zyklen + "ze:" + debug_data.zeit + connected + ">" + data_count;
for (int ff=0;ff<8;ff++)
msg+="\n d:" + (ff*2+1) + " " + debug_data.analog[ff*2] + " d2:" + (ff*2+2) + " " + debug_data.analog[ff*2+1] ;
 
debug_data_count++;
break;
case 'V': // Version Info
176,24 → 204,53
version_major=decoded_data[0];
version_minor=decoded_data[1];
version_compatible=decoded_data[2];
version_data_count++;
break;
case '0':
case '1':
case '2':
case '3':
LCD.handle_lcd_data(Decode64(data,3,20),data[2]-(int)'0');
lcd_data_count++;
// decoded_data=
 
// if ((data[2]-(int)'0')!=3)
// get_LCD();
break;
 
default:
other_data_count++;
break;
 
}
 
 
msg+=p_msg;
msg+="OK";
data_count++;
 
}
 
String o_msg="";
 
public boolean force_disconnect=false;
 
public void close_connections()
{
force_disconnect=true;
try{ reader.close(); }
catch (Exception inner_ex) { }
 
try{ writer.close(); }
catch (Exception inner_ex) { }
try{ connection.close(); }
catch (Exception inner_ex) { }
connected=false;
}
 
// Thread to recieve data from Connection
public void run()
{
205,7 → 262,7
{
if (!connected)
{
connect();
if (!force_disconnect) connect();
}
else
try{
228,9 → 285,9
{
msg="Problem reading from MK";
// close the connection
try{ reader.close(); connection.close(); }
catch (Exception inner_ex) { }
connected=false;
close_connections();
 
 
}
// sleep a bit to get someting more done