12,6 → 12,7 |
import javax.microedition.lcdui.*; |
import javax.microedition.rms.*; |
|
|
public class MKMiniCanvas |
extends Canvas |
implements Runnable |
24,10 → 25,57 |
private String err=""; |
private MKMiniMidlet root; |
|
private Image bg_img; |
private Image bt_img; |
private Image lcd_img; |
private Image load_img; |
|
|
public int[] nick_line_pos_data; |
public int[] roll_line_pos_data; |
|
public int[] accnick_line_pos_data; |
public int[] accroll_line_pos_data; |
|
|
public int frame_pos=0; |
|
int line_scaler=20; |
|
public int line_middle_y; |
|
public MKMiniCanvas(MKMiniMidlet _root) |
{ |
|
root=_root; |
|
try |
{ |
lcd_img=Image.createImage("/lcd.png"); |
bt_img=Image.createImage("/bt.png"); |
bg_img=Image.createImage("/bg.jpg"); |
load_img=Image.createImage("/load.png"); |
} |
catch (Exception e) |
{ |
err+=e.toString(); |
} |
|
|
nick_line_pos_data=new int[bg_img.getWidth()]; |
roll_line_pos_data=new int[bg_img.getWidth()]; |
accnick_line_pos_data=new int[bg_img.getWidth()]; |
accroll_line_pos_data=new int[bg_img.getWidth()]; |
|
for (int c=0;c<bg_img.getWidth();c++) |
{ |
nick_line_pos_data[c]=-1; |
roll_line_pos_data[c]=-1; |
accnick_line_pos_data[c]=-1; |
accroll_line_pos_data[c]=-1; |
} |
|
|
// mk = new MKCommunicator("btspp://000BCE016B5B:1"); |
//connect_mk("btspp://000BCE016B4F:1"); |
|
57,8 → 105,11 |
|
boolean quit=false; |
boolean rescan=true; |
int bg_offset=0; |
|
|
|
|
/********************************************************** Thread ***********************************************************/ |
// ticking runnable Section |
public void run() |
69,9 → 120,28 |
long loopStartTime = System.currentTimeMillis(); |
long sleeptime=0; |
// ticked thing |
|
frame_pos++; |
|
try { |
nick_line_pos_data[-bg_offset] = mk.debug_data.nick_int(); |
roll_line_pos_data[-bg_offset] = mk.debug_data.roll_int(); |
accnick_line_pos_data[-bg_offset] = mk.debug_data.accnick(); |
accroll_line_pos_data[-bg_offset] = mk.debug_data.accroll(); |
} |
catch (Exception e) |
{ |
err+=e.toString(); |
} |
|
|
|
|
if (quit) |
{ |
|
|
|
try |
{ |
RecordStore recStore = RecordStore.openRecordStore("bturl", true ); |
91,13 → 161,15 |
} |
if (rescan) |
{ |
if (mk!=null) mk.close_connections(); |
if (mk!=null) mk.close_connections(true); |
mk=null; |
bt_scanner.search_again(); |
} |
|
rescan=false; |
|
bg_offset--; |
if (bg_offset==-bg_img.getWidth()) |
bg_offset=0; |
com.nokia.mid.ui.DeviceControl.setLights(0,100); |
//bt.tick(); |
// every state has sth to do in tick section |
126,27 → 198,59 |
|
|
|
int local_max=-1; |
|
// drawing section |
public void paint(Graphics g) { |
|
|
if (mk!=null) |
{ |
line_middle_y=this.getHeight()/2; |
if (local_max<Math.abs(mk.debug_data.nick_int())) |
local_max=Math.abs(mk.debug_data.nick_int()); |
if (local_max<Math.abs(mk.debug_data.roll_int())) |
local_max=Math.abs(mk.debug_data.roll_int()); |
if (local_max<Math.abs(mk.debug_data.accnick())) |
local_max=Math.abs(mk.debug_data.accnick()); |
if (local_max<Math.abs(mk.debug_data.accroll())) |
local_max=Math.abs(mk.debug_data.accroll()); |
line_scaler= local_max/(this.getHeight()/2)+1; |
} |
int spacer=(g.getFont().getHeight()); |
g.setColor(0xFFFFFF); |
g.fillRect(0,0,this.getWidth(),this.getHeight()); |
g.drawImage(bg_img,bg_offset,0, g.TOP | g.LEFT); |
if (bg_offset+bg_img.getWidth()<this.getWidth()) |
g.drawImage(bg_img,bg_offset+bg_img.getWidth(),0, g.TOP | g.LEFT); |
|
g.setColor(0x000000); |
|
if (mk==null) |
{ |
if (bt_scanner.searching) |
g.drawString("scanning for BT-Devices",0,0,Graphics.TOP | Graphics.LEFT); |
else |
{ |
g.drawString("Press key 0-"+(bt_scanner.remote_device_count-1) + " to continue" ,0,0,Graphics.TOP | Graphics.LEFT); |
for (int i=0;i<bt_scanner.remote_device_count;i++) |
g.drawString("#"+i+">" + bt_scanner.remote_device_name[i]+"("+bt_scanner.remote_device_mac[i]+")",0,spacer+spacer*i,Graphics.TOP | Graphics.LEFT); |
|
|
|
if (bt_scanner.searching) |
{ |
|
|
g.drawString("scanning for BT-Devices",this.getWidth()/2,this.getHeight()/2+load_img.getHeight()/8,Graphics.TOP | Graphics.HCENTER); |
|
g.setClip(this.getWidth()/2-load_img.getWidth()/6,this.getHeight()/2-load_img.getHeight()/8, load_img.getWidth()/4,load_img.getHeight()/3);; |
g.drawImage(load_img,this.getWidth()/2-load_img.getWidth()/8 - ((((frame_pos/3)%12)%4)*(load_img.getWidth()/4)) ,this.getHeight()/2-load_img.getHeight()/6- ((((frame_pos/3)%12)/4)*(load_img.getHeight()/3)), g.TOP | g.LEFT); |
g.drawImage(bt_img,this.getWidth()/2 ,this.getHeight()/2 , g.HCENTER | g.VCENTER); |
} |
else |
{ |
g.drawString("Press key 0-"+(bt_scanner.remote_device_count-1) + " to continue" ,0,0,Graphics.TOP | Graphics.LEFT); |
for (int i=0;i<bt_scanner.remote_device_count;i++) |
g.drawString("#"+i+">" + bt_scanner.remote_device_name[i]+"("+bt_scanner.remote_device_mac[i]+")",0,spacer+spacer*i,Graphics.TOP | Graphics.LEFT); |
|
} |
|
|
|
|
} |
} |
else // MK is connected |
{ |
int y_off=0; |
154,23 → 258,14 |
g.drawString(mk.version.str+"(d:"+mk.debug_data_count+ " l:" + mk.lcd_data_count+ " v:" + mk.version_data_count+" o:"+mk.other_data_count+")",0,y_off,Graphics.TOP | Graphics.LEFT); |
|
y_off+=spacer; |
for ( int foo=0;foo<4;foo++) |
{ |
g.drawString(mk.LCD.LCD_str[foo],0,y_off,Graphics.TOP | Graphics.LEFT); |
y_off+=spacer; |
} |
try { |
g.drawString("motor1:"+mk.debug_data.analog[12],0,y_off,Graphics.TOP | Graphics.LEFT); |
|
g.drawString("n:"+mk.debug_data.nick_int() + " r:"+mk.debug_data.roll_int() + " an:"+mk.debug_data.accnick() + " ar:"+mk.debug_data.accroll() ,0,y_off,Graphics.TOP | Graphics.LEFT); |
y_off+=spacer; |
g.drawString("motor2:"+mk.debug_data.analog[13],0,y_off,Graphics.TOP | Graphics.LEFT); |
|
|
g.drawString("m1:"+mk.debug_data.motor_val(0) + " m2:"+mk.debug_data.motor_val(1)+" m3:"+mk.debug_data.motor_val(2) + " m4:"+mk.debug_data.motor_val(3) ,0,y_off,Graphics.TOP | Graphics.LEFT); |
y_off+=spacer; |
g.drawString("motor3:"+mk.debug_data.analog[14],0,y_off,Graphics.TOP | Graphics.LEFT); |
y_off+=spacer; |
g.drawString("motor4:"+mk.debug_data.analog[15],0,y_off,Graphics.TOP | Graphics.LEFT); |
y_off+=spacer; |
|
} |
catch (Exception e) { } |
|
if (mk.connected) |
{ |
g.drawString("time conn:" +((System.currentTimeMillis()- mk.connection_start_time)/1000)+"s" ,0,y_off,Graphics.TOP | Graphics.LEFT); |
180,8 → 275,53 |
g.drawString("time motor=15:" +(mk_stat.motor_stand_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT); |
} |
|
|
y_off=this.getHeight()-4*19; |
|
for ( int foo=0;foo<4;foo++) |
{ |
|
for (int x=0;x<20;x++) |
{ |
g.setClip(12*x,y_off,12,19); |
g.drawImage(lcd_img,12*x-(mk.LCD.LCD_str[foo].charAt(x)-' ')*(lcd_img.getWidth()/95),y_off, g.TOP | g.LEFT); |
|
} |
y_off+=19; |
|
|
|
} |
|
g.setClip(0,0,this.getWidth(),this.getHeight()); |
|
|
|
|
} |
// draw lines |
|
for ( int x=0;x<this.getWidth();x++) |
|
{ |
|
int p= (((-bg_offset+x-this.getWidth()-5))); |
if (p<1) |
p+=bg_img.getWidth(); |
p%=(bg_img.getWidth()-1); |
|
g.setColor(0x156315); |
draw_graph_part(g,x,nick_line_pos_data[p]/line_scaler,nick_line_pos_data[p+1]/line_scaler); |
g.setColor(0xCC1315); |
draw_graph_part(g,x,roll_line_pos_data[p]/line_scaler,roll_line_pos_data[p+1]/line_scaler); |
g.setColor(0xf8ef02); |
draw_graph_part(g,x,accnick_line_pos_data[p]/line_scaler,accnick_line_pos_data[p+1]/line_scaler); |
g.setColor(0x19194d); |
draw_graph_part(g,x,accroll_line_pos_data[p]/line_scaler,accroll_line_pos_data[p+1]/line_scaler); |
|
|
|
} |
} |
|
private void connect_mk(String url) |
188,10 → 328,22 |
{ |
mk = new MKCommunicator(url); |
mk_stat= new MKStatistics(mk); |
|
} |
|
public void draw_graph_part(Graphics g,int x,int y1,int y2) |
{ |
g.fillRect(x,line_middle_y-y1,2,2 ); |
if (y1>y2) |
g.fillRect(x,line_middle_y-y1,2,y1-y2); |
else |
g.fillRect(x,line_middle_y-y2,2,y2-y1); |
} |
|
/*********************************************** input Section **********************************************/ |
// keys |
public boolean fullscreen=false; |
|
public void keyPressed(int keyCode) |
{ |
|
201,6 → 353,7 |
{ |
switch (keyCode) |
{ |
|
case KEY_STAR: |
mk.other_data_count=23; |
quit=true; |
207,7 → 360,9 |
break; |
|
case KEY_POUND: |
rescan=true; |
//rescan=true; |
fullscreen=!fullscreen; |
setFullScreenMode(fullscreen); |
break; |
} |
switch (getGameAction (keyCode)) |