From 480c0d0ba09e43d1746853986c14721e5c05a509 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 11 Oct 2017 12:46:38 +0200 Subject: [PATCH] CHG: pm3 device will be identified on win10 automatic without drivers. Sadly no com port... --- common/usb_cdc.c | 21 ++++------ uart/uart_win32.c | 101 +++++++++++++++++++++++----------------------- 2 files changed, 59 insertions(+), 63 deletions(-) diff --git a/common/usb_cdc.c b/common/usb_cdc.c index f2fd4e82e..00100847e 100644 --- a/common/usb_cdc.c +++ b/common/usb_cdc.c @@ -169,7 +169,7 @@ static const char cfgDescriptor[] = { _EP03_IN, // EndpointAddress, Endpoint 03-IN _INTERRUPT, // Attributes 0x40, 0x00, // MaxPacket Size (ice 0x200, pm3 0x08) - 0x02, // Interval polling (rfidler 0x02, pm3 0xff) + 0xFF, // Interval polling (rfidler 0x02, pm3 0xff) /* Data Class Interface Descriptor Requirement */ 0x09, // Length @@ -188,7 +188,7 @@ static const char cfgDescriptor[] = { _EP01_OUT, // Endpoint Address, Endpoint 01-OUT _BULK, // Attributes BULK 0x40, 0x00, // MaxPacket Size - 0x00, // Interval + 0x00, // Interval (ignored for bulk) /* Endpoint descriptor */ 0x07, // Length @@ -196,7 +196,7 @@ static const char cfgDescriptor[] = { _EP02_IN, // Endpoint Address, Endpoint 02-IN _BULK, // Attributes BULK 0x40, 0x00, // MaxPacket Size - 0x00 // Interval + 0x00 // Interval (ignored for bulk) }; // Microsoft OS Extended Configuration Compatible ID Descriptor @@ -744,22 +744,17 @@ void AT91F_CDC_Enumerate() { if ( bRequest == MS_VENDOR_CODE) { if ( bmRequestType == MS_WCID_GET_DESCRIPTOR ) { // C0 - if ( wIndex == MS_EXTENDED_COMPAT_ID ) { // 4 AT91F_USB_SendData(pUdp, CompatIDFeatureDescriptor, MIN(sizeof(CompatIDFeatureDescriptor), wLength)); - } else { - AT91F_USB_SendStall(pUdp); - } - return; + return; + } } if ( bmRequestType == MS_WCID_GET_FEATURE_DESCRIPTOR ) { //C1 if ( wIndex == MS_EXTENDED_PROPERTIES ) { // 5 AT91F_USB_SendData(pUdp, (char *)&OSPropertyDescriptor, MIN(sizeof(OSPropertyDescriptor), wLength)); - AT91F_USB_SendData(pUdp, OSprop, MIN(sizeof(OSprop), wLength)); - } else { - AT91F_USB_SendStall(pUdp); - } - return; + //AT91F_USB_SendData(pUdp, OSprop, MIN(sizeof(OSprop), wLength)); + return; + } } } // Handle supported standard device request Cf Table 9-3 in USB specification Rev 1.1 diff --git a/uart/uart_win32.c b/uart/uart_win32.c index 63f207ce9..de3534713 100644 --- a/uart/uart_win32.c +++ b/uart/uart_win32.c @@ -58,71 +58,71 @@ void upcase(char *p) { } serial_port uart_open(const char* pcPortName) { - char acPortName[255]; - serial_port_windows* sp = malloc(sizeof(serial_port_windows)); - - if (sp == 0) - return INVALID_SERIAL_PORT; + char acPortName[255]; + serial_port_windows* sp = malloc(sizeof(serial_port_windows)); - // Copy the input "com?" to "\\.\COM?" format - sprintf(acPortName,"\\\\.\\%s", pcPortName); - upcase(acPortName); + if (sp == 0) + return INVALID_SERIAL_PORT; + + // Copy the input "com?" to "\\.\COM?" format + sprintf(acPortName,"\\\\.\\%s", pcPortName); + upcase(acPortName); + + // Try to open the serial port + sp->hPort = CreateFileA(acPortName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + if (sp->hPort == INVALID_HANDLE_VALUE) { + uart_close(sp); + return INVALID_SERIAL_PORT; + } - // Try to open the serial port - sp->hPort = CreateFileA(acPortName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); - if (sp->hPort == INVALID_HANDLE_VALUE) { - uart_close(sp); - return INVALID_SERIAL_PORT; - } + // Prepare the device control + memset(&sp->dcb, 0, sizeof(DCB)); + sp->dcb.DCBlength = sizeof(DCB); + if (!BuildCommDCBA("baud=115200 parity=N data=8 stop=1",&sp->dcb)) { + uart_close(sp); + return INVALID_SERIAL_PORT; + } - // Prepare the device control - memset(&sp->dcb, 0, sizeof(DCB)); - sp->dcb.DCBlength = sizeof(DCB); - if (!BuildCommDCBA("baud=115200 parity=N data=8 stop=1",&sp->dcb)) { - uart_close(sp); - return INVALID_SERIAL_PORT; - } + // Update the active serial port + if (!SetCommState(sp->hPort, &sp->dcb)) { + uart_close(sp); + return INVALID_SERIAL_PORT; + } + // all zero's configure: no timeout for read/write used. + // took settings from libnfc/buses/uart.c + sp->ct.ReadIntervalTimeout = 0;//1; + sp->ct.ReadTotalTimeoutMultiplier = 0;//1; + sp->ct.ReadTotalTimeoutConstant = 30; + sp->ct.WriteTotalTimeoutMultiplier = 0;//1; + sp->ct.WriteTotalTimeoutConstant = 30; - // Update the active serial port - if (!SetCommState(sp->hPort, &sp->dcb)) { - uart_close(sp); - return INVALID_SERIAL_PORT; - } - // all zero's configure: no timeout for read/write used. - // took settings from libnfc/buses/uart.c - sp->ct.ReadIntervalTimeout = 0;//1; - sp->ct.ReadTotalTimeoutMultiplier = 0;//1; - sp->ct.ReadTotalTimeoutConstant = 30; - sp->ct.WriteTotalTimeoutMultiplier = 0;//1; - sp->ct.WriteTotalTimeoutConstant = 30; + if (!SetCommTimeouts(sp->hPort, &sp->ct)) { + uart_close(sp); + return INVALID_SERIAL_PORT; + } - if (!SetCommTimeouts(sp->hPort, &sp->ct)) { - uart_close(sp); - return INVALID_SERIAL_PORT; - } + PurgeComm(sp->hPort, PURGE_RXABORT | PURGE_RXCLEAR); + + bool success = uart_set_speed(sp, 460800); + if (!success) + uart_set_speed(sp, 115200); - PurgeComm(sp->hPort, PURGE_RXABORT | PURGE_RXCLEAR); - - bool success = uart_set_speed(sp, 460800); - if (!success) - uart_set_speed(sp, 115200); - - return sp; + return sp; } void uart_close(const serial_port sp) { - if (!sp) return; - if (sp == INVALID_SERIAL_PORT) return; - if (sp == CLAIMED_SERIAL_PORT) return; +// if (!sp) return; +// if (sp == INVALID_SERIAL_PORT) return; +// if (sp == CLAIMED_SERIAL_PORT) return; if (((serial_port_windows*)sp)->hPort != INVALID_HANDLE_VALUE ) CloseHandle(((serial_port_windows*)sp)->hPort); free(sp); } bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t pszMaxRxLen, size_t* pszRxLen) { - //ReadFile(((serial_port_windows*)sp)->hPort, pbtRx, pszMaxRxLen, (LPDWORD)pszRxLen, NULL); - //return (*pszRxLen != 0); - + ReadFile(((serial_port_windows*)sp)->hPort, pbtRx, pszMaxRxLen, (LPDWORD)pszRxLen, NULL); + return (*pszRxLen != 0); + /* DWORD dwBytesToGet = (DWORD)pszMaxRxLen; DWORD dwBytesReceived = 0; DWORD dwTotalBytesReceived = 0; @@ -144,6 +144,7 @@ bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t pszMaxRxLen, size_ } while (((DWORD)pszMaxRxLen) > dwTotalBytesReceived); return (dwTotalBytesReceived == (DWORD) pszMaxRxLen); + */ } bool uart_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen) {