Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
92 ligi 1
/*******************************************
2
 *                                          
3
 * Handling of MK LCD                      
4
 *                                          
5
 * Author:        Marcus -LiGi- Bueschleb  
6
 * see README for further Infos
7
 *
8
 *
9
 *******************************************/
10
package org.ligi;
11
 
12
public class MKLCD
13
   implements Runnable
14
{
15
 
16
    boolean buffer=false;
17
 
18
    MKCommunicator mk=null;
19
 
20
    //    public String[] LCD_str;
21
 
22
    private String[][] lcd_buf;
23
    private final static int MAX_LCD_PAGES=20;
24
    int act_key=0;
25
    int act_mk_page=0;
26
    int act_user_page=0;
27
    boolean initial_run=true;
28
 
29
    int pages=0;
30
 
31
    int pages_read=0;
32
 
33
    byte init_state=0;
34
 
35
    public String[] get_act_page()
36
    { return lcd_buf[act_user_page]; }
37
 
38
    public MKLCD(MKCommunicator _mk)
39
    {
40
        lcd_buf=new String[MAX_LCD_PAGES][4];
41
 
42
        for (int p=0;p<MAX_LCD_PAGES;p++)
43
            {
44
                lcd_buf[p][0]="buffering Page      ";
45
                lcd_buf[p][1]="please stay patient ";
46
                lcd_buf[p][2]="                    ";
47
                lcd_buf[p][3]="        ;-)         ";
48
            }
49
 
50
        mk=_mk;
51
        new Thread( this ).start(); // fire up main Thread 
52
    }
53
 
54
    public void run()
55
    {
56
        while(true)
57
            {
58
                try {
59
                    if (mk.connected)
60
                        trigger_LCD();
61
                     Thread.sleep(100);
62
                    }
63
                catch (Exception e)  {   }
64
            }
65
    }
66
 
67
    public void set_page(int page)
68
    {
69
        act_user_page=page;
70
    }
71
 
72
    public void handle_lcd_data(int[] data,int row)
73
    {
74
        if(buffer)
75
            {
76
                if (row==0) // firs row indicates page
77
                    {
78
                        pages_read++;
79
                        act_mk_page=data[18]-48;
80
                        if (data[17]!=91) // [
81
                            act_mk_page+=10*(data[17]-48);
82
                        if (act_mk_page>pages)
83
                            pages=act_mk_page;
84
                        if (( init_state==1)&&(act_mk_page==0))
85
                            { init_state=2; act_key=1; }
86
                        else if ((init_state==2)&&(act_mk_page!=0))
87
                            { init_state=3; act_key=2; }
88
 
89
 
90
                    }
91
 
92
                lcd_buf[act_mk_page][row]="";
93
                for(int foo=0;foo<20;foo++)
94
                    lcd_buf[act_mk_page][row]+=(char)data[foo];
95
 
96
                if (init_state==-1) // init  over
97
                    {
98
                        if (act_mk_page<act_user_page)
99
                            act_key=2;
100
 
101
                        if (act_mk_page>act_user_page)
102
                            act_key=1;
103
 
104
                    }
105
 
106
                else if (init_state==3)
107
                    {
108
                        if (row==3)
109
                            {
110
                                if(act_mk_page==pages-1)
111
                                    init_state=-1;
112
                                else
113
                                    act_key=2;
114
                            }
115
                    }
116
 
117
            }
118
        else
119
            //unbuffered
120
            {
121
 
122
 
123
                String last_line=lcd_buf[act_mk_page][row];
124
 
125
                lcd_buf[act_mk_page][row]="";
126
                for(int foo=0;foo<20;foo++)
127
                    lcd_buf[act_mk_page][row]+=(char)data[foo];
128
 
129
                if ((row==0)&&(last_line!=lcd_buf[act_mk_page][row]))
130
                    act_key=0;
131
 
132
            }
133
    }
134
 
135
    boolean init=true;
136
    public void trigger_LCD()
137
    {
138
        if (mk.connected && mk.version.known)
139
            try {
140
                if (buffer)
141
                    {
142
                        if (init_state==0)
143
                            {
144
                                mk.trigger_LCD(3);
145
                                init_state++;
146
                            }
147
                        else
148
                            mk.trigger_LCD(act_key);
149
                        act_key=0;
150
                    }
151
                else
152
                    {
153
                        mk.trigger_LCD(act_key);
154
 
155
                    }
156
 
157
        }
158
        catch (Exception e)  {   }
159
    }
160
 
161
 
162
 
163
 
164
 
165
 
166
 
167
    public void LCD_NEXTPAGE()
168
    {
169
        if (buffer)
170
            {
171
                if (act_user_page!=pages)
172
                    act_user_page++;
173
                else
174
                    act_user_page=0;
175
            }
176
        else
177
            {
178
                act_key=2;
179
            }
180
    }
181
 
182
    public void LCD_PREVPAGE()
183
    {
184
 
185
        if (buffer)
186
            {
187
                if (act_user_page!=0)
188
                    act_user_page--;
189
                else
190
                    act_user_page=pages;
191
            }
192
        else
193
            {
194
                act_key=1;
195
            }
196
    }
197
 
198
}