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

version 1.4, 2007/04/22 22:48:43 version 1.10, 2007/06/17 19:26:43
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_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 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
         display_char('+');
         cmd[1] = 0x05;
         bt_send_cmd(cmd); // add devices as known device
         break;
       case 0x13: // connect result
         if(cmd[2]) {
           int n=0;
           int handle=cmd[3];
           display_char('/'); display_update();
           systick_wait_ms(300);
           bt_receive(cmd);
           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;
       }
       display_update();
     }
     return 0;
 }  }
   
 void prep_terminal ()  void prep_terminal ()
Line 81  void prep_terminal () Line 147  void prep_terminal ()
   nxt_motor_init();    nxt_motor_init();
   i2c_init();    i2c_init();
   bt_init();    bt_init();
   cmd[1] = 3;    bt_start_ad_converter();
   bt_send_cmd(cmd); // open port query    do {
       bt_receive(cmd);
   display_goto_xy(0,0);    } 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
   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 168  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 193  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]); */
 }  }

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


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