Ok, so without other options, i got an idea to make some custom action, i can alter the PacDrive dll to, instead of it's original design, send udp command on the PacSetLEDState.
Better than nothing i guess, but i would still be interested to get a look and understand why the app fail to list my controller devices.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
typedef struct {
SOCKET sockfd;
struct sockaddr_in broadcast_addr;
} UdpBroadcastSocket;
UdpBroadcastSocket udpSocket;
int initUdpBroadcastSocket(UdpBroadcastSocket* udpSocket, const char* broadcastAddress, int port) {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
perror("Erreur lors de l'initialisation de Winsock");
return -1;
}
udpSocket->sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (udpSocket->sockfd == INVALID_SOCKET) {
perror("Erreur lors de la création de la socket");
WSACleanup();
return -1;
}
memset(&udpSocket->broadcast_addr, 0, sizeof(udpSocket->broadcast_addr));
udpSocket->broadcast_addr.sin_family = AF_INET;
udpSocket->broadcast_addr.sin_port = htons(port);
// Utilisation de inet_addr pour convertir l'adresse IP
udpSocket->broadcast_addr.sin_addr.s_addr = inet_addr(broadcastAddress);
if (udpSocket->broadcast_addr.sin_addr.s_addr == INADDR_NONE) {
perror("Adresse IP incorrecte");
closesocket(udpSocket->sockfd);
WSACleanup();
return -1;
}
return 0;
}
int sendUdpBroadcastData(UdpBroadcastSocket* udpSocket, const void* data, size_t dataSize) {
if (sendto(udpSocket->sockfd, (const char*)data, (int)dataSize, 0, (struct sockaddr*)&udpSocket->broadcast_addr, sizeof(udpSocket->broadcast_addr)) == SOCKET_ERROR) {
perror("Erreur lors de l'envoi des données en broadcast");
return -1;
}
return 0;
}
void closeUdpBroadcastSocket(UdpBroadcastSocket* udpSocket) {
closesocket(udpSocket->sockfd);
WSACleanup();
}
PACDRIVE_API INT __stdcall PacInitialize()
{
struct _GUID hidGuid;
SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
struct { DWORD cbSize; WCHAR DevicePath[256]; } FunctionClassDeviceData;
INT success;
DWORD hidDevice;
HANDLE pnPHandle;
ULONG bytesReturned;
DWORD dwThrdParam = 1;
const char* nomFichier = "test.txt";
FILE* fichier = fopen(nomFichier, "w");
if (fichier != NULL) {
fprintf(fichier, "%s\n", "PacInitialize");
fclose(fichier);
}
if (initUdpBroadcastSocket(&udpSocket, "127.0.0.1", 12345) == -1) {
return EXIT_FAILURE;
}
return 1;
}
PACDRIVE_API BOOL __stdcall PacSetLEDState(INT id, INT port, BOOL state)
{
/*
const char* nomFichier = "test.txt";
FILE* fichier = fopen(nomFichier, "w");
if (fichier != NULL) {
fprintf(fichier, "%s : %d %d %d\n", "PacSetLEDState Final", id, port, (int)state);
fclose(fichier);
}
*/
int value = port;
sendUdpBroadcastData(&udpSocket, &value, sizeof(value));
return true;
}