From 03f8528315fa46c95991a34f3325d7b33ae5538c Mon Sep 17 00:00:00 2001
From: Edward Rudd <urkle@outoforder.cc>
Date: Sat, 02 May 2020 21:48:36 +0000
Subject: [PATCH] Update source to SDL2 2.0.12

---
 source/src/hidapi/android/hid.cpp |  114 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 70 insertions(+), 44 deletions(-)

diff --git a/source/src/hidapi/android/hid.cpp b/source/src/hidapi/android/hid.cpp
index 7b8d41c..dd0edf1 100644
--- a/source/src/hidapi/android/hid.cpp
+++ b/source/src/hidapi/android/hid.cpp
@@ -739,7 +739,7 @@
 JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceReleaseCallback)(JNIEnv *env, jobject thiz);
 
 extern "C"
-JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceConnected)(JNIEnv *env, jobject thiz, int nDeviceID, jstring sIdentifier, int nVendorId, int nProductId, jstring sSerialNumber, int nReleaseNumber, jstring sManufacturer, jstring sProduct, int nInterface );
+JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceConnected)(JNIEnv *env, jobject thiz, int nDeviceID, jstring sIdentifier, int nVendorId, int nProductId, jstring sSerialNumber, int nReleaseNumber, jstring sManufacturer, jstring sProduct, int nInterface, int nInterfaceClass, int nInterfaceSubclass, int nInterfaceProtocol );
 
 extern "C"
 JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceOpenPending)(JNIEnv *env, jobject thiz, int nDeviceID);
@@ -828,7 +828,7 @@
 }
 
 extern "C"
-JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceConnected)(JNIEnv *env, jobject thiz, int nDeviceID, jstring sIdentifier, int nVendorId, int nProductId, jstring sSerialNumber, int nReleaseNumber, jstring sManufacturer, jstring sProduct, int nInterface )
+JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceConnected)(JNIEnv *env, jobject thiz, int nDeviceID, jstring sIdentifier, int nVendorId, int nProductId, jstring sSerialNumber, int nReleaseNumber, jstring sManufacturer, jstring sProduct, int nInterface, int nInterfaceClass, int nInterfaceSubclass, int nInterfaceProtocol )
 {
 	LOGV( "HIDDeviceConnected() id=%d VID/PID = %.4x/%.4x, interface %d\n", nDeviceID, nVendorId, nProductId, nInterface );
 
@@ -842,6 +842,9 @@
 	pInfo->manufacturer_string = CreateWStringFromJString( env, sManufacturer );
 	pInfo->product_string = CreateWStringFromJString( env, sProduct );
 	pInfo->interface_number = nInterface;
+	pInfo->interface_class = nInterfaceClass;
+	pInfo->interface_subclass = nInterfaceSubclass;
+	pInfo->interface_protocol = nInterfaceProtocol;
 
 	hid_device_ref<CHIDDevice> pDevice( new CHIDDevice( nDeviceID, pInfo ) );
 
@@ -1027,11 +1030,14 @@
 
 int  HID_API_EXPORT HID_API_CALL hid_write(hid_device *device, const unsigned char *data, size_t length)
 {
-	LOGV( "hid_write id=%d length=%u", device->m_nId, length );
-	hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
-	if ( pDevice )
+	if ( device )
 	{
-		return pDevice->SendOutputReport( data, length );
+		LOGV( "hid_write id=%d length=%u", device->m_nId, length );
+		hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
+		if ( pDevice )
+		{
+			return pDevice->SendOutputReport( data, length );
+		}
 	}
 	return -1; // Controller was disconnected
 }
@@ -1039,13 +1045,16 @@
 // TODO: Implement timeout?
 int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *device, unsigned char *data, size_t length, int milliseconds)
 {
-//	LOGV( "hid_read_timeout id=%d length=%u timeout=%d", device->m_nId, length, milliseconds );
-	hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
-	if ( pDevice )
+	if ( device )
 	{
-		return pDevice->GetInput( data, length );
+//		LOGV( "hid_read_timeout id=%d length=%u timeout=%d", device->m_nId, length, milliseconds );
+		hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
+		if ( pDevice )
+		{
+			return pDevice->GetInput( data, length );
+		}
+		LOGV( "controller was disconnected" );
 	}
-	LOGV( "controller was disconnected" );
 	return -1; // Controller was disconnected
 }
 
@@ -1064,11 +1073,14 @@
 
 int HID_API_EXPORT HID_API_CALL hid_send_feature_report(hid_device *device, const unsigned char *data, size_t length)
 {
-	LOGV( "hid_send_feature_report id=%d length=%u", device->m_nId, length );
-	hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
-	if ( pDevice )
+	if ( device )
 	{
-		return pDevice->SendFeatureReport( data, length );
+		LOGV( "hid_send_feature_report id=%d length=%u", device->m_nId, length );
+		hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
+		if ( pDevice )
+		{
+			return pDevice->SendFeatureReport( data, length );
+		}
 	}
 	return -1; // Controller was disconnected
 }
@@ -1077,11 +1089,14 @@
 // Synchronous operation. Will block until completed.
 int HID_API_EXPORT HID_API_CALL hid_get_feature_report(hid_device *device, unsigned char *data, size_t length)
 {
-	LOGV( "hid_get_feature_report id=%d length=%u", device->m_nId, length );
-	hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
-	if ( pDevice )
+	if ( device )
 	{
-		return pDevice->GetFeatureReport( data, length );
+		LOGV( "hid_get_feature_report id=%d length=%u", device->m_nId, length );
+		hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
+		if ( pDevice )
+		{
+			return pDevice->GetFeatureReport( data, length );
+		}
 	}
 	return -1; // Controller was disconnected
 }
@@ -1089,54 +1104,65 @@
 
 void HID_API_EXPORT HID_API_CALL hid_close(hid_device *device)
 {
-	LOGV( "hid_close id=%d", device->m_nId );
-	hid_mutex_guard r( &g_DevicesRefCountMutex );
-	LOGD("Decrementing device %d (%p), refCount = %d\n", device->m_nId, device, device->m_nDeviceRefCount - 1);
-	if ( --device->m_nDeviceRefCount == 0 )
+	if ( device )
 	{
-		hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
-		if ( pDevice )
+		LOGV( "hid_close id=%d", device->m_nId );
+		hid_mutex_guard r( &g_DevicesRefCountMutex );
+		LOGD("Decrementing device %d (%p), refCount = %d\n", device->m_nId, device, device->m_nDeviceRefCount - 1);
+		if ( --device->m_nDeviceRefCount == 0 )
 		{
-			pDevice->Close( true );
+			hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
+			if ( pDevice )
+			{
+				pDevice->Close( true );
+			}
+			else
+			{
+				delete device;
+			}
+			LOGD("Deleted device %p\n", device);
 		}
-		else
-		{
-			delete device;
-		}
-		LOGD("Deleted device %p\n", device);
 	}
-
 }
 
 int HID_API_EXPORT_CALL hid_get_manufacturer_string(hid_device *device, wchar_t *string, size_t maxlen)
 {
-	hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
-	if ( pDevice )
+	if ( device )
 	{
-		wcsncpy( string, pDevice->GetDeviceInfo()->manufacturer_string, maxlen );
-		return 0;
+		hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
+		if ( pDevice )
+		{
+			wcsncpy( string, pDevice->GetDeviceInfo()->manufacturer_string, maxlen );
+			return 0;
+		}
 	}
 	return -1;
 }
 
 int HID_API_EXPORT_CALL hid_get_product_string(hid_device *device, wchar_t *string, size_t maxlen)
 {
-	hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
-	if ( pDevice )
+	if ( device )
 	{
-		wcsncpy( string, pDevice->GetDeviceInfo()->product_string, maxlen );
-		return 0;
+		hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
+		if ( pDevice )
+		{
+			wcsncpy( string, pDevice->GetDeviceInfo()->product_string, maxlen );
+			return 0;
+		}
 	}
 	return -1;
 }
 
 int HID_API_EXPORT_CALL hid_get_serial_number_string(hid_device *device, wchar_t *string, size_t maxlen)
 {
-	hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
-	if ( pDevice )
+	if ( device )
 	{
-		wcsncpy( string, pDevice->GetDeviceInfo()->serial_number, maxlen );
-		return 0;
+		hid_device_ref<CHIDDevice> pDevice = FindDevice( device->m_nId );
+		if ( pDevice )
+		{
+			wcsncpy( string, pDevice->GetDeviceInfo()->serial_number, maxlen );
+			return 0;
+		}
 	}
 	return -1;
 }

--
Gitblit v1.9.3