Portage appels DeviceIoControl windows sous linux
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:
Code:
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 ); |
Donne: int nt_device_handle open("/dev/lp0", O_RDWR);
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):
Code:
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 */ |
que je transforme en (ça me retourne -1, errno = Invalid Argument):
Code:
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 )) |
Quelqu'un a-t-il une expérience de ces appels ioctl ?
Merci d'avance.