#54: fl[1] correspond à la n ième ligne du texte que t'envoies. Copie le fichier FLIB2 dans le bon dossier de ta calcu! A tous les coups t'as copié les fichiers au bon endroit mais t'es dans le dossier "main". Fais [MODE] Current directory=ce qu'il faut!
SendStr est très lente je vous explique: Chaque fois que je change l'état d'un bit sur l'interface faut envoyer un octet I2C complet, donc 8 impulsions! Je vais optimiser ça (vous pouvez le faire aussi).
Actuellement, le programme sélectionne l'imprimante avant chaque envoi de caractère et la désélectionne après (voir procédure LptSendChar). Il faut faire une procédure select à appeler au début, enlever l'envoi d'octets de sélection dans cette procédure et faire une procédure de désélection à appeler après.
Le code avant dans printer.h:
void LptSendChar(int c)
{
// A rajouter et à revoir
// int buf=BUSY;
// while(buf&BUSY)
// {
// buf=readPCF(4);
// }
// Pour le moment cela marche sans
writePCF(0,0);writePCF(4,0xFB);
LPTdelay(1);
writePCF(0,c);writePCF(4,0xFA);
LPTdelay(1);
writePCF(0,c);writePCF(4,0xF2);
LPTdelay(1);
writePCF(0,c);writePCF(4,0xFA);
LPTdelay(1);
writePCF(0,0);writePCF(4,0xFB);
LPTdelay(2);
return;
}
void LptSendChar(int c)
{
Le nouveau code:
void LptSelect(void)
{
writePCF(0,0);writePCF(4,0xFA); //data cleared, select down
LPTdelay(1);
return;
}
void LptUnSelect(void)
{
writePCF(0,0);writePCF(4,0xFB); //data cleared, select up
LPTdelay([b]1[/b]); //ça va plus vite avec "1" au lieu de "2"!
return;
}
void _SysSendChar(int c)
{
// A rajouter et à revoir
// int buf=BUSY;
// while(buf&BUSY)
// {
// buf=readPCF(4);
// }
// Pour le moment cela marche sans
writePCF(0,c);writePCF(4,0xF2); //data ok, strobe down
LPTdelay(1);
writePCF(0,c);writePCF(4,0xFA); //data ok, strobe up
LPTdelay(1);
return;
}
void LptSendChar(int c)
{
LptSelect();
_SysSendChar(c);
LptUnSelect();
return;
}
Send String doit aussi être modifiée:
void LptSendString(char *buf)
{
//délai nécessaire pour éviter la gestion d'erreurs
unsigned long int i;
LptSelect();
for(i=0;i<strlen(buf);i++)
{
LptSendChar(buf[i]);
LPTdelay(5);
}
LptUnSelect();
}
Voila, je pense que ça devrait aller un peu plus vite si vous faites ces modifs.
lptilib 1.0 alpha2:
Ca vient dès que j'ai TIGCC.SLR:
Pour erreurs de caractères, pas de solution évidente.
la calculette a IMPERATIVEMENT 256 caractères.
Seuls les caractères de code <128 sont compatibles entre toutes les imprimantes et la TI.
Pour le reste, il faut gérer une table de caractères selon l'imprimante: Scanner le texte et remplacer les caractères spéciaux par ceux d'une table spécifique à l'imprimante.
Rien qu'entre les HP et les Epson ya des différences énormes.
Faut tester ça avec bcp d'imprimantes.
C'est pour ça que j'ai fait chartabl, electrocut!
Vous éditez des tables pour des imprimantes différentes, vous me lez envoyez par courrier normal et on les intègrera à notre driver.
Moi j'ai déja les imprimantes suivantes:
HP DeskJet 670CEpson Stylus 820Je pense que les tables dépendent des constructeurs (HD, Brother, etc...) et que les modèles différents du même contructeur ont les mêmes tables de caractères.
Notez que vous pouvez faire une table avec qbasic aussi!
Mon adresse de courrier normal est:
[edit][zeph] adresse supprimée
Si vous préférez l'électronique, scannez vos créations, mais je préfèrerai les avoir direct sur papier, parce que sinon il me faudra imprimer vos scans!