| int needs_update = 0; |
int needs_update = 0; |
| int bt_mode = 0; |
int bt_mode = 0; |
| int bt_state = 0; |
int bt_state = 0; |
| |
static char bt_buf[0x100]; |
| |
static char udp_buf[0x100]; |
| |
int bt_index; |
| |
int udp_index; |
| |
int udp_size; |
| |
|
| void |
void |
| show_splash(U32 milliseconds) |
show_splash(U32 milliseconds) |
| char cmd[30]; |
char cmd[30]; |
| |
|
| bt_receive(cmd); |
bt_receive(cmd); |
| if(cmd[0] | cmd[1]) { |
if(cmd[0]) { |
| display_char('0'+cmd[0]); |
display_goto_xy(0,1); |
| display_char('0'+cmd[1]); |
display_hex(cmd[0],2); |
| |
display_goto_xy(3,1); |
| |
display_hex(cmd[1],2); |
| } |
} |
| |
|
| switch(cmd[1]) { |
switch(cmd[1]) { |
| bt_set_arm7_cmd(); |
bt_set_arm7_cmd(); |
| bt_mode = 1; |
bt_mode = 1; |
| display_char(')'); display_update(); |
display_char(')'); display_update(); |
| |
type_chars("Gforth NXT\n", 11); |
| } |
} |
| // bt_state = 1; |
// bt_state = 1; |
| } else { |
} else { |
| case 0x20: // discoverableack |
case 0x20: // discoverableack |
| if(cmd[2]) { |
if(cmd[2]) { |
| display_char('?'); |
display_char('?'); |
| |
cmd[1] = 0x03; bt_send_cmd(cmd); // open port query |
| break; |
break; |
| } |
} |
| case 0x10: |
case 0x10: |
| } |
} |
| display_update(); |
display_update(); |
| } |
} |
| return 0; |
return bt_mode; |
| } |
} |
| |
|
| void prep_terminal () |
void prep_terminal () |
| systick_init(); |
systick_init(); |
| sound_init(); |
sound_init(); |
| nxt_avr_init(); |
nxt_avr_init(); |
| display_init(); |
|
| nxt_motor_init(); |
nxt_motor_init(); |
| i2c_init(); |
i2c_init(); |
| bt_init(); |
bt_init(); |
| bt_start_ad_converter(); |
udp_init(); |
| do { |
display_init(); |
| bt_receive(cmd); |
show_splash(2000); |
| } while((cmd[0] != 3) && (cmd[1] != 0x14)); |
display_goto_xy(0,0); |
| |
display_string("BT Reset "); |
| |
display_update(); |
| |
// bt_reset(); |
| |
display_string("ok"); |
| |
display_update(); |
| |
bt_buf[0] = 0; |
| |
bt_buf[1] = 0; |
| |
bt_index = 0; |
| |
// bt_start_ad_converter(); |
| |
// do { |
| |
// bt_receive(cmd); |
| |
// } while((cmd[0] != 3) && (cmd[1] != 0x14)); |
| // cmd[1] = 0x36; // break stream mode |
// cmd[1] = 0x36; // break stream mode |
| // cmd[2] = 0; |
// cmd[2] = 0; |
| // bt_send_cmd(cmd); |
// bt_send_cmd(cmd); |
| // cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd); // make visible |
// cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd); // make visible |
| cmd[1] = 0x03; bt_send_cmd(cmd); // open port query |
display_string("."); |
| display_clear(1); |
display_goto_xy(0,1); |
| show_splash(1000); |
display_update(); |
| display_goto_xy(0,0); |
while(!do_bluetooth() && !udp_configured()); |
| |
|
| terminal_prepped = 1; |
terminal_prepped = 1; |
| } |
} |
| { |
{ |
| if(!terminal_prepped) prep_terminal(); |
if(!terminal_prepped) prep_terminal(); |
| |
|
| do_bluetooth(); |
if(do_bluetooth()) { |
| if(bt_mode) { |
return bt_buf[0] - bt_index; |
| return bt_avail(); |
} else if(udp_configured()) { |
| |
return udp_size - udp_index; |
| } else { |
} else { |
| systick_wait_ms(100); |
systick_wait_ms(100); |
| return 0; |
return 0; |
| needs_update = 0; |
needs_update = 0; |
| } |
} |
| |
|
| while(!key_avail()); |
do { |
| |
if(do_bluetooth()) { |
| |
while(bt_index >= bt_buf[0]) { |
| |
bt_receive(bt_buf); |
| |
bt_index = 0; |
| |
} |
| |
key = bt_buf[bt_index++]; |
| |
} else if(udp_configured()) { |
| |
if(udp_index < udp_size) { |
| |
key = udp_buf[udp_index++]; |
| |
} else { |
| |
udp_size = udp_read(udp_buf, 0x100); |
| |
udp_index = 0; |
| |
key = 0; |
| |
} |
| |
} else { |
| |
key = 0; |
| |
} |
| |
} while(!key); |
| |
|
| while((key=bt_getkey())==0); |
|
| display_char(key); display_update(); |
display_char(key); display_update(); |
| |
|
| return key; |
return key; |
| |
|
| void emit_char(char x) |
void emit_char(char x) |
| { |
{ |
| |
char buf[3]; |
| if(!terminal_prepped) prep_terminal(); |
if(!terminal_prepped) prep_terminal(); |
| /* display_char(x); |
if(bt_mode) { |
| if(x == '\n') { |
buf[0] = 1; |
| display_update(); |
buf[1] = 0; |
| needs_update = 0; |
buf[2] = x; |
| } else |
bt_send(buf, 3); |
| needs_update = 1; */ |
} |
| if(bt_mode) bt_send(&x, 1); |
|
| } |
} |
| |
|
| void type_chars(char *addr, unsigned int l) |
void type_chars(char *addr, unsigned int l) |
| { |
{ |
| if(bt_mode) bt_send(addr, l); |
int i; |
| /* int i; |
char buf[0x100]; |
| for(i=0; i<l; i++) |
if(bt_mode) { |
| emit_char(addr[i]); */ |
buf[0]=l; |
| |
buf[1]=0; |
| |
for(i=0; i<l; i++) { |
| |
buf[2+i]=addr[i]; |
| } |
} |
| |
bt_send(buf, l+2); |
| |
} |
| |
} |
| |
|
| |
volatile unsigned char gMakeRequest; |