π
<-
Chat plein-écran
[^]

Ndless / nspireio UART Chat

C, C++, ASM...

Ndless / nspireio UART Chat

Unread postby TheStaticTurtle » 15 Oct 2017, 10:45

Donc j'ai ecrit ce code pour faire un chat avec le port serie de la calculette:
Code: Select all
#include <os.h>
//#include <nspireio/nspireio.h>
#include <nspireio/uart.hpp>
#include <nspireio/console.hpp>

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

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 input[100] = {0};
         nio_getsn(input,100);
         uart_printf(input);
         key_already_pressed = 1;
      }
      if(!any_key_pressed())
         key_already_pressed = 0;
      if(uart_ready()) {
         is_uart_data = 1;
      }
      if(uart_ready()) {
         char input[100] = {0};
         uart_getsn(input,100);
         if(strcmp(oldinput,input) != 0) {
            if(input != voidlist) {
               nio_puts(input);
               strcpy(oldinput,input);
               strcpy(input,voidlist);
            }
         }
      }
   }
   nio_puts("Tests finished.");
   nio_free(&csl);   
   return 0;
}



Le seul petit problème c'est que le code envoie des caratere a l'infinit sur le port serie(par exemple si j'envoie LLLLLLLLLLLLLLLLLLLLLLLL Le port serie et l'afichage vas continuellement envoyer des L et pareil avec d'autre lettre)
Sinon si je peut envoyer et recevoir normalement a part que la console serie et l'ecrant de la Ti sont flood par cette lettre.

Est-ce quelqu'un peut me corriger cela sa fait un bon moment que je cherche .
Merci d'avance
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 Ti64CLi++ » 15 Oct 2017, 10:54

Je dirais que c'est a cause de la partie de la ligne 35 a la ligne 45:
Code: Select all
      if(uart_ready()) {
         char input[100] = {0};
         uart_getsn(input,100);
         if(strcmp(oldinput,input) != 0) {
            if(input != voidlist) {
               nio_puts(input);
               strcpy(oldinput,input);
               strcpy(input,voidlist);
            }
         }
      }


En fait, tu verifies juste que uart_ready() renvoie une valeur non nul. Or, il renverra une valeur non nul en permanence s'il n'y a pas de probleme.

Il faudrait que tu rajoutes un test:tu affiches seulement si tu n'as pas encore affiche.

Donc tu creer une variable au debut, comme int dispInput = 0;

Et ensuite, dans le if de la ligne 35:
Code: Select all
if(uart_ready() && !dispInput)
         char input[100] = {0};
         uart_getsn(input,100);
         if(strcmp(oldinput,input) != 0) {
            if(input != voidlist) {
               nio_puts(input);
               strcpy(oldinput,input);
               strcpy(input,voidlist);
            }
         }
         dispInput = 1;
      }


Je ne sais pas si ca peut etre ca, je ne suis pas le mieux place en C pour Nspire.

J'espere avoir ete clair, et que je n'ai pas dit de betise.
Image
User avatar
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 32.3%
 
Posts: 3441
Images: 75
Joined: 04 Jul 2014, 14:40
Location: Clermont-Ferrand 63
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes
GitHub: Ti64CLi

Re: Ndless / nspireio UART Chat

Unread postby critor » 15 Oct 2017, 11:01

Salut.


Je ne sais pas si c'est le même problème, mais ça y ressemble énormément lorsque je tente d'échanger des messages entre 2 TI-Nspire :
viewtopic.php?f=43&t=20578&p=222832#p222772

A partir du moment où il y a eu au moins 1 échange de données, la fonction uart_ready() renvoie alors toujours vrai et donc la calculatrice réceptrice continue de lire sans fin le dernier caractère émis. :(

J'ai regardé dans https://github.com/compujuckel/nspire-i ... ire-uart.c , histoire de voir si j'avais raté quelque chose et si il y avait par exemple une fonction pour vider le buffer à appeler une fois lu, mais non apparemment il n'y a rien d'autre...
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 42.6%
 
Posts: 41500
Images: 14705
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, 12:20

Après avoir essayer la réponse de " Ti64CLi++" je reçois seulement un message de 100 lettre (taille du buffer) et je ne recois plus rien d'autre.
De plus le message est envoyer sur la console ET sur la calculette ce qui ne deverrait jamais arriver
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, 12:27

Oui, je n'avais pas compris en quoi ça résolvait le problème.

Dans mon code que je t'ai lié, j'ignore les caractères successifs identiques, faute de mieux pour le moment.

Mais j'ai la désagréable impression que uart_ready() ne se comporte pas correctement.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 42.6%
 
Posts: 41500
Images: 14705
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 Ti64CLi++ » 15 Oct 2017, 12:36

Je suis desole pour ma method, je pensais que ca pouvait marcher.
Apparement, j'ai dit des betises :?
Image
User avatar
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 32.3%
 
Posts: 3441
Images: 75
Joined: 04 Jul 2014, 14:40
Location: Clermont-Ferrand 63
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes
GitHub: Ti64CLi

Re: Ndless / nspireio UART Chat

Unread postby Adriweb » 15 Oct 2017, 12:38

Pour information (même si ça ne change pas le comportement uart, je crois), le bon repo est celui-ci: https://github.com/Vogtinator/nspire-io
Celui de compujuckel n'a plus été updaté depuis 2014.
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 critor » 15 Oct 2017, 12:58

Et sinon, tu comprends le problème du uart_getc() qui continue à retourner en boucle le dernier caractère reçu ? (ce qui implique vu le code que tu as lié que la fonction uart_ready() utilisée en interne continuer à renvoyer vrai après la fin de la transmission)
Voir mon post avec le code : viewtopic.php?f=43&t=20578&p=222832#p222772
Car je suis complètement coincé pour le moment.

Une histoire d'interruptions à activer/désactiver peut-être ?
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 42.6%
 
Posts: 41500
Images: 14705
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 critor » 15 Oct 2017, 13:05

Prenons l'exemple d'un programme de chat, même si ce n'est pas mon cas, où chaque utilisateur envoie des messages d'1 caractère.
Je lis que selon son code, uart_getchar() fait une sorte d'accusé réception en retournant le caractère lu avec uart_putchar() :
https://github.com/Vogtinator/nspire-io ... ire-uart.c

Je ne comprends pas comment cela peut marcher.
Si la calculatrice qui a émis le message se met ensuite à utiliser uart_getchar() pour lire une éventuelle réponse, elle va récupérer non pas la réponse tapée par l'utilisateur d'en face mais l'accusé réception qu'elle va à son tour renvoyer... d'où boucle infinie. :o
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 42.6%
 
Posts: 41500
Images: 14705
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, 13:08

Perso je sais pas, mais selon Vogtinator (puisqu'il est le mainteneur de nspire-io maintenant), "getchar actually sends the received char back", et " "if(*inptr!=oldc) {" makes no sense ".
C'est peut-être un peu utile déjà, mais bon, il est sur IRC si t'as des détails à lui demander :)

Pareil pour @TurtleForGaming :P

Edit: je suppose que tu viens de te rendre compte du premier point, oui. Pourquoi ça fait ça, par contre... bonne question ?
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

Next

Return to Native: Ndless, Linux, ...

Who is online

Users browsing this forum: No registered users and 22 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.
1417 utilisateurs:
>1391 invités
>20 membres
>6 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)