Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 91 → Rev 92

/DUBwise/src/Android/src/org/ligi/MKLCD.java
0,0 → 1,198
/*******************************************
*
* Handling of MK LCD
*
* Author: Marcus -LiGi- Bueschleb
* see README for further Infos
*
*
*******************************************/
package org.ligi;
 
public class MKLCD
implements Runnable
{
 
boolean buffer=false;
 
MKCommunicator mk=null;
 
// public String[] LCD_str;
 
private String[][] lcd_buf;
private final static int MAX_LCD_PAGES=20;
int act_key=0;
int act_mk_page=0;
int act_user_page=0;
boolean initial_run=true;
 
int pages=0;
 
int pages_read=0;
 
byte init_state=0;
 
public String[] get_act_page()
{ return lcd_buf[act_user_page]; }
 
public MKLCD(MKCommunicator _mk)
{
lcd_buf=new String[MAX_LCD_PAGES][4];
 
for (int p=0;p<MAX_LCD_PAGES;p++)
{
lcd_buf[p][0]="buffering Page ";
lcd_buf[p][1]="please stay patient ";
lcd_buf[p][2]=" ";
lcd_buf[p][3]=" ;-) ";
}
 
mk=_mk;
new Thread( this ).start(); // fire up main Thread
}
 
public void run()
{
while(true)
{
try {
if (mk.connected)
trigger_LCD();
Thread.sleep(100);
}
catch (Exception e) { }
}
}
 
public void set_page(int page)
{
act_user_page=page;
}
 
public void handle_lcd_data(int[] data,int row)
{
if(buffer)
{
if (row==0) // firs row indicates page
{
pages_read++;
act_mk_page=data[18]-48;
if (data[17]!=91) // [
act_mk_page+=10*(data[17]-48);
if (act_mk_page>pages)
pages=act_mk_page;
if (( init_state==1)&&(act_mk_page==0))
{ init_state=2; act_key=1; }
else if ((init_state==2)&&(act_mk_page!=0))
{ init_state=3; act_key=2; }
 
 
}
lcd_buf[act_mk_page][row]="";
for(int foo=0;foo<20;foo++)
lcd_buf[act_mk_page][row]+=(char)data[foo];
 
if (init_state==-1) // init over
{
if (act_mk_page<act_user_page)
act_key=2;
if (act_mk_page>act_user_page)
act_key=1;
 
}
else if (init_state==3)
{
if (row==3)
{
if(act_mk_page==pages-1)
init_state=-1;
else
act_key=2;
}
}
}
else
//unbuffered
{
 
 
String last_line=lcd_buf[act_mk_page][row];
 
lcd_buf[act_mk_page][row]="";
for(int foo=0;foo<20;foo++)
lcd_buf[act_mk_page][row]+=(char)data[foo];
 
if ((row==0)&&(last_line!=lcd_buf[act_mk_page][row]))
act_key=0;
 
}
}
 
boolean init=true;
public void trigger_LCD()
{
if (mk.connected && mk.version.known)
try {
if (buffer)
{
if (init_state==0)
{
mk.trigger_LCD(3);
init_state++;
}
else
mk.trigger_LCD(act_key);
act_key=0;
}
else
{
mk.trigger_LCD(act_key);
 
}
 
}
catch (Exception e) { }
}
 
 
 
 
 
 
public void LCD_NEXTPAGE()
{
if (buffer)
{
if (act_user_page!=pages)
act_user_page++;
else
act_user_page=0;
}
else
{
act_key=2;
}
}
 
public void LCD_PREVPAGE()
{
 
if (buffer)
{
if (act_user_page!=0)
act_user_page--;
else
act_user_page=pages;
}
else
{
act_key=1;
}
}
}