Subversion Repositories FlightCtrl

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
181 ligi 1
/*********************************************************************************************************************************
2
 *                                                                                                                                *
3
 * minimal canvas to test Abstraction layer on various Phones                                                                     *
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.*;
208 ligi 13
import javax.microedition.rms.*;
181 ligi 14
 
15
public class MKMiniCanvas
16
        extends Canvas
17
        implements Runnable
18
{
19
 
20
 
208 ligi 21
    private BTSearcher bt_scanner;
22
    private MKCommunicator mk=null;
23
    private MKStatistics mk_stat=null;
24
    private String err="";
25
    private MKMiniMidlet root;
181 ligi 26
 
208 ligi 27
    public MKMiniCanvas(MKMiniMidlet _root)
28
        {
29
            root=_root;
181 ligi 30
 
208 ligi 31
            // mk = new MKCommunicator("btspp://000BCE016B5B:1");
32
            //connect_mk("btspp://000BCE016B4F:1");
181 ligi 33
 
208 ligi 34
 
35
                try
36
                    {
37
                        RecordStore recStore = RecordStore.openRecordStore("bturl", true );
181 ligi 38
 
208 ligi 39
                        if (recStore.getNumRecords()==1)
40
                            {
41
                                byte[] recData = new byte[recStore.getRecordSize(1)];
42
                                int len = recStore.getRecord(1, recData, 0);
43
                                rescan=false;
44
                                connect_mk(new String(recData, 0, len));
45
                            }
46
                    }
47
                catch (Exception e)
48
                    {
49
                        err+=e.toString();
50
                    }
181 ligi 51
 
208 ligi 52
            if (mk==null) bt_scanner = new BTSearcher();
53
 
54
            new Thread(this).start();
181 ligi 55
 
56
        }
57
 
208 ligi 58
    boolean quit=false;
59
    boolean rescan=true;
181 ligi 60
 
61
 
62
    /********************************************************** Thread ***********************************************************/
63
    // ticking runnable Section
64
    public void run()
65
    {
66
 
67
        while(true)
68
            {
69
                long loopStartTime = System.currentTimeMillis();
70
                long sleeptime=0;
71
                // ticked thing
72
 
208 ligi 73
                if (quit)
74
                    {
75
                        try
76
                            {
77
                                RecordStore recStore = RecordStore.openRecordStore("bturl", true );
78
 
79
                                if (recStore.getNumRecords()==1)
80
                                    recStore.deleteRecord(1);
81
                                byte[] rec = mk.mk_url.getBytes();
82
                                recStore.addRecord(rec, 0, rec.length);
83
 
84
                            }
85
                        catch (Exception e)
86
                            {
87
                                err+=e.toString();
88
                            }
89
 
90
                        root.quit();
91
                    }
92
                if (rescan)
93
                    {
94
                    if (mk!=null) mk.close_connections();
95
                    mk=null;
96
                    bt_scanner.search_again();
97
                    }
98
 
99
                rescan=false;
100
 
181 ligi 101
                com.nokia.mid.ui.DeviceControl.setLights(0,100);
102
                //bt.tick();
103
                // every state has sth to do in tick section
104
 
105
 
106
//                System.gc();
107
                repaint();
108
                serviceRepaints();
109
 
110
 
111
                sleeptime=1000/ 15 - (int) (System.currentTimeMillis()- loopStartTime);
112
 
113
 
114
                if (sleeptime<0)
115
                        sleeptime=100; // everyone has fi sleep
116
 
117
                try { Thread.sleep(sleeptime); }
118
                catch (Exception e)
119
                    {
120
                         err="Problem Sleeping ";
121
                    }
122
 
123
            }
124
    }
125
 
126
 
127
 
128
 
129
 
130
    // drawing section
131
    public void paint(Graphics g) {
208 ligi 132
 
133
        int spacer=(g.getFont().getHeight());
181 ligi 134
        g.setColor(0xFFFFFF);
135
        g.fillRect(0,0,this.getWidth(),this.getHeight());
136
        g.setColor(0x000000);
137
 
138
        if (mk==null)
139
            {
140
        if (bt_scanner.searching)
141
            g.drawString("scanning for BT-Devices",0,0,Graphics.TOP | Graphics.LEFT);
142
        else
143
            {
144
            g.drawString("Press key 0-"+(bt_scanner.remote_device_count-1) + " to continue" ,0,0,Graphics.TOP | Graphics.LEFT);
145
            for (int i=0;i<bt_scanner.remote_device_count;i++)
208 ligi 146
            g.drawString("#"+i+">" + bt_scanner.remote_device_name[i]+"("+bt_scanner.remote_device_mac[i]+")",0,spacer+spacer*i,Graphics.TOP | Graphics.LEFT);
181 ligi 147
 
148
            }
149
            }
150
        else // MK is connected
151
            {
152
                int y_off=0;
208 ligi 153
 
210 ligi 154
                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);
208 ligi 155
 
181 ligi 156
                y_off+=spacer;
208 ligi 157
                for ( int foo=0;foo<4;foo++)
158
                    {
159
                        g.drawString(mk.LCD.LCD_str[foo],0,y_off,Graphics.TOP | Graphics.LEFT);
160
                        y_off+=spacer;
161
                    }
181 ligi 162
                try {
163
                g.drawString("motor1:"+mk.debug_data.analog[12],0,y_off,Graphics.TOP | Graphics.LEFT);
164
                y_off+=spacer;
165
                g.drawString("motor2:"+mk.debug_data.analog[13],0,y_off,Graphics.TOP | Graphics.LEFT);
166
                y_off+=spacer;
167
                g.drawString("motor3:"+mk.debug_data.analog[14],0,y_off,Graphics.TOP | Graphics.LEFT);
168
                y_off+=spacer;
169
                g.drawString("motor4:"+mk.debug_data.analog[15],0,y_off,Graphics.TOP | Graphics.LEFT);
170
                y_off+=spacer;
171
 
172
                }
173
                catch (Exception e) { }
174
                if (mk.connected)
175
                    {
176
                        g.drawString("time conn:" +((System.currentTimeMillis()- mk.connection_start_time)/1000)+"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
177
                        y_off+=spacer;
178
                        g.drawString("time motor>15:" +(mk_stat.motor_on_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
208 ligi 179
                        y_off+=spacer;
180
                        g.drawString("time motor=15:" +(mk_stat.motor_stand_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
181 ligi 181
                    }
182
 
183
            }
184
 
185
    }
186
 
208 ligi 187
    private void connect_mk(String url)
188
    {
189
        mk = new MKCommunicator(url);
190
        mk_stat= new MKStatistics(mk);
191
    }
192
 
181 ligi 193
    /*********************************************** input Section **********************************************/
194
    // keys
195
    public void keyPressed(int keyCode)
196
    {
197
 
198
        if ((mk==null)&&(keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM0+bt_scanner.remote_device_count))
208 ligi 199
            connect_mk("btspp://"+bt_scanner.remote_device_mac[keyCode-this.KEY_NUM0] + ":1");
200
        else
201
            {
202
                switch (keyCode)
203
                    {
204
                    case KEY_STAR:
205
                        mk.other_data_count=23;
206
                        quit=true;
207
                        break;
208
 
209
                    case KEY_POUND:
210
                        rescan=true;
211
                        break;
212
                    }
213
                switch (getGameAction (keyCode))
214
                    {
215
                    case UP:
216
                        mk.LCD.LCD_PREVPAGE();
217
                        break;
218
 
219
                    case DOWN:
220
                        mk.LCD.LCD_NEXTPAGE();
221
                        break;
222
                    }
223
            }
224
 
225
 
226
        return;
181 ligi 227
    }
228
 
229
 
230
 
231
 
232
 
233
 
234
 
235
 
236
}
237
 
238