π
<-
Chat plein-écran
[^]

Ndless / nspireio UART Chat

C, C++, ASM...

Re: Ndless / nspireio UART Chat

Unread postby critor » 15 Oct 2017, 13:26

Adriweb wrote:et " "if(*inptr!=oldc) {" makes no sense "

Ben c'est un workaround temporaire pour ignorer les caractères successifs identiques. Sinon ça floode l'écran en une fraction de seconde et je n'ai pas le temps de lire le bootlog et donc pas la possibilité de comprendre le problème.

Pour le reste ok, dès que j'ai le temps je vais donc me faire ma propre fonction mygetchar() qui n'accusera pas réception avec putchar(), et on verra si ça permet de corriger le problème
sans casser autre chose
.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 5.2%
 
Posts: 35334
Images: 9406
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Re: Ndless / nspireio UART Chat

Unread postby Adriweb » 15 Oct 2017, 14:32

Je vois que le problème originel a été résolu via compu sur github : https://github.com/compujuckel/nspire-i ... -336710873 :)
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 53.9%
 
Posts: 12881
Images: 1085
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: Ndless / nspireio UART Chat

Unread postby TheStaticTurtle » 15 Oct 2017, 14:43

Ok problemme regler (https://github.com/compujuckel/nspire-io/issues/6) mais maintenant quand j'envoie un message ver s la TI elle se bloque jusqu'a l'arrive d'un autre message quelqu'un a une idée pourquoi. Mon code maintenant:
Code: Select all
#include <os.h>
//#include <nspireio/nspireio.h>
#include <nspireio/uart.hpp>
#include <nspireio/console.hpp>

int key_already_pressed = 0;
char oldinput[100] = {0};
char voidlist[100] = {0};
int dispInput = 0;

char* uart_getsn_mdf(char* str, int num)
{
   int i;
   for(i = 0; i < num-1; i++)
   {
      char c = uart_getchar();
      str[i] = c;
      if(c == '\b')
      {
         //uart_puts(" \b");
         i -= 2;
      }
      else if(c == '\r')
      {
         str[i] = 0;
         //uart_putchar('\n');
         return str;
      }
   }
   str[num] = 0;
   return str;
}

int main(void)
{
   assert_ndless_rev(874);
   //clrscr();
   nio_console csl;
   nio_init(&csl,NIO_MAX_COLS,NIO_MAX_ROWS,0,0,NIO_COLOR_WHITE,NIO_COLOR_BLACK,TRUE);
   nio_set_default(&csl);
   nio_color(&csl,NIO_COLOR_BLACK,NIO_COLOR_WHITE);
   nio_printf("Nspire UART Chat by Samy. Compiled the %s At %s\n",__DATE__,__TIME__);
   nio_color(&csl,NIO_COLOR_WHITE,NIO_COLOR_BLACK);
   nio_puts("Press any ESC to exit and CTRL to send msg...\n");
   while(!isKeyPressed(KEY_NSPIRE_ESC)){
      if(isKeyPressed(KEY_NSPIRE_CTRL) && !key_already_pressed){
         nio_printf(">");
         char input2[100] = {0};
         nio_getsn(input2,100);
         uart_printf("\r\n");
         uart_printf(input2);
         key_already_pressed = 1;
      }
      if(!any_key_pressed())
         key_already_pressed = 0;
      if(uart_ready()) {
         char input[100] = {0};
         uart_getsn_mdf(input,100);
         nio_puts(input);
      }
   }
   nio_puts("Tests finished.");
   nio_free(&csl);   
   return 0;
}



et donc la partie uart de la lib:
Code: Select all
BOOL uart_ready(void)
{
   volatile unsigned *line_status_reg = IO(0x90020014,0x90020018);
   return is_classic ? *line_status_reg & 0b1 : !(*line_status_reg & 0b10000);
   //return is_classic ? *line_status_reg & 0b1 : !(*line_status_reg & 0b10);
}

char uart_getchar(void)
{
   volatile unsigned *recv_buffer_reg = (unsigned*)0x90020000;
   while(!uart_ready())
      idle();
   char tmp = *recv_buffer_reg;
   uart_putchar(tmp);
   return tmp;
}

char* uart_getsn(char* str, int num)
{
   int i;
   for(i = 0; i < num-1; i++)
   {
      char c = uart_getchar();
      str[i] = c;
      if(c == '\b')
      {
         uart_puts(" \b");
         i -= 2;
      }
      else if(c == '\r')
      {
         str[i] = 0;
         uart_putchar('\n');
         return str;
      }
   }
   str[num] = 0;
   return str;
}

char* uart_gets(char* str)
{
   return uart_getsn(str,50);
}

char uart_putchar(char character)
{
   volatile unsigned *line_status_reg = IO(0x90020014,0x90020018);
   volatile unsigned *xmit_holding_reg = (unsigned*)0x90020000;
   if(is_classic)
   {
      while(!(*line_status_reg & 0b100000)) // wait for empty xmit holding reg
         idle();
   }
   else
   {
      while(!(*line_status_reg & 0b10000000))
         idle();
   }
   *xmit_holding_reg = character;
    return character;
}

int uart_puts(const char *str)
{
   while(*str) {
      uart_putchar(*str++);
   }
    return 1;
}

void uart_printf(char *format, ...)
{
   char buf[256];
   memset(buf,'\0',256);
   va_list arglist;
   va_start(arglist,format);
   vsprintf(buf,format,arglist);
   uart_puts(buf);
   va_end(arglist);
}
User avatar
TheStaticTurtle
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Level up: 62.5%
 
Posts: 16
Joined: 01 Oct 2016, 11:47
Gender: Male
Calculator(s):
Class: 1ere année DUT Informatique
GitHub: TurtleForGaming

Re: Ndless / nspireio UART Chat

Unread postby critor » 15 Oct 2017, 14:56

Je confirme que l'appel à uart_getchar est censé être bloquant en l'absence de données :
Code: Select all
char uart_getchar(void)
{
   volatile unsigned *recv_buffer_reg = (unsigned*)0x90020000;
   while(!uart_ready())
      idle();
   char tmp = *recv_buffer_reg;
   uart_putchar(tmp);
   return tmp;
}
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 5.2%
 
Posts: 35334
Images: 9406
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Re: Ndless / nspireio UART Chat

Unread postby TheStaticTurtle » 15 Oct 2017, 19:03

Ok probleme resolut j'ai modifier la lib pour que sa donne sa:
Code: Select all
char uart_getchar(void)
{
   volatile unsigned *recv_buffer_reg = (unsigned*)0x90020000;
   volatile unsigned *line_status_reg = IO(0x90020014,0x90020018);
   bool uartready = is_classic ? *line_status_reg & 0b1 : !(*line_status_reg & 0b10000);
   if(!uartready)
    {
      idle();
   } else {
      char tmp = *recv_buffer_reg;
      //uart_putchar(tmp);
      return tmp;
   }
}

Et en enlevant le fait que les Warning donnes des erreur de compilation et c'est bon cela fonctione.
User avatar
TheStaticTurtle
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Level up: 62.5%
 
Posts: 16
Joined: 01 Oct 2016, 11:47
Gender: Male
Calculator(s):
Class: 1ere année DUT Informatique
GitHub: TurtleForGaming

Previous

Return to Native: Ndless, Linux, ...

Who is online

Users browsing this forum: No registered users and 2 guests

-
Search
-
Featured topics
L'OS 5.5 de la TI-83 Premium CE / 84 Plus CE supprime l'assembleur - la plupart des jeux et certains programme ne fonctionneront plus
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Comparaisons des meilleurs prix pour acheter sa calculatrice !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety 
-
Stats.
455 utilisateurs:
>445 invités
>6 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)