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

version 1.11, 2007/12/31 18:40:25 version 1.12, 2008/02/23 13:03:56
Line 37  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 77  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 109  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 118  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 130  int do_bluetooth () Line 139  int do_bluetooth ()
     }      }
     display_update();      display_update();
   }    }
   return 0;    return bt_mode;
 }  }
   
 void prep_terminal ()  void prep_terminal ()
Line 142  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 171  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 183  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.11  
changed lines
  Added in v.1.12


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