Skip to content
4 changes: 1 addition & 3 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 30
compileSdkVersion 31
defaultConfig {
applicationId "me.aflak.libraries"
minSdkVersion 15
targetSdkVersion 30
versionCode 1
versionName "1.0"
targetSdkVersion 31
versionCode 3
versionName "1.5.1"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
buildTypes {
Expand Down
10 changes: 5 additions & 5 deletions arduino/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ ext {
siteUrl = 'https://github.com/omaflak/Arduino'
gitUrl = 'https://github.com/omaflak/Arduino.git'

libraryVersion = '1.4.5'
libraryVersion = '1.6.1'

developerId = 'omaflak'
developerName = 'Omar Aflak'
Expand All @@ -25,13 +25,13 @@ ext {
}

android {
compileSdkVersion 30
compileSdkVersion 31

defaultConfig {
minSdkVersion 15
targetSdkVersion 30
versionCode 8
versionName "1.4.5"
targetSdkVersion 31
versionCode 9
versionName "1.6.1"

testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'

Expand Down
60 changes: 34 additions & 26 deletions arduino/src/main/java/me/aflak/arduino/Arduino.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;

/**
* Created by Omar on 21/05/2017.
Expand All @@ -34,7 +35,7 @@ public class Arduino implements UsbSerialInterface.UsbReadCallback {

private int baudRate;
private boolean isOpened;
private List<Integer> vendorIds;
private List<String> vendorIds;
private List<Byte> bytesReceived;
private byte delimiter;

Expand All @@ -57,7 +58,14 @@ 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;
}
Expand All @@ -82,7 +90,7 @@ public void unsetArduinoListener() {
}

public void open(UsbDevice device) {
PendingIntent permissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_DEVICE_PERMISSION), 0);
PendingIntent permissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_DEVICE_PERMISSION), PendingIntent.FLAG_MUTABLE );
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_USB_DEVICE_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
Expand Down Expand Up @@ -112,15 +120,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);
}

Expand All @@ -132,7 +140,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);
Expand All @@ -141,7 +149,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();
}
Expand All @@ -150,7 +158,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) {
Expand Down Expand Up @@ -182,34 +190,34 @@ public void onReceive(Context context, Intent intent) {
private UsbDevice getAttachedArduino() {
HashMap<String, UsbDevice> map = usbManager.getDeviceList();
for (UsbDevice device : map.values()) {
if (hasId(device.getVendorId())) {
if (hasId(String.valueOf(device.getVendorId()))) {
return device;
}
}
return null;
}

private List<Integer> indexOf(byte[] bytes, byte b){
private List<Integer> indexOf(byte[] bytes, byte b) {
List<Integer> idx = new ArrayList<>();
for(int i=0 ; i<bytes.length ; i++){
if(bytes[i] == b){
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] == b) {
idx.add(i);
}
}
return idx;
}

private List<Byte> toByteList(byte[] bytes){
private List<Byte> toByteList(byte[] bytes) {
List<Byte> list = new ArrayList<>();
for(byte b : bytes){
for (byte b : bytes) {
list.add(b);
}
return list;
}

private byte[] toByteArray(List<Byte> bytes){
private byte[] toByteArray(List<Byte> bytes) {
byte[] array = new byte[bytes.size()];
for(int i=0 ; i<bytes.size() ; i++){
for (int i = 0; i < bytes.size(); i++) {
array[i] = bytes.get(i);
}
return array;
Expand All @@ -219,21 +227,21 @@ private byte[] toByteArray(List<Byte> bytes){
public void onReceivedData(byte[] bytes) {
if (bytes.length != 0) {
List<Integer> 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));
}
Expand All @@ -245,10 +253,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;
}
}
Expand Down