0,0 → 1,234 |
/************************************************** |
* |
* class to handle Editing of MK Params |
* |
* Author: Marcus -LiGi- Bueschleb |
* Project-Start: 9/2007 |
* Mailto: ligi@smart4mobile.de |
* Licence: Creative Commons / Non Commercial |
* Big Up: Holger&Ingo |
*************************************************/ |
|
import javax.microedition.lcdui.*; |
|
|
public class MKParamsEditor |
|
{ |
|
public final static int TAB_COUNT=9; |
|
public final static int PARAMTYPE_BOOLEAN=0; |
public final static int PARAMTYPE_BYTE=1; |
|
|
|
public String[] tab_names={"Configuration","Channels","Stick","Altitude","Gyro","Looping","Camera","Other","User"}; |
public int[] tab_entrys_count={6,8,3,6,4,6,6,6,4}; |
|
public String[][] tab_entrys={{"Altitude Contol","Switch for setpoint","Heading Hold","Compass","Orientation fixed","GPS"} |
, |
{"Accelerate","Gier","Nick","Roll","POTI1","POTI2","POTI3","POTI4"}, |
{"Nick/Roll P-Rate","Nick/Roll D-Rate","Gier P-Rate"}, |
{"SetPoint","Min. Accelerate","Altitude P","Barometric D","Z-ACC effect ","Gain"}, |
{"Gyro P-Rate","Gyro I-Rate","ACC Gyro Factor","Main I"}, |
{"Up","Down","Left","Right","Gas Limit","Response threshold"}, |
{"Servo Ctrl","Nick compensation","Invert direction","Servo min","Servo max","Servo refresh Rate"}, |
|
{"Min Gas","Max Gas","Compass effect","voltage warning","distress gas time", "distress gas"}, |
{"Param1","Param2","Param3","Param4"} |
// {"","","","","",""}, |
|
|
|
}; |
|
public int[][] tab_entry_types={ |
|
{ PARAMTYPE_BOOLEAN ,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN }, |
{PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE}, |
{PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE}, |
{PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE}, |
{PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE}, |
{PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BYTE,PARAMTYPE_BYTE}, |
{PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE}, |
{PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE}, |
{PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE} |
|
}; |
|
|
public int[][][] tab_entry_src={ |
|
{ {8,0} ,{8,1},{8,2},{8,3},{8,4},{8,5} }, |
{ {2,0} ,{3,0},{0,0},{1,0},{4,0},{5,0},{6,0},{7,0} }, |
{ {15,0} ,{16,0},{17,0} }, |
{ {0,0} ,{9,0},{12,0},{10,0},{14,0},{13,0} }, //! |
{ {22,0} ,{23,0},{20,0},{28,0} }, |
{ {40,0} ,{40,1},{40,2},{40,3},{38,0},{39,0} }, |
{ {33,0} ,{34,0},{40,2}/*!*/,{35,0},{36,0},{37,0} }, |
{ {18,0} ,{19,0},{21,0},{24,0},{26,0},{25,0} }, |
{ {29,0} ,{30,0},{31,0},{32,0} } |
}; |
|
private int act_tab=0; |
private int act_y=0; |
private int act_lcd_lines=10; |
|
MKMiniCanvas canvas; |
|
public String[] lcd_lines; |
|
|
public MKParamsEditor(MKMiniCanvas _canvas) |
{ |
|
canvas=_canvas; |
lcd_lines=new String[40]; |
refresh_lcd(); |
} |
|
|
public void paint ( Graphics g) |
{ |
refresh_lcd(); |
// for ( int i=0;i<act_lcd_lines;i++) |
// canvas.draw_lcd_line(g,lcd_lines[i] ,0,i*canvas.lcd_char_height); |
canvas.paint_lcd(g,false); |
|
} |
|
|
public void refresh_lcd() |
{ |
if (canvas.mk!=null) |
{ |
act_lcd_lines=tab_entrys_count[act_tab]*2+1; |
for ( int i=0;i<act_lcd_lines;i++) |
lcd_lines[i]=""; |
|
lcd_lines[0]=(act_tab==0?" ":"< ") + tab_names[act_tab] + (act_tab==(TAB_COUNT-1)?" ":" >"); |
|
for (int i=0;i<tab_entrys_count[act_tab];i++) |
{ |
lcd_lines[1+2*i]=tab_entrys[act_tab][i]; |
if (tab_entry_types[act_tab][i]== PARAMTYPE_BOOLEAN) |
lcd_lines[2+2*i]=(((canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][i][0])&(1<<tab_entry_src[act_tab][i][1]))==0)?"off":"on" ) ; |
if (tab_entry_types[act_tab][i]== PARAMTYPE_BYTE) |
lcd_lines[2+2*i]=""+canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][i][0]); |
|
} |
|
for (int i=0;i<act_lcd_lines;i++) |
{ |
lcd_lines[i]=(act_y==i?"#":" ")+lcd_lines[i]; |
} |
|
for ( int i=0;i<act_lcd_lines;i++) |
while(lcd_lines[i].length()<20) |
{ |
lcd_lines[i]+=" "; |
} |
|
canvas.lcd_lines=new String[act_lcd_lines]; |
for(int i=0;i<act_lcd_lines;i++) |
canvas.lcd_lines[i]=lcd_lines[i]; |
|
} |
else |
{ |
canvas.lcd_lines=new String[1]; |
canvas.lcd_lines[0]="reading params"; |
} |
|
} |
|
|
public final static int KEYCODE_CLEAR=-8; |
|
public void keypress (int keyCode,int action) |
{ |
if (act_y==0) switch (action) |
{ |
case Canvas.RIGHT: |
if (act_tab<TAB_COUNT-1) act_tab++; |
break; |
|
case Canvas.LEFT: |
if (act_tab!=0) act_tab--; |
break; |
} |
else |
{ |
if(tab_entry_types[act_tab][act_y/2-1]==PARAMTYPE_BYTE) |
{ |
if ((keyCode >= Canvas.KEY_NUM0) && (keyCode <= Canvas.KEY_NUM9)) |
{ |
if( Math.abs(canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][act_y/2-1][0]))*10+(keyCode - Canvas.KEY_NUM0)<1000) |
canvas.mk.params.set_field_from_act(tab_entry_src[act_tab][act_y/2-1][0] , Math.abs(canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][act_y/2-1][0]))*10+(keyCode - Canvas.KEY_NUM0)); |
return; |
} |
else |
if ( keyCode==KEYCODE_CLEAR) |
canvas.mk.params.set_field_from_act(tab_entry_src[act_tab][act_y/2-1][0],0); |
} |
|
|
switch (action) |
{ |
|
case Canvas.RIGHT: |
switch(tab_entry_types[act_tab][act_y/2-1]) |
{ |
case PARAMTYPE_BOOLEAN: |
|
canvas.mk.params.field_from_act_xor(tab_entry_src[act_tab][act_y/2-1][0],1<<tab_entry_src[act_tab][act_y/2-1][1]); |
break; |
case PARAMTYPE_BYTE: |
if (canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][act_y/2-1][0])<255) |
canvas.mk.params.field_from_act_add(tab_entry_src[act_tab][act_y/2-1][0],1); |
break; |
} |
break; |
|
case Canvas.LEFT: |
switch(tab_entry_types[act_tab][act_y/2-1]) |
{ |
case PARAMTYPE_BOOLEAN: |
|
canvas.mk.params.field_from_act_xor(tab_entry_src[act_tab][act_y/2-1][0],1<<tab_entry_src[act_tab][act_y/2-1][1]); |
|
break; |
case PARAMTYPE_BYTE: |
if (canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][act_y/2-1][0])>0) |
canvas.mk.params.field_from_act_add(tab_entry_src[act_tab][act_y/2-1][0],-1); |
break; |
} |
|
|
break; |
} |
|
} |
|
switch (action) |
{ |
|
case Canvas.DOWN: |
if (act_y<(act_lcd_lines-2)) act_y+=2; |
else act_y=0; |
break; |
|
case Canvas.UP: |
if (act_y!=0) act_y-=2; |
else act_y=act_lcd_lines-1; |
break; |
|
} |
|
refresh_lcd(); |
|
|
} |
} |
|