diff --git a/app/build.gradle b/app/build.gradle
index 27299a5f737faa08e14660993f69d5cb626d0c95..83b243dc546dfeafaa9d9505413eac200445de2c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,12 +1,11 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 23
- buildToolsVersion '25.0.0'
+ compileSdkVersion 28
defaultConfig {
applicationId 'net.dlogic.ufr.apdu_example'
minSdkVersion 15
- targetSdkVersion 15
+ targetSdkVersion 28
versionCode 11
versionName '1.1'
}
@@ -16,12 +15,10 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
- productFlavors {
- }
}
dependencies {
- compile fileTree(include: ['*.jar'], dir: 'libs')
- testCompile 'junit:junit:4.12'
- compile files('libs/d2xx.jar')
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
+ implementation 'junit:junit:4.12'
+ implementation files('libs/d2xx.jar')
}
diff --git a/app/build/generated/not_namespaced_r_class_sources/debug/r/net/dlogic/ufr/apdu_example/R.java b/app/build/generated/not_namespaced_r_class_sources/debug/r/net/dlogic/ufr/apdu_example/R.java
new file mode 100644
index 0000000000000000000000000000000000000000..383767d6c4e321ca8a1d539a87a9656835ee358a
--- /dev/null
+++ b/app/build/generated/not_namespaced_r_class_sources/debug/r/net/dlogic/ufr/apdu_example/R.java
@@ -0,0 +1,63 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package net.dlogic.ufr.apdu_example;
+
+public final class R {
+ public static final class array {
+ public static final int authentication_mode_names=0x7f010000;
+ public static final int beep_signal_modes=0x7f010001;
+ public static final int capdu_picker=0x7f010002;
+ public static final int light_signal_modes=0x7f010003;
+ }
+ public static final class dimen {
+ public static final int activity_horizontal_margin=0x7f020000;
+ public static final int activity_vertical_margin=0x7f020001;
+ }
+ public static final class drawable {
+ public static final int button_pattern=0x7f030000;
+ public static final int ic_launcher=0x7f030001;
+ }
+ public static final class id {
+ public static final int BlockRead=0x7f040000;
+ public static final int btnApduTransceive=0x7f040001;
+ public static final int btnDeselect=0x7f040002;
+ public static final int btnDeviceType=0x7f040003;
+ public static final int btnSelect=0x7f040004;
+ public static final int btnUiSignal=0x7f040005;
+ public static final int ebCAPDU=0x7f040006;
+ public static final int ebDeviceType=0x7f040007;
+ public static final int ebRAPDU=0x7f040008;
+ public static final int editText4=0x7f040009;
+ public static final int spnBeepMode=0x7f04000a;
+ public static final int spnCAPDUPicker=0x7f04000b;
+ public static final int spnLightMode=0x7f04000c;
+ public static final int textView=0x7f04000d;
+ public static final int textView2=0x7f04000e;
+ public static final int textView3=0x7f04000f;
+ public static final int textView4=0x7f040010;
+ }
+ public static final class layout {
+ public static final int dl_spinner_textview=0x7f050000;
+ public static final int main=0x7f050001;
+ }
+ public static final class mipmap {
+ public static final int ic_launcher=0x7f060000;
+ }
+ public static final class string {
+ public static final int app_name=0x7f070000;
+ public static final int title_activity_main=0x7f070001;
+ }
+ public static final class style {
+ public static final int AppTheme=0x7f080000;
+ }
+ public static final class xml {
+ public static final int accessory_filter=0x7f090000;
+ public static final int dev_desc_filter=0x7f090001;
+ public static final int device_filter=0x7f090002;
+ }
+}
\ No newline at end of file
diff --git a/app/build/generated/source/buildConfig/androidTest/debug/net/dlogic/ufr/apdu_example/test/BuildConfig.java b/app/build/generated/source/buildConfig/androidTest/debug/net/dlogic/ufr/apdu_example/test/BuildConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..38dad6699e2bd511e56bef502cec6a07a689138e
--- /dev/null
+++ b/app/build/generated/source/buildConfig/androidTest/debug/net/dlogic/ufr/apdu_example/test/BuildConfig.java
@@ -0,0 +1,13 @@
+/**
+ * Automatically generated file. DO NOT MODIFY
+ */
+package net.dlogic.ufr.apdu_example.test;
+
+public final class BuildConfig {
+ public static final boolean DEBUG = Boolean.parseBoolean("true");
+ public static final String APPLICATION_ID = "net.dlogic.ufr.apdu_example.test";
+ public static final String BUILD_TYPE = "debug";
+ public static final String FLAVOR = "";
+ public static final int VERSION_CODE = 11;
+ public static final String VERSION_NAME = "1.1";
+}
diff --git a/app/build/generated/source/buildConfig/debug/net/dlogic/ufr/apdu_example/BuildConfig.java b/app/build/generated/source/buildConfig/debug/net/dlogic/ufr/apdu_example/BuildConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..14bb46f12e26948e6607cd16e4f7212edc8b13ec
--- /dev/null
+++ b/app/build/generated/source/buildConfig/debug/net/dlogic/ufr/apdu_example/BuildConfig.java
@@ -0,0 +1,13 @@
+/**
+ * Automatically generated file. DO NOT MODIFY
+ */
+package net.dlogic.ufr.apdu_example;
+
+public final class BuildConfig {
+ public static final boolean DEBUG = Boolean.parseBoolean("true");
+ public static final String APPLICATION_ID = "net.dlogic.ufr.apdu_example";
+ public static final String BUILD_TYPE = "debug";
+ public static final String FLAVOR = "";
+ public static final int VERSION_CODE = 11;
+ public static final String VERSION_NAME = "1.1";
+}
diff --git a/app/build/intermediates/annotation_processor_list/debug/annotationProcessors.json b/app/build/intermediates/annotation_processor_list/debug/annotationProcessors.json
new file mode 100644
index 0000000000000000000000000000000000000000..9e26dfeeb6e641a33dae4961196235bdb965b21b
--- /dev/null
+++ b/app/build/intermediates/annotation_processor_list/debug/annotationProcessors.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/app/build/intermediates/apk_list/debug/mainApkListPersistenceDebug/apk-list.gson b/app/build/intermediates/apk_list/debug/mainApkListPersistenceDebug/apk-list.gson
new file mode 100644
index 0000000000000000000000000000000000000000..6c3f5f8620d97cc84010073c8060065f0a408059
--- /dev/null
+++ b/app/build/intermediates/apk_list/debug/mainApkListPersistenceDebug/apk-list.gson
@@ -0,0 +1 @@
+[{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"}]
\ No newline at end of file
diff --git a/app/build/intermediates/blame/res/debug/multi-v2/debug.json b/app/build/intermediates/blame/res/debug/multi-v2/debug.json
new file mode 100644
index 0000000000000000000000000000000000000000..021740db2506a25dd811c9b3298185a428ebffc4
--- /dev/null
+++ b/app/build/intermediates/blame/res/debug/multi-v2/debug.json
@@ -0,0 +1,86 @@
+{
+ "logs": [
+ {
+ "outputFile": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\values-w820dp-v13_values-w820dp-v13.arsc.flat",
+ "map": [
+ {
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\values-w820dp\\dimens.xml",
+ "from": {
+ "startLines": "4",
+ "startColumns": "4",
+ "startOffsets": "295",
+ "endColumns": "57",
+ "endOffsets": "348"
+ },
+ "to": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "55",
+ "endColumns": "57",
+ "endOffsets": "108"
+ }
+ }
+ ]
+ },
+ {
+ "outputFile": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\values_values.arsc.flat",
+ "map": [
+ {
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\values\\strings.xml",
+ "from": {
+ "startLines": "29,12,21,4,1,2",
+ "startColumns": "1,1,4,1,4,1",
+ "startOffsets": "846,352,578,152,17,76",
+ "endLines": "32,19,27,10,1,2",
+ "endColumns": "16,16,19,16,60,72",
+ "endOffsets": "975,570,841,347,73,147"
+ },
+ "to": {
+ "startLines": "2,6,14,21,30,31",
+ "startColumns": "4,4,4,4,4,4",
+ "startOffsets": "55,186,402,664,972,1033",
+ "endLines": "5,13,20,27,30,31",
+ "endColumns": "16,16,19,16,60,75",
+ "endOffsets": "181,397,659,853,1028,1104"
+ }
+ },
+ {
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\values\\styles.xml",
+ "from": {
+ "startLines": "3",
+ "startColumns": "4",
+ "startOffsets": "57",
+ "endLines": "5",
+ "endColumns": "12",
+ "endOffsets": "187"
+ },
+ "to": {
+ "startLines": "32",
+ "startColumns": "4",
+ "startOffsets": "1109",
+ "endLines": "34",
+ "endColumns": "12",
+ "endOffsets": "1237"
+ }
+ },
+ {
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\values\\dimens.xml",
+ "from": {
+ "startLines": "2,3",
+ "startColumns": "4,4",
+ "startOffsets": "90,149",
+ "endColumns": "57,55",
+ "endOffsets": "143,200"
+ },
+ "to": {
+ "startLines": "28,29",
+ "startColumns": "4,4",
+ "startOffsets": "858,916",
+ "endColumns": "57,55",
+ "endOffsets": "911,967"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/app/build/intermediates/blame/res/debug/multi-v2/values-w820dp-v13.json b/app/build/intermediates/blame/res/debug/multi-v2/values-w820dp-v13.json
new file mode 100644
index 0000000000000000000000000000000000000000..a0f58a1dfeb80ab1ed6dffa7ab3833da61cf83ad
--- /dev/null
+++ b/app/build/intermediates/blame/res/debug/multi-v2/values-w820dp-v13.json
@@ -0,0 +1,26 @@
+{
+ "logs": [
+ {
+ "outputFile": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\incremental\\mergeDebugResources\\merged.dir\\values-w820dp-v13\\values-w820dp-v13.xml",
+ "map": [
+ {
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\values-w820dp\\dimens.xml",
+ "from": {
+ "startLines": "4",
+ "startColumns": "4",
+ "startOffsets": "295",
+ "endColumns": "57",
+ "endOffsets": "348"
+ },
+ "to": {
+ "startLines": "2",
+ "startColumns": "4",
+ "startOffsets": "55",
+ "endColumns": "57",
+ "endOffsets": "108"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/app/build/intermediates/blame/res/debug/multi-v2/values.json b/app/build/intermediates/blame/res/debug/multi-v2/values.json
new file mode 100644
index 0000000000000000000000000000000000000000..760722099b54aef0683703117d359e95cf5ae812
--- /dev/null
+++ b/app/build/intermediates/blame/res/debug/multi-v2/values.json
@@ -0,0 +1,64 @@
+{
+ "logs": [
+ {
+ "outputFile": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\incremental\\mergeDebugResources\\merged.dir\\values\\values.xml",
+ "map": [
+ {
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\values\\strings.xml",
+ "from": {
+ "startLines": "29,12,21,4,1,2",
+ "startColumns": "1,1,4,1,4,1",
+ "startOffsets": "846,352,578,152,17,76",
+ "endLines": "32,19,27,10,1,2",
+ "endColumns": "16,16,19,16,60,72",
+ "endOffsets": "975,570,841,347,73,147"
+ },
+ "to": {
+ "startLines": "2,6,14,21,30,31",
+ "startColumns": "4,4,4,4,4,4",
+ "startOffsets": "55,186,402,664,972,1033",
+ "endLines": "5,13,20,27,30,31",
+ "endColumns": "16,16,19,16,60,75",
+ "endOffsets": "181,397,659,853,1028,1104"
+ }
+ },
+ {
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\values\\styles.xml",
+ "from": {
+ "startLines": "3",
+ "startColumns": "4",
+ "startOffsets": "57",
+ "endLines": "5",
+ "endColumns": "12",
+ "endOffsets": "187"
+ },
+ "to": {
+ "startLines": "32",
+ "startColumns": "4",
+ "startOffsets": "1109",
+ "endLines": "34",
+ "endColumns": "12",
+ "endOffsets": "1237"
+ }
+ },
+ {
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\values\\dimens.xml",
+ "from": {
+ "startLines": "2,3",
+ "startColumns": "4,4",
+ "startOffsets": "90,149",
+ "endColumns": "57,55",
+ "endOffsets": "143,200"
+ },
+ "to": {
+ "startLines": "28,29",
+ "startColumns": "4,4",
+ "startOffsets": "858,916",
+ "endColumns": "57,55",
+ "endOffsets": "911,967"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/app/build/intermediates/blame/res/debug/single/debug.json b/app/build/intermediates/blame/res/debug/single/debug.json
new file mode 100644
index 0000000000000000000000000000000000000000..66895a7109e12d6950f6fbc3c8c4e7c963404775
--- /dev/null
+++ b/app/build/intermediates/blame/res/debug/single/debug.json
@@ -0,0 +1,58 @@
+[
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\xml_device_filter.xml.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\xml\\device_filter.xml"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi_ic_launcher.png.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-xhdpi\\ic_launcher.png"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldpi_ic_launcher.png.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-ldpi\\ic_launcher.png"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\mipmap-mdpi_ic_launcher.png.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\mipmap-mdpi\\ic_launcher.png"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\mipmap-xhdpi_ic_launcher.png.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\mipmap-xhdpi\\ic_launcher.png"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_button_pattern.xml.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-hdpi\\button_pattern.xml"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\layout_dl_spinner_textview.xml.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\layout\\dl_spinner_textview.xml"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\mipmap-xxhdpi_ic_launcher.png.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\mipmap-xxhdpi\\ic_launcher.png"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi_ic_launcher.png.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-mdpi\\ic_launcher.png"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_ic_launcher.png.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-hdpi\\ic_launcher.png"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\mipmap-hdpi_ic_launcher.png.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\mipmap-hdpi\\ic_launcher.png"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\layout_main.xml.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\layout\\main.xml"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\xml_dev_desc_filter.xml.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\xml\\dev_desc_filter.xml"
+ },
+ {
+ "merged": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\xml_accessory_filter.xml.flat",
+ "source": "C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\xml\\accessory_filter.xml"
+ }
+]
\ No newline at end of file
diff --git a/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/AndroidManifest.xml b/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/AndroidManifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..668af43ff84bb17e71ddd378bbce328438b08bac
--- /dev/null
+++ b/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/AndroidManifest.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/output.json b/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..2c53feee3634fc771b1810f904d759421c10aa43
--- /dev/null
+++ b/app/build/intermediates/bundle_manifest/debug/processDebugManifest/bundle-manifest/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"BUNDLE_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"net.dlogic.ufr.apdu_example","split":"","minSdkVersion":"15"}}]
\ No newline at end of file
diff --git a/app/build/intermediates/compatible_screen_manifest/debug/createDebugCompatibleScreenManifests/out/output.json b/app/build/intermediates/compatible_screen_manifest/debug/createDebugCompatibleScreenManifests/out/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/app/build/intermediates/compatible_screen_manifest/debug/createDebugCompatibleScreenManifests/out/output.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex b/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex
new file mode 100644
index 0000000000000000000000000000000000000000..939415a466ed69e4e99e811a805b4795559fac2f
Binary files /dev/null and b/app/build/intermediates/dex/debug/mergeDexDebug/out/classes.dex differ
diff --git a/app/build/intermediates/external_libs_dex/debug/mergeExtDexDebug/out/classes.dex b/app/build/intermediates/external_libs_dex/debug/mergeExtDexDebug/out/classes.dex
new file mode 100644
index 0000000000000000000000000000000000000000..dd7ee6faae106f40f46228d89fdf5be41ff68750
Binary files /dev/null and b/app/build/intermediates/external_libs_dex/debug/mergeExtDexDebug/out/classes.dex differ
diff --git a/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state b/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state
new file mode 100644
index 0000000000000000000000000000000000000000..4026c8b9b73c1d877ced590571f85012725b7cab
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeJavaRes/merge-state differ
diff --git a/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/0YcKOwRw3WD37ME6PzkJqv6FHrg= b/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/0YcKOwRw3WD37ME6PzkJqv6FHrg=
new file mode 100644
index 0000000000000000000000000000000000000000..e6f0e4a34df1aa22d3460822f4d4bcc835ce9f72
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/0YcKOwRw3WD37ME6PzkJqv6FHrg= differ
diff --git a/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/kn3PE+E60mwRM5v8Worzm74xIjw= b/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/kn3PE+E60mwRM5v8Worzm74xIjw=
new file mode 100644
index 0000000000000000000000000000000000000000..3a7fc266c3e32283a2b21fe12166ebdcc33a1da1
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/kn3PE+E60mwRM5v8Worzm74xIjw= differ
diff --git a/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/rdjPlWA6U7BQTcT7cppIVt7PTRk= b/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/rdjPlWA6U7BQTcT7cppIVt7PTRk=
new file mode 100644
index 0000000000000000000000000000000000000000..9d5fe16e3dd37ebe79a36f61f5d0e1a69a653a8a
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/rdjPlWA6U7BQTcT7cppIVt7PTRk= differ
diff --git a/app/build/intermediates/incremental/debug-mergeNativeLibs/merge-state b/app/build/intermediates/incremental/debug-mergeNativeLibs/merge-state
new file mode 100644
index 0000000000000000000000000000000000000000..73589f7bf9240164bc37597f76dc91d79cedf1f3
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeNativeLibs/merge-state differ
diff --git a/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/0YcKOwRw3WD37ME6PzkJqv6FHrg= b/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/0YcKOwRw3WD37ME6PzkJqv6FHrg=
new file mode 100644
index 0000000000000000000000000000000000000000..e6f0e4a34df1aa22d3460822f4d4bcc835ce9f72
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/0YcKOwRw3WD37ME6PzkJqv6FHrg= differ
diff --git a/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/kn3PE+E60mwRM5v8Worzm74xIjw= b/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/kn3PE+E60mwRM5v8Worzm74xIjw=
new file mode 100644
index 0000000000000000000000000000000000000000..3a7fc266c3e32283a2b21fe12166ebdcc33a1da1
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/kn3PE+E60mwRM5v8Worzm74xIjw= differ
diff --git a/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/rdjPlWA6U7BQTcT7cppIVt7PTRk= b/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/rdjPlWA6U7BQTcT7cppIVt7PTRk=
new file mode 100644
index 0000000000000000000000000000000000000000..9d5fe16e3dd37ebe79a36f61f5d0e1a69a653a8a
Binary files /dev/null and b/app/build/intermediates/incremental/debug-mergeNativeLibs/zip-cache/rdjPlWA6U7BQTcT7cppIVt7PTRk= differ
diff --git a/app/build/intermediates/incremental/mergeDebugAssets/merger.xml b/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b245574c7124625415d2a1f79daf30309f33890e
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a51bcb72238e07e0a0786a931477c588a94470fb
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugResources/compile-file-map.properties b/app/build/intermediates/incremental/mergeDebugResources/compile-file-map.properties
new file mode 100644
index 0000000000000000000000000000000000000000..b106a7d92e1d89e12744a580a39e8166086532f9
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugResources/compile-file-map.properties
@@ -0,0 +1,15 @@
+#Thu Dec 05 13:35:49 CET 2019
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\layout\\dl_spinner_textview.xml=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\layout_dl_spinner_textview.xml.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\xml\\accessory_filter.xml=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\xml_accessory_filter.xml.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-mdpi\\ic_launcher.png=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-mdpi_ic_launcher.png.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\mipmap-mdpi\\ic_launcher.png=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\mipmap-mdpi_ic_launcher.png.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\xml\\device_filter.xml=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\xml_device_filter.xml.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-xhdpi\\ic_launcher.png=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-xhdpi_ic_launcher.png.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\layout\\main.xml=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\layout_main.xml.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\xml\\dev_desc_filter.xml=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\xml_dev_desc_filter.xml.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-ldpi\\ic_launcher.png=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-ldpi_ic_launcher.png.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\mipmap-xxhdpi\\ic_launcher.png=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\mipmap-xxhdpi_ic_launcher.png.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-hdpi\\ic_launcher.png=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_ic_launcher.png.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\mipmap-xhdpi\\ic_launcher.png=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\mipmap-xhdpi_ic_launcher.png.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\mipmap-hdpi\\ic_launcher.png=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\mipmap-hdpi_ic_launcher.png.flat
+C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\src\\main\\res\\drawable-hdpi\\button_pattern.xml=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\res\\merged\\debug\\drawable-hdpi_button_pattern.xml.flat
diff --git a/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values-w820dp-v13/values-w820dp-v13.xml b/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values-w820dp-v13/values-w820dp-v13.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3eda5f55d5dd48b6d54c2e35f8679d9be1b44f5b
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values-w820dp-v13/values-w820dp-v13.xml
@@ -0,0 +1,4 @@
+
+
+ 64dp
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml b/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b5be1068664184c04baf7ac34a5c6c44a9e0f339
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml
@@ -0,0 +1,36 @@
+
+
+
+ - Authent1 A keys
+ - Authent1 B keys
+
+
+ - None
+ - Beep mode 1
+ - Beep mode 2
+ - Beep mode 3
+ - Beep mode 4
+ - Beep mode 5
+
+
+ - NFC NDEF tag app select
+ - NFC CC select
+ - NFC NDEF file select
+ - ST M24SRxx sys file select
+ - Read Binary
+
+
+ - None
+ - Light mode 1
+ - Light mode 2
+ - Light mode 3
+ - Light mode 4
+
+ 16dp
+ 16dp
+ DLogic uFR APDU example
+ DLogic uFR APDU example 1.1
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugResources/merger.xml b/app/build/intermediates/incremental/mergeDebugResources/merger.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fa54d0314c7b2eeac95be0536e9cde1cf95348bb
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugResources/merger.xml
@@ -0,0 +1,26 @@
+
+16dp16dpDLogic uFR APDU exampleDLogic uFR APDU example 1.1
+ - None
+ - Light mode 1
+ - Light mode 2
+ - Light mode 3
+ - Light mode 4
+
+ - None
+ - Beep mode 1
+ - Beep mode 2
+ - Beep mode 3
+ - Beep mode 4
+ - Beep mode 5
+
+ - NFC NDEF tag app select
+ - NFC CC select
+ - NFC NDEF file select
+ - ST M24SRxx sys file select
+ - Read Binary
+
+ - Authent1 A keys
+ - Authent1 B keys
+ 64dp
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugShaders/merger.xml b/app/build/intermediates/incremental/mergeDebugShaders/merger.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ad7de639bd24b079bbd27bbc910e3c401f9f90da
--- /dev/null
+++ b/app/build/intermediates/incremental/mergeDebugShaders/merger.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt b/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b75501f6cb8ad5b618335dc528c3b96f60f3795a
--- /dev/null
+++ b/app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
@@ -0,0 +1,4 @@
+#Thu Dec 05 13:44:09 CET 2019
+base.0=C\:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\dex\\debug\\mergeDexDebug\\out\\classes.dex
+path.0=classes.dex
+renamed.0=classes.dex
diff --git a/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/Ln1C3zyJhd4Oy9qfC32N0g7nXvo= b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/Ln1C3zyJhd4Oy9qfC32N0g7nXvo=
new file mode 100644
index 0000000000000000000000000000000000000000..80eae08ff458e2519063cb71e21efd4dbfc0b401
Binary files /dev/null and b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/Ln1C3zyJhd4Oy9qfC32N0g7nXvo= differ
diff --git a/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/et5CVCgF7dL6ovlB6QwW4hMKV9U= b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/et5CVCgF7dL6ovlB6QwW4hMKV9U=
new file mode 100644
index 0000000000000000000000000000000000000000..55c31bd7a47777b6e5107a218e4e4a6a0d49bf94
Binary files /dev/null and b/app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/et5CVCgF7dL6ovlB6QwW4hMKV9U= differ
diff --git a/app/build/intermediates/instant_app_manifest/debug/AndroidManifest.xml b/app/build/intermediates/instant_app_manifest/debug/AndroidManifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ca48adcc4bbc073a5946dc739d23fa173d5dabfd
--- /dev/null
+++ b/app/build/intermediates/instant_app_manifest/debug/AndroidManifest.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/instant_app_manifest/debug/output.json b/app/build/intermediates/instant_app_manifest/debug/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..b8f3655cb8291410b8665123bd314cdcf981f9d7
--- /dev/null
+++ b/app/build/intermediates/instant_app_manifest/debug/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"INSTANT_APP_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"net.dlogic.ufr.apdu_example","split":"","minSdkVersion":"15"}}]
\ No newline at end of file
diff --git a/app/build/intermediates/instant_app_manifest/debug/processDebugManifest/instant-app-manifest/AndroidManifest.xml b/app/build/intermediates/instant_app_manifest/debug/processDebugManifest/instant-app-manifest/AndroidManifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ca48adcc4bbc073a5946dc739d23fa173d5dabfd
--- /dev/null
+++ b/app/build/intermediates/instant_app_manifest/debug/processDebugManifest/instant-app-manifest/AndroidManifest.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/instant_app_manifest/debug/processDebugManifest/instant-app-manifest/output.json b/app/build/intermediates/instant_app_manifest/debug/processDebugManifest/instant-app-manifest/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..8b361e5aa2c6914dbdb75524031a3d26077a6e54
--- /dev/null
+++ b/app/build/intermediates/instant_app_manifest/debug/processDebugManifest/instant-app-manifest/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"INSTANT_APP_MANIFEST"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"net.dlogic.ufr.apdu_example","split":"","minSdkVersion":"15"}}]
\ No newline at end of file
diff --git a/app/build/intermediates/instant_run_merged_manifests/debug/processDebugManifest/instant-run/output.json b/app/build/intermediates/instant_run_merged_manifests/debug/processDebugManifest/instant-run/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..92510182cfae239ae323703182a312aacfebd3d0
--- /dev/null
+++ b/app/build/intermediates/instant_run_merged_manifests/debug/processDebugManifest/instant-run/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"INSTANT_RUN_MERGED_MANIFESTS"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"net.dlogic.ufr.apdu_example","split":"","minSdkVersion":"15"}}]
\ No newline at end of file
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/BuildConfig.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/BuildConfig.class
new file mode 100644
index 0000000000000000000000000000000000000000..f1ba972b41c188d249c30ca3e56ae2095cb73ace
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/BuildConfig.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$1.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..cb5cf185b458cbc700d9fa93c3223f462400362b
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$2.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..53fe1a3c840105087cfbd6c16df14930cb8d635e
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$2.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$3.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$3.class
new file mode 100644
index 0000000000000000000000000000000000000000..9361bc3fe9c702363d1fa7fe68bbb44c4b66bb73
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$3.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$4.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$4.class
new file mode 100644
index 0000000000000000000000000000000000000000..ae31b62ee36f40d9544cfce7dfba36faafc6b74d
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$4.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$5.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$5.class
new file mode 100644
index 0000000000000000000000000000000000000000..4cd1055b794e13b29fa1295273ba6dc71912e0a9
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$5.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$6.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$6.class
new file mode 100644
index 0000000000000000000000000000000000000000..7bb52a458ef7aa3db5e2c3a3d55deaad75351898
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$6.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$7.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$7.class
new file mode 100644
index 0000000000000000000000000000000000000000..37dbbc5dcd19a9e413a5ae5cfb12cbd5cd9babad
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$7.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$8.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$8.class
new file mode 100644
index 0000000000000000000000000000000000000000..b77491e6a88f67c7a33766dde94d59d423ba28dc
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$8.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Consts.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Consts.class
new file mode 100644
index 0000000000000000000000000000000000000000..00db293a38b89061a3c2399d9e9d7581891c7898
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Consts.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$IncomingHandler.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$IncomingHandler.class
new file mode 100644
index 0000000000000000000000000000000000000000..d97de460a1d65e65c43519e05ae1a341ab30ee9d
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$IncomingHandler.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$ReaderThread.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$ReaderThread.class
new file mode 100644
index 0000000000000000000000000000000000000000..c8dd0c20b215523754928105873f6ea78a52e8dd
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$ReaderThread.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Task.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Task.class
new file mode 100644
index 0000000000000000000000000000000000000000..b8d2e1bf9033021d4c0ea4e7a07522812584cd3c
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Task.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Tools.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Tools.class
new file mode 100644
index 0000000000000000000000000000000000000000..22d352d17bbcd16e38463cf78b201f8075e9df17
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main$Tools.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main.class
new file mode 100644
index 0000000000000000000000000000000000000000..e586651b2900f6f512d4739caba04e46b925aa38
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/Main.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$array.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$array.class
new file mode 100644
index 0000000000000000000000000000000000000000..66ed30e32ca09be3cc0bb1744ee6be03bbfe8a29
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$array.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$dimen.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$dimen.class
new file mode 100644
index 0000000000000000000000000000000000000000..47799f5cad5a1455ef9ff74fa09b612b62a218d4
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$dimen.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$drawable.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$drawable.class
new file mode 100644
index 0000000000000000000000000000000000000000..8e7573eae11b6445fcf80e2985e96fff854b772b
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$drawable.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$id.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$id.class
new file mode 100644
index 0000000000000000000000000000000000000000..3a7b08bd122ce39120d4dadc67eadfcaf434a4e5
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$id.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$layout.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$layout.class
new file mode 100644
index 0000000000000000000000000000000000000000..8de3256610c69e464c2dfd12c2d7c028bee7e5d4
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$layout.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$mipmap.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$mipmap.class
new file mode 100644
index 0000000000000000000000000000000000000000..5df2b56a0a2134c8124bb2c4d5a31891f8e8a07c
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$mipmap.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$string.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$string.class
new file mode 100644
index 0000000000000000000000000000000000000000..17b5821b6502b922243812f1f7da48de43e8d216
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$string.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$style.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$style.class
new file mode 100644
index 0000000000000000000000000000000000000000..1198d396072304203e60d7cbe81ff2ad8d3aa78d
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$style.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$xml.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$xml.class
new file mode 100644
index 0000000000000000000000000000000000000000..1e4eab5b3a72bba858c6ac15e948d6d388ce9579
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R$xml.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R.class
new file mode 100644
index 0000000000000000000000000000000000000000..a0a059257767f6913215afe6105056a704975810
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/apdu_example/R.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$1.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..60764b968abec355c79dc80d9b9a7665264393e4
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$1.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$2.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..699a11b8a6daac89e3f3331f30e6dbd0c79b63e3
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$2.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$AoAReadThread.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$AoAReadThread.class
new file mode 100644
index 0000000000000000000000000000000000000000..6976548c93f1f2ccfac82ba7e880936029a0d61e
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$AoAReadThread.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$CardParams.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$CardParams.class
new file mode 100644
index 0000000000000000000000000000000000000000..b09aa80ab438afbc007cbe55fe851796d050e157
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$CardParams.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$ComParams.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$ComParams.class
new file mode 100644
index 0000000000000000000000000000000000000000..14da7ae8636537445c5e731ae36ad876756d5fd6
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$ComParams.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$ComProtocol.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$ComProtocol.class
new file mode 100644
index 0000000000000000000000000000000000000000..cf1a64074f7be24da2c969934a99a1f8fcc703d7
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$ComProtocol.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$Consts.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$Consts.class
new file mode 100644
index 0000000000000000000000000000000000000000..a6b6f669334432eb98204c724bf6bf23e3f12a21
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$Consts.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$DlErrorCodes.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$DlErrorCodes.class
new file mode 100644
index 0000000000000000000000000000000000000000..08743cb814b5eadc396a6e359fb3d602e54d999d
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$DlErrorCodes.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$DlReaderException.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$DlReaderException.class
new file mode 100644
index 0000000000000000000000000000000000000000..aa831ee3bdba028e56d7392acaa397c338c5f2bf
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$DlReaderException.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$LocalException.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$LocalException.class
new file mode 100644
index 0000000000000000000000000000000000000000..f1128c9def750ae61383b8b7a172fb04ea1f40e0
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader$LocalException.class differ
diff --git a/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader.class b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader.class
new file mode 100644
index 0000000000000000000000000000000000000000..e32d908102467a345e4bee7981242d1bbfda4f1e
Binary files /dev/null and b/app/build/intermediates/javac/debug/classes/net/dlogic/ufr/lib/DlReader.class differ
diff --git a/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a98796d3b0a0d25241b95566cdb4fe2eb1787a47
--- /dev/null
+++ b/app/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
@@ -0,0 +1,79 @@
+1
+2
+6
+7 C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+9 android:targetSdkVersion="28" />
+9-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+10
+11
+11-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:6:2-59
+11-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:6:16-56
+12
+12-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:7:5-67
+12-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:7:19-64
+13
+14 C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:9:5-36:19
+15 android:debuggable="true"
+16 android:icon="@drawable/ic_launcher"
+16-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:10:9-45
+17 android:label="@string/app_name" >
+17-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:11:9-41
+18 C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:12:9-35:20
+19 android:name="net.dlogic.ufr.apdu_example.Main"
+19-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:13:13-60
+20 android:autoRemoveFromRecents="true"
+20-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:17:13-49
+21 android:configChanges="keyboardHidden|orientation|screenSize"
+21-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:16:13-74
+22 android:label="@string/title_activity_main"
+22-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:14:13-56
+23 android:launchMode="singleTask" >
+23-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:15:13-44
+24
+24-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:20:13-23:29
+25
+25-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:21:17-69
+25-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:21:25-66
+26
+27
+27-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:22:17-77
+27-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:22:27-74
+28
+29
+29-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:25:13-27:29
+30
+30-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:26:17-90
+30-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:26:25-87
+31
+32
+33 C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:28:13-127
+34 android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
+34-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:28:24-86
+35 android:resource="@xml/device_filter" />
+35-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:28:87-124
+36
+37
+37-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:30:13-32:29
+38
+38-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:31:17-93
+38-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:31:25-90
+39
+40
+41 C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:33:13-133
+42 android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
+42-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:33:24-89
+43 android:resource="@xml/accessory_filter" />
+43-->C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:33:90-130
+44
+45
+46
+47
diff --git a/app/build/intermediates/merged_java_res/debug/out.jar b/app/build/intermediates/merged_java_res/debug/out.jar
new file mode 100644
index 0000000000000000000000000000000000000000..98874e9b68974d284c233d070efdfc7e22f24e78
Binary files /dev/null and b/app/build/intermediates/merged_java_res/debug/out.jar differ
diff --git a/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml b/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..668af43ff84bb17e71ddd378bbce328438b08bac
--- /dev/null
+++ b/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build/intermediates/merged_manifests/debug/output.json b/app/build/intermediates/merged_manifests/debug/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..db1430e0561ed23fd9da7303e27762f5a31c11e5
--- /dev/null
+++ b/app/build/intermediates/merged_manifests/debug/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"net.dlogic.ufr.apdu_example","split":"","minSdkVersion":"15"}}]
\ No newline at end of file
diff --git a/app/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml b/app/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..efee0b53eb32448055041ef55cad2c80f63cfb6e
--- /dev/null
+++ b/app/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/build/intermediates/merged_manifests/debugAndroidTest/output.json b/app/build/intermediates/merged_manifests/debugAndroidTest/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..2a9f94d2cf30b25e0a3ed138b641d183ac9f8ae0
--- /dev/null
+++ b/app/build/intermediates/merged_manifests/debugAndroidTest/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug-androidTest.apk","fullName":"debugAndroidTest","baseName":"debug-androidTest"},"path":"AndroidManifest.xml","properties":{}}]
\ No newline at end of file
diff --git a/app/build/intermediates/metadata_feature_manifest/debug/processDebugManifest/metadata-feature/output.json b/app/build/intermediates/metadata_feature_manifest/debug/processDebugManifest/metadata-feature/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..144a8a30b87644b257681a1717de37f2d39da975
--- /dev/null
+++ b/app/build/intermediates/metadata_feature_manifest/debug/processDebugManifest/metadata-feature/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"METADATA_FEATURE_MANIFEST"},"apkData":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{}}]
\ No newline at end of file
diff --git a/app/build/intermediates/processed_res/debug/processDebugResources/out/output.json b/app/build/intermediates/processed_res/debug/processDebugResources/out/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..ef40e774847b06e365200b45fbf966f6b827d73b
--- /dev/null
+++ b/app/build/intermediates/processed_res/debug/processDebugResources/out/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"PROCESSED_RES"},"apkData":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"resources-debug.ap_","properties":{"packageId":"net.dlogic.ufr.apdu_example","split":"","minSdkVersion":"15"}}]
\ No newline at end of file
diff --git a/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ b/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_
new file mode 100644
index 0000000000000000000000000000000000000000..423fed6a790a7a2e1b487eb42abc2b017e36fa2d
Binary files /dev/null and b/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_ differ
diff --git a/app/build/intermediates/res/merged/debug/drawable-hdpi_button_pattern.xml.flat b/app/build/intermediates/res/merged/debug/drawable-hdpi_button_pattern.xml.flat
new file mode 100644
index 0000000000000000000000000000000000000000..ddf5e198f9ea423a509a7dd846a6ad7c06aedb21
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/drawable-hdpi_button_pattern.xml.flat differ
diff --git a/app/build/intermediates/res/merged/debug/drawable-hdpi_ic_launcher.png.flat b/app/build/intermediates/res/merged/debug/drawable-hdpi_ic_launcher.png.flat
new file mode 100644
index 0000000000000000000000000000000000000000..52ac52cacdcfe4515e3536042b3323536bc55435
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/drawable-hdpi_ic_launcher.png.flat differ
diff --git a/app/build/intermediates/res/merged/debug/drawable-ldpi_ic_launcher.png.flat b/app/build/intermediates/res/merged/debug/drawable-ldpi_ic_launcher.png.flat
new file mode 100644
index 0000000000000000000000000000000000000000..0190dc7b171f4659d833ecfbeff24481df826868
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/drawable-ldpi_ic_launcher.png.flat differ
diff --git a/app/build/intermediates/res/merged/debug/drawable-mdpi_ic_launcher.png.flat b/app/build/intermediates/res/merged/debug/drawable-mdpi_ic_launcher.png.flat
new file mode 100644
index 0000000000000000000000000000000000000000..4af837068d46dce4af6a51d42fa48ebe096941c3
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/drawable-mdpi_ic_launcher.png.flat differ
diff --git a/app/build/intermediates/res/merged/debug/drawable-xhdpi_ic_launcher.png.flat b/app/build/intermediates/res/merged/debug/drawable-xhdpi_ic_launcher.png.flat
new file mode 100644
index 0000000000000000000000000000000000000000..8f871f543a314180c013a585cf799ac7cf6c1686
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/drawable-xhdpi_ic_launcher.png.flat differ
diff --git a/app/build/intermediates/res/merged/debug/layout_dl_spinner_textview.xml.flat b/app/build/intermediates/res/merged/debug/layout_dl_spinner_textview.xml.flat
new file mode 100644
index 0000000000000000000000000000000000000000..9ff76ee061a438eb5dcfa5adc0013fe85c7025d8
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/layout_dl_spinner_textview.xml.flat differ
diff --git a/app/build/intermediates/res/merged/debug/layout_main.xml.flat b/app/build/intermediates/res/merged/debug/layout_main.xml.flat
new file mode 100644
index 0000000000000000000000000000000000000000..b7faab8898c6c1243bb57562ff4929d358466d73
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/layout_main.xml.flat differ
diff --git a/app/build/intermediates/res/merged/debug/mipmap-hdpi_ic_launcher.png.flat b/app/build/intermediates/res/merged/debug/mipmap-hdpi_ic_launcher.png.flat
new file mode 100644
index 0000000000000000000000000000000000000000..98d5deb605e735ba334b2e77de671beb4a003969
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/mipmap-hdpi_ic_launcher.png.flat differ
diff --git a/app/build/intermediates/res/merged/debug/mipmap-mdpi_ic_launcher.png.flat b/app/build/intermediates/res/merged/debug/mipmap-mdpi_ic_launcher.png.flat
new file mode 100644
index 0000000000000000000000000000000000000000..4ad4b11c885ccbaff7bb13b0e5d1df72b47ed931
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/mipmap-mdpi_ic_launcher.png.flat differ
diff --git a/app/build/intermediates/res/merged/debug/mipmap-xhdpi_ic_launcher.png.flat b/app/build/intermediates/res/merged/debug/mipmap-xhdpi_ic_launcher.png.flat
new file mode 100644
index 0000000000000000000000000000000000000000..ec2bdc90922f349144b4f7b2d2b40f5526bfbdb9
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/mipmap-xhdpi_ic_launcher.png.flat differ
diff --git a/app/build/intermediates/res/merged/debug/mipmap-xxhdpi_ic_launcher.png.flat b/app/build/intermediates/res/merged/debug/mipmap-xxhdpi_ic_launcher.png.flat
new file mode 100644
index 0000000000000000000000000000000000000000..88d53d14f493c6c195c8d3219a93b633a6d7a5fe
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/mipmap-xxhdpi_ic_launcher.png.flat differ
diff --git a/app/build/intermediates/res/merged/debug/values-w820dp-v13_values-w820dp-v13.arsc.flat b/app/build/intermediates/res/merged/debug/values-w820dp-v13_values-w820dp-v13.arsc.flat
new file mode 100644
index 0000000000000000000000000000000000000000..8c188d795893ed17e91fe580aa825ac47333fe18
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/values-w820dp-v13_values-w820dp-v13.arsc.flat differ
diff --git a/app/build/intermediates/res/merged/debug/values_values.arsc.flat b/app/build/intermediates/res/merged/debug/values_values.arsc.flat
new file mode 100644
index 0000000000000000000000000000000000000000..88e6477f967f6bf680c0ab0fb08ec27c95afd3af
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/values_values.arsc.flat differ
diff --git a/app/build/intermediates/res/merged/debug/xml_accessory_filter.xml.flat b/app/build/intermediates/res/merged/debug/xml_accessory_filter.xml.flat
new file mode 100644
index 0000000000000000000000000000000000000000..f830ca5a806753ff28daab692c91a265389102cc
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/xml_accessory_filter.xml.flat differ
diff --git a/app/build/intermediates/res/merged/debug/xml_dev_desc_filter.xml.flat b/app/build/intermediates/res/merged/debug/xml_dev_desc_filter.xml.flat
new file mode 100644
index 0000000000000000000000000000000000000000..b6551db10767763d3e9e6d03e5cf2896b93c5755
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/xml_dev_desc_filter.xml.flat differ
diff --git a/app/build/intermediates/res/merged/debug/xml_device_filter.xml.flat b/app/build/intermediates/res/merged/debug/xml_device_filter.xml.flat
new file mode 100644
index 0000000000000000000000000000000000000000..23730f474857acc71854efd7aaa76dec28c32f3d
Binary files /dev/null and b/app/build/intermediates/res/merged/debug/xml_device_filter.xml.flat differ
diff --git a/app/build/intermediates/signing_config/debug/out/signing-config.json b/app/build/intermediates/signing_config/debug/out/signing-config.json
new file mode 100644
index 0000000000000000000000000000000000000000..a08f47fd1b0ae2f2f77dc74e3f5a3eddaf5f6258
--- /dev/null
+++ b/app/build/intermediates/signing_config/debug/out/signing-config.json
@@ -0,0 +1 @@
+{"mName":"debug","mStoreFile":"C:\\Users\\Konferencija\\.android\\debug.keystore","mStorePassword":"android","mKeyAlias":"AndroidDebugKey","mKeyPassword":"android","mStoreType":"jks","mV1SigningEnabled":true,"mV2SigningEnabled":true}
\ No newline at end of file
diff --git a/app/build/intermediates/symbols/debug/R.txt b/app/build/intermediates/symbols/debug/R.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e07121be0e701f8e72a16f953a1eb08ad5d9d000
--- /dev/null
+++ b/app/build/intermediates/symbols/debug/R.txt
@@ -0,0 +1,34 @@
+int array authentication_mode_names 0x7f010000
+int array beep_signal_modes 0x7f010001
+int array capdu_picker 0x7f010002
+int array light_signal_modes 0x7f010003
+int dimen activity_horizontal_margin 0x7f020000
+int dimen activity_vertical_margin 0x7f020001
+int drawable button_pattern 0x7f030000
+int drawable ic_launcher 0x7f030001
+int id BlockRead 0x7f040000
+int id btnApduTransceive 0x7f040001
+int id btnDeselect 0x7f040002
+int id btnDeviceType 0x7f040003
+int id btnSelect 0x7f040004
+int id btnUiSignal 0x7f040005
+int id ebCAPDU 0x7f040006
+int id ebDeviceType 0x7f040007
+int id ebRAPDU 0x7f040008
+int id editText4 0x7f040009
+int id spnBeepMode 0x7f04000a
+int id spnCAPDUPicker 0x7f04000b
+int id spnLightMode 0x7f04000c
+int id textView 0x7f04000d
+int id textView2 0x7f04000e
+int id textView3 0x7f04000f
+int id textView4 0x7f040010
+int layout dl_spinner_textview 0x7f050000
+int layout main 0x7f050001
+int mipmap ic_launcher 0x7f060000
+int string app_name 0x7f070000
+int string title_activity_main 0x7f070001
+int style AppTheme 0x7f080000
+int xml accessory_filter 0x7f090000
+int xml dev_desc_filter 0x7f090001
+int xml device_filter 0x7f090002
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/BuildConfig.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/BuildConfig.dex
new file mode 100644
index 0000000000000000000000000000000000000000..57e0de3f703454b9bbe24e20e2bb16c6c4e65dad
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/BuildConfig.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$1.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$1.dex
new file mode 100644
index 0000000000000000000000000000000000000000..6ced889b24b6e65121f4374e8a7f605e693bfd4d
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$1.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$2.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$2.dex
new file mode 100644
index 0000000000000000000000000000000000000000..7833454a8a6635f210d8e4e4985f3773728db7f7
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$2.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$3.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$3.dex
new file mode 100644
index 0000000000000000000000000000000000000000..9bb9bf60923dc48cc4eae8d0cf2000c03e6e2cd2
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$3.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$4.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$4.dex
new file mode 100644
index 0000000000000000000000000000000000000000..ddf99e73e4126b010b3316615dbcd1f8a876958b
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$4.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$5.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$5.dex
new file mode 100644
index 0000000000000000000000000000000000000000..ec5e726f9aa8d2bb35b5ccd5f06b8d7c32c65af8
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$5.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$6.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$6.dex
new file mode 100644
index 0000000000000000000000000000000000000000..ce6e8acc6b77b287dcfdebd821f95926e4e4273f
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$6.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$7.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$7.dex
new file mode 100644
index 0000000000000000000000000000000000000000..b448e6ceae3c78360e47308fa3c797aa8bf636e7
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$7.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$8.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$8.dex
new file mode 100644
index 0000000000000000000000000000000000000000..af141ff12aca11136877e1ddb4977f011b07b2c1
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$8.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Consts.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Consts.dex
new file mode 100644
index 0000000000000000000000000000000000000000..ac8c9148dfe72af2722b258b0150dabaece93084
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Consts.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$IncomingHandler.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$IncomingHandler.dex
new file mode 100644
index 0000000000000000000000000000000000000000..c5b6d6667afa680f219f254270d157cfbd34bfe3
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$IncomingHandler.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$ReaderThread.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$ReaderThread.dex
new file mode 100644
index 0000000000000000000000000000000000000000..7b1db5833f54a316dcac19fc069240dfd6cf90d6
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$ReaderThread.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Task.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Task.dex
new file mode 100644
index 0000000000000000000000000000000000000000..1a56c11c7874fe6af4b0700c0aaa4cc29246f340
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Task.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Tools.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Tools.dex
new file mode 100644
index 0000000000000000000000000000000000000000..8b4795dd2d57a62d3b0931cc8154c9ff9d31bf57
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main$Tools.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main.dex
new file mode 100644
index 0000000000000000000000000000000000000000..218dea03af8d8463f76ffdd641bbb54203c0f31c
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/Main.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$array.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$array.dex
new file mode 100644
index 0000000000000000000000000000000000000000..2bd576e0b3f922fa2175845c96b1570b151f17ed
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$array.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$dimen.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$dimen.dex
new file mode 100644
index 0000000000000000000000000000000000000000..89f7e7cf67be55ab711d70ca6374f6d74f34d1cf
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$dimen.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$drawable.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$drawable.dex
new file mode 100644
index 0000000000000000000000000000000000000000..c3c6b2f3e659943ab70c3c3ef572b917b53b3a5c
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$drawable.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$id.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$id.dex
new file mode 100644
index 0000000000000000000000000000000000000000..7e44c364d63e433b2a7c20e856865fad580539bd
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$id.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$layout.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$layout.dex
new file mode 100644
index 0000000000000000000000000000000000000000..ecc4044f17aee657ae45f257da121a7c3b00b9d6
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$layout.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$mipmap.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$mipmap.dex
new file mode 100644
index 0000000000000000000000000000000000000000..5c88ba2a17737bfe163de4750802a1a72013089c
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$mipmap.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$string.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$string.dex
new file mode 100644
index 0000000000000000000000000000000000000000..a6c7374663653168f9d3068b99476c0f38c5fb3d
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$string.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$style.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$style.dex
new file mode 100644
index 0000000000000000000000000000000000000000..7f7e1371281f87b178379024722ae582e1d3130a
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$style.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$xml.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$xml.dex
new file mode 100644
index 0000000000000000000000000000000000000000..ebfab764f54abd585111980b5a9750c94aae3a76
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R$xml.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R.dex
new file mode 100644
index 0000000000000000000000000000000000000000..bd876c6a9973b819c22196668c9fc03e56024e20
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/apdu_example/R.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$1.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$1.dex
new file mode 100644
index 0000000000000000000000000000000000000000..9acd2a226191bf314d4dcdf0e171548f2473a677
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$1.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$2.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$2.dex
new file mode 100644
index 0000000000000000000000000000000000000000..437afbaa4f0052787e39ccaea3c376b6088a4b0f
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$2.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$AoAReadThread.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$AoAReadThread.dex
new file mode 100644
index 0000000000000000000000000000000000000000..1193d9bf5449acdf52c920752709e2207d2c86bc
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$AoAReadThread.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$CardParams.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$CardParams.dex
new file mode 100644
index 0000000000000000000000000000000000000000..6d2cf744aab7d6f339953ea91f14f05e39bc5409
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$CardParams.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$ComParams.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$ComParams.dex
new file mode 100644
index 0000000000000000000000000000000000000000..577710e3ae714bd3261fd206073bc15034735475
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$ComParams.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$ComProtocol.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$ComProtocol.dex
new file mode 100644
index 0000000000000000000000000000000000000000..73b493049e3c0d4500ff5c85478f2f5dce975ffa
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$ComProtocol.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$Consts.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$Consts.dex
new file mode 100644
index 0000000000000000000000000000000000000000..1ca3e1a3a2664b85f1bc976dc1186822a5354582
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$Consts.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$DlErrorCodes.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$DlErrorCodes.dex
new file mode 100644
index 0000000000000000000000000000000000000000..e2d420f7b9091c68e96920c49e9f563c600ffd11
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$DlErrorCodes.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$DlReaderException.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$DlReaderException.dex
new file mode 100644
index 0000000000000000000000000000000000000000..006d02bef5c4b9182eac79de44fb58d453e57e51
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$DlReaderException.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$LocalException.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$LocalException.dex
new file mode 100644
index 0000000000000000000000000000000000000000..856820979ecdc7347354c189b58f71aba75747e0
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader$LocalException.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader.dex b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader.dex
new file mode 100644
index 0000000000000000000000000000000000000000..4531604ba6078584811eef3af9f01ea699896ec4
Binary files /dev/null and b/app/build/intermediates/transforms/dexBuilder/debug/0/net/dlogic/ufr/lib/DlReader.dex differ
diff --git a/app/build/intermediates/transforms/dexBuilder/debug/__content__.json b/app/build/intermediates/transforms/dexBuilder/debug/__content__.json
new file mode 100644
index 0000000000000000000000000000000000000000..03ffd4434d7870c1e152bc3f57cb087cd542281f
--- /dev/null
+++ b/app/build/intermediates/transforms/dexBuilder/debug/__content__.json
@@ -0,0 +1 @@
+[{"name":"C:\\Users\\Konferencija\\AndroidStudioProjects\\ufr-apdu-examples-android\\app\\build\\intermediates\\javac\\debug\\classes","index":0,"scopes":["PROJECT"],"types":["DEX_ARCHIVE"],"format":"DIRECTORY","present":true}]
\ No newline at end of file
diff --git a/app/build/outputs/apk/debug/app-debug.apk b/app/build/outputs/apk/debug/app-debug.apk
new file mode 100644
index 0000000000000000000000000000000000000000..02188f1b9958a6285a5f2a687fe3b78f7dbc07bc
Binary files /dev/null and b/app/build/outputs/apk/debug/app-debug.apk differ
diff --git a/app/build/outputs/apk/debug/output.json b/app/build/outputs/apk/debug/output.json
new file mode 100644
index 0000000000000000000000000000000000000000..f98c0723515a26a5e4d335dff1e68f880d5ce716
--- /dev/null
+++ b/app/build/outputs/apk/debug/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.1","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"app-debug.apk","properties":{}}]
\ No newline at end of file
diff --git a/app/build/outputs/logs/manifest-merger-debug-report.txt b/app/build/outputs/logs/manifest-merger-debug-report.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dea7c236af6820556be694d43b730644b7590322
--- /dev/null
+++ b/app/build/outputs/logs/manifest-merger-debug-report.txt
@@ -0,0 +1,97 @@
+-- Merging decision tree log ---
+manifest
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:2:1-37:12
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:2:1-37:12
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:2:1-37:12
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:2:1-37:12
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:2:1-37:12
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:2:1-37:12
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:2:1-37:12
+ package
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:3:5-42
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ android:versionName
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:5:5-30
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ xmlns:android
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:2:11-69
+ android:versionCode
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:4:5-29
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+uses-feature#android.hardware.usb.host
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:6:2-59
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:6:16-56
+uses-feature#android.hardware.usb.accessory
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:7:5-67
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:7:19-64
+application
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:9:5-36:19
+ android:label
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:11:9-41
+ android:icon
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:10:9-45
+activity#net.dlogic.ufr.apdu_example.Main
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:12:9-35:20
+ android:label
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:14:13-56
+ android:launchMode
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:15:13-44
+ android:autoRemoveFromRecents
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:17:13-49
+ android:configChanges
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:16:13-74
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:13:13-60
+intent-filter#action:name:android.intent.action.MAIN+category:name:android.intent.category.LAUNCHER
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:20:13-23:29
+action#android.intent.action.MAIN
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:21:17-69
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:21:25-66
+category#android.intent.category.LAUNCHER
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:22:17-77
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:22:27-74
+intent-filter#action:name:android.hardware.usb.action.USB_DEVICE_ATTACHED
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:25:13-27:29
+action#android.hardware.usb.action.USB_DEVICE_ATTACHED
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:26:17-90
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:26:25-87
+meta-data#android.hardware.usb.action.USB_DEVICE_ATTACHED
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:28:13-127
+ android:resource
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:28:87-124
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:28:24-86
+intent-filter#action:name:android.hardware.usb.action.USB_ACCESSORY_ATTACHED
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:30:13-32:29
+action#android.hardware.usb.action.USB_ACCESSORY_ATTACHED
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:31:17-93
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:31:25-90
+meta-data#android.hardware.usb.action.USB_ACCESSORY_ATTACHED
+ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:33:13-133
+ android:resource
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:33:90-130
+ android:name
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml:33:24-89
+uses-sdk
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml reason: use-sdk injection requested
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ android:targetSdkVersion
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ android:minSdkVersion
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ ADDED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
+ INJECTED from C:\Users\Konferencija\AndroidStudioProjects\ufr-apdu-examples-android\app\src\main\AndroidManifest.xml
diff --git a/app/libs/DlReader.java b/app/libs/DlReader.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e91756c82c57409efb8c2ca772de42d48f33e2f
--- /dev/null
+++ b/app/libs/DlReader.java
@@ -0,0 +1,1340 @@
+package net.dlogic.ufr.lib;
+
+/**
+ * Created by dlogic on 12.5.2015.
+ *
+ * 08.11.2017. class DlReader v2.9
+ * - Updated APDUPlainTransceive() acording to a uFR firmware changes in version 3.9.44.
+ * - Support for APDU commands now depands on uFR firmware version 3.9.44 or later.
+ * 20.07.2017. class DlReader v2.8
+ * - Added support for APDU commands:
+ * - New method:
+ * public synchronized void setISO14443_4_Mode() throws DlReaderException,
+ * InterruptedException
+ * Select ISO14443-4A tag and "open channel for the APDU commands" to the ISO14443-4A
+ * tag supporting APDU protocol.
+ * - New method:
+ * public synchronized void s_block_deselect() throws DlReaderException,
+ * InterruptedException
+ * Deselect ISO14443-4A tag. This is a mandatory call after finished one or more APDU
+ * transactions with a previously selected ISO14443-4A tag. Otherwise reader will be
+ * blocked for further work and you will be forced to call readerReset().
+ * - New method:
+ * public synchronized byte[] APDUPlainTransceive(byte[] c_apdu)
+ * throws DlReaderException, InterruptedException
+ * Function that send c_apdu bytes to the to the ISO14443-4A tag supporting APDU
+ * protocol and, after successfully executed APDU command by the tag selected returns
+ * R-APDU. Count of the R-APDU bytes varies depending on the issued APDU command.
+ * Minimum number of the R-APDU bytes is 2 and in that case contains SW1 and SW2.
+ * 23.06.2017. class DlReader v2.7
+ * - New method:
+ * public synchronized void blockWrite(byte[] data, byte block_address,
+ * byte auth_mode, byte[] key) throws DlReaderException, InterruptedException
+ * Write data (16 bytes) in to the blocks designated by the block_address parameter.
+ * On Mifare Classic compatible cards You have to skip direct write in to sector
+ * trailers. Otherwise You get an exception with code = 10
+ * (FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER = 0x0A).
+ * 11.07.2016. class DlReader v2.6
+ * - Fixed unchecked java.lang.NullPointerException (by throwing
+ * new DlReaderException("UFR_COMMUNICATION_TERMINATED") )
+ * in net.dlogic.ufr.lib.DlReader$ComProtocol.portRead from
+ * com.ftdi.j2xx.ProcessInCtrl.readBulkInData() at
+ * com.ftdi.j2xx.FT_Device.read().
+ * 28.06.2016. class DlReader v2.5
+ * - Improvements in closeAoAEndpoints() when uFR device is in sleep mode on closing.
+ * In D-Logic usb_2_usb power bridge interface is implemented USB2USB_PING command
+ * for getting response when only bridge device is connected and when uFR is in sleep.
+ * Applicable on D-Logic usb_2_usb power bridge interface from firmware version 6.
+ * 17.06.2016. class DlReader v2.4
+ * - Improvements in killAoAEndpoints().
+ * - New method usb2usbResetUfr() which serve as a patch for LG G3 and similar Android
+ * devices connected to D-Logic usb_2_usb power bridge interface.
+ * - Patch for LG G3 and similar Android devices implemented in open() method.
+ * - The problem with LG G3 and similar Android devices is bad power status detecting
+ * algorithm in their API. When usb_2_usb power bridge interface switch from AoA to
+ * OTG mode, Android device does not detect there is no power supply attached until
+ * OTG ID pin goes logic high for a while. This will reset and restore true Android
+ * power status.
+ * - For most devices having Android version greater than 4.4 (KitKat), the only way
+ * when attachedAndroid Open Accessory device is plugged out from the USB port is to
+ * terminate Application by calling.
+ * android.os.Process.killProcess(android.os.Process.myPid()).
+ * 25.05.2016. class DlReader v2.3
+ * - Improved algorithm for detecting connection/disconnection of the uFR devices.
+ * - For most devices not supporting USB Host mode (without OTG) only way when attached
+ * Android Open Accessory device is plugged out from the USB port is to terminate
+ * Application by calling android.os.Process.killProcess(android.os.Process.myPid()).
+ * 19.05.2016. class DlReader v2.2
+ * - Added support for D-Logic FT312D-RS485 interface
+ * 18.05.2016. class DlReader v2.1
+ * - Fixed algorithm for detecting connection/disconnection of the uFR devices, based
+ * only on chaging status now. We don't use UsbManager intents any more because they
+ * have proven to be unreliable on some Android devices.
+ * 28.04.2016. class DlReader v1.9
+ * - BugFix:
+ * in commonBlockRead() fixed wrong checkXOR comparison due to implicit integer
+ * promotion during calculation.
+ * 22.04.2016. class DlReader v1.8
+ * - Added support for DLogic AoA interfaces based on FTDI Vinculum II
+ * and AoA uFR interfaces based on FT312D chips.
+ * - AoA support implemented without any public methods.
+ * 04.12.2015. class DlReader v1.7
+ * - Added method getNumOfDlDevices()
+ * 03.12.2015. class DlReader v1.6
+ * - in ComProtocol.portWrite() from this version we use an nonblocking write()
+ * overloaded method from the FTDI class and we have implemented retry count
+ * (Consts.MAX_COMMUNICATION_BREAK_RETRIES times) on communication break. If
+ * number of communication break retries exceeded, raised DlReaderException have
+ * Consts.DL_READER_IS_NOT_CONNECTED err_code and usb device is closed. This algorithm
+ * solve usb otg device disconnect detection problem on the Runbo X5 and probably some
+ * other Android smart phones with usb otg port.
+ * 01.12.2015. class DlReader v1.5
+ * - New method:
+ * public synchronized boolean readerStillConnected()
+ * returns true if device still connected to the system (false otherwise).
+ * - New Status Consts in DlReader.DlReaderException (defined in DlReader.Consts):
+ * public static final int DL_READER_COMMUNICATION_BREAK = 0x50;
+ * raised when there is communication problem (mostly hardware problems).
+ * public static final int DL_READER_IS_NOT_CONNECTED = 0x104;
+ * raised when the device is disconnected from the Android system (if device is
+ * still attached to the system check cable, connectors and/or device).
+ * 15.06.2015. class DlReader v1.3
+ * - Implementation of the new functionality (Sleep mode of the attached nFR device).
+ * - New methods: public synchronized void enterSleepMode() throws DlReaderException, InterruptedException
+ * public synchronized void leaveSleepMode() throws DlReaderException, InterruptedException
+ * 12.05.2015. class DlReader v1.0
+ * - First public release.
+ */
+
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.hardware.usb.UsbAccessory;
+import android.hardware.usb.UsbManager;
+import android.os.BatteryManager;
+import android.os.Build;
+import android.os.ParcelFileDescriptor;
+
+import com.ftdi.j2xx.D2xxManager;
+import com.ftdi.j2xx.FT_Device;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class DlReader {
+ private static final String DL_READER_PACKAGE_NAME = "net.dlogic.ufr.lib";
+ private static final String ACTION_USB_PERMISSION = DL_READER_PACKAGE_NAME + ".USB_PERMISSION";
+ private static final int MAX_BYTES = 256;
+ private static final int CHUNK_BYTES = 64;
+ private static DlReader mDlReader = null;
+ private static D2xxManager ftD2xx = null;
+ private static Context mContext = null;
+ boolean isCharging;
+
+ private static int mAccessoriyFilterItems = 0;
+ private static ArrayList mModelStrings;
+ private static ArrayList mManufacturerStrings;
+ private static ArrayList mVersionStrings;
+
+ private static ArrayList mDeviceDescriptionStrings;
+
+ private static ParcelFileDescriptor mAoAFileDescriptor = null;
+ private static FileInputStream mAoAInStream = null;
+ private static FileOutputStream mAoAOutStream = null;
+
+ private AoAReadThread mAoAReadThread = null;
+ private static byte[] AoAReadBuffer = new byte[MAX_BYTES]; // circular buffer
+ private static int totalBytes;
+ private static int writeIndex;
+ private static int readIndex;
+
+ private static boolean mSupportUsbHost = false;
+ private static boolean mSupportAoA = false;
+
+ private static boolean mPermissionRequestPending = false;
+ private static PendingIntent mPendingIntent = null;
+ private static IntentFilter mPermissionFilter = null;
+ private UsbManager mUsbManager = null;
+ private static FT_Device ft_device = null;
+ private static UsbAccessory mAccessory = null;
+ private static int open_index = -1;
+ private static int retry_cnt = 0;
+ //----------------------------------------------------------------------------------------------
+ /*/ Broadcast Receivers:
+ private BroadcastReceiver mAoAPlugIntents = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+// Toast.makeText(context, action, Toast.LENGTH_SHORT).show();
+
+ if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
+ if (mAccessory != null) {
+ killAoAEndpoints();
+ mAccessory = null;
+ open_index = -1;
+ }
+ } else if (UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(action)) {
+ mAccessory = intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
+ }
+ }
+ };*/
+
+ private BroadcastReceiver mPowerConnectionReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ synchronized(this) {
+ IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ Intent batteryStatus = context.registerReceiver(null, ifilter);
+
+ // int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+ // isCharging = (status == BatteryManager.BATTERY_STATUS_CHARGING) || (status == BatteryManager.BATTERY_STATUS_FULL);
+
+ // int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+ // boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
+ // boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
+
+ int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+ isCharging = (status == BatteryManager.BATTERY_PLUGGED_USB);
+
+ if (open_index > -1) {
+ if (isCharging && (ft_device != null) && (ft_device.isOpen())) {
+ ft_device.close();
+ ft_device = null;
+ open_index = -1;
+ }
+ if (!isCharging && (mAccessory != null)) {
+ //if (!mSupportUsbHost)
+ if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
+ //System.runFinalizersOnExit(true);
+ //System.exit(0);
+ android.os.Process.killProcess(android.os.Process.myPid()); // For most of these type of devices this is only solution.
+ } else {
+ killAoAEndpoints();
+ mAccessory = null;
+ open_index = -1;
+ }
+ }
+ }
+ }
+ }
+ };
+
+ private final BroadcastReceiver mAoADevicePermissions = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+// Toast.makeText(context, action, Toast.LENGTH_LONG).show();
+
+ if (ACTION_USB_PERMISSION.equals(action)) {
+ synchronized(this) {
+ UsbAccessory accessory = intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
+ if(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
+ mAccessory = accessory;
+ if (!openAoAEndpoints(mAccessory)) {
+ mAccessory = null;
+ } else {
+ open_index = 0;
+ }
+ }
+ mPermissionRequestPending = false;
+ }
+ }
+ }
+ };
+ //----------------------------------------------------------------------------------------------
+
+ // constructor:
+ private DlReader(Context context, int AccessoryFilterXmlId, int DevDescFilterXmlId) throws DlReaderException {
+ Context appContext;
+
+ if(context == null) {
+ throw new DlReaderException("DlReader failed: Can not find parentContext!");
+ } else {
+ updateContext(context);
+ appContext = mContext.getApplicationContext();
+ mUsbManager = (UsbManager)appContext.getSystemService(Context.USB_SERVICE);
+ if(mUsbManager == null) {
+ throw new DlReaderException("DlReader failed: USB not supported on this Android device");
+ } else {
+
+ mSupportUsbHost = mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_USB_HOST);
+ mSupportAoA = mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
+
+ if (!mSupportUsbHost && !mSupportAoA) {
+ throw new DlReaderException("DlReader failed: USB not supported on this Android device");
+ }
+
+ if (mSupportUsbHost) {
+ try {
+ ftD2xx = D2xxManager.getInstance(context);
+ } catch (D2xxManager.D2xxException ex) {
+ throw new DlReaderException("Can't open usb host driver manager.");
+ }
+ }
+
+// IntentFilter filter = new IntentFilter();
+// filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
+// filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
+ //appContext.registerReceiver(this.mAoAPlugIntents, filter);
+
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_POWER_CONNECTED);
+ filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
+ appContext.registerReceiver(this.mPowerConnectionReceiver, filter);
+
+ XmlPullParser xpp = mContext.getResources().getXml(AccessoryFilterXmlId);
+ mModelStrings = new ArrayList();
+ mManufacturerStrings = new ArrayList();
+ mVersionStrings = new ArrayList();
+ try {
+ while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
+ if (xpp.getEventType() == XmlPullParser.START_TAG) {
+ if (xpp.getName().equals("usb-accessory")) {
+ ++mAccessoriyFilterItems;
+ mModelStrings.add("mModel=" + xpp.getAttributeValue(null, "model"));
+ mManufacturerStrings.add("mManufacturer=" + xpp.getAttributeValue(null, "manufacturer"));
+ mVersionStrings.add("mVersion=" + xpp.getAttributeValue(null, "version"));
+ }
+ }
+ xpp.next();
+ }
+ } catch (XmlPullParserException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ xpp = mContext.getResources().getXml(DevDescFilterXmlId);
+ mDeviceDescriptionStrings = new ArrayList();
+ try {
+ while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
+ if (xpp.getEventType() == XmlPullParser.START_TAG) {
+ if (xpp.getName().equals("usb-device")) {
+ mDeviceDescriptionStrings.add(xpp.getAttributeValue(null, "description"));
+ }
+ }
+ xpp.next();
+ }
+ } catch (XmlPullParserException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ Intent batteryStatus = context.registerReceiver(null, ifilter);
+// int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+// isCharging = (status == BatteryManager.BATTERY_STATUS_CHARGING) || (status == BatteryManager.BATTERY_STATUS_FULL);
+ int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+ isCharging = (status == BatteryManager.BATTERY_PLUGGED_USB);
+ }
+ }
+ }
+
+ public static synchronized DlReader getInstance(Context context, int AccessoryFilterXmlId, int DevDescFilterXmlId) throws DlReaderException {
+
+ if (mDlReader == null) {
+ mDlReader = new DlReader(context, AccessoryFilterXmlId, DevDescFilterXmlId);
+ }
+
+ return mDlReader;
+ }
+
+ private boolean updateContext(Context context) {
+
+ if(context == null) {
+ return false;
+ } else {
+ if(mContext != context) {
+ mContext = context;
+ mPendingIntent = PendingIntent.getBroadcast(mContext.getApplicationContext(), 0, new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_UPDATE_CURRENT);
+ mPermissionFilter = new IntentFilter(ACTION_USB_PERMISSION);
+ mContext.getApplicationContext().registerReceiver(mAoADevicePermissions, mPermissionFilter);
+ }
+ return true;
+ }
+ }
+
+ private boolean isAnyAccessoryAttached() {
+ UsbAccessory[] accessories = mUsbManager.getAccessoryList();
+
+ if (accessories == null) {
+ mAccessory = null;
+ return false;
+ }
+ return true;
+ }
+
+ private boolean openAoAEndpoints(UsbAccessory accessory) {
+
+ mAoAFileDescriptor = mUsbManager.openAccessory(accessory);
+ if (mAoAFileDescriptor == null || mAoAReadThread != null) {
+ return false;
+ }
+
+ FileDescriptor fd = mAoAFileDescriptor.getFileDescriptor();
+
+ if (fd != null) {
+ mAoAInStream = new FileInputStream(fd);
+ mAoAOutStream = new FileOutputStream(fd);
+ } else {
+ return false;
+ }
+
+ mAoAReadThread = new AoAReadThread(mAoAInStream);
+ mAoAReadThread.start();
+ return true;
+ }
+
+ private void killAoAEndpoints() {
+
+ if (mAoAReadThread != null) {
+ mAoAReadThread.stopRequest();
+ }
+ try {
+ if(mAoAFileDescriptor != null) {
+ mAoAFileDescriptor.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ if(mAoAInStream != null) {
+ mAoAInStream.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ if(mAoAOutStream != null) {
+ mAoAOutStream.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ if (mAoAReadThread != null) {
+ //mAoAReadThread.setPriority(Thread.MIN_PRIORITY);
+ mAoAReadThread.interrupt();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ mAoAFileDescriptor = null;
+ mAoAInStream = null;
+ mAoAOutStream = null;
+ mAoAReadThread = null;
+ }
+
+ private void closeAoAEndpoints() {
+
+ try {
+ if (mAoAReadThread != null) {
+ mAoAReadThread.stopRequest();
+ try {
+ usb2usbPing(); //getReaderType();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ mAoAReadThread.join();
+ }
+ if(mAoAInStream != null) {
+ mAoAInStream.close();
+ }
+ if(mAoAOutStream != null) {
+ mAoAOutStream.close();
+ }
+ if(mAoAFileDescriptor != null) {
+ mAoAFileDescriptor.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ mAoAInStream = null;
+ mAoAOutStream = null;
+ mAoAFileDescriptor = null;
+ mAoAReadThread = null;
+ }
+
+ private boolean openAccessory() {
+ boolean rt = false;
+ UsbAccessory[] accessories = mUsbManager.getAccessoryList();
+
+ if (accessories == null) {
+ mAccessory = null;
+ return false;
+ }
+
+ for (UsbAccessory accessory: accessories) {
+ // Check if there is an appropriate accessory in the filter list:
+ for (int j = 0; j < mAccessoriyFilterItems; j++) {
+ if (accessory.toString().contains(mModelStrings.get(j))
+ && accessory.toString().contains(mManufacturerStrings.get(j))
+ && accessory.toString().contains(mVersionStrings.get(j))) {
+
+ rt = true;
+ break;
+ }
+ }
+ if (rt) {
+ mAccessory = accessory;
+ break;
+ }
+ }
+
+ if (mAccessory != null) {
+ if (mUsbManager.hasPermission(mAccessory)) {
+ if (!openAoAEndpoints(mAccessory)) {
+ mAccessory = null;
+ return false;
+ }
+ return true;
+ } else {
+ synchronized (mAoADevicePermissions) {
+ if (!mPermissionRequestPending) {
+ mPermissionRequestPending = true;
+ mUsbManager.requestPermission(mAccessory, mPendingIntent);
+ }
+ }
+ }
+ }
+
+ return rt;
+ }
+
+ private boolean tryOpenFtDevice() throws DlReaderException {
+ int dev_cnt;
+ D2xxManager.FtDeviceInfoListNode dev_infolist;
+ dev_cnt = ftD2xx.createDeviceInfoList(mContext);
+
+ for (int outer_cnt = 0; outer_cnt < dev_cnt; outer_cnt++) {
+
+ dev_infolist = ftD2xx.getDeviceInfoListDetail(outer_cnt);
+ if (dev_infolist.description == null) {
+ continue;
+ }
+ for (int inner_cnt = 0; inner_cnt < mDeviceDescriptionStrings.size(); inner_cnt++) {
+
+ if (dev_infolist.description.equals(mDeviceDescriptionStrings.get(inner_cnt))) {
+ ft_device = ftD2xx.openByIndex(mContext, outer_cnt);
+
+ if ((ft_device != null) && ft_device.isOpen()) {
+
+ try {
+ if (!ft_device.setLatencyTimer(ComParams.LATENCY_TIMER)) {
+ throw new LocalException();
+ }
+ if (!ft_device.setBitMode((byte) 0, ComParams.BIT_MODE)) {
+ throw new LocalException();
+ }
+ if (!ft_device.setBaudRate(ComParams.BAUD_RATE)) {
+ throw new LocalException();
+ }
+ if (!ft_device.setDataCharacteristics(ComParams.DATA_BITS, ComParams.STOP_BITS, ComParams.PARITY)) {
+ throw new LocalException();
+ }
+ if (!ft_device.setFlowControl(ComParams.FLOW_CONTROL, (byte) 0, (byte) 0)) {
+ throw new LocalException();
+ }
+ if (!ft_device.resetDevice()) {
+ throw new LocalException();
+ }
+ } catch (LocalException ex) {
+ ft_device.close();
+ throw new DlReaderException("Device closed due to a device setting failure.");
+ }
+
+ open_index = outer_cnt;
+ return true;
+ } else {
+ throw new DlReaderException("Can't open device.",Consts.DL_READER_DEVICE_COULD_NOT_BE_OPENED);
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public synchronized void open() throws DlReaderException {
+
+ if (open_index > -1)
+ throw new DlReaderException("Device opened already.", Consts.DL_READER_DEVICE_ALREADY_OPEN);
+
+ if (mSupportUsbHost) {
+ // patch for LG G3 and similar Android devices:
+ IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ Intent batteryStatus = mContext.registerReceiver(null, ifilter);
+ int bat_status = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+
+ if (bat_status > 0) {
+ if (tryOpenFtDevice()) {
+ try {
+ usb2usbOtgOff();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ ft_device.close();
+ android.os.Process.killProcess(android.os.Process.myPid()); // For most of these type of devices this is only solution.
+ }
+ }
+ }
+
+ if (mSupportAoA && isCharging) {
+ if (openAccessory()) {
+ open_index = 0;
+ if (mAccessory.toString().contains("mModel=Android Accessory FT312D")) {
+ setAoAConfig(115200);
+ } else if (mAccessory.toString().contains("mModel=FT312D-RS485")) {
+ setAoAConfig(250000);
+ }
+ return;
+ }
+ }
+
+ if (mSupportUsbHost && !isCharging) {
+ if (tryOpenFtDevice())
+ return;
+ }
+ throw new DlReaderException("There is no D-Logic devices attached.",Consts.DL_READER_NO_DEVICE_ATTACHED);
+// if (!openAccessory()) {
+// throw new DlReaderException("There is no D-Logic devices attached.");
+// } else {
+// open_index = 0;
+// if (mAccessory.toString().contains("mModel=Android Accessory FT312D")) {
+// setAoAConfig();
+// }
+// }
+ }
+
+ public synchronized void readerReset() throws DlReaderException, InterruptedException {
+
+ if (open_index < 0) {
+ throw new DlReaderException("Device not opened.");
+ }
+
+ try {
+ if (!ft_device.setRts()) {
+ throw new LocalException();
+ }
+ Thread.sleep(100L);
+ if (!ft_device.clrRts()) {
+ throw new LocalException();
+ }
+ } catch(LocalException ex){
+ ft_device.close();
+ throw new DlReaderException("Can't reset device.");
+ }
+ Thread.sleep(1100L); // ReaderReset with bootloader
+ // TODO: wait for BOOTLOADER character !
+ // or 1100 ms
+ }
+
+ public synchronized int getReaderType() throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] {Consts.CMD_HEADER, Consts.GET_READER_TYPE, Consts.CMD_TRAILER, 0, (byte)0xAA, (byte)0xCC, 0};
+ byte bytes_to_read;
+
+ if (open_index < 0) {
+ throw new DlReaderException("Device not opened.");
+ }
+
+ bytes_to_read = ComProtocol.initialHandshaking(buffer);
+ buffer = ComProtocol.portRead(bytes_to_read);
+ if (!ComProtocol.testChecksum(buffer, bytes_to_read))
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+
+ return (buffer[0] & 0xFF) | (buffer[1] & 0xFF) << 8 | (buffer[2] & 0xFF) << 16 | (buffer[3] & 0xFF) << 24;
+ }
+
+ public synchronized void readerUiSignal(byte lightSignalMode, byte beepSignalMode) throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] {Consts.CMD_HEADER, Consts.USER_INTERFACE_SIGNAL, Consts.CMD_TRAILER, 0, lightSignalMode, beepSignalMode, 0};
+
+ if (open_index < 0) {
+ throw new DlReaderException("Device not opened.");
+ }
+ ComProtocol.initialHandshaking(buffer);
+ }
+
+ public synchronized byte[] getCardIdEx(CardParams c_params) throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] {Consts.CMD_HEADER, Consts.GET_CARD_ID_EX, Consts.CMD_TRAILER, 0, (byte)0xAA, (byte)0xCC, 0 };
+ byte[] tmp_buff;
+ byte[] result;
+ byte bytes_to_read;
+ byte sak, uid_size;
+
+ if (open_index < 0) {
+ throw new DlReaderException("Device not opened.");
+ }
+
+ bytes_to_read = ComProtocol.initialHandshaking(buffer);
+ sak = buffer[Consts.VAL0_INDEX];
+ uid_size = buffer[Consts.VAL1_INDEX];
+
+ tmp_buff = ComProtocol.portRead(bytes_to_read);
+
+ if (!ComProtocol.testChecksum(tmp_buff, bytes_to_read))
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+ if (uid_size > 10)
+ throw new DlReaderException("UFR_BUFFER_OVERFLOW");
+
+ c_params.setSak(sak);
+ c_params.setUidSize(uid_size);
+ result = java.util.Arrays.copyOf(tmp_buff, uid_size);
+ return result;
+ }
+
+ public synchronized void setISO14443_4_Mode() throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] { Consts.CMD_HEADER, Consts.SET_ISO14433_4_MODE, Consts.CMD_TRAILER, 0, (byte)0xAA, (byte)0xCC, 0 };
+
+ if (open_index < 0) {
+ throw new DlReaderException("Device not opened.");
+ }
+ ComProtocol.initialHandshaking(buffer);
+ }
+
+ public synchronized void s_block_deselect() throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] { Consts.CMD_HEADER, Consts.S_BLOCK_DESELECT, Consts.CMD_TRAILER, 0, 55, 55, 0 };
+
+ if (open_index < 0) {
+ throw new DlReaderException("Device not opened.");
+ }
+ ComProtocol.initialHandshaking(buffer);
+ }
+
+ public synchronized byte[] APDUPlainTransceive(byte[] c_apdu) throws DlReaderException, InterruptedException {
+ byte[] cmd_intro = new byte[] { Consts.CMD_HEADER, Consts.APDU_TRANSCEIVE, Consts.CMD_TRAILER, 11, (byte)0xAA, (byte)0xCC, 0 };
+ byte[] r_apdu;
+ byte bytes_to_read;
+ byte[] checksum = new byte[] {0};
+
+ if (c_apdu.length > Consts.BUFFER_SIZE - 1) {
+ throw new DlReaderException("UFR_BUFFER_OVERFLOW");
+ }
+ cmd_intro[Consts.EXT_SIZE_INDEX] = (byte)(c_apdu.length + 1);
+ cmd_intro[Consts.PARAM0_INDEX] = (byte)(((c_apdu.length + 1) >> 8) & 0xFF);
+ checksum[0] = (byte)(ComProtocol.getChecksumFragment((byte)0, c_apdu, (byte)c_apdu.length) + Consts.CHECKSUM_CONST);
+
+ bytes_to_read = ComProtocol.initialHandshaking(cmd_intro);
+ ComProtocol.portWrite(c_apdu, c_apdu.length);
+ ComProtocol.portWrite(checksum, 1);
+ ComProtocol.getAndTestResponse(cmd_intro, Consts.APDU_TRANSCEIVE);
+ bytes_to_read = cmd_intro[Consts.RESPONSE_EXT_LENGTH_INDEX];
+
+ r_apdu = ComProtocol.portRead(bytes_to_read - 1);
+ checksum = ComProtocol.portRead(1);
+
+ if ((0xFF & checksum[0]) != (0xFF & (ComProtocol.getChecksumFragment((byte)0, r_apdu, (byte)r_apdu.length) + Consts.CHECKSUM_CONST)))
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+
+ return r_apdu;
+ }
+
+ public synchronized byte[] blockRead(byte block_address, byte auth_mode, byte[] key) throws DlReaderException, InterruptedException {
+ byte[] cmd_intro = new byte[] { Consts.CMD_HEADER, Consts.BLOCK_READ, Consts.CMD_TRAILER, 11, (byte)0xAA, (byte)0xCC, 0 };
+ byte[] cmd_ext = new byte[11];
+
+ if (open_index < 0) {
+ throw new DlReaderException("Device not opened.");
+ }
+
+ cmd_intro[4] = auth_mode;
+ cmd_ext[0] = block_address;
+
+ if (!ComProtocol.testAuthMode(auth_mode))
+ throw new DlReaderException("UFR_PARAMETERS_ERROR");
+
+ java.lang.System.arraycopy(key, 0, cmd_ext, Consts.CMD_EXT_PROVIDED_KEY_INDEX, 6);
+ return ComProtocol.commonBlockRead(cmd_intro, cmd_ext, (byte)17);
+ }
+
+ public synchronized void blockWrite(byte[] data, byte block_address, byte auth_mode, byte[] key) throws DlReaderException, InterruptedException {
+ byte[] cmd_intro = new byte[] { Consts.CMD_HEADER, Consts.BLOCK_WRITE, Consts.CMD_TRAILER, 27, (byte)0xAA, (byte)0xCC, 0 };
+ byte[] cmd_ext = new byte[10];
+
+ if (open_index < 0) {
+ throw new DlReaderException("Device not opened.");
+ }
+
+ if (!ComProtocol.testAuthMode(auth_mode))
+ throw new DlReaderException("UFR_PARAMETERS_ERROR");
+
+ cmd_intro[4] = auth_mode;
+ cmd_ext[0] = block_address;
+ java.lang.System.arraycopy(key, 0, cmd_ext, Consts.CMD_EXT_PROVIDED_KEY_INDEX, 6);
+
+ ComProtocol.commonBlockWrite(data, cmd_intro, cmd_ext);
+ }
+
+ public synchronized void enterSleepMode() throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] {Consts.CMD_HEADER, Consts.ENTER_SLEEP_MODE, Consts.CMD_TRAILER, 0, (byte)0xAA, (byte)0xCC, 0};
+
+ ComProtocol.initialHandshaking(buffer);
+ }
+
+ public synchronized void leaveSleepMode() throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] {Consts.CMD_HEADER, Consts.LEAVE_SLEEP_MODE, Consts.CMD_TRAILER, 0, (byte)0xAA, (byte)0xCC, 0};
+ byte[] dummy = new byte[] {0};
+
+ // First write one dummy byte to a port:
+ ComProtocol.portWrite(dummy, 1);
+ Thread.sleep(100L);
+ ComProtocol.initialHandshaking(buffer);
+ }
+
+ public synchronized void usb2usbResetUfr() throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] {Consts.CMD_HEADER, Consts.USB2USB_FT232_RST, Consts.CMD_TRAILER, 0, (byte)0xAA, (byte)0xCC, 0};
+
+ ComProtocol.initialHandshaking(buffer);
+ }
+
+ public synchronized void usb2usbOtgOff() throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] {Consts.CMD_HEADER, Consts.USB2USB_OTG_OFF, Consts.CMD_TRAILER, 0, (byte)0xAA, (byte)0xCC, 0};
+
+ ComProtocol.initialHandshaking(buffer);
+ }
+
+ public synchronized void usb2usbPing() throws DlReaderException, InterruptedException {
+ byte[] buffer = new byte[] {Consts.CMD_HEADER, Consts.USB2USB_PING, Consts.CMD_TRAILER, 0, (byte)0xAA, (byte)0xCC, 0};
+
+ ComProtocol.initialHandshaking(buffer);
+ }
+
+ public synchronized boolean readerStillConnected() {
+
+ if (open_index < 0)
+ return false;
+
+ if (ft_device != null) {
+ return ft_device.isOpen();
+ } else if (mAccessory != null) {
+ return true;
+ } else
+ return false;
+ }
+
+ public synchronized void close() throws DlReaderException {
+
+ if (open_index < 0)
+ return;
+
+ if (ft_device != null) {
+ ft_device.close();
+ ft_device = null;
+ }
+ if (mAccessory != null) {
+ closeAoAEndpoints();
+ mAccessory = null;
+ }
+ open_index = -1;
+ }
+
+ private static class ComProtocol {
+
+ public static synchronized void erasePort() {
+
+ if (ft_device != null) {
+ ft_device.purge((byte) (D2xxManager.FT_PURGE_RX | D2xxManager.FT_PURGE_TX));
+ } else if (mAccessory != null) {
+ try {
+ //mAoAOutStream.flush();
+ //mAoAInStream.reset();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public static synchronized void portWrite(byte[] buffer, int buffer_size) throws DlReaderException {
+ if (ft_device != null) {
+ if (ft_device.write(buffer, buffer_size, false) != buffer_size) {
+ if (ft_device.isOpen()) {
+ if (++retry_cnt >= Consts.MAX_COMMUNICATION_BREAK_RETRIES) {
+ retry_cnt = 0;
+ open_index = -1;
+ ft_device.close();
+ throw new DlReaderException("UFR DEVICE IS NOT CONNECTED", Consts.DL_READER_IS_NOT_CONNECTED);
+ } else {
+ throw new DlReaderException("UFR COMMUNICATION BREAK", Consts.DL_READER_COMMUNICATION_BREAK);
+ }
+ } else {
+ retry_cnt = 0;
+ open_index = -1;
+ throw new DlReaderException("UFR DEVICE IS NOT CONNECTED", Consts.DL_READER_IS_NOT_CONNECTED);
+ }
+ }
+ else {
+ retry_cnt = 0;
+ }
+ } else if (mAccessory != null) {
+ try {
+ mAoAOutStream.write(buffer, 0, buffer_size);
+ mAoAOutStream.flush();
+ } catch (IOException e) {
+ throw new DlReaderException("AOA_COMMUNICATION_BREAK", DlErrorCodes.AOA_WRITE_ERROR);
+ }
+ }
+ }
+
+ public static synchronized byte[] portRead(int buffer_size) throws DlReaderException
+ {
+ long time_start, time_end;
+ byte[] buffer = new byte[buffer_size];
+ java.util.Arrays.fill(buffer, (byte) 0);
+
+ if (ft_device != null) {
+ try {
+ if (ft_device.read(buffer, buffer_size, ComParams.READ_TIMEOUT) != buffer_size) {
+ throw new DlReaderException("UFR_COMMUNICATION_BREAK");
+ }
+ }
+ catch (NullPointerException e) {
+ throw new DlReaderException("UFR_COMMUNICATION_TERMINATED");
+ }
+ } else if (mAccessory != null) {
+ try {
+ time_start = System.nanoTime() / 1000000;
+ while (AoAAvailable() < buffer_size) {
+ time_end = System.nanoTime() / 1000000;
+ if ((time_end - time_start) > ComParams.READ_TIMEOUT) {
+ throw new DlReaderException("UFR_COMMUNICATION_BREAK (Timeout)");
+ }
+ }
+ AoARead(buffer, buffer_size);
+ } catch (IOException e) {
+ throw new DlReaderException("UFR_COMMUNICATION_BREAK");
+ }
+ }
+
+ return buffer;
+ }
+
+ public static byte getChecksum_local(byte[] buffer, byte length)
+ { // Ukoliko se ne bude koristila, spojiti sa CalcChecksum()
+ short i;
+ byte sum = buffer[0];
+
+ for (i = 1; i < (length - 1); i++)
+ {
+ sum ^= buffer[i];
+ }
+ return (byte)(sum + Consts.CHECKSUM_CONST);
+ }
+
+
+ public static byte getChecksumFragment(byte previous_checksum, byte[] buffer, byte length)
+ { // !without +7 at the end
+ short i;
+
+ for (i = 0; i < length; i++)
+ {
+ previous_checksum ^= buffer[i];
+ }
+ return previous_checksum;
+ }
+
+ public static void calcChecksum(byte[] buffer, byte length)
+ {
+
+ buffer[length - 1] = getChecksum_local(buffer, length);
+ }
+
+ public static boolean testChecksum(byte[] buffer, byte length)
+ {
+ short i;
+ byte sum = buffer[0];
+
+ for (i = 1; i < (length - 1); i++)
+ {
+ sum ^= buffer[i];
+ }
+ sum += Consts.CHECKSUM_CONST;
+ return sum == buffer[length - 1];
+ }
+
+ public static boolean testAuthMode(byte auth_mode) {
+
+ return (auth_mode == Consts.MIFARE_AUTHENT1A) || (auth_mode == Consts.MIFARE_AUTHENT1B);
+ }
+
+ public static byte initialHandshaking(byte[] data) throws InterruptedException, DlReaderException
+ {
+ byte command = data[1];
+ byte[] rcv_data;
+
+ erasePort();
+ Thread.sleep(10L);
+ calcChecksum(data, Consts.INTRO_SIZE);
+ portWrite(data, Consts.INTRO_SIZE);
+ rcv_data = portRead(Consts.INTRO_SIZE);
+ if (!testChecksum(rcv_data, Consts.INTRO_SIZE))
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+ if ((rcv_data[0] == Consts.ERR_HEADER) && (rcv_data[2] == Consts.ERR_TRAILER))
+ throw new DlReaderException("Reader error code: " + rcv_data[1], rcv_data[1] & 0xFF);
+
+ if ((rcv_data[1] != command)
+ || (((rcv_data[0] != Consts.RESPONSE_HEADER) || (rcv_data[2] != Consts.RESPONSE_TRAILER))
+ && ((rcv_data[0] != Consts.ACK_HEADER) || (rcv_data[2] != Consts.ACK_TRAILER))))
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+
+ java.lang.System.arraycopy(rcv_data, 0, data, 0, 7);
+ return data[3];
+ }
+
+ public static void getAndTestResponse(byte[] cmd_intro, byte command) throws DlReaderException
+ {
+ java.lang.System.arraycopy(portRead(Consts.INTRO_SIZE), 0, cmd_intro, 0, Consts.INTRO_SIZE);
+
+ if (!testChecksum(cmd_intro, Consts.INTRO_SIZE))
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+ if ((cmd_intro[0] == Consts.ERR_HEADER) || (cmd_intro[2] == Consts.ERR_TRAILER))
+ throw new DlReaderException("Reader error code: " + cmd_intro[1], cmd_intro[1] & 0xFF);
+ if ((cmd_intro[0] != Consts.RESPONSE_HEADER) || (cmd_intro[2] != Consts.RESPONSE_TRAILER)
+ || (cmd_intro[1] != command))
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+ }
+
+ public static byte[] commonBlockRead(byte[] cmd_intro, byte[] cmd_ext, byte response_ext_length) throws InterruptedException, DlReaderException
+ {
+ byte command = cmd_intro[Consts.INTRO_CMD_INDEX];
+ byte cmd_ext_length = cmd_intro[Consts.CMD_EXT_LENGTH_INDEX];
+ byte bytes_to_read;
+ byte[] checksum;
+ byte[] data;
+
+ bytes_to_read = initialHandshaking(cmd_intro);
+
+ calcChecksum(cmd_ext, cmd_ext_length);
+ portWrite(cmd_ext, cmd_ext_length);
+
+ getAndTestResponse(cmd_intro, command);
+
+ if (cmd_intro[Consts.RESPONSE_EXT_LENGTH_INDEX] != response_ext_length)
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+
+ data = portRead(response_ext_length - 1);
+ checksum = portRead(1);
+ if ((0xFF & checksum[0]) != (0xFF & (getChecksumFragment((byte)0, data, (byte)(response_ext_length - 1)) + Consts.CHECKSUM_CONST)))
+ throw new DlReaderException("UFR_COMMUNICATION_ERROR");
+
+ return data;
+ }
+
+ public static void commonBlockWrite(byte[] data, byte[] cmd_intro, byte[] cmd_ext) throws InterruptedException, DlReaderException
+ {
+ byte command = cmd_intro[Consts.INTRO_CMD_INDEX];
+ byte cmd_ext_length = cmd_intro[Consts.CMD_EXT_LENGTH_INDEX];
+ byte[] checksum = new byte[] {0};
+
+ initialHandshaking(cmd_intro);
+ checksum[0] = getChecksumFragment((byte)0, cmd_ext, (byte) (cmd_ext_length - (data.length + 1)));
+ checksum[0] = (byte)(getChecksumFragment(checksum[0], data, (byte) data.length) + Consts.CHECKSUM_CONST);
+
+ portWrite(cmd_ext, (cmd_ext_length - (data.length + 1)));
+ portWrite(data, data.length);
+ portWrite(checksum, 1);
+ getAndTestResponse(cmd_intro, command);
+ }
+ }
+
+ private void setAoAConfig(int rs232_baud_rate) throws DlReaderException {
+ byte[] configdata = new byte[8];
+
+ /*prepare the baud rate buffer*/
+ configdata[0] = (byte)rs232_baud_rate;
+ configdata[1] = (byte)(rs232_baud_rate >> 8);
+ configdata[2] = (byte)(rs232_baud_rate >> 16);
+ configdata[3] = (byte)(rs232_baud_rate >> 24);
+
+ /*data bits*/
+ configdata[4] = ComParams.DATA_BITS;
+ /*stop bits*/
+ configdata[5] = 1;
+ /*parity*/
+ configdata[6] = 0;
+ /*flow control*/
+ configdata[7] = 0;
+
+ /*send the UART configuration packet*/
+ try {
+ ComProtocol.portWrite(configdata, (int) 8);
+ } catch (DlReaderException e) {
+ if (e.getErrCode() == DlErrorCodes.AOA_WRITE_ERROR) {
+ closeAoAEndpoints();
+ open_index = -1;
+ mAccessory = null;
+ }
+ throw e;
+ }
+ }
+
+ private static class ComParams {
+ public static final byte LATENCY_TIMER = 2;
+ public static final int BAUD_RATE = 1000000;
+ public static final long READ_TIMEOUT = 2500;
+ public static final long WRITE_TIMEOUT = 1000;
+ public static final byte BIT_MODE = D2xxManager.FT_BITMODE_RESET;
+ public static final byte DATA_BITS = D2xxManager.FT_DATA_BITS_8;
+ public static final short FLOW_CONTROL = D2xxManager.FT_FLOW_NONE;
+ public static final byte PARITY = D2xxManager.FT_PARITY_NONE;
+ public static final byte STOP_BITS = D2xxManager.FT_STOP_BITS_1;
+ }
+
+ public static class Consts {
+
+ // Lengths and ranges:
+ public static final int BUFFER_LOCAL_SIZE = 256;
+ public static final int BUFFER_SIZE = 192;
+ public static final byte INTRO_SIZE = 7;
+ public static final int EXT_SIZE_INDEX = 3;
+ public static final int PARAM0_INDEX = 4;
+ public static final int PARAM1_INDEX = 5;
+ public static final int VAL0_INDEX = 4;
+ public static final int VAL1_INDEX = 5;
+ public static final int INTRO_CMD_INDEX = 1;
+ public static final int CMD_EXT_LENGTH_INDEX = 3;
+ public static final int CMD_PARAM0_INDEX = 4;
+ public static final int CMD_EXT_PROVIDED_KEY_INDEX = 4;
+ public static final int RESPONSE_EXT_LENGTH_INDEX = 3;
+ public static final int RESPONSE_VAL0_INDEX = 4;
+
+ // Protocol consts:
+ public static final byte CMD_HEADER = 0x55;
+ public static final byte CMD_TRAILER = (byte)0xAA;
+ public static final byte ACK_HEADER = (byte)0xAC;
+ public static final byte ACK_TRAILER = (byte)0xCA;
+ public static final byte RESPONSE_HEADER = (byte)0xDE;
+ public static final byte RESPONSE_TRAILER = (byte)0xED;
+ public static final byte ERR_HEADER = (byte)0xEC;
+ public static final byte ERR_TRAILER = (byte)0xCE;
+ public static final byte CHECKSUM_CONST = (byte)7;
+
+ // Auth consts:
+ public static final byte RKA_AUTH1A = 0x00; // reder keys addressing mode, authentication using key A
+ public static final byte RKA_AUTH1B = 0x01; // reder keys addressing mode, authentication using key B
+ public static final byte AKM1_AUTH1A = 0x20; // auto keys, searching mode 1, authentication using key A
+ public static final byte AKM1_AUTH1B = 0x21; // auto keys, searching mode 1, authentication using key B
+ public static final byte AKM2_AUTH1A = 0x40; // auto keys, searching mode 2, authentication using key A
+ public static final byte AKM2_AUTH1B = 0x41; // auto keys, searching mode 2, authentication using key B
+ public static final byte PK_AUTH1A = 0x60; // provided keys, authentication using key A
+ public static final byte PK_AUTH1B = 0x61; // provided keys, authentication using key B
+
+ public static final byte MIFARE_AUTHENT1A = 0x60;
+ public static final byte MIFARE_AUTHENT1B = 0x61;
+
+ // uFR Commands:
+ public static final byte GET_READER_TYPE = 0x10;
+ public static final byte GET_READER_SERIAL = 0x11;
+ public static final byte GET_HARDWARE_VERSION = 0x2A;
+ public static final byte GET_FIRMWARE_VERSION = 0x29;
+ public static final byte GET_CARD_ID = 0x13;
+ public static final byte GET_CARD_ID_EX = 0x2C;
+ public static final byte BLOCK_READ = 0x16;
+ public static final byte BLOCK_WRITE = 0x17;
+ public static final byte SOFT_RESTART = 0x30;
+ public static final byte USER_INTERFACE_SIGNAL = 0x26;
+ public static final byte ENTER_SLEEP_MODE = 0x46;
+ public static final byte LEAVE_SLEEP_MODE = 0x47;
+
+ public static final byte S_BLOCK_DESELECT = (byte)0x92;
+ public static final byte SET_ISO14433_4_MODE = (byte)0x93;
+ public static final byte APDU_TRANSCEIVE = (byte)0x94;
+
+ public static final byte USB2USB_PING = (byte)0xF0;
+ public static final byte USB2USB_FT232_RST = (byte)0xF1;
+ public static final byte USB2USB_OTG_OFF = (byte)0xF2;
+
+ // uFR Status:
+ public static final int DL_READER_COMMUNICATION_BREAK = 0x50;
+ public static final int DL_READER_IS_NOT_CONNECTED = 0x104;
+ public static final int DL_READER_GENERAL_EXCEPTION = 1000;
+
+ public static final int DL_READER_NO_DEVICE_ATTACHED = 1001;
+ public static final int DL_READER_DEVICE_COULD_NOT_BE_OPENED = 1002;
+ public static final int DL_READER_DEVICE_ALREADY_OPEN = 1003;
+
+ public static final int MAX_COMMUNICATION_BREAK_RETRIES = 2;
+ }
+
+ public class DlErrorCodes {
+ private static final int AOA_WRITE_ERROR = 0x8001;
+ }
+
+ public static class DlReaderException extends IOException {
+ private static final long serialVersionUID = 1L;
+ public int err_code;
+
+ public DlReaderException() {
+ }
+
+ public DlReaderException(String ftStatusMsg) {
+ super(ftStatusMsg);
+ err_code = Consts.DL_READER_GENERAL_EXCEPTION;
+ }
+
+ public DlReaderException(String ftStatusMsg, int p_err_code) {
+ super(ftStatusMsg);
+ err_code = p_err_code;
+ }
+
+ public int getErrCode() {
+
+ return err_code;
+ }
+ }
+
+ private static class LocalException extends IOException {
+ private static final long serialVersionUID = 1L;
+
+ public LocalException() {
+ }
+
+ public LocalException(String ftStatusMsg) {
+ super(ftStatusMsg);
+ }
+ }
+
+ public static class CardParams {
+ private byte sak;
+ private byte uid_size;
+
+ public CardParams() {
+ sak = 0;
+ uid_size = 0;
+ }
+
+ public void setSak(byte p_sak) {
+ sak = p_sak;
+ }
+
+ public byte getSak() {
+ return sak;
+ }
+
+ public void setUidSize(byte p_uid_size) {
+ uid_size = p_uid_size;
+ }
+
+ public byte getUidSize() {
+ return uid_size;
+ }
+ }
+
+ // AoA available:
+ static private int AoAAvailable() {
+
+ return totalBytes;
+ }
+
+ // AoA read:
+ // Returns bytes actually read:
+ static private int AoARead(byte[] buffer, int byteCount)
+ {
+
+ // Should be at least one byte to read:
+ if((byteCount < 1) || (totalBytes == 0)){
+ return 0;
+ }
+
+ /* Check for max limit*/
+ if(byteCount > totalBytes) {
+ byteCount = totalBytes;
+ }
+
+ // Copy to the user buffer:
+ for(int i = 0; i < byteCount; i++)
+ {
+ buffer[i] = AoAReadBuffer[readIndex];
+ readIndex++;
+ /*shouldnt read more than what is there in the buffer,
+ * so no need to check the overflow
+ */
+ readIndex %= MAX_BYTES;
+ }
+
+ // Update the number of bytes available:
+ totalBytes -= byteCount;
+
+ return byteCount;
+ }
+
+ // AoA usb input data handler:
+ private class AoAReadThread extends Thread {
+
+ FileInputStream instream;
+ boolean stop_thread = false;
+
+ private int readcount;
+
+ private byte [] usbdata = new byte[CHUNK_BYTES];
+
+ AoAReadThread(FileInputStream stream ) {
+
+ instream = stream;
+
+ this.setPriority(Thread.MAX_PRIORITY);
+ }
+
+ public synchronized void stopRequest() {
+
+ stop_thread = true;
+ }
+
+ public void run() {
+
+ while(!stop_thread) {
+ while (totalBytes > (MAX_BYTES - CHUNK_BYTES)) {
+ try {
+ Thread.sleep(32);
+ }
+ catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ try {
+ if (instream != null) {
+ readcount = instream.read(usbdata);
+
+ if (readcount > 0) {
+
+ // MAX_BYTES should be power(2, n), where n is a element of N
+ for(int i = 0; i < readcount; i++) {
+
+ AoAReadBuffer[writeIndex] = usbdata[i];
+ ++writeIndex;
+ writeIndex %= MAX_BYTES;
+ }
+
+ if (writeIndex >= readIndex) {
+ totalBytes = writeIndex - readIndex;
+ } else {
+ totalBytes = (MAX_BYTES - readIndex) + writeIndex;
+ }
+ }
+ }
+ } catch (IOException e) {
+ stop_thread = true;
+ if (instream != null) {
+ try {
+ instream.close();
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+ }
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2fb6299d7640ad5f910a739dec5df6053b8b04f4..9fe1d1459955d5b78253cb7e488358a36ee6d1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,7 +3,6 @@
package="net.dlogic.ufr.apdu_example"
android:versionCode="11"
android:versionName="1.1" >
-
diff --git a/app/src/main/res/xml/dev_desc_filter.xml b/app/src/main/res/xml/dev_desc_filter.xml
index 4360c53659fe39f21dc33879a5222879fdd20195..a211642bc4285a3a8e2a41a0e5a8d5a7d9c2c701 100644
--- a/app/src/main/res/xml/dev_desc_filter.xml
+++ b/app/src/main/res/xml/dev_desc_filter.xml
@@ -8,4 +8,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build.gradle b/build.gradle
index d0aa70430ccede160b7b023221e5caa096713b83..c8bbf23da1e935ec39b04876e1461e013ac84e96 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,10 +2,12 @@
buildscript {
repositories {
+ google()
jcenter()
+
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.2'
+ classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -14,7 +16,9 @@ buildscript {
allprojects {
repositories {
+ google()
jcenter()
+
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a33b169342004c2feb6b4fd001c9298476b2d19f..a1a4b9283f1947389bb44c48c850cd94f41cf480 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Apr 18 13:30:08 CEST 2017
+#Thu Dec 05 13:19:47 CET 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip