Logicielsmoto.com

Nous sommes le 28 Mar 2024, 21:13

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
 Sujet du message: CC9090 windows 10 et solution
MessagePosté: 09 Juil 2018, 00:03 
Hors ligne

Inscription: 24 Juin 2013, 19:06
Messages: 26
Bonsoir à vous amis Thomsonistes,

J'utilise depuis quelques temps déja sans interface cc90, superbe outil félicitations.

Ayant acquis depuis peu une interface cc90 232, modifié suivant le guide, je n'arrivais pas à envoyer et recevoir sur mon windows de communications avec tocomm, et sous linux je ne pouvais pas dépasser le paramètre 4, soit 1200 bauds que ce soit sur un vrai port com ou via ma copie de PL2303

Après avoir vérifié à plusieurs fois mes prises maison et le boitier, j'ai trouvé ce qui me posait problème, et qui pourrait arriver à d'autres sous windows 10 et une machine rapide.

Dans le fichier toserial.c (repertoire src/tocomm/windows), dans les fonctions, SerialWrite et SerialRead, est appelée la fonction WaitForSingleObject avec un timeout de 0, et c'est ce qui cause le soucis. J'ai augmenté ce Timeout à 20 et tous mes problèmes ont été résolus :

Code:
int SerialWrite(char c)
{
    (...)
   if ((WriteFile(hCom, &c, 1, &nbytes, &o) == FALSE)
     && (GetLastError() == ERROR_IO_PENDING)
     && (WaitForSingleObject(o.hEvent, 20) == WAIT_OBJECT_0))
        GetOverlappedResult(hCom, &o, &nbytes, FALSE) ;
    (...)
}
char SerialRead(void)
{
    (...)
    if ((ReadFile(hCom, &c, 1, &nbytes, &o) == FALSE)
     && (GetLastError() == ERROR_IO_PENDING)
     && (WaitForSingleObject(o.hEvent, 20) == WAIT_OBJECT_0))
        GetOverlappedResult(hCom, &o, &nbytes, FALSE) ;
  (...)
}



Voila en espérant que cela puisse servir à d'autres. Je pense même que ça pourrait être une bonne idée de mettre ce timeout par défaut dans CC90(La valeur de 20 est à étudier, car choisie au pifomètre :D ) :)


Pour la version de Linux, il y a un calcul de cycles, je l'ai augmenté pour résoudre le soucis. N'étant pas sur ma machine linux, je posterais si cela vous dit ce que j'ai modifié.

Bonne soirée à vous, je retourne communiquer avec mon TO8 en BASIC ;)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 09 Juil 2018, 00:23 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
C'est cool si ca remarche avec les machines rapides :cool:

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 09 Juil 2018, 01:06 
Hors ligne

Inscription: 24 Juin 2013, 19:06
Messages: 26
Bonsoir Samuel, ça fonctionne du tonnerre même :)

J'ai compilé une version WINDOWS 64 bits pour ceux qui veulent tester, vous pouvez la télécharger ici :
https://drive.google.com/open?id=1V9O74vjepT8nVNwJChm_gnp2x202CwH9

@Sam : Suite à ta discussion sur un autre forum, je me suis amusé à faire des images 4 couleurs. Le soucis est que de nombreux programmes rajoutent des couleurs en plus des 4 (Notamment le paint de Windows 10)) et donc cc90 ne détecte pas qu'il s'agit d'une image de 4 couleur.

J'ai donc rajouté une option -2, qui à l'instar de l'option -0 qui force le mode 40 colonne, force le mode 4 couleurs ;-). Par contre en regardant les sources, je viens de me rendre compte que j'avais enlevé les tests de taille d'image durant mes tests, à n'utiliser donc qu'avec des images 320 x 200. Je les rajouterai.

Il y a beaucoup de trucs sympa je pense à faire le cc90 232, tocomm et un max232 par exemple :)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 10 Juil 2018, 02:43 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Samuel Devulder a écrit:
C'est cool si ca remarche avec les machines rapides :cool:

... et c'est une bonne chose pour moi que quelqu'un s'intéresse encore à ces logiciels :)

Zaxxon a écrit:
Dans le fichier toserial.c (repertoire src/tocomm/windows), dans les fonctions, SerialWrite et SerialRead, est appelée la fonction WaitForSingleObject avec un timeout de 0, et c'est ce qui cause le soucis. J'ai augmenté ce Timeout à 20 et tous mes problèmes ont été résolus :

C'est noté ;) Merci pour le report, car ils ne sont pas légion.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 11 Juil 2018, 01:26 
Hors ligne

Inscription: 24 Juin 2013, 19:06
Messages: 26
Bonsoir,

Citation:
C'est noté ;) Merci pour le report, car ils ne sont pas légion.


De rien :). Là où je m'en veux, c'est d'avoir cherché partout une interface cc90 232, et finalement en acheter une sur ebay et après découvrir que je pouvais la commander sur le site de PULS. :-/

Comme promis, j'ai modifié la version Linux. Ma première modification a été de modifier la fonction Waitcycles à l'aveuglette en rajoutant +1000. ça fonctionnait mais ça ne me convenait pas, du grand n'importe quoi :lol: .

Par contre, je n'ai pas trop compris la multiplication par 10 des cycles. Je n'espère pas dire de bétises, mais il me semble qu'un cycle sur Thomson fasse 1 us?

Donc dans cette optique et n'étant pas du tout fan de gettimeofday et préférant une meilleure précision, j'ai écrit une fonction Waitcycles, et j'ai modifié par ailleurs la fonction SerialWrite, Pour ajouter ce waitcycles, car la valeur de retour n'est pas toujours garantie avec write :

Citation:
Man write
If a write() is interrupted by a signal handler before any bytes are
written, then the call fails with the error EINTR; if it is interrupted
after at least one byte has been written, the call succeeds, and
returns the number of bytes written.


Je viens de tester sur Fedora 27 64 bits, aucun soucis, tocomm peut ainsi envoyer des chaines de 255 caractères en mode 8 (donc 19200 bauds) :).
Pour compiler avec cette nouvelle cette nouvelle version de Waitcycles, il faut remplacer l'include
Code:
#include <sys/time.h>

par
Code:
#include <time.h>


Voici les deux fonctions que j'ai modifiées (édit : fichier toserial.c du repertoire linux):
Code:
/*
 * Attend le nombre de cycles nécessaires à l'absorbtion de la donnée
 */
static void WaitCycles(void)
{
    struct timespec timecycles;
    timecycles.tv_sec=0;
    //Attendre x cycles +1
    timecycles.tv_nsec=(1000*baudtable[baudrate].cycles)+1000;
    clock_nanosleep(CLOCK_REALTIME, 0, &timecycles, NULL);
 }

/*
 * Envoie le bloc de données asynchrones sur le port série
 */
int
SerialWrite(char c) /*@globals errno@*/
{
    /* Envoie la donnée au Thomson */
     switch (write(fileDescriptor, &c, 1))
    {
        case 1 :  WaitCycles(); return 1 ;
        case 0 : WaitCycles(); return 0 ;
    }
   
    WaitCycles();
    return -1 ;
}



Comme ça je suis sûr que le waitCycles est bien effectué ;)

Voila, Maintenant chez moi Tocomm est pleinement fonctionnel sous Linux et Windows 10 :).

Concernant la doc, j'ai une petite suggestion à faire également :

Préciser aux utilisateurs en cas de problème qu'ils peuvent essayer de forcer la vitesse de leur port série sous Linux en faisant la commande
Code:
stty -F /dev/ttyPORTCXOMM VITESSE

Par exemple pour 19200 sur un PL2303 USB SERIE
stty -F /dev/ttyUSB0 19200

Cette option est disponible aussi pour WINDOWS 10 dans le gerstionnaire de périphériques dans les propriétés du port.

Concernant les drivers PL2303, il existe un nombre incalculable de copies asiatiques, et dûr dûr de faire la différence avec un vrai (j'y ai eu le droit). Prolific, le fabricant de la puce, avec les nouveaux drivers, les empèche de démarrer (Erreur 10) sous WINDOWS (linux aucun soucis). L'utilisation de drivers antérieurs (3.3 si ma mémoire est bonne car je suis sous linux en ce moment), permet de les utiliser sans aucun soucis ;).

Si tu veux, et si cela est plus pratique, je pourrais t'envoyer les fichiers modifiés.

Bonne soirée, et encore merci pour ces programmes sympathiques en partage :)

Thomas


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 16 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com