Bonjour,
Je souhaite porter sur Linux (Red Hat 7.3) du code C Windows qui permet de programmer un FPGA en passant par le port parallèle.
J'ai réussi à faire le mapping entre CreateFile windows et open Linux:
Donne: int nt_device_handle open("/dev/lp0", O_RDWR);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 HANDLE nt_device_handle = CreateFile( nt_lpt_str, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
Mais je ne parviens pas à porter les appels Windows DeviceIoControl en ioctl Linux (qui serait l'équivalent d'après mes recherches).
Mon problème est que le prototype de DeviceIoControl est statique et que celui de ioctl ne l'est pas (d'après le man).
Quand je passe rigoureusement les mêmes arguments, ça ne passe pas.
Par exemple, ici une opération de read (je crois):
que je transforme en (ça me retourne -1, errno = Invalid Argument):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 result = DeviceIoControl( nt_device_handle, /* handle to device */ PGDC_IOCTL_GET_DEVICE_INFO_PP, /* IO control code */ (ULONG *) NULL, /* IN buffer (list buffer) */ 0, /* length of IN buffer in bytes */ &buffer, /* OUT buffer, unsigned long buffer[1] */ sizeof(ULONG), /* length of OUT buffer in bytes */ &returned_length, /* number of writes performed, unsigned long =0 */ NULL )) /* wait for operation to complete */
Quelqu'un a-t-il une expérience de ces appels ioctl ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 result = ioctl( nt_device_handle, PGDC_IOCTL_GET_DEVICE_INFO_PP, (unsigned long *) NULL, 0, &buffer, sizeof(unsigned long), &returned_length, NULL ))
Merci d'avance.
Partager