open, read, write sous linux j ai un chtit probleme

open, read, write sous linux j ai un chtit probleme - C++ - Programmation

Marsh Posté le 11-06-2003 à 12:02:46    

salut,
 
j ai enfin reussi a installer le module lirc (www.lirc.org) sous linux familiar (0.7) sur un PDA iPAQ 3850
 
pour lire les donnees sur le port infrarouge il suffit donc de faire un open sur /dev/lirc et ensuite de faire read... jusque la ca marche j arrive a lire des donnees.
 
par contre mon write ne marche pas . Pire, la fonction ne quitte pas avec un message d erreur mais elle bloque...
 
voici mon code :  
 

Code :
  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4. #include <errno.h>
  5. #include <string.h>
  6. #include <termios.h>
  7. #include <pthread.h>
  8. #include <time.h>
  9. #include "lirc.h"
  10. #define INVALID_HANDLE_VALUE -1
  11. #define STATE_PULSE 1
  12. #define STATE_SPACE 2
  13. static int hIR = INVALID_HANDLE_VALUE;
  14. static lirc_t irNECTrame[66];
  15. static void EncodeNec(lirc_t dwCode,lirc_t dwInstruction1,lirc_t dwInstruction2);
  16. int main(int /*argc*/,char * /*argv[]*/){
  17. int i;
  18. hIR = open("/dev/lirc" ,O_RDWR | O_NDELAY | O_NOCTTY);
  19. if (hIR == INVALID_HANDLE_VALUE) {
  20.  printf("Unable to open IR port - %s\n", strerror(errno));
  21.  return 0;
  22. }
  23. if (hIR != INVALID_HANDLE_VALUE) {
  24. unsigned long recMode;
  25.  if (ioctl(hIR, LIRC_GET_REC_MODE, &recMode) == -1 ) {
  26.   printf("error - %s\n", strerror(errno));
  27.  }
  28.  if (ioctl(hIR, LIRC_GET_SEND_MODE, &recMode) == -1 ) {
  29.   printf("error - %s\n", strerror(errno));
  30.   }
  31. i = 0;
  32. printf("Encoding ...\n" );
  33. EncodeNec(0x00000CF2,0x00000048,0x000000B7);
  34. printf("Sending ...\n" );
  35. while (i < 10) {
  36.  int j;
  37.  lirc_t k;
  38.    for (j=0 ;j < 66 ; j++) {
  39.   printf("%2.2X ",irNECTrame[j]);
  40.  }
  41.  printf("\n" );
  42.  k = irNECTrame[0];
  43.  j = write (hIR,&k,4);
  44.  if (j == -1) {
  45.   printf("error - %s\n", strerror(errno));
  46.  }
  47.  else {
  48.   printf("trame %d : Written %d bytes...\n",i,j);
  49.  }
  50.  sleep(1);
  51.  i++;
  52. }
  53. return 1;}


 
 
ai je fait une erreur quelque part ?

Reply

Marsh Posté le 11-06-2003 à 12:02:46   

Reply

Marsh Posté le 11-06-2003 à 12:04:30    

ps : le code est porc c clair mais j ai fait ca vite fait. c pour tester.

Reply

Marsh Posté le 11-06-2003 à 14:37:43    

:)

Reply

Marsh Posté le 11-06-2003 à 20:09:11    

:(

Reply

Marsh Posté le 11-06-2003 à 20:47:53    

J'y connais strictement rien a la l'utilisation des ports infrarouge, mais c'est juste une idée comme ca en espérant t'aider. Ta fonction write, peut etre qu'elle attend une réponse de l'autre coté, non?

Reply

Marsh Posté le 11-06-2003 à 20:55:13    

c bon j ai trouvé (et j ai honte la), en fait mon write se passait bien mais je faisais un write de beaucoup (environ 0x100000XX) donc en micro seconde ca fait finalement beaucoup.
 
 
desolé d avoir derangé :-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed