version 1.7, 2007/04/24 20:18:57
|
version 1.11, 2007/12/31 18:40:25
|
Line 6
|
Line 6
|
|
|
Gforth is free software; you can redistribute it and/or |
Gforth is free software; you can redistribute it and/or |
modify it under the terms of the GNU General Public License |
modify it under the terms of the GNU General Public License |
as published by the Free Software Foundation; either version 2 |
as published by the Free Software Foundation, either version 3 |
of the License, or (at your option) any later version. |
of the License, or (at your option) any later version. |
|
|
This program is distributed in the hope that it will be useful, |
This program is distributed in the hope that it will be useful, |
Line 15
|
Line 15
|
GNU General Public License for more details. |
GNU General Public License for more details. |
|
|
You should have received a copy of the GNU General Public License |
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
along with this program; if not, see http://www.gnu.org/licenses/. |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. |
|
|
|
The following is stolen from the readline library for bash |
The following is stolen from the readline library for bash |
*/ |
*/ |
Line 37
|
Line 36
|
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 66 void bt_send_cmd(char * cmd)
|
Line 66 void bt_send_cmd(char * cmd)
|
cmd[i++] = (char)(sum>>8); |
cmd[i++] = (char)(sum>>8); |
cmd[i++] = (char)(sum & 0xff); |
cmd[i++] = (char)(sum & 0xff); |
|
|
|
// systick_wait_ms(500); |
|
|
bt_send(cmd, len+1); |
bt_send(cmd, len+1); |
} |
} |
|
|
void do_bluetooth () |
int do_bluetooth () |
{ |
{ |
if(!bt_mode) { |
if(!bt_mode) { |
char cmd[30]; |
char cmd[30]; |
|
|
bt_receive(cmd); |
bt_receive(cmd); |
if(cmd[0] | cmd[1]) { |
if(cmd[0] | cmd[1]) { |
display_char('0'+cmd[0]); |
display_char('0'+cmd[0]); |
display_char('0'+cmd[1]); |
display_char('0'+cmd[1]); |
display_update(); |
|
} |
} |
|
|
switch(cmd[1]) { |
switch(cmd[1]) { |
case 0x10: |
|
case 0x16: // request connection |
case 0x16: // request connection |
|
display_char('-'); |
cmd[1] = 0x9; // accept connection |
cmd[1] = 0x9; // accept connection |
cmd[2] = 1; // yes, we do |
cmd[2] = 1; // yes, we do |
bt_send_cmd(cmd); |
bt_send_cmd(cmd); |
break; |
break; |
|
case 0x0f: // inquiry result |
|
display_char('+'); |
|
cmd[1] = 0x05; |
|
bt_send_cmd(cmd); // add devices as known device |
|
break; |
case 0x13: // connect result |
case 0x13: // connect result |
if(cmd[2]) { |
if(cmd[2]) { |
|
int n=0; |
int handle=cmd[3]; |
int handle=cmd[3]; |
cmd[1] = 0xB; // open stream |
display_char('/'); display_update(); |
cmd[2] = handle; |
systick_wait_ms(300); |
bt_send_cmd(cmd); |
bt_receive(cmd); |
while (*AT91C_US1_TNCR != 0); |
if(cmd[0]==0) { |
// while(!(*AT91C_PIOA_PDSR & BT_BC4_CMD_PIN)); |
cmd[1] = 0xB; // open stream |
bt_set_arm7_cmd(); |
cmd[2] = handle; |
display_char(')'); display_update(); |
bt_send_cmd(cmd); |
bt_mode = 1; |
systick_wait_ms(100); |
// bt_send("Hello Bluetooth\n", 16); |
bt_set_arm7_cmd(); |
|
bt_mode = 1; |
|
display_char(')'); display_update(); |
|
} |
|
// bt_state = 1; |
} else { |
} else { |
display_char('('); display_update(); |
display_char('('); |
} |
} |
break; |
break; |
default: |
case 0x20: // discoverableack |
break; |
if(cmd[2]) { |
|
display_char('?'); |
|
break; |
|
} |
|
case 0x10: |
|
case 0x14: |
|
display_char('!'); |
|
cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd); |
|
break; |
|
default: |
|
break; |
} |
} |
|
display_update(); |
} |
} |
|
return 0; |
} |
} |
|
|
void prep_terminal () |
void prep_terminal () |
Line 123 void prep_terminal ()
|
Line 146 void prep_terminal ()
|
nxt_motor_init(); |
nxt_motor_init(); |
i2c_init(); |
i2c_init(); |
bt_init(); |
bt_init(); |
|
bt_start_ad_converter(); |
do { |
do { |
bt_receive(cmd); |
bt_receive(cmd); |
} while((cmd[0] != 3) && (cmd[1] != 0x14)); |
} while((cmd[0] != 3) && (cmd[1] != 0x14)); |
// cmd[1] = 0x21; strcpy(cmd+2, "NXT"); bt_send_cmd(cmd); do_bluetooth(); |
// cmd[1] = 0x36; // break stream mode |
cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd); do_bluetooth(); // make visible |
// cmd[2] = 0; |
cmd[1] = 0x36; cmd[2] = 1; bt_send_cmd(cmd); do_bluetooth(); // don't break stream mode |
// bt_send_cmd(cmd); |
|
// cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd); // make visible |
cmd[1] = 0x03; bt_send_cmd(cmd); // open port query |
cmd[1] = 0x03; bt_send_cmd(cmd); // open port query |
|
|
display_clear(1); |
display_clear(1); |
show_splash(1000); |
show_splash(1000); |
display_goto_xy(0,0); |
display_goto_xy(0,0); |
Line 147 long key_avail ()
|
Line 171 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; |
} |
} |
} |
} |