From f268ec848c849d4dd7445364617d8f401abaef9c Mon Sep 17 00:00:00 2001 From: Florent Yvinec Date: Fri, 21 Aug 2026 12:26:44 +0200 Subject: [PATCH 1/3] Support of SEC1210 smart card reader on HMD Fusion : updates USB management, and updates PCSC V1 library (now compatible with SEC1210 * Add USB attachment and configuration handling : ** add UsbAttachActivity with device_filter.xml to handle USB device attach events and permissions : improve USB permission handling and avoid unnecessary permission requests ** add UsbConfiguration to centralize USB device configuration : wait for required USB devices to enumerate before continuing, manages USB permissions request synchronously with PendingIntent ** add UsbConfigurationManager to manage USB initialization and readiness checks : used in main activity to configure USB devices * Updates PCSC V1 library : version 1.7.0 fixes the issues with SEC1210 (dual slot enumeration issue, state issue) --- app/build.gradle | 12 +- app/libs/d2xx.jar | Bin 0 -> 186654 bytes app/src/main/AndroidManifest.xml | 22 +- .../sdk/usboutlet/UsbAttachActivity.kt | 31 ++ .../sdk/usboutlet/UsbConfigurationActivity.kt | 445 ++++++++++++++++++ .../sdk/usboutlet/UsbConfigurationManager.kt | 86 ++++ app/src/main/res/xml/device_filter.xml | 13 + .../samples/pcsc/ui/MainActivity.java | 104 ++-- 8 files changed, 658 insertions(+), 55 deletions(-) create mode 100644 app/libs/d2xx.jar create mode 100644 app/src/main/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt create mode 100644 app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt create mode 100644 app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt create mode 100644 app/src/main/res/xml/device_filter.xml diff --git a/app/build.gradle b/app/build.gradle index 0592a0b..5657062 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -105,9 +105,12 @@ dependencies { implementation 'com.github.d-max:spots-dialog:0.7@aar' // Coppernic - implementation "fr.coppernic.sdk.core:CpcCore:3.8.0" + implementation("fr.coppernic.sdk.core:CpcCore:3.8.0") { + exclude group: "fr.coppernic.external", module: "D2xx" + } + implementation 'fr.coppernic.lib.splash:splash:0.4.1' - pcscv1Implementation 'fr.coppernic.sdk.pcsc:CpcPcsc:1.6.0' + pcscv1Implementation 'fr.coppernic.sdk.pcsc:CpcPcsc:1.7.0' pcscv2Implementation "fr.coppernic.sdk.pcsc2:CpcCore:3.7.0" // RX-java @@ -117,4 +120,9 @@ dependencies { // Coroutine implementation "androidx.lifecycle:lifecycle-common-java8:2.5.1" implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.5.1" + + + // FTDI for Fusion support + implementation(files("libs/d2xx.jar")) + } diff --git a/app/libs/d2xx.jar b/app/libs/d2xx.jar new file mode 100644 index 0000000000000000000000000000000000000000..8673f2f2930e58d61788cc4d71befbac96f6df6f GIT binary patch literal 186654 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 + + + + + + + + + + + + - \ No newline at end of file + diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt new file mode 100644 index 0000000..1509db5 --- /dev/null +++ b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt @@ -0,0 +1,31 @@ +package fr.coppernic.sdk.usboutlet + +import android.app.Activity +import android.hardware.usb.UsbDevice +import android.hardware.usb.UsbManager +import android.os.Bundle +import android.util.Log + +class UsbAttachActivity : Activity() { + private val TAG = "UsbAttachActivity" + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val device = + intent.getParcelableExtra(UsbManager.EXTRA_DEVICE) + + if (device != null) { + val manager = + getSystemService(USB_SERVICE) as UsbManager + + Log.d( + TAG, + "USB attached: " + device.deviceName + + ", permission=" + manager.hasPermission(device) + ) + } + + finish() + } +} diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt new file mode 100644 index 0000000..47bf531 --- /dev/null +++ b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt @@ -0,0 +1,445 @@ +package fr.coppernic.sdk.usboutlet + +import android.app.PendingIntent +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.hardware.usb.UsbDevice +import android.hardware.usb.UsbManager +import android.os.Build +import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.lifecycleScope +import com.ftdi.j2xx.D2xxManager +import com.ftdi.j2xx.FT_Device +import fr.coppernic.sdk.power.OutletPowerManager +import kotlin.coroutines.cancellation.CancellationException +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlinx.coroutines.withTimeoutOrNull + +const val FTDI_VID = 0x0403 +const val FTDI_PID_1 = 0x6010 +const val FTDI_PID_2 = 0x6015 + +const val SEC1210_VID = 0x0424 +const val SEC1210_PID = 0x1202 + +const val SET_GPIO_OUTPUT_ALL_HIGH = 0xF0 + +const val SET_GPIO_OUTPUT_ALL_LOG = 0xFF + +const val SET_BIT_MODE = 0x20 +const val FTDI_CONFIGURATION_DELAY = 2000L + +class UsbConfigurationActivity : AppCompatActivity() { + + companion object { + private const val TAG = "UsbConfiguration" + + // Adapt these + private const val OUTLET_POWER_TIMEOUT_MS = 5_000L + private const val DEVICE_ENUM_TIMEOUT_MS = 5_000L + + // Time given to the user to answer each permission dialog + private const val PERMISSION_TIMEOUT_MS = 20_000L + + private const val POLL_DELAY_MS = 200L + } + + private lateinit var usbManager: UsbManager + + private val usbPermissionAction by lazy { + "$packageName.USB_PERMISSION" + } + + private data class PendingPermission( + val deviceId: Int, val result: CompletableDeferred + ) + + private var pendingPermission: PendingPermission? = null + + private val usbPermissionReceiver = object : BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { + Log.d(TAG, "USB permission received" + intent.action) + + if (intent.action != usbPermissionAction) { + return + } + + val device = getUsbDevice(intent) ?: return + + val pending = pendingPermission ?: return + + // Ignore an old/unrelated permission answer + if (device.deviceId != pending.deviceId) { + return + } + + val granted = intent.getBooleanExtra( + UsbManager.EXTRA_PERMISSION_GRANTED, false + ) + + Log.i( + TAG, "Permission result for " + "%04X:%04X = $granted".format( + device.vendorId, device.productId + ) + ) + + pending.result.complete(granted) + } + + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + Log.i(TAG, "Starting USB configuration") + + usbManager = getSystemService(USB_SERVICE) as UsbManager + + registerPermissionReceiver() + + lifecycleScope.launch { + val success = configureUsb() + + setResult( + if (success) RESULT_OK + else RESULT_CANCELED + ) + + finish() + } + } + + override fun onDestroy() { + pendingPermission?.result?.cancel() + pendingPermission = null + + unregisterReceiver(usbPermissionReceiver) + + super.onDestroy() + } + + private suspend fun configureUsb(): Boolean { + try { + + if (!isUsbDeviceReady(FTDI_VID, listOf(FTDI_PID_1, FTDI_PID_2))) { + if (!setupFtdi()) { + Log.e(TAG, "Unable to setup FTDI") + return false + } + } + + if (!isUsbDeviceReady(SEC1210_VID, listOf(SEC1210_PID))) { + if (!setupSmartCardReader()) { + return false + } + } + + /* + * Everything is ready. + */ + Log.i(TAG, "USB configuration successful") + return true + + } catch (e: CancellationException) { + throw e + + } catch (e: Exception) { + Log.e(TAG, "USB configuration failed", e) + return false + } finally { + } + } + + private suspend fun setupFtdi(): Boolean {/* + * 1. Power the outlet. + * + * this call blocks until the outlet is powered + * or until its own timeout occurs. + */ + Log.i(TAG, "Powering FTDI outlet") + + withContext(Dispatchers.IO) { + OutletPowerManager().powerOn( + applicationContext, OUTLET_POWER_TIMEOUT_MS + ) + } + + /* + * 2. Wait for Android USB host to enumerate FTDI. + */ + Log.i(TAG, "Waiting for FTDI") + + val ftdiDevice = waitForUsbDevice( + FTDI_VID, listOf(FTDI_PID_1, FTDI_PID_2), DEVICE_ENUM_TIMEOUT_MS + ) + + if (ftdiDevice == null) { + Log.e(TAG, "FTDI did not appear") + return false + } + + Log.i(TAG, "device detected: ${ftdiDevice.deviceName}") + Log.i(TAG, "device is Ftdi : ${ftdiDevice.isFtdi()}") + + /* + * 3. Get FTDI permission, only when necessary. + */ + if (!ensureUsbPermission(ftdiDevice)) { + Log.e(TAG, "FTDI permission not granted") + return false + } + return true + } + + private suspend fun setupSmartCardReader(): Boolean {/* + * 1. Use FTDI to power SEC1210. + */ + val ftdiDevice = findUsbDevice(FTDI_VID, listOf(FTDI_PID_1, FTDI_PID_2)) ?: return false + if (!powerSmartCardReader(ftdiDevice)) { + Log.e(TAG, "Unable to power smart card reader") + return false + } + + /* + * 2. SEC1210 should now appear on USB. + */ + Log.i(TAG, "Waiting for SEC1210") + + val sec1210 = withContext(Dispatchers.IO) { + + waitForUsbDevice( + SEC1210_VID, listOf(SEC1210_PID), DEVICE_ENUM_TIMEOUT_MS + ) + } + + if (sec1210 == null) { + Log.e(TAG, "SEC1210 did not appear") + return false + } + + Log.i(TAG, "SEC1210 detected: ${sec1210.deviceName}") + + /* + * 3. Request SEC1210 permission, only if necessary. + */ + if (!ensureUsbPermission(sec1210)) { + Log.e(TAG, "SEC1210 permission not granted") + return false + } + + return true + } + + /** + * Waits for Android to enumerate a specific USB device. + * + * Polling here is intentional: + * this Activity only lives for a few seconds and it makes + * enumeration after power-on very simple. + */ + private suspend fun waitForUsbDevice( + vendorId: Int, productIdList: List, timeoutMs: Long + ): UsbDevice? = withTimeoutOrNull(timeoutMs) { + var device: UsbDevice? = null + + while (device == null) { + device = findUsbDevice(vendorId, productIdList) + + if (device == null) { + delay(POLL_DELAY_MS) + } + } + device + } + + private fun findUsbDevice( + vendorId: Int, productIdList: List + ): UsbDevice? { + + Log.d(TAG, "${usbManager.deviceList.size} devices found") + usbManager.deviceList.forEach { + Log.d(TAG, "device: ${it.value.deviceName}") + } + return usbManager.deviceList.values.firstOrNull { device -> + device.vendorId == vendorId && productIdList.contains(device.productId) + } + } + + /** + * Returns true if permission exists or if the user grants it. + * + * If the user ignores the permission dialog for too long, + * this returns false and the Activity terminates. + */ + private suspend fun ensureUsbPermission( + device: UsbDevice + ): Boolean { + + if (usbManager.hasPermission(device)) { + Log.i( + TAG, "Permission already granted for ${device.deviceName}" + ) + return true + } + + Log.i( + TAG, "Requesting permission for ${device.deviceName}" + ) + + val deferred = CompletableDeferred() + + pendingPermission = PendingPermission( + deviceId = device.deviceId, result = deferred + ) + + val permissionIntent = Intent(usbPermissionAction).setPackage(packageName) + + val pendingIntent = PendingIntent.getBroadcast( + this, 0, permissionIntent, PendingIntent.FLAG_MUTABLE + ) + + usbManager.requestPermission( + device, pendingIntent + ) + + val granted = try { + withTimeoutOrNull(PERMISSION_TIMEOUT_MS) { + deferred.await() + } ?: false + + } finally { + if (pendingPermission?.deviceId == device.deviceId) { + pendingPermission = null + } + } + + if (!granted) { + Log.w( + TAG, "Permission denied or timed out for ${device.deviceName}" + ) + } + + return granted + } + + var ftDevice: FT_Device? = null + + /** + * FTDI CBUS command that powers the smart card reader. + */ + private suspend fun powerSmartCardReader( + device: UsbDevice + ): Boolean = withContext(Dispatchers.IO) { + + try { + val d2xxManager = D2xxManager.getInstance(this@UsbConfigurationActivity) + + + val count = d2xxManager.createDeviceInfoList(this@UsbConfigurationActivity) + + if (count == 0) { + Log.e(TAG, "D2xx createDeviceInfoList() count == 0") + return@withContext false + } + + ftDevice = d2xxManager.openByUsbDevice( + this@UsbConfigurationActivity, device + ) + + if (ftDevice == null) { + Log.e(TAG, "D2xx openByUsbDevice() failed") + return@withContext false + } + + try { + + ftDevice?.apply { + resetDevice() + setBaudRate(9600) + setDataCharacteristics( + D2xxManager.FT_DATA_BITS_8, + D2xxManager.FT_STOP_BITS_1, + D2xxManager.FT_PARITY_NONE + ) + } + + val mask = computeFtdiGpioOutputMask(false, false, false, true) + ftDevice?.setBitMode(mask, SET_BIT_MODE.toByte()) + delay(FTDI_CONFIGURATION_DELAY) + + Log.i(TAG, "Smart card reader power enabled") + + true + + } finally { + // ftDevice should not be closed, it creates a race condition issue + // ftDevice.close() + } + + } catch (e: Exception) { + Log.e(TAG, "FTDI communication failed", e) + false + } + } + + private fun computeFtdiGpioOutputMask( + gpio0: Boolean, gpio1: Boolean, gpio2: Boolean, gpio3: Boolean + ): Byte { + + val direction = 0xF shl 4 + var values = 0 + if (!gpio0) values = values or (1 shl 0) + if (!gpio1) values = values or (1 shl 1) + if (!gpio2) values = values or (1 shl 2) + if (!gpio3) values = values or (1 shl 3) + + return (direction or values).toByte() + } + + + private fun registerPermissionReceiver() { + ContextCompat.registerReceiver( + this, + usbPermissionReceiver, + IntentFilter(usbPermissionAction), + ContextCompat.RECEIVER_NOT_EXPORTED + ) + } + + private fun getUsbDevice( + intent: Intent + ): UsbDevice? { + + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + intent.getParcelableExtra( + UsbManager.EXTRA_DEVICE, UsbDevice::class.java + ) + } else { + @Suppress("DEPRECATION") intent.getParcelableExtra( + UsbManager.EXTRA_DEVICE + ) + } + } + + fun isUsbDeviceReady(vendorId: Int, productIdList: List): Boolean { + val device = findUsbDevice(vendorId, productIdList) ?: return false + return usbManager.hasPermission(device) + } + +} + + +fun UsbDevice.isFtdi(): Boolean { + return (this.productId == FTDI_PID_1 || this.productId == FTDI_PID_2) && this.vendorId == FTDI_VID +} + diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt new file mode 100644 index 0000000..cb964d3 --- /dev/null +++ b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt @@ -0,0 +1,86 @@ +package fr.coppernic.sdk.usboutlet + +import android.content.Context +import android.content.Intent +import android.hardware.usb.UsbDevice +import android.hardware.usb.UsbManager + +class UsbConfigurationManager( + context: Context +) { + + + companion object { + + // Replace with your real values + const val FTDI_VENDOR_ID = 0x0403 + const val FTDI_PRODUCT_ID = 0x6001 + + const val SEC1210_VENDOR_ID = 0x0000 + const val SEC1210_PRODUCT_ID = 0x0000 + + fun createConfigurationIntent(context: Context): Intent { + return Intent( + context, + UsbConfigurationActivity::class.java + ) + } + } + + private val usbManager = + context.applicationContext + .getSystemService(Context.USB_SERVICE) as UsbManager + + /** + * Returns true if the final USB device required by the application + * is present and permission has already been granted. + */ + fun isReady(): Boolean { + val reader = getSmartCardReader() + ?: return false + + return usbManager.hasPermission(reader) + } + + fun isFtdiReady(): Boolean { + val ftdi = getFtdiDevice() + ?: return false + + return usbManager.hasPermission(ftdi) + } + + fun isSmartCardReaderReady(): Boolean { + val reader = getSmartCardReader() + ?: return false + + return usbManager.hasPermission(reader) + } + + fun getFtdiDevice(): UsbDevice? { + return findUsbDevice( + FTDI_VENDOR_ID, + FTDI_PRODUCT_ID + ) + } + + fun getSmartCardReader(): UsbDevice? { + return findUsbDevice( + SEC1210_VENDOR_ID, + SEC1210_PRODUCT_ID + ) + } + + fun hasPermission(device: UsbDevice): Boolean { + return usbManager.hasPermission(device) + } + + private fun findUsbDevice( + vendorId: Int, + productId: Int + ): UsbDevice? { + return usbManager.deviceList.values.firstOrNull { + it.vendorId == vendorId && + it.productId == productId + } + } +} diff --git a/app/src/main/res/xml/device_filter.xml b/app/src/main/res/xml/device_filter.xml new file mode 100644 index 0000000..129e140 --- /dev/null +++ b/app/src/main/res/xml/device_filter.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/src/pcscv1/java/fr/coppernic/samples/pcsc/ui/MainActivity.java b/app/src/pcscv1/java/fr/coppernic/samples/pcsc/ui/MainActivity.java index 5fd8d09..075d5ae 100644 --- a/app/src/pcscv1/java/fr/coppernic/samples/pcsc/ui/MainActivity.java +++ b/app/src/pcscv1/java/fr/coppernic/samples/pcsc/ui/MainActivity.java @@ -1,11 +1,7 @@ package fr.coppernic.samples.pcsc.ui; -import static fr.coppernic.sdk.power.OutletPowerManager.ACTION_USB_PERMISSION; - -import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; @@ -17,7 +13,10 @@ import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.TextView; +import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.Toolbar; @@ -33,6 +32,7 @@ import fr.coppernic.samples.pcsc.reader.PcscReader; import fr.coppernic.sdk.pcsc.ApduResponse; import fr.coppernic.sdk.power.OutletPowerManager; +import fr.coppernic.sdk.usboutlet.UsbConfigurationManager; import fr.coppernic.sdk.utils.core.CpcBytes; import fr.coppernic.sdk.utils.core.CpcResult; import fr.coppernic.sdk.utils.core.CpcResult.RESULT; @@ -41,6 +41,21 @@ public class MainActivity extends AppCompatActivity { + private UsbConfigurationManager usbConfigurationManager; + + private final ActivityResultLauncher usbConfigurationLauncher = + registerForActivityResult( + new ActivityResultContracts.StartActivityForResult(), + result -> { + if (result.getResultCode() == RESULT_OK) { + startPcscReader(); + } else { + handleUsbConfigurationFailure(); + } + } + ); + + FloatingActionButton fab; Toolbar toolbar; MaterialBetterSpinner spReader; @@ -69,6 +84,25 @@ public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + + initUi(); + + usbConfigurationManager = new UsbConfigurationManager(this); + } + + private void initializeUsb() { + // If SmartCard reader is powered and permission granted, no need to launch configuration activity + if (usbConfigurationManager.isSmartCardReaderReady()) { + startPcscReader(); + } else { + usbConfigurationLauncher.launch( + UsbConfigurationManager.Companion.createConfigurationIntent(this) + ); + } + } + + private void initUi() { + initTitle(); fab = findViewById(R.id.fab); @@ -113,37 +147,33 @@ public void afterTextChanged(Editable s) { //Init empty spinner ArrayAdapter arrayAdapter = new ArrayAdapter<>(this, - android.R.layout.simple_dropdown_item_1line, - new ArrayList()); + android.R.layout.simple_dropdown_item_1line, + new ArrayList()); spReader.setAdapter(arrayAdapter); etResult.clearFocus(); etApdu.setOnEditorActionListener(editorActionListener); + + showFAB(false); + + swConnect.setEnabled(false); + } + + private void handleUsbConfigurationFailure() { + Toast.makeText(this, "USB configuration failed", Toast.LENGTH_SHORT).show(); + finish(); } @Override protected void onStart() { Timber.d("onStart"); super.onStart(); - showFAB(false); - - // Register USB receiver - IntentFilter filter = new IntentFilter(); - filter.addAction(ACTION_USB_PERMISSION); - registerReceiver(usbReceiver, filter, RECEIVER_EXPORTED); - - powerOn(); + initializeUsb(); } @Override protected void onStop() { Timber.d("onStop"); - // Unregister USB receiver - try { - unregisterReceiver(usbReceiver); - } catch (Exception e) { - e.printStackTrace(); - } stopPcscReader(); super.onStop(); } @@ -199,38 +229,6 @@ private void stopPcscReader() { } //endregion - - //region USB - private BroadcastReceiver usbReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (ACTION_USB_PERMISSION.equalsIgnoreCase(action)) { - swConnect.setEnabled(true); - startPcscReader(); - } - } - }; - //endregion - - - // region Methods - void powerOn() { - if (!manager.isPowerOn(getApplicationContext())) { - Coroutines coroutines = new Coroutines(); - manager.powerOn(MainActivity.this, 10000L, coroutines.getContinuation( - (res, err) -> { - try { - Thread.sleep(500L); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - manager.getUsbPermissions(MainActivity.this); - } - )); - } - } - void connectCard() { if (reader != null) { if (!reader.isConnected()) {//Connect reader @@ -325,6 +323,8 @@ private void updateSpinner() { deviceList); spReader.setAdapter(arrayAdapter); } + + swConnect.setEnabled(deviceList != null); } //endregion } From 1f270b1706027bed9b9e9acb221c19ef706bdbcc Mon Sep 17 00:00:00 2001 From: Florent Yvinec Date: Fri, 21 Aug 2026 14:46:04 +0200 Subject: [PATCH 2/3] Refactor code, creates FtdiManager --- .../fr/coppernic/sdk/usboutlet/FTdiManager.kt | 83 ++++++++ .../sdk/usboutlet/UsbConfigurationActivity.kt | 182 +++++------------- .../sdk/usboutlet/UsbConfigurationManager.kt | 60 +----- .../coppernic/sdk/usboutlet/UsbExtension.kt | 46 +++++ 4 files changed, 178 insertions(+), 193 deletions(-) create mode 100644 app/src/main/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt create mode 100644 app/src/main/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt b/app/src/main/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt new file mode 100644 index 0000000..bd6885d --- /dev/null +++ b/app/src/main/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt @@ -0,0 +1,83 @@ +package fr.coppernic.sdk.usboutlet + +import android.content.Context +import android.content.Context.USB_SERVICE +import android.hardware.usb.UsbManager +import android.util.Log +import com.ftdi.j2xx.D2xxManager +import com.ftdi.j2xx.FT_Device + +const val SET_GPIO_OUTPUT_ALL_HIGH = 0xF0 + +const val SET_GPIO_OUTPUT_ALL_LOG = 0xFF + +const val SET_BIT_MODE = 0x20 +const val FTDI_CONFIGURATION_DELAY = 2000L + + +object FtdiManager { + + private var ftDevice: FT_Device? = null + private const val TAG = "FtdiManager" + + fun powerSmartCardReader(context: Context): Boolean { + val usbManager = context.applicationContext.getSystemService(USB_SERVICE) as UsbManager + + val ftdiUsbDevice = + findUsbDevice(usbManager, FTDI_VID, listOf(FTDI_PID_1, FTDI_PID_2)) ?: return false + + + try { + val d2xxManager = D2xxManager.getInstance(context) + val count = d2xxManager.createDeviceInfoList(context) + + if (count == 0) { + Log.e(TAG, "D2xx createDeviceInfoList() count == 0") + return false + } + + ftDevice = d2xxManager.openByUsbDevice( + context, ftdiUsbDevice + ) + + if (ftDevice == null) { + Log.e(TAG, "D2xx openByUsbDevice() failed") + return false + } + + ftDevice?.apply { + resetDevice() + setBaudRate(9600) + setDataCharacteristics( + D2xxManager.FT_DATA_BITS_8, + D2xxManager.FT_STOP_BITS_1, + D2xxManager.FT_PARITY_NONE + ) + } + + val mask = computeFtdiGpioOutputMask(false, false, false, true) + ftDevice?.setBitMode(mask, SET_BIT_MODE.toByte()) + + return true + } catch (e: Exception) { + Log.e(TAG, "FTDI communication failed", e) + return false + } + } + + + private fun computeFtdiGpioOutputMask( + gpio0: Boolean, gpio1: Boolean, gpio2: Boolean, gpio3: Boolean + ): Byte { + + val direction = 0xF shl 4 + var values = 0 + if (!gpio0) values = values or (1 shl 0) + if (!gpio1) values = values or (1 shl 1) + if (!gpio2) values = values or (1 shl 2) + if (!gpio3) values = values or (1 shl 3) + + return (direction or values).toByte() + } + +} diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt index 47bf531..3e3c6c4 100644 --- a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt +++ b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt @@ -13,7 +13,6 @@ import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope -import com.ftdi.j2xx.D2xxManager import com.ftdi.j2xx.FT_Device import fr.coppernic.sdk.power.OutletPowerManager import kotlin.coroutines.cancellation.CancellationException @@ -23,21 +22,6 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeoutOrNull - -const val FTDI_VID = 0x0403 -const val FTDI_PID_1 = 0x6010 -const val FTDI_PID_2 = 0x6015 - -const val SEC1210_VID = 0x0424 -const val SEC1210_PID = 0x1202 - -const val SET_GPIO_OUTPUT_ALL_HIGH = 0xF0 - -const val SET_GPIO_OUTPUT_ALL_LOG = 0xFF - -const val SET_BIT_MODE = 0x20 -const val FTDI_CONFIGURATION_DELAY = 2000L - class UsbConfigurationActivity : AppCompatActivity() { companion object { @@ -131,17 +115,14 @@ class UsbConfigurationActivity : AppCompatActivity() { private suspend fun configureUsb(): Boolean { try { - if (!isUsbDeviceReady(FTDI_VID, listOf(FTDI_PID_1, FTDI_PID_2))) { - if (!setupFtdi()) { - Log.e(TAG, "Unable to setup FTDI") - return false - } + if (!setupFtdi()) { + Log.e(TAG, "Unable to setup FTDI") + return false } - if (!isUsbDeviceReady(SEC1210_VID, listOf(SEC1210_PID))) { - if (!setupSmartCardReader()) { - return false - } + if (!setupSmartCardReader()) { + Log.e(TAG, "Unable to setup SmartCard reader") + return false } /* @@ -160,7 +141,11 @@ class UsbConfigurationActivity : AppCompatActivity() { } } - private suspend fun setupFtdi(): Boolean {/* + private suspend fun powerOutlet(): Boolean { + if (findUsbDevice(usbManager, FTDI_VID, listOf(FTDI_PID_1, FTDI_PID_2)) != null) { + Log.d(TAG, "FTDI already powered") + return true + }/* * 1. Power the outlet. * * this call blocks until the outlet is powered @@ -191,6 +176,18 @@ class UsbConfigurationActivity : AppCompatActivity() { Log.i(TAG, "device detected: ${ftdiDevice.deviceName}") Log.i(TAG, "device is Ftdi : ${ftdiDevice.isFtdi()}") + return true + } + + private suspend fun setupFtdi(): Boolean { + if (!powerOutlet()) { + return false + } + + val ftdiDevice = findUsbDevice( + usbManager, FTDI_VID, listOf(FTDI_PID_1, FTDI_PID_2) + ) ?: return false + /* * 3. Get FTDI permission, only when necessary. */ @@ -201,38 +198,16 @@ class UsbConfigurationActivity : AppCompatActivity() { return true } - private suspend fun setupSmartCardReader(): Boolean {/* - * 1. Use FTDI to power SEC1210. - */ - val ftdiDevice = findUsbDevice(FTDI_VID, listOf(FTDI_PID_1, FTDI_PID_2)) ?: return false - if (!powerSmartCardReader(ftdiDevice)) { + private suspend fun setupSmartCardReader(): Boolean { + if (!powerSmartCardReader()) { Log.e(TAG, "Unable to power smart card reader") return false } - /* - * 2. SEC1210 should now appear on USB. - */ - Log.i(TAG, "Waiting for SEC1210") - - val sec1210 = withContext(Dispatchers.IO) { - - waitForUsbDevice( - SEC1210_VID, listOf(SEC1210_PID), DEVICE_ENUM_TIMEOUT_MS - ) - } - - if (sec1210 == null) { - Log.e(TAG, "SEC1210 did not appear") - return false - } - - Log.i(TAG, "SEC1210 detected: ${sec1210.deviceName}") + val sec1210USbDevice = + findUsbDevice(usbManager, SEC1210_VID, listOf(SEC1210_PID)) ?: return false - /* - * 3. Request SEC1210 permission, only if necessary. - */ - if (!ensureUsbPermission(sec1210)) { + if (!ensureUsbPermission(sec1210USbDevice)) { Log.e(TAG, "SEC1210 permission not granted") return false } @@ -253,7 +228,7 @@ class UsbConfigurationActivity : AppCompatActivity() { var device: UsbDevice? = null while (device == null) { - device = findUsbDevice(vendorId, productIdList) + device = findUsbDevice(usbManager, vendorId, productIdList) if (device == null) { delay(POLL_DELAY_MS) @@ -262,19 +237,6 @@ class UsbConfigurationActivity : AppCompatActivity() { device } - private fun findUsbDevice( - vendorId: Int, productIdList: List - ): UsbDevice? { - - Log.d(TAG, "${usbManager.deviceList.size} devices found") - usbManager.deviceList.forEach { - Log.d(TAG, "device: ${it.value.deviceName}") - } - return usbManager.deviceList.values.firstOrNull { device -> - device.vendorId == vendorId && productIdList.contains(device.productId) - } - } - /** * Returns true if permission exists or if the user grants it. * @@ -337,76 +299,34 @@ class UsbConfigurationActivity : AppCompatActivity() { /** * FTDI CBUS command that powers the smart card reader. */ - private suspend fun powerSmartCardReader( - device: UsbDevice - ): Boolean = withContext(Dispatchers.IO) { - - try { - val d2xxManager = D2xxManager.getInstance(this@UsbConfigurationActivity) - + private suspend fun powerSmartCardReader(): Boolean = withContext(Dispatchers.IO) { + if (findUsbDevice(usbManager, SEC1210_VID, listOf(SEC1210_PID)) != null) { + Log.d(TAG, "Smart Card reader already powered") + return@withContext true + } - val count = d2xxManager.createDeviceInfoList(this@UsbConfigurationActivity) + if (!FtdiManager.powerSmartCardReader(context = this@UsbConfigurationActivity)) { + Log.e(TAG, "Error while powering Smartcard reader with FTDI") + return@withContext false + } - if (count == 0) { - Log.e(TAG, "D2xx createDeviceInfoList() count == 0") - return@withContext false - } + Log.i(TAG, "Waiting for SEC1210") - ftDevice = d2xxManager.openByUsbDevice( - this@UsbConfigurationActivity, device + val sec1210 = waitForUsbDevice( + SEC1210_VID, listOf(SEC1210_PID), DEVICE_ENUM_TIMEOUT_MS ) - if (ftDevice == null) { - Log.e(TAG, "D2xx openByUsbDevice() failed") - return@withContext false - } - - try { - - ftDevice?.apply { - resetDevice() - setBaudRate(9600) - setDataCharacteristics( - D2xxManager.FT_DATA_BITS_8, - D2xxManager.FT_STOP_BITS_1, - D2xxManager.FT_PARITY_NONE - ) - } - - val mask = computeFtdiGpioOutputMask(false, false, false, true) - ftDevice?.setBitMode(mask, SET_BIT_MODE.toByte()) - delay(FTDI_CONFIGURATION_DELAY) - - Log.i(TAG, "Smart card reader power enabled") - - true - - } finally { - // ftDevice should not be closed, it creates a race condition issue - // ftDevice.close() - } - - } catch (e: Exception) { - Log.e(TAG, "FTDI communication failed", e) - false + if (sec1210 == null) { + Log.e(TAG, "SEC1210 did not appear") + return@withContext false } - } - private fun computeFtdiGpioOutputMask( - gpio0: Boolean, gpio1: Boolean, gpio2: Boolean, gpio3: Boolean - ): Byte { + Log.i(TAG, "SEC1210 detected: ${sec1210.deviceName}") - val direction = 0xF shl 4 - var values = 0 - if (!gpio0) values = values or (1 shl 0) - if (!gpio1) values = values or (1 shl 1) - if (!gpio2) values = values or (1 shl 2) - if (!gpio3) values = values or (1 shl 3) + return@withContext true - return (direction or values).toByte() } - private fun registerPermissionReceiver() { ContextCompat.registerReceiver( this, @@ -431,15 +351,5 @@ class UsbConfigurationActivity : AppCompatActivity() { } } - fun isUsbDeviceReady(vendorId: Int, productIdList: List): Boolean { - val device = findUsbDevice(vendorId, productIdList) ?: return false - return usbManager.hasPermission(device) - } - -} - - -fun UsbDevice.isFtdi(): Boolean { - return (this.productId == FTDI_PID_1 || this.productId == FTDI_PID_2) && this.vendorId == FTDI_VID } diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt index cb964d3..e498948 100644 --- a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt +++ b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt @@ -2,22 +2,13 @@ package fr.coppernic.sdk.usboutlet import android.content.Context import android.content.Intent -import android.hardware.usb.UsbDevice import android.hardware.usb.UsbManager class UsbConfigurationManager( context: Context ) { - - companion object { - - // Replace with your real values - const val FTDI_VENDOR_ID = 0x0403 - const val FTDI_PRODUCT_ID = 0x6001 - - const val SEC1210_VENDOR_ID = 0x0000 - const val SEC1210_PRODUCT_ID = 0x0000 + companion object { fun createConfigurationIntent(context: Context): Intent { return Intent( @@ -31,56 +22,11 @@ class UsbConfigurationManager( context.applicationContext .getSystemService(Context.USB_SERVICE) as UsbManager - /** - * Returns true if the final USB device required by the application - * is present and permission has already been granted. - */ - fun isReady(): Boolean { - val reader = getSmartCardReader() - ?: return false - - return usbManager.hasPermission(reader) - } - - fun isFtdiReady(): Boolean { - val ftdi = getFtdiDevice() - ?: return false - - return usbManager.hasPermission(ftdi) - } - fun isSmartCardReaderReady(): Boolean { - val reader = getSmartCardReader() + val reader = getSmartCardReader(usbManager) ?: return false return usbManager.hasPermission(reader) } - fun getFtdiDevice(): UsbDevice? { - return findUsbDevice( - FTDI_VENDOR_ID, - FTDI_PRODUCT_ID - ) - } - - fun getSmartCardReader(): UsbDevice? { - return findUsbDevice( - SEC1210_VENDOR_ID, - SEC1210_PRODUCT_ID - ) - } - - fun hasPermission(device: UsbDevice): Boolean { - return usbManager.hasPermission(device) - } - - private fun findUsbDevice( - vendorId: Int, - productId: Int - ): UsbDevice? { - return usbManager.deviceList.values.firstOrNull { - it.vendorId == vendorId && - it.productId == productId - } - } -} + } diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt new file mode 100644 index 0000000..6960053 --- /dev/null +++ b/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt @@ -0,0 +1,46 @@ +package fr.coppernic.sdk.usboutlet + +import android.hardware.usb.UsbDevice +import android.hardware.usb.UsbManager + +const val FTDI_VID = 0x0403 +const val FTDI_PID_1 = 0x6010 +const val FTDI_PID_2 = 0x6015 + +const val SEC1210_VID = 0x0424 +const val SEC1210_PID = 0x1202 + +fun isUsbDeviceReady(usbManager: UsbManager, vendorId: Int, productIdList: List): Boolean { + val device = findUsbDevice(usbManager, vendorId, productIdList) ?: return false + return usbManager.hasPermission(device) +} + + +fun findUsbDevice(usbManager: UsbManager, + vendorId: Int, productIdList: List +): UsbDevice? { + return usbManager.deviceList.values.firstOrNull { device -> + device.vendorId == vendorId && productIdList.contains(device.productId) + } +} + +fun getFtdiDevice(usbManager: UsbManager): UsbDevice? { + return findUsbDevice( + usbManager, + FTDI_VID, + listOf(FTDI_PID_1, FTDI_PID_2) + ) +} + +fun getSmartCardReader(usbManager: UsbManager): UsbDevice? { + return findUsbDevice( + usbManager, + SEC1210_VID, + listOf(SEC1210_PID) + ) +} + +fun UsbDevice.isFtdi(): Boolean { + return (this.productId == FTDI_PID_1 || this.productId == FTDI_PID_2) && this.vendorId == FTDI_VID +} + From 0002e2c1cc4d74491b5a7d3ffffbcedb9cb376aa Mon Sep 17 00:00:00 2001 From: Florent Yvinec Date: Fri, 21 Aug 2026 15:08:15 +0200 Subject: [PATCH 3/3] supports assemble for v2 and v1 --- app/build.gradle | 6 ++++-- .../java/fr/coppernic/sdk/usboutlet/FTdiManager.kt | 0 .../java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt | 0 .../fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt | 0 .../fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt | 0 .../java/fr/coppernic/sdk/usboutlet/UsbExtension.kt | 0 6 files changed, 4 insertions(+), 2 deletions(-) rename app/src/{main => pcscv1}/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt (100%) rename app/src/{main => pcscv1}/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt (100%) rename app/src/{main => pcscv1}/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt (100%) rename app/src/{main => pcscv1}/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt (100%) rename app/src/{main => pcscv1}/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt (100%) diff --git a/app/build.gradle b/app/build.gradle index 5657062..e23c4db 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -111,7 +111,9 @@ dependencies { implementation 'fr.coppernic.lib.splash:splash:0.4.1' pcscv1Implementation 'fr.coppernic.sdk.pcsc:CpcPcsc:1.7.0' - pcscv2Implementation "fr.coppernic.sdk.pcsc2:CpcCore:3.7.0" + pcscv2Implementation("fr.coppernic.sdk.pcsc2:CpcCore:3.7.0") { + exclude group: "fr.coppernic.external", module: "D2xx" + } // RX-java implementation 'io.reactivex.rxjava2:rxjava:2.2.10' @@ -123,6 +125,6 @@ dependencies { // FTDI for Fusion support - implementation(files("libs/d2xx.jar")) + pcscv1Implementation(files("libs/d2xx.jar")) } diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt b/app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt similarity index 100% rename from app/src/main/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt rename to app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/FTdiManager.kt diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt b/app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt similarity index 100% rename from app/src/main/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt rename to app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/UsbAttachActivity.kt diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt b/app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt similarity index 100% rename from app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt rename to app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/UsbConfigurationActivity.kt diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt b/app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt similarity index 100% rename from app/src/main/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt rename to app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/UsbConfigurationManager.kt diff --git a/app/src/main/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt b/app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt similarity index 100% rename from app/src/main/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt rename to app/src/pcscv1/java/fr/coppernic/sdk/usboutlet/UsbExtension.kt