Diff for /gforth/engine/io-nxt.c between versions 1.5 and 1.11

version 1.5, 2007/04/22 23:18:05 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]) {
         display_char('0'+cmd[0]);
         display_char('0'+cmd[1]);
       }
           
     switch(cmd[1]) {      switch(cmd[1]) {
     case 0x16: // request connection      case 0x16: // request connection
       cmd[1] = 9; // accept connection        display_char('-');
         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);
         bt_mode = 1;          if(cmd[0]==0) {
             cmd[1] = 0xB; // open stream
             cmd[2] = handle;
             bt_send_cmd(cmd);
             systick_wait_ms(100);
             bt_set_arm7_cmd();
             bt_mode = 1;
             display_char(')'); display_update();
           }
           //        bt_state = 1;
         } else {
           display_char('(');
         }
         break;
       case 0x20: // discoverableack
         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;        break;
   default:  
     break;  
     }      }
       display_update();
   }    }
     return 0;
 }  }
   
 void prep_terminal ()  void prep_terminal ()
Line 110  void prep_terminal () Line 146  void prep_terminal ()
   nxt_motor_init();    nxt_motor_init();
   i2c_init();    i2c_init();
   bt_init();    bt_init();
   cmd[1] = 0x21; strcpy(cmd+2, "Gforth NXT"); bt_send_cmd(cmd); do_bluetooth();    bt_start_ad_converter();
   cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd); do_bluetooth(); // make visible    do {
       bt_receive(cmd);
     } while((cmd[0] != 3) && (cmd[1] != 0x14));
     //  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
   cmd[1] = 0x03; bt_send_cmd(cmd); // open port query    cmd[1] = 0x03; bt_send_cmd(cmd); // open port query
   
   display_goto_xy(0,0);  
   display_clear(1);    display_clear(1);
     show_splash(1000);
     display_goto_xy(0,0);
   
   terminal_prepped = 1;    terminal_prepped = 1;
 }  }
Line 129  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;
   }    }
 }  }
Line 150  Cell getkey() Line 192  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; */
   if(bt_mode)    if(bt_mode) bt_send(&x, 1);
     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]); */
 }  }

Removed from v.1.5  
changed lines
  Added in v.1.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>