version 1.4, 2007/04/22 22:48:43
|
version 1.9, 2007/06/16 20:47:00
|
Line 37
|
Line 37
|
int terminal_prepped = 0; |
int terminal_prepped = 0; |
int needs_update = 0; |
int needs_update = 0; |
int bt_mode = 0; |
int bt_mode = 0; |
|
int bt_state = 0; |
|
|
void |
void |
show_splash(U32 milliseconds) |
show_splash(U32 milliseconds) |
{ |
{ |
display_clear(0); |
display_clear(0); |
display_goto_xy(6, 6); |
display_goto_xy(4, 6); |
display_string("Gforth"); |
display_string("Gforth NXT"); |
display_update(); |
display_update(); |
|
|
systick_wait_ms(milliseconds); |
systick_wait_ms(milliseconds); |
Line 62 void bt_send_cmd(char * cmd)
|
Line 63 void bt_send_cmd(char * cmd)
|
cmd[0] = len; |
cmd[0] = len; |
for(i=1; i<len-2; i++) |
for(i=1; i<len-2; i++) |
sum += cmd[i]; |
sum += cmd[i]; |
|
sum = -sum; |
cmd[i++] = (char)(sum>>8); |
cmd[i++] = (char)(sum>>8); |
cmd[i++] = (char)(sum & 0xff); |
cmd[i++] = (char)(sum & 0xff); |
|
|
bt_send(cmd, len); |
// systick_wait_ms(500); |
|
|
|
bt_send(cmd, len+1); |
|
} |
|
|
|
int do_bluetooth () |
|
{ |
|
if(bt_state) { |
|
if(bt_get_mode()) { |
|
if(!bt_mode) { |
|
bt_set_arm7_cmd(); |
|
display_char(')'); display_update(); |
|
bt_mode = 1; |
|
} |
|
return 1; |
|
} else { |
|
if(bt_mode) { |
|
bt_clear_arm7_cmd(); |
|
display_char('['); display_update(); |
|
bt_mode = 0; |
|
bt_state = 0; |
|
} else { |
|
display_char('.'); |
|
display_update(); |
|
} |
|
} |
|
} else { |
|
if(!bt_mode) { |
|
char cmd[30]; |
|
|
|
bt_receive(cmd); |
|
if(cmd[0] | cmd[1]) { |
|
display_char('0'+cmd[0]); |
|
display_char('0'+cmd[1]); |
|
} |
|
|
|
switch(cmd[1]) { |
|
case 0x10: |
|
case 0x16: // request connection |
|
display_char('-'); |
|
cmd[1] = 0x9; // accept connection |
|
cmd[2] = 1; // yes, we do |
|
bt_send_cmd(cmd); |
|
break; |
|
case 0x0f: // inquiry result |
|
cmd[1] = 0x05; |
|
bt_send_cmd(cmd); // add devices as known device |
|
break; |
|
case 0x13: // connect result |
|
if(cmd[2]) { |
|
display_char('/'); |
|
int handle=cmd[3]; |
|
cmd[1] = 0xB; // open stream |
|
cmd[2] = handle; |
|
bt_send_cmd(cmd); |
|
bt_state = 1; |
|
} else { |
|
display_char('('); |
|
} |
|
break; |
|
case 0x20: // discoverableack |
|
if(cmd[2]) { |
|
display_char('?'); |
|
cmd[1] = 0x03; bt_send_cmd(cmd); // open port query |
|
break; |
|
} |
|
case 0x14: |
|
display_char('!'); |
|
cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd); |
|
break; |
|
default: |
|
break; |
|
} |
|
{ |
|
extern int display_x, display_y; |
|
static int n=0; |
|
int x = display_x; |
|
int y = display_y; |
|
display_goto_xy(0,6); |
|
display_char("/|\\-"[(n++)&3]); |
|
display_goto_xy(x,y); |
|
} |
|
display_update(); |
|
} |
|
} |
|
return 0; |
} |
} |
|
|
void prep_terminal () |
void prep_terminal () |
Line 81 void prep_terminal ()
|
Line 168 void prep_terminal ()
|
nxt_motor_init(); |
nxt_motor_init(); |
i2c_init(); |
i2c_init(); |
bt_init(); |
bt_init(); |
cmd[1] = 3; |
do { |
bt_send_cmd(cmd); // open port query |
bt_receive(cmd); |
|
} while((cmd[0] != 3) && (cmd[1] != 0x14)); |
display_goto_xy(0,0); |
cmd[1] = 0x36; // break stream mode |
|
cmd[2] = 0; |
|
bt_send_cmd(cmd); |
|
cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd); // make visible |
display_clear(1); |
display_clear(1); |
|
show_splash(1000); |
|
display_goto_xy(0,0); |
|
|
terminal_prepped = 1; |
terminal_prepped = 1; |
} |
} |
Line 95 void deprep_terminal ()
|
Line 187 void deprep_terminal ()
|
terminal_prepped = 0; |
terminal_prepped = 0; |
} |
} |
|
|
void do_bluetooth () |
|
{ |
|
if(!bt_mode) { |
|
char cmd[30]; |
|
|
|
bt_receive(cmd); |
|
|
|
switch(cmd[1]) { |
|
case 0x16: // request connection |
|
cmd[1] = 9; // accept connection |
|
cmd[2] = 1; // yes, we do |
|
bt_send_cmd(cmd); |
|
break; |
|
case 0x13: // connect result |
|
if(cmd[2]) { |
|
int handle=cmd[3]; |
|
cmd[1] = 0xB; // open stream |
|
cmd[2] = handle; |
|
bt_send_cmd(cmd); |
|
bt_mode = 1; |
|
} |
|
break; |
|
default: |
|
break; |
|
} |
|
} |
|
} |
|
|
|
long key_avail () |
long key_avail () |
{ |
{ |
if(!terminal_prepped) prep_terminal(); |
if(!terminal_prepped) prep_terminal(); |
|
|
|
do_bluetooth(); |
if(bt_mode) { |
if(bt_mode) { |
return bt_avail(); |
return bt_avail(); |
} else { |
} else { |
if(bt_avail()) |
systick_wait_ms(100); |
do_bluetooth(); |
|
return 0; |
return 0; |
} |
} |
} |
} |
Line 148 Cell getkey()
|
Line 212 Cell getkey()
|
} |
} |
|
|
while(!key_avail()); |
while(!key_avail()); |
|
|
|
while((key=bt_getkey())==0); |
|
display_char(key); display_update(); |
|
|
return bt_getkey(); |
return key; |
} |
} |
|
|
void emit_char(char x) |
void emit_char(char x) |
{ |
{ |
if(!terminal_prepped) prep_terminal(); |
if(!terminal_prepped) prep_terminal(); |
display_char(x); |
/* display_char(x); |
if(x == '\n') { |
if(x == '\n') { |
display_update(); |
display_update(); |
needs_update = 0; |
needs_update = 0; |
} else |
} else |
needs_update = 1; |
needs_update = 1; */ |
bt_send(&x, 1); |
if(bt_mode) bt_send(&x, 1); |
} |
} |
|
|
void type_chars(char *addr, unsigned int l) |
void type_chars(char *addr, unsigned int l) |
{ |
{ |
int i; |
if(bt_mode) bt_send(addr, l); |
|
/* int i; |
for(i=0; i<l; i++) |
for(i=0; i<l; i++) |
emit_char(addr[i]); |
emit_char(addr[i]); */ |
} |
} |