ilabs-flir 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/Flir.podspec +139 -139
  2. package/README.md +1066 -1066
  3. package/android/Flir/build.gradle.kts +72 -72
  4. package/android/Flir/src/main/AndroidManifest.xml +45 -45
  5. package/android/Flir/src/main/java/flir/android/FlirCommands.java +136 -136
  6. package/android/Flir/src/main/java/flir/android/FlirFrameCache.kt +6 -6
  7. package/android/Flir/src/main/java/flir/android/FlirManager.kt +476 -476
  8. package/android/Flir/src/main/java/flir/android/FlirModule.kt +257 -257
  9. package/android/Flir/src/main/java/flir/android/FlirPackage.kt +18 -18
  10. package/android/Flir/src/main/java/flir/android/FlirSDKLoader.kt +74 -74
  11. package/android/Flir/src/main/java/flir/android/FlirSdkManager.java +583 -583
  12. package/android/Flir/src/main/java/flir/android/FlirStatus.kt +12 -12
  13. package/android/Flir/src/main/java/flir/android/FlirView.kt +48 -48
  14. package/android/Flir/src/main/java/flir/android/FlirViewManager.kt +13 -13
  15. package/app.plugin.js +381 -381
  16. package/expo-module.config.json +5 -5
  17. package/ios/Flir/src/Flir-Bridging-Header.h +34 -34
  18. package/ios/Flir/src/FlirEventEmitter.h +25 -25
  19. package/ios/Flir/src/FlirEventEmitter.m +63 -63
  20. package/ios/Flir/src/FlirManager.swift +599 -599
  21. package/ios/Flir/src/FlirModule.h +17 -17
  22. package/ios/Flir/src/FlirModule.m +713 -713
  23. package/ios/Flir/src/FlirPreviewView.h +13 -13
  24. package/ios/Flir/src/FlirPreviewView.m +171 -171
  25. package/ios/Flir/src/FlirState.h +68 -68
  26. package/ios/Flir/src/FlirState.m +135 -135
  27. package/ios/Flir/src/FlirViewManager.h +16 -16
  28. package/ios/Flir/src/FlirViewManager.m +27 -27
  29. package/package.json +70 -71
  30. package/react-native.config.js +14 -14
  31. package/scripts/fetch-binaries.js +103 -17
  32. package/sdk-manifest.json +50 -50
  33. package/src/index.d.ts +63 -63
  34. package/src/index.js +7 -7
  35. package/src/index.ts +6 -6
@@ -1,72 +1,72 @@
1
- plugins {
2
- id("com.android.library")
3
- id("org.jetbrains.kotlin.android")
4
- id("maven-publish")
5
- }
6
-
7
- android {
8
- namespace = "flir.android"
9
- compileSdk = 34
10
-
11
- defaultConfig {
12
- minSdk = 24
13
- targetSdk = 34
14
- testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
15
- }
16
-
17
- compileOptions {
18
- sourceCompatibility = JavaVersion.VERSION_21
19
- targetCompatibility = JavaVersion.VERSION_21
20
- }
21
-
22
- kotlinOptions {
23
- jvmTarget = JavaVersion.VERSION_21.toString()
24
- }
25
-
26
- buildFeatures {
27
- viewBinding = true
28
- }
29
-
30
-
31
- publishing {
32
- singleVariant("release") {
33
- withJavadocJar()
34
- withSourcesJar()
35
- }
36
- }
37
- }
38
-
39
- dependencies {
40
- // React Native
41
- implementation("com.facebook.react:react-native:+")
42
-
43
- // Kotlin coroutines
44
- implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
45
-
46
- // FLIR SDK - Use the actual AAR files from libs folder
47
- // Using 'api' to expose SDK classes to consumers and Java source files
48
- // flatDir must be configured in settings.gradle or root build.gradle
49
- api(files("libs/androidsdk-release.aar"))
50
- api(files("libs/thermalsdk-release.aar"))
51
-
52
- // Minimal compile deps to satisfy source references
53
- implementation("androidx.annotation:annotation:1.5.0")
54
-
55
- // Prevent duplicate SLF4J classes when a consumer also brings `org.slf4j:slf4j-api`
56
- configurations.all {
57
- exclude(group = "org.slf4j", module = "slf4j-api")
58
- }
59
- }
60
-
61
- publishing {
62
- publications {
63
- create<MavenPublication>("release") {
64
- afterEvaluate {
65
- from(components["release"])
66
- groupId = "com.github.PraveenOjha"
67
- artifactId = "Flir"
68
- version = project.version.toString().ifEmpty { "unspecified" }
69
- }
70
- }
71
- }
72
- }
1
+ plugins {
2
+ id("com.android.library")
3
+ id("org.jetbrains.kotlin.android")
4
+ id("maven-publish")
5
+ }
6
+
7
+ android {
8
+ namespace = "flir.android"
9
+ compileSdk = 34
10
+
11
+ defaultConfig {
12
+ minSdk = 24
13
+ targetSdk = 34
14
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
15
+ }
16
+
17
+ compileOptions {
18
+ sourceCompatibility = JavaVersion.VERSION_21
19
+ targetCompatibility = JavaVersion.VERSION_21
20
+ }
21
+
22
+ kotlinOptions {
23
+ jvmTarget = JavaVersion.VERSION_21.toString()
24
+ }
25
+
26
+ buildFeatures {
27
+ viewBinding = true
28
+ }
29
+
30
+
31
+ publishing {
32
+ singleVariant("release") {
33
+ withJavadocJar()
34
+ withSourcesJar()
35
+ }
36
+ }
37
+ }
38
+
39
+ dependencies {
40
+ // React Native
41
+ implementation("com.facebook.react:react-native:+")
42
+
43
+ // Kotlin coroutines
44
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
45
+
46
+ // FLIR SDK - Use the actual AAR files from libs folder
47
+ // Using 'api' to expose SDK classes to consumers and Java source files
48
+ // flatDir must be configured in settings.gradle or root build.gradle
49
+ api(files("libs/androidsdk-release.aar"))
50
+ api(files("libs/thermalsdk-release.aar"))
51
+
52
+ // Minimal compile deps to satisfy source references
53
+ implementation("androidx.annotation:annotation:1.5.0")
54
+
55
+ // Prevent duplicate SLF4J classes when a consumer also brings `org.slf4j:slf4j-api`
56
+ configurations.all {
57
+ exclude(group = "org.slf4j", module = "slf4j-api")
58
+ }
59
+ }
60
+
61
+ publishing {
62
+ publications {
63
+ create<MavenPublication>("release") {
64
+ afterEvaluate {
65
+ from(components["release"])
66
+ groupId = "com.github.PraveenOjha"
67
+ artifactId = "Flir"
68
+ version = project.version.toString().ifEmpty { "unspecified" }
69
+ }
70
+ }
71
+ }
72
+ }
@@ -1,45 +1,45 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
-
4
- <!-- ============================================ -->
5
- <!-- FLIR Thermal SDK Required Permissions -->
6
- <!-- These will auto-merge into your app -->
7
- <!-- ============================================ -->
8
-
9
- <!-- USB Host feature for FLIR ONE USB devices -->
10
- <!-- This is the primary interface for FLIR ONE cameras -->
11
- <uses-feature
12
- android:name="android.hardware.usb.host"
13
- android:required="false" />
14
-
15
- <!-- Camera support for network-based FLIR cameras (ACE series) -->
16
- <!-- Set to false so app can still install on devices without cameras -->
17
- <uses-feature
18
- android:name="android.hardware.camera"
19
- android:required="false" />
20
-
21
- <!-- Camera permission for ACE cameras that use device camera -->
22
- <uses-permission android:name="android.permission.CAMERA"/>
23
-
24
- <!-- Internet permission for ACE camera internal communication -->
25
- <!-- Required by ACE SDK architecture for local network communication -->
26
- <uses-permission android:name="android.permission.INTERNET" />
27
-
28
- <!-- ============================================ -->
29
- <!-- WiFi permissions for network discovery -->
30
- <!-- Required for FLIR ONE Edge and network cams -->
31
- <!-- ============================================ -->
32
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
33
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
34
- <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
35
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
36
- <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
37
-
38
- <!-- Location permission required for WiFi scanning on Android 10+ -->
39
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
40
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
41
-
42
- <!-- Note: USB permissions are handled at runtime via UsbPermissionHandler -->
43
- <!-- No additional USB permissions needed in manifest -->
44
-
45
- </manifest>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+
4
+ <!-- ============================================ -->
5
+ <!-- FLIR Thermal SDK Required Permissions -->
6
+ <!-- These will auto-merge into your app -->
7
+ <!-- ============================================ -->
8
+
9
+ <!-- USB Host feature for FLIR ONE USB devices -->
10
+ <!-- This is the primary interface for FLIR ONE cameras -->
11
+ <uses-feature
12
+ android:name="android.hardware.usb.host"
13
+ android:required="false" />
14
+
15
+ <!-- Camera support for network-based FLIR cameras (ACE series) -->
16
+ <!-- Set to false so app can still install on devices without cameras -->
17
+ <uses-feature
18
+ android:name="android.hardware.camera"
19
+ android:required="false" />
20
+
21
+ <!-- Camera permission for ACE cameras that use device camera -->
22
+ <uses-permission android:name="android.permission.CAMERA"/>
23
+
24
+ <!-- Internet permission for ACE camera internal communication -->
25
+ <!-- Required by ACE SDK architecture for local network communication -->
26
+ <uses-permission android:name="android.permission.INTERNET" />
27
+
28
+ <!-- ============================================ -->
29
+ <!-- WiFi permissions for network discovery -->
30
+ <!-- Required for FLIR ONE Edge and network cams -->
31
+ <!-- ============================================ -->
32
+ <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
33
+ <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
34
+ <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
35
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
36
+ <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
37
+
38
+ <!-- Location permission required for WiFi scanning on Android 10+ -->
39
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
40
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
41
+
42
+ <!-- Note: USB permissions are handled at runtime via UsbPermissionHandler -->
43
+ <!-- No additional USB permissions needed in manifest -->
44
+
45
+ </manifest>
@@ -1,136 +1,136 @@
1
- package flir.android;
2
-
3
- import androidx.annotation.Nullable;
4
- import com.facebook.react.bridge.ReadableArray;
5
- import com.facebook.react.bridge.WritableMap;
6
-
7
- public final class FlirCommands {
8
-
9
- private FlirCommands() {
10
- // No instances
11
- }
12
-
13
- /**
14
- * Command 59: selectFlirDevice - Select FLIR device by ID
15
- * Args: [deviceId: string]
16
- */
17
- public static void handleSelectFlirDevice(Object root, WritableMap resp, @Nullable ReadableArray args) {
18
- try {
19
- if (args == null || args.size() < 1) {
20
- resp.putString("status", "error");
21
- resp.putString("message", "deviceId required");
22
- return;
23
- }
24
-
25
- String deviceId = args.getString(0);
26
- android.util.Log.i("CameraCommand", "[FLIR] Selecting device: " + deviceId);
27
-
28
- // Get FlirManager instance and select device
29
- FlirManager flirManager = FlirManager.INSTANCE;
30
- if (flirManager == null) {
31
- resp.putString("status", "error");
32
- resp.putString("message", "FlirManager not initialized");
33
- return;
34
- }
35
-
36
- // Select device by ID (triggers connection)
37
- flirManager.switchToDevice(deviceId);
38
-
39
- resp.putString("status", "ok");
40
- resp.putString("message", "Device selected");
41
- resp.putString("deviceId", deviceId);
42
- } catch (Exception e) {
43
- android.util.Log.w("CameraCommand", "[FLIR] Device selection failed", e);
44
- resp.putString("status", "error");
45
- resp.putString("message", e.getMessage());
46
- }
47
- }
48
-
49
- /**
50
- * Command 60: setFlirEmulatorType - Set FLIR emulator type
51
- * Args: [type: "FLIR_ONE" | "FLIR_ONE_EDGE"]
52
- */
53
- public static void handleSetFlirEmulatorType(Object root, WritableMap resp, @Nullable ReadableArray args) {
54
- try {
55
- if (args == null || args.size() < 1) {
56
- resp.putString("status", "error");
57
- resp.putString("message", "emulator type required");
58
- return;
59
- }
60
-
61
- String type = args.getString(0);
62
-
63
- if (!"FLIR_ONE".equals(type) && !"FLIR_ONE_EDGE".equals(type)) {
64
- resp.putString("status", "error");
65
- resp.putString("message", "Invalid type. Use FLIR_ONE or FLIR_ONE_EDGE");
66
- return;
67
- }
68
-
69
- // Get FlirManager instance and set emulator type
70
- FlirManager flirManager = FlirManager.INSTANCE;
71
- if (flirManager == null) {
72
- resp.putString("status", "error");
73
- resp.putString("message", "FlirManager not initialized");
74
- return;
75
- }
76
-
77
- flirManager.setPreferredEmulatorType(type);
78
-
79
- android.util.Log.i("CameraCommand", "[FLIR] Emulator type set to: " + type);
80
-
81
- resp.putString("status", "ok");
82
- resp.putString("message", "Emulator type set");
83
- resp.putString("emulatorType", type);
84
- } catch (Exception e) {
85
- android.util.Log.w("CameraCommand", "[FLIR] Set emulator type failed", e);
86
- resp.putString("status", "error");
87
- resp.putString("message", e.getMessage());
88
- }
89
- }
90
-
91
- /**
92
- * Command 61: setFlirPalette - Set FLIR thermal palette
93
- * Args: [acol: number] - palette index
94
- */
95
- public static void handleSetFlirPalette(Object root, WritableMap resp, @Nullable ReadableArray args) {
96
- try {
97
- int acol = args != null && args.size() > 0 ? (int) args.getDouble(0) : 1;
98
-
99
- android.util.Log.i("CameraCommand", "[FLIR] Setting palette acol=" + acol);
100
-
101
- // Get FlirManager instance and set palette by index
102
- FlirManager flirManager = FlirManager.INSTANCE;
103
- if (flirManager == null) {
104
- resp.putString("status", "error");
105
- resp.putString("message", "FlirManager not initialized");
106
- return;
107
- }
108
-
109
- // Map acol index to palette name
110
- String paletteName = mapAcolToPaletteName(acol);
111
- flirManager.setPalette(paletteName);
112
-
113
- resp.putString("status", "ok");
114
- resp.putString("message", "Palette set");
115
- resp.putInt("acol", acol);
116
- } catch (Exception e) {
117
- android.util.Log.w("CameraCommand", "[FLIR] Set palette failed", e);
118
- resp.putString("status", "error");
119
- resp.putString("message", e.getMessage());
120
- }
121
- }
122
-
123
- private static String mapAcolToPaletteName(int acol) {
124
- switch (acol) {
125
- case 0: return "gray";
126
- case 1: return "iron";
127
- case 2: return "rainbow";
128
- case 3: return "lava";
129
- case 4: return "arctic";
130
- case 5: return "coldest";
131
- case 6: return "hottest";
132
- case 7: return "contrast";
133
- default: return "iron";
134
- }
135
- }
136
- }
1
+ package flir.android;
2
+
3
+ import androidx.annotation.Nullable;
4
+ import com.facebook.react.bridge.ReadableArray;
5
+ import com.facebook.react.bridge.WritableMap;
6
+
7
+ public final class FlirCommands {
8
+
9
+ private FlirCommands() {
10
+ // No instances
11
+ }
12
+
13
+ /**
14
+ * Command 59: selectFlirDevice - Select FLIR device by ID
15
+ * Args: [deviceId: string]
16
+ */
17
+ public static void handleSelectFlirDevice(Object root, WritableMap resp, @Nullable ReadableArray args) {
18
+ try {
19
+ if (args == null || args.size() < 1) {
20
+ resp.putString("status", "error");
21
+ resp.putString("message", "deviceId required");
22
+ return;
23
+ }
24
+
25
+ String deviceId = args.getString(0);
26
+ android.util.Log.i("CameraCommand", "[FLIR] Selecting device: " + deviceId);
27
+
28
+ // Get FlirManager instance and select device
29
+ FlirManager flirManager = FlirManager.INSTANCE;
30
+ if (flirManager == null) {
31
+ resp.putString("status", "error");
32
+ resp.putString("message", "FlirManager not initialized");
33
+ return;
34
+ }
35
+
36
+ // Select device by ID (triggers connection)
37
+ flirManager.switchToDevice(deviceId);
38
+
39
+ resp.putString("status", "ok");
40
+ resp.putString("message", "Device selected");
41
+ resp.putString("deviceId", deviceId);
42
+ } catch (Exception e) {
43
+ android.util.Log.w("CameraCommand", "[FLIR] Device selection failed", e);
44
+ resp.putString("status", "error");
45
+ resp.putString("message", e.getMessage());
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Command 60: setFlirEmulatorType - Set FLIR emulator type
51
+ * Args: [type: "FLIR_ONE" | "FLIR_ONE_EDGE"]
52
+ */
53
+ public static void handleSetFlirEmulatorType(Object root, WritableMap resp, @Nullable ReadableArray args) {
54
+ try {
55
+ if (args == null || args.size() < 1) {
56
+ resp.putString("status", "error");
57
+ resp.putString("message", "emulator type required");
58
+ return;
59
+ }
60
+
61
+ String type = args.getString(0);
62
+
63
+ if (!"FLIR_ONE".equals(type) && !"FLIR_ONE_EDGE".equals(type)) {
64
+ resp.putString("status", "error");
65
+ resp.putString("message", "Invalid type. Use FLIR_ONE or FLIR_ONE_EDGE");
66
+ return;
67
+ }
68
+
69
+ // Get FlirManager instance and set emulator type
70
+ FlirManager flirManager = FlirManager.INSTANCE;
71
+ if (flirManager == null) {
72
+ resp.putString("status", "error");
73
+ resp.putString("message", "FlirManager not initialized");
74
+ return;
75
+ }
76
+
77
+ flirManager.setPreferredEmulatorType(type);
78
+
79
+ android.util.Log.i("CameraCommand", "[FLIR] Emulator type set to: " + type);
80
+
81
+ resp.putString("status", "ok");
82
+ resp.putString("message", "Emulator type set");
83
+ resp.putString("emulatorType", type);
84
+ } catch (Exception e) {
85
+ android.util.Log.w("CameraCommand", "[FLIR] Set emulator type failed", e);
86
+ resp.putString("status", "error");
87
+ resp.putString("message", e.getMessage());
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Command 61: setFlirPalette - Set FLIR thermal palette
93
+ * Args: [acol: number] - palette index
94
+ */
95
+ public static void handleSetFlirPalette(Object root, WritableMap resp, @Nullable ReadableArray args) {
96
+ try {
97
+ int acol = args != null && args.size() > 0 ? (int) args.getDouble(0) : 1;
98
+
99
+ android.util.Log.i("CameraCommand", "[FLIR] Setting palette acol=" + acol);
100
+
101
+ // Get FlirManager instance and set palette by index
102
+ FlirManager flirManager = FlirManager.INSTANCE;
103
+ if (flirManager == null) {
104
+ resp.putString("status", "error");
105
+ resp.putString("message", "FlirManager not initialized");
106
+ return;
107
+ }
108
+
109
+ // Map acol index to palette name
110
+ String paletteName = mapAcolToPaletteName(acol);
111
+ flirManager.setPalette(paletteName);
112
+
113
+ resp.putString("status", "ok");
114
+ resp.putString("message", "Palette set");
115
+ resp.putInt("acol", acol);
116
+ } catch (Exception e) {
117
+ android.util.Log.w("CameraCommand", "[FLIR] Set palette failed", e);
118
+ resp.putString("status", "error");
119
+ resp.putString("message", e.getMessage());
120
+ }
121
+ }
122
+
123
+ private static String mapAcolToPaletteName(int acol) {
124
+ switch (acol) {
125
+ case 0: return "gray";
126
+ case 1: return "iron";
127
+ case 2: return "rainbow";
128
+ case 3: return "lava";
129
+ case 4: return "arctic";
130
+ case 5: return "coldest";
131
+ case 6: return "hottest";
132
+ case 7: return "contrast";
133
+ default: return "iron";
134
+ }
135
+ }
136
+ }
@@ -1,6 +1,6 @@
1
- package flir.android
2
-
3
- object FlirFrameCache {
4
- @JvmStatic
5
- var latestFramePath: String? = null
6
- }
1
+ package flir.android
2
+
3
+ object FlirFrameCache {
4
+ @JvmStatic
5
+ var latestFramePath: String? = null
6
+ }