diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 8588da1..572f9cf 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,10 +4,8 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index 59f6372..9f24f58 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index c96aaac..b764dd7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "me.aflak.libraries" minSdkVersion 15 - targetSdkVersion 31 + targetSdkVersion 33 versionCode 2 versionName "1.0" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' @@ -27,7 +27,7 @@ dependencies { androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation project(path: ':arduino') } diff --git a/arduino/build.gradle b/arduino/build.gradle index fe38ccc..9123edd 100644 --- a/arduino/build.gradle +++ b/arduino/build.gradle @@ -25,11 +25,11 @@ ext { } android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { minSdkVersion 15 - targetSdkVersion 31 + targetSdkVersion 33 versionCode 9 versionName "1.4.6" @@ -49,7 +49,7 @@ dependencies { androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { exclude group: 'com.android.support', module: 'support-annotations' }) - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.6.1' api 'com.github.felHR85:UsbSerial:6.1.0' } diff --git a/arduino/src/main/java/me/aflak/arduino/Arduino.java b/arduino/src/main/java/me/aflak/arduino/Arduino.java index 96df5f4..481db55 100644 --- a/arduino/src/main/java/me/aflak/arduino/Arduino.java +++ b/arduino/src/main/java/me/aflak/arduino/Arduino.java @@ -1,5 +1,6 @@ package me.aflak.arduino; +import android.annotation.SuppressLint; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; @@ -8,8 +9,11 @@ import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; +import android.os.Build; import android.util.Log; +import androidx.core.content.ContextCompat; + import com.felhr.usbserial.UsbSerialDevice; import com.felhr.usbserial.UsbSerialInterface; @@ -17,6 +21,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Objects; /** * Created by Omar on 21/05/2017. @@ -34,7 +39,7 @@ public class Arduino implements UsbSerialInterface.UsbReadCallback { private int baudRate; private boolean isOpened; - private List vendorIds; + private List vendorIds; private List bytesReceived; private byte delimiter; @@ -57,11 +62,19 @@ private void init(Context context, int baudRate) { this.baudRate = baudRate; this.isOpened = false; this.vendorIds = new ArrayList<>(); - this.vendorIds.add(9025); + this.vendorIds.add("9025"); + this.vendorIds.add("1027"); + this.vendorIds.add("5824"); + this.vendorIds.add("4292"); + this.vendorIds.add("1659"); + this.vendorIds.add("4966"); + this.vendorIds.add("1A86"); + this.bytesReceived = new ArrayList<>(); this.delimiter = DEFAULT_DELIMITER; } + @SuppressLint("NewApi") public void setArduinoListener(ArduinoListener listener) { this.listener = listener; @@ -69,7 +82,7 @@ public void setArduinoListener(ArduinoListener listener) { intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); intentFilter.addAction(ACTION_USB_DEVICE_PERMISSION); - context.registerReceiver(usbReceiver, intentFilter); + context.registerReceiver(usbReceiver, intentFilter, Context.RECEIVER_EXPORTED); lastArduinoAttached = getAttachedArduino(); if (lastArduinoAttached != null && listener != null) { @@ -81,12 +94,13 @@ public void unsetArduinoListener() { this.listener = null; } + @SuppressLint("NewApi") public void open(UsbDevice device) { - PendingIntent permissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_DEVICE_PERMISSION), PendingIntent.FLAG_MUTABLE); + PendingIntent permissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_DEVICE_PERMISSION), PendingIntent.FLAG_IMMUTABLE); IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_USB_DEVICE_PERMISSION); filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); - context.registerReceiver(usbReceiver, filter); + context.registerReceiver(usbReceiver, filter, Context.RECEIVER_EXPORTED); usbManager.requestPermission(device, permissionIntent); } @@ -112,15 +126,15 @@ public void send(byte[] bytes) { } } - public void setDelimiter(byte delimiter){ + public void setDelimiter(byte delimiter) { this.delimiter = delimiter; } - public void setBaudRate(int baudRate){ + public void setBaudRate(int baudRate) { this.baudRate = baudRate; } - public void addVendorId(int id){ + public void addVendorId(String id) { vendorIds.add(id); } @@ -132,7 +146,7 @@ public void onReceive(Context context, Intent intent) { switch (intent.getAction()) { case UsbManager.ACTION_USB_DEVICE_ATTACHED: device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); - if (hasId(device.getVendorId())) { + if (hasId(String.valueOf(device.getVendorId()))) { lastArduinoAttached = device; if (listener != null) { listener.onArduinoAttached(device); @@ -141,7 +155,7 @@ public void onReceive(Context context, Intent intent) { break; case UsbManager.ACTION_USB_DEVICE_DETACHED: device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); - if (hasId(device.getVendorId())) { + if (hasId(String.valueOf(device.getVendorId()))) { if (listener != null) { listener.onArduinoDetached(); } @@ -150,7 +164,7 @@ public void onReceive(Context context, Intent intent) { case ACTION_USB_DEVICE_PERMISSION: if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); - if (hasId(device.getVendorId())) { + if (hasId(String.valueOf(device.getVendorId()))) { connection = usbManager.openDevice(device); serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection); if (serialPort != null) { @@ -182,34 +196,34 @@ public void onReceive(Context context, Intent intent) { private UsbDevice getAttachedArduino() { HashMap map = usbManager.getDeviceList(); for (UsbDevice device : map.values()) { - if (hasId(device.getVendorId())) { + if (hasId(String.valueOf(device.getVendorId()))) { return device; } } return null; } - private List indexOf(byte[] bytes, byte b){ + private List indexOf(byte[] bytes, byte b) { List idx = new ArrayList<>(); - for(int i=0 ; i toByteList(byte[] bytes){ + private List toByteList(byte[] bytes) { List list = new ArrayList<>(); - for(byte b : bytes){ + for (byte b : bytes) { list.add(b); } return list; } - private byte[] toByteArray(List bytes){ + private byte[] toByteArray(List bytes) { byte[] array = new byte[bytes.size()]; - for(int i=0 ; i bytes){ public void onReceivedData(byte[] bytes) { if (bytes.length != 0) { List idx = indexOf(bytes, delimiter); - if(idx.isEmpty()){ + if (idx.isEmpty()) { bytesReceived.addAll(toByteList(bytes)); - } else{ + } else { int offset = 0; - for(int index : idx){ + for (int index : idx) { byte[] tmp = Arrays.copyOfRange(bytes, offset, index); bytesReceived.addAll(toByteList(tmp)); - if(listener != null) { + if (listener != null) { listener.onArduinoMessage(toByteArray(bytesReceived)); } bytesReceived.clear(); offset = index + 1; } - if(offset < bytes.length){ + if (offset < bytes.length) { byte[] tmp = Arrays.copyOfRange(bytes, offset, bytes.length); bytesReceived.addAll(toByteList(tmp)); } @@ -245,10 +259,10 @@ public boolean isOpened() { return isOpened; } - private boolean hasId(int id) { - Log.i(getClass().getSimpleName(), "Vendor id : "+id); - for(int vendorId : vendorIds){ - if(vendorId==id){ + private boolean hasId(String id) { + Log.i(getClass().getSimpleName(), "Vendor id : " + id); + for (String vendorId : vendorIds) { + if (Objects.equals(vendorId, id)) { return true; } }