Diff for /gforth/engine/io-nxt.c between versions 1.10 and 1.13

version 1.10, 2007/06/17 19:26:43 version 1.13, 2008/07/15 16:11:49
Line 1 Line 1
 /* direct key io driver for NXT brick  /* direct key io driver for NXT brick
   
   Copyright (C) 2007 Free Software Foundation, Inc.    Copyright (C) 2007,2008 Free Software Foundation, Inc.
   
   This file is part of Gforth.    This file is part of Gforth.
   
   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 38  int terminal_prepped = 0; Line 37  int terminal_prepped = 0;
 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)
Line 78  int do_bluetooth () Line 82  int do_bluetooth ()
     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]) {
Line 110  int do_bluetooth () Line 116  int do_bluetooth ()
           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 {
Line 119  int do_bluetooth () Line 126  int do_bluetooth ()
     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:
Line 131  int do_bluetooth () Line 139  int do_bluetooth ()
     }      }
     display_update();      display_update();
   }    }
   return 0;    return bt_mode;
 }  }
   
 void prep_terminal ()  void prep_terminal ()
Line 143  void prep_terminal () Line 151  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;
 }  }
Line 172  long key_avail () Line 191  long key_avail ()
 {  {
   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;
Line 184  long key_avail () Line 204  long key_avail ()
 Cell getkey()  Cell getkey()
 {  {
   int key;    int key;
     
   if(!terminal_prepped) prep_terminal();    if(!terminal_prepped) prep_terminal();
     
   if(needs_update) {    if(needs_update) {
     display_update();      display_update();
     needs_update = 0;      needs_update = 0;
   }    }
   
   while(!key_avail());  
       
   while((key=bt_getkey())==0);    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);
       
   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;

Removed from v.1.10  
changed lines
  Added in v.1.13


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