π
<-
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: 42.6%
 
Posts: 41501
Images: 14719
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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 :)
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 80.3%
 
Posts: 14617
Images: 1218
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
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 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Level up: 8%
 
Posts: 16
Joined: 01 Oct 2016, 11:47
Gender: Male
Calculator(s):
MyCalcs profile
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: 42.6%
 
Posts: 41501
Images: 14719
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Level up: 8%
 
Posts: 16
Joined: 01 Oct 2016, 11:47
Gender: Male
Calculator(s):
MyCalcs profile
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 12 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
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 Calculatrices à acheter chez Calcuso
-
Stats.
1396 utilisateurs:
>1382 invités
>10 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)