Subversion Repositories FlightCtrl

Rev

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