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

version 1.4, 2007/04/22 22:48:43 version 1.9, 2007/06/16 20:47:00
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_state) {
       if(bt_get_mode()) {
         if(!bt_mode) {
           bt_set_arm7_cmd();
           display_char(')'); display_update();
           bt_mode = 1;
         }
         return 1;
       } else {
         if(bt_mode) {
           bt_clear_arm7_cmd();
           display_char('['); display_update();
           bt_mode = 0;
           bt_state = 0;
         } else {
           display_char('.');
           display_update();
         }
       }
     } else {
       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 0x10:
         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
           cmd[1] = 0x05;
           bt_send_cmd(cmd); // add devices as known device
           break;
         case 0x13: // connect result
           if(cmd[2]) {
             display_char('/');
             int handle=cmd[3];
             cmd[1] = 0xB; // open stream
             cmd[2] = handle;
             bt_send_cmd(cmd);
             bt_state = 1;
           } else {
             display_char('(');
           }
           break;
         case 0x20: // discoverableack
           if(cmd[2]) {
             display_char('?');
             cmd[1] = 0x03; bt_send_cmd(cmd); // open port query
             break;
           }
         case 0x14:
           display_char('!');
           cmd[1] = 0x1C; cmd[2] = 1; bt_send_cmd(cmd);
           break;
         default:
           break;
         }
         {
           extern int display_x, display_y;
           static int n=0;
           int x = display_x;
           int y = display_y;
           display_goto_xy(0,6);
           display_char("/|\\-"[(n++)&3]);
           display_goto_xy(x,y);
         }
         display_update();
       }
     }
     return 0;
 }  }
   
 void prep_terminal ()  void prep_terminal ()
Line 81  void prep_terminal () Line 168  void prep_terminal ()
   nxt_motor_init();    nxt_motor_init();
   i2c_init();    i2c_init();
   bt_init();    bt_init();
   cmd[1] = 3;    do {
   bt_send_cmd(cmd); // open port query      bt_receive(cmd);
     } while((cmd[0] != 3) && (cmd[1] != 0x14));
   display_goto_xy(0,0);    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
   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 187  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 212  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.9


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