Subversion Repositories FlightCtrl

Rev

Rev 403 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
303 ligi 1
/**************************************************
2
 *                                            
3
 * class to handle Editing of MK Params
4
 *                                            
5
 * Author:        Marcus -LiGi- Bueschleb      
403 ligi 6
 *
7
 * see README for further Infos
8
 *
303 ligi 9
 *************************************************/
10
 
11
import javax.microedition.lcdui.*;
12
 
13
 
14
public class MKParamsEditor
15
 
16
{
17
 
18
    public final static int TAB_COUNT=9;
19
 
20
    public final static int PARAMTYPE_BOOLEAN=0;
21
    public final static int PARAMTYPE_BYTE=1;
22
 
23
 
24
 
25
    public String[] tab_names={"Configuration","Channels","Stick","Altitude","Gyro","Looping","Camera","Other","User"};
325 ligi 26
    public int[] tab_entrys_count={6,8,3,6,4,6,6,6,4};
303 ligi 27
 
28
    public String[][] tab_entrys={{"Altitude Contol","Switch for setpoint","Heading Hold","Compass","Orientation fixed","GPS"}
29
                                  ,
30
                                  {"Accelerate","Gier","Nick","Roll","POTI1","POTI2","POTI3","POTI4"},
31
                                  {"Nick/Roll P-Rate","Nick/Roll D-Rate","Gier P-Rate"},
32
                                  {"SetPoint","Min. Accelerate","Altitude P","Barometric D","Z-ACC effect ","Gain"},
33
                                  {"Gyro P-Rate","Gyro I-Rate","ACC Gyro Factor","Main I"},
34
                                  {"Up","Down","Left","Right","Gas Limit","Response threshold"},
35
                                  {"Servo Ctrl","Nick compensation","Invert direction","Servo min","Servo max","Servo refresh Rate"},
36
 
314 ligi 37
                                  {"Min Gas","Max Gas","Compass effect","voltage warning","distress gas time", "distress gas"},
303 ligi 38
                                  {"Param1","Param2","Param3","Param4"}
39
                                  //              {"","","","","",""},
40
 
41
 
42
 
43
};
44
 
45
    public int[][] tab_entry_types={
46
 
47
        { PARAMTYPE_BOOLEAN ,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN },
48
        {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE},
49
        {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE},
50
        {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE},
51
        {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE},
52
        {PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BOOLEAN,PARAMTYPE_BYTE,PARAMTYPE_BYTE},
53
        {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE},
54
        {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE},
55
        {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE}
56
 
57
};
58
 
59
 
60
    public int[][][] tab_entry_src={
61
 
62
        { {8,0} ,{8,1},{8,2},{8,3},{8,4},{8,5} },
63
        { {2,0} ,{3,0},{0,0},{1,0},{4,0},{5,0},{6,0},{7,0} },
64
        { {15,0} ,{16,0},{17,0} },
65
        { {0,0} ,{9,0},{12,0},{10,0},{14,0},{13,0} }, //!
66
        { {22,0} ,{23,0},{20,0},{28,0} },
67
        { {40,0} ,{40,1},{40,2},{40,3},{38,0},{39,0} },
68
        { {33,0} ,{34,0},{40,2}/*!*/,{35,0},{36,0},{37,0} },
314 ligi 69
        { {18,0} ,{19,0},{21,0},{24,0},{26,0},{25,0} },
303 ligi 70
        { {29,0} ,{30,0},{31,0},{32,0} }
71
    };
72
 
73
    private int act_tab=0;
74
    private int act_y=0;
75
    private int act_lcd_lines=10;
76
 
77
    MKMiniCanvas canvas;
78
 
79
    public String[] lcd_lines;
80
 
81
 
82
    public MKParamsEditor(MKMiniCanvas _canvas)
83
    {
84
 
85
        canvas=_canvas;
86
        lcd_lines=new String[40];
87
        refresh_lcd();
88
    }
89
 
90
 
91
    public void paint ( Graphics g)
92
    {
93
        refresh_lcd();
94
        //      for ( int i=0;i<act_lcd_lines;i++)
95
        // canvas.draw_lcd_line(g,lcd_lines[i] ,0,i*canvas.lcd_char_height);
96
        canvas.paint_lcd(g,false);
97
 
98
    }
99
 
100
 
101
    public void refresh_lcd()
102
    {
103
        if (canvas.mk!=null)
104
            {
105
        act_lcd_lines=tab_entrys_count[act_tab]*2+1;
106
        for ( int i=0;i<act_lcd_lines;i++)
107
            lcd_lines[i]="";
108
 
109
        lcd_lines[0]=(act_tab==0?"  ":"< ") + tab_names[act_tab] + (act_tab==(TAB_COUNT-1)?"  ":" >");
110
 
111
        for (int i=0;i<tab_entrys_count[act_tab];i++)
112
            {
113
                lcd_lines[1+2*i]=tab_entrys[act_tab][i];
114
                if (tab_entry_types[act_tab][i]== PARAMTYPE_BOOLEAN)
390 ligi 115
                    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" ) ;
303 ligi 116
                if (tab_entry_types[act_tab][i]== PARAMTYPE_BYTE)
411 ligi 117
                    {
118
                        lcd_lines[2+2*i]=""+canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][i][0]);
119
                        if ((canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][i][0])>250)&&(canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][i][0])<256))
120
     lcd_lines[2+2*i]+="[Poti"+(canvas.mk.params.get_field_from_act(tab_entry_src[act_tab][i][0])-250) +"]";                                                                                               
121
                    }
122
 
303 ligi 123
            }
124
 
125
        for (int i=0;i<act_lcd_lines;i++)
126
            {
127
                lcd_lines[i]=(act_y==i?"#":" ")+lcd_lines[i];
128
            }
129
 
130
        for ( int i=0;i<act_lcd_lines;i++)
131
            while(lcd_lines[i].length()<20)
132
                {
133
                    lcd_lines[i]+=" ";
134
                }
135
 
136
        canvas.lcd_lines=new String[act_lcd_lines];
137
        for(int i=0;i<act_lcd_lines;i++)
138
            canvas.lcd_lines[i]=lcd_lines[i];
139
 
140
            }
141
        else
142
            {
143
                canvas.lcd_lines=new String[1];
144
                canvas.lcd_lines[0]="reading params";
145
            }
146
 
147
    }
148
 
390 ligi 149
 
150
    public final static int KEYCODE_CLEAR=-8;
151
 
411 ligi 152
    public boolean editing_number=false;
153
 
303 ligi 154
    public void keypress (int keyCode,int action)
155
    {
156
        if (act_y==0) switch (action)
157
            {
158
            case Canvas.RIGHT:
159
                if (act_tab<TAB_COUNT-1) act_tab++;
160
                break;
161
 
162
            case Canvas.LEFT:
163
                if (act_tab!=0) act_tab--;
164
                break;
165
            }
166
        else
167
            {
390 ligi 168
                if(tab_entry_types[act_tab][act_y/2-1]==PARAMTYPE_BYTE)
303 ligi 169
                    {
390 ligi 170
                        if ((keyCode >= Canvas.KEY_NUM0) && (keyCode <= Canvas.KEY_NUM9))
171
                            {
411 ligi 172
                                if((editing_number)&&( 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))
390 ligi 173
                                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));
411 ligi 174
                                else
175
                                canvas.mk.params.set_field_from_act(tab_entry_src[act_tab][act_y/2-1][0] , (keyCode - Canvas.KEY_NUM0));
176
                                editing_number=true;
390 ligi 177
                                return;
178
                            }
179
                        else
180
                            if ( keyCode==KEYCODE_CLEAR)
181
                                canvas.mk.params.set_field_from_act(tab_entry_src[act_tab][act_y/2-1][0],0);
303 ligi 182
                    }
411 ligi 183
                editing_number=false;
390 ligi 184
 
185
                    switch (action)
186
                        {
187
 
188
                        case Canvas.RIGHT:
189
                            switch(tab_entry_types[act_tab][act_y/2-1])
190
                                {
191
                                case PARAMTYPE_BOOLEAN:
192
 
193
                                    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]);
194
                                    break;
195
                                case PARAMTYPE_BYTE:
411 ligi 196
 
390 ligi 197
                                    canvas.mk.params.field_from_act_add(tab_entry_src[act_tab][act_y/2-1][0],1);
198
                                    break;
199
                                }
200
                            break;
201
 
202
                        case Canvas.LEFT:
203
                            switch(tab_entry_types[act_tab][act_y/2-1])
204
                                {
205
                                case PARAMTYPE_BOOLEAN:
303 ligi 206
 
390 ligi 207
                                    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]);
208
 
209
                                    break;
210
                                case PARAMTYPE_BYTE:
411 ligi 211
 
212
                                    canvas.mk.params.field_from_act_add(tab_entry_src[act_tab][act_y/2-1][0],-1);
390 ligi 213
                                    break;
214
                                }
215
 
216
 
217
                            break;
218
                        }
219
 
303 ligi 220
            }
390 ligi 221
 
303 ligi 222
        switch (action)
223
            {
224
 
225
            case Canvas.DOWN:
226
                if (act_y<(act_lcd_lines-2)) act_y+=2;
314 ligi 227
                else act_y=0;
303 ligi 228
                break;
229
 
230
            case Canvas.UP:
314 ligi 231
                if (act_y!=0) act_y-=2;
232
                else act_y=act_lcd_lines-1;
303 ligi 233
                break;
234
 
235
            }
236
 
237
        refresh_lcd();
238
 
239
 
240
    }
241
}
242