Updated app package name to replace old one (lost the publishing keys)
Added apk file
10
.gitignore
vendored
@@ -4,3 +4,13 @@
|
||||
tools_python/frames.txt
|
||||
*.prefs
|
||||
*.exe
|
||||
*.pyc
|
||||
tools_python/prod_test.py
|
||||
tools_python/debug.py
|
||||
gui/
|
||||
*.bmp
|
||||
*.o
|
||||
*.elf
|
||||
*.map
|
||||
*.d
|
||||
*.psd
|
||||
|
||||
BIN
PriceHax/PriceHax_20.apk
Normal file
@@ -3,17 +3,16 @@ plugins {
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'org.furrtek.pricehax'
|
||||
namespace 'org.furrtek.pricehax2'
|
||||
compileSdk 32
|
||||
|
||||
defaultConfig {
|
||||
applicationId "org.furrtek.pricehax"
|
||||
applicationId "org.furrtek.pricehax2"
|
||||
minSdk 24
|
||||
targetSdk 32
|
||||
versionCode 2
|
||||
versionName "2.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86_64'
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<manifest package="org.furrtek.pricehax2"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.CAMERA"/>
|
||||
|
||||
@@ -1,253 +0,0 @@
|
||||
package org.furrtek.pricehax;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.content.Intent;
|
||||
import android.content.Context;
|
||||
import android.app.PendingIntent;
|
||||
import android.hardware.usb.UsbDevice;
|
||||
import android.hardware.usb.UsbDeviceConnection;
|
||||
import android.hardware.usb.UsbManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import org.furrtek.pricehax.databinding.FragmentFirstBinding;
|
||||
import com.hoho.android.usbserial.driver.UsbSerialDriver;
|
||||
import com.hoho.android.usbserial.driver.UsbSerialPort;
|
||||
import com.hoho.android.usbserial.driver.UsbSerialProber;
|
||||
import com.hoho.android.usbserial.util.SerialInputOutputManager;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class FirstFragment extends Fragment {
|
||||
|
||||
private enum UsbPermission { Unknown, Requested, Granted, Denied }
|
||||
private static final String INTENT_ACTION_GRANT_USB = BuildConfig.APPLICATION_ID + ".GRANT_USB";
|
||||
|
||||
private FragmentFirstBinding binding;
|
||||
private int deviceId, portNum, baudRate;
|
||||
private UsbSerialPort usbSerialPort;
|
||||
private UsbPermission usbPermission = UsbPermission.Unknown;
|
||||
private SerialInputOutputManager usbIoManager;
|
||||
private boolean connected = false;
|
||||
private static final int SELECT_IMAGE = 100;
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
|
||||
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
|
||||
ImageView imgbmp;
|
||||
Bitmap scaledimage;
|
||||
|
||||
if (requestCode == SELECT_IMAGE) {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
if (imageReturnedIntent.getData() != null) {
|
||||
try {
|
||||
Uri selectedImage = imageReturnedIntent.getData();
|
||||
Object imageStream = getContentResolver().openInputStream(selectedImage);
|
||||
imgbmp = (ImageView) findViewById(R.id.imageview_dm);
|
||||
Bitmap image = BitmapFactory.decodeStream(imageStream);
|
||||
scaledimage = Bitmap.createScaledBitmap(image, wi, hi, true);
|
||||
imgbmp.setImageBitmap(scaledimage);
|
||||
} catch (Exception e) {
|
||||
Log.d("PHX", e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(
|
||||
LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState
|
||||
) {
|
||||
|
||||
binding = FragmentFirstBinding.inflate(inflater, container, false);
|
||||
return binding.getRoot();
|
||||
|
||||
}
|
||||
|
||||
public byte[] Transmit(List<Byte> list) {
|
||||
byte[] data = new byte[list.size() + 5 + 1];
|
||||
data[0] = 76;
|
||||
data[1] = (byte)list.size();
|
||||
data[2] = 30;
|
||||
data[3] = 100;
|
||||
data[4] = 0;
|
||||
for(int i = 0; i < list.size(); i++) {
|
||||
data[i + 5] = list.get(i).byteValue();
|
||||
}
|
||||
data[data.length - 1] = 84;
|
||||
|
||||
// Debug
|
||||
String hex_str = "";
|
||||
for (byte b : data) {
|
||||
hex_str += String.format("%02X ", b);
|
||||
}
|
||||
|
||||
Log.d("TX", hex_str);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
binding.buttonFirst.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
testconnect(view);
|
||||
}
|
||||
});
|
||||
|
||||
binding.buttonTxA.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
//byte data[] = {76, 13, 30, 100, 0, (byte)0x85, 0x00, 0x00, 0x00, 0x00, 0x06, (byte)0xF1, 0x00, 0x00, 0x00, 0x0A, 0x5D, 0x14, 84};
|
||||
|
||||
IRFrame frame = new IRFrame();
|
||||
frame.PLID = 0;
|
||||
frame.protocol = (byte)0x85;
|
||||
Byte[] pl = {0x06, (byte)0x03, 0x00, 0x00};
|
||||
|
||||
EditText text = (EditText)getView().findViewById(R.id.customValue);
|
||||
byte b = (byte)Integer.parseInt(text.getText().toString(), 16);
|
||||
pl[1] = b;
|
||||
|
||||
frame.payload = Arrays.asList(pl);
|
||||
|
||||
byte[] data = FirstFragment.this.Transmit(frame.getRawData(false));
|
||||
|
||||
try {
|
||||
if (connected)
|
||||
usbSerialPort.write(data, 1000);
|
||||
}
|
||||
catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
binding.buttonTxB.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
byte data[] = {76, 13, 30, 100, 0, (byte)0x85, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, 0x01, 0x08, 0x6F, 84};
|
||||
try {
|
||||
if (connected)
|
||||
usbSerialPort.write(data, 1000);
|
||||
}
|
||||
catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
binding.buttonLoadImg.setOnLongClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
|
||||
photoPickerIntent.setType("image/*");
|
||||
photoPickerIntent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(photoPickerIntent, SELECT_IMAGE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void status(View view, String msg) {
|
||||
Snackbar.make(view, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show();
|
||||
}
|
||||
|
||||
public void testconnect(View view) {
|
||||
/*NavHostFragment.findNavController(FirstFragment.this)
|
||||
.navigate(R.id.action_FirstFragment_to_SecondFragment);*/
|
||||
UsbDevice device = null;
|
||||
UsbManager usbManager = (UsbManager) getActivity().getSystemService(Context.USB_SERVICE);
|
||||
/*for(UsbDevice v : usbManager.getDeviceList().values())
|
||||
if(v.getDeviceId() == deviceId)
|
||||
device = v;*/
|
||||
Collection<UsbDevice> devices = usbManager.getDeviceList().values();
|
||||
if (devices.size() == 0)
|
||||
return;
|
||||
device = devices.iterator().next();
|
||||
if(device == null) {
|
||||
status(view,"connection failed: device not found");
|
||||
return;
|
||||
}
|
||||
UsbSerialDriver driver = UsbSerialProber.getDefaultProber().probeDevice(device);
|
||||
if(driver == null) {
|
||||
//status(view,"connection failed: no driver for device");
|
||||
//status(view, String.valueOf(device.getVendorId())); // 1155 = 0x483 ok
|
||||
status(view, String.valueOf(device.getProductId()));
|
||||
return;
|
||||
}
|
||||
if(driver.getPorts().size() < portNum) {
|
||||
status(view,"connection failed: not enough ports at device");
|
||||
return;
|
||||
}
|
||||
usbSerialPort = driver.getPorts().get(portNum);
|
||||
UsbDeviceConnection usbConnection = usbManager.openDevice(driver.getDevice());
|
||||
if(usbConnection == null && usbPermission == UsbPermission.Unknown && !usbManager.hasPermission(driver.getDevice())) {
|
||||
usbPermission = UsbPermission.Requested;
|
||||
int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_IMMUTABLE : 0;
|
||||
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent(INTENT_ACTION_GRANT_USB), flags);
|
||||
usbManager.requestPermission(driver.getDevice(), usbPermissionIntent);
|
||||
return;
|
||||
}
|
||||
if(usbConnection == null) {
|
||||
if (!usbManager.hasPermission(driver.getDevice()))
|
||||
status(view,"connection failed: permission denied");
|
||||
else
|
||||
status(view,"connection failed: open failed");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
usbSerialPort.open(usbConnection);
|
||||
usbSerialPort.setParameters(57600, 8, 1, UsbSerialPort.PARITY_NONE);
|
||||
//if(withIoManager) {
|
||||
// usbIoManager = new SerialInputOutputManager(usbSerialPort, this);
|
||||
// usbIoManager.start();
|
||||
//}
|
||||
status(view,"connected");
|
||||
|
||||
connected = true;
|
||||
} catch (Exception e) {
|
||||
status(view,"connection failed: " + e.getMessage());
|
||||
disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
private void disconnect() {
|
||||
connected = false;
|
||||
if(usbIoManager != null) {
|
||||
usbIoManager.setListener(null);
|
||||
usbIoManager.stop();
|
||||
}
|
||||
usbIoManager = null;
|
||||
try {
|
||||
usbSerialPort.close();
|
||||
} catch (IOException ignored) {}
|
||||
usbSerialPort = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
binding = null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,212 +0,0 @@
|
||||
package org.furrtek.pricehax;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.content.Intent;
|
||||
import android.content.Context;
|
||||
import android.app.PendingIntent;
|
||||
import android.hardware.usb.UsbDevice;
|
||||
import android.hardware.usb.UsbDeviceConnection;
|
||||
import android.hardware.usb.UsbManager;
|
||||
import android.widget.EditText;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import org.furrtek.pricehax.databinding.FragmentFirstBinding;
|
||||
import com.hoho.android.usbserial.driver.UsbSerialDriver;
|
||||
import com.hoho.android.usbserial.driver.UsbSerialPort;
|
||||
import com.hoho.android.usbserial.driver.UsbSerialProber;
|
||||
import com.hoho.android.usbserial.util.SerialInputOutputManager;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class FirstFragment extends Fragment {
|
||||
|
||||
private enum UsbPermission { Unknown, Requested, Granted, Denied }
|
||||
private static final String INTENT_ACTION_GRANT_USB = BuildConfig.APPLICATION_ID + ".GRANT_USB";
|
||||
|
||||
private FragmentFirstBinding binding;
|
||||
private int deviceId, portNum, baudRate;
|
||||
private UsbSerialPort usbSerialPort;
|
||||
private UsbPermission usbPermission = UsbPermission.Unknown;
|
||||
private SerialInputOutputManager usbIoManager;
|
||||
private boolean connected = false;
|
||||
|
||||
@Override
|
||||
public View onCreateView(
|
||||
LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState
|
||||
) {
|
||||
|
||||
binding = FragmentFirstBinding.inflate(inflater, container, false);
|
||||
return binding.getRoot();
|
||||
|
||||
}
|
||||
|
||||
public byte[] Transmit(List<Byte> list) {
|
||||
byte[] data = new byte[list.size() + 5 + 1];
|
||||
data[0] = 76;
|
||||
data[1] = (byte)list.size();
|
||||
data[2] = 30;
|
||||
data[3] = 100;
|
||||
data[4] = 0;
|
||||
for(int i = 0; i < list.size(); i++) {
|
||||
data[i + 5] = list.get(i).byteValue();
|
||||
}
|
||||
data[data.length - 1] = 84;
|
||||
|
||||
// Debug
|
||||
String hex_str = "";
|
||||
for (byte b : data) {
|
||||
hex_str += String.format("%02X ", b);
|
||||
}
|
||||
|
||||
Log.d("TX", hex_str);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
binding.buttonFirst.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
testconnect(view);
|
||||
}
|
||||
});
|
||||
|
||||
binding.buttonTxA.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
//byte data[] = {76, 13, 30, 100, 0, (byte)0x85, 0x00, 0x00, 0x00, 0x00, 0x06, (byte)0xF1, 0x00, 0x00, 0x00, 0x0A, 0x5D, 0x14, 84};
|
||||
|
||||
IRFrame frame = new IRFrame();
|
||||
frame.PLID = 0;
|
||||
frame.protocol = (byte)0x85;
|
||||
Byte[] pl = {0x06, (byte)0x03, 0x00, 0x00};
|
||||
|
||||
EditText text = (EditText)getView().findViewById(R.id.customValue);
|
||||
byte b = (byte)Integer.parseInt(text.getText().toString(), 16);
|
||||
pl[1] = b;
|
||||
|
||||
frame.payload = Arrays.asList(pl);
|
||||
|
||||
byte[] data = FirstFragment.this.Transmit(frame.getRawData(false));
|
||||
|
||||
try {
|
||||
if (connected)
|
||||
usbSerialPort.write(data, 1000);
|
||||
}
|
||||
catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
binding.buttonTxB.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
byte data[] = {76, 13, 30, 100, 0, (byte)0x85, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, 0x01, 0x08, 0x6F, 84};
|
||||
try {
|
||||
if (connected)
|
||||
usbSerialPort.write(data, 1000);
|
||||
}
|
||||
catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void status(View view, String msg) {
|
||||
Snackbar.make(view, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show();
|
||||
}
|
||||
|
||||
public void testconnect(View view) {
|
||||
/*NavHostFragment.findNavController(FirstFragment.this)
|
||||
.navigate(R.id.action_FirstFragment_to_SecondFragment);*/
|
||||
UsbDevice device = null;
|
||||
UsbManager usbManager = (UsbManager) getActivity().getSystemService(Context.USB_SERVICE);
|
||||
/*for(UsbDevice v : usbManager.getDeviceList().values())
|
||||
if(v.getDeviceId() == deviceId)
|
||||
device = v;*/
|
||||
Collection<UsbDevice> devices = usbManager.getDeviceList().values();
|
||||
if (devices.size() == 0)
|
||||
return;
|
||||
device = devices.iterator().next();
|
||||
if(device == null) {
|
||||
status(view,"connection failed: device not found");
|
||||
return;
|
||||
}
|
||||
UsbSerialDriver driver = UsbSerialProber.getDefaultProber().probeDevice(device);
|
||||
if(driver == null) {
|
||||
//status(view,"connection failed: no driver for device");
|
||||
//status(view, String.valueOf(device.getVendorId())); // 1155 = 0x483 ok
|
||||
status(view, String.valueOf(device.getProductId()));
|
||||
return;
|
||||
}
|
||||
if(driver.getPorts().size() < portNum) {
|
||||
status(view,"connection failed: not enough ports at device");
|
||||
return;
|
||||
}
|
||||
usbSerialPort = driver.getPorts().get(portNum);
|
||||
UsbDeviceConnection usbConnection = usbManager.openDevice(driver.getDevice());
|
||||
if(usbConnection == null && usbPermission == UsbPermission.Unknown && !usbManager.hasPermission(driver.getDevice())) {
|
||||
usbPermission = UsbPermission.Requested;
|
||||
int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_IMMUTABLE : 0;
|
||||
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent(INTENT_ACTION_GRANT_USB), flags);
|
||||
usbManager.requestPermission(driver.getDevice(), usbPermissionIntent);
|
||||
return;
|
||||
}
|
||||
if(usbConnection == null) {
|
||||
if (!usbManager.hasPermission(driver.getDevice()))
|
||||
status(view,"connection failed: permission denied");
|
||||
else
|
||||
status(view,"connection failed: open failed");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
usbSerialPort.open(usbConnection);
|
||||
usbSerialPort.setParameters(57600, 8, 1, UsbSerialPort.PARITY_NONE);
|
||||
//if(withIoManager) {
|
||||
// usbIoManager = new SerialInputOutputManager(usbSerialPort, this);
|
||||
// usbIoManager.start();
|
||||
//}
|
||||
status(view,"connected");
|
||||
|
||||
connected = true;
|
||||
} catch (Exception e) {
|
||||
status(view,"connection failed: " + e.getMessage());
|
||||
disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
private void disconnect() {
|
||||
connected = false;
|
||||
if(usbIoManager != null) {
|
||||
usbIoManager.setListener(null);
|
||||
usbIoManager.stop();
|
||||
}
|
||||
usbIoManager = null;
|
||||
try {
|
||||
usbSerialPort.close();
|
||||
} catch (IOException ignored) {}
|
||||
usbSerialPort = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
binding = null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
package org.furrtek.pricehax;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
import org.furrtek.pricehax.databinding.FragmentSecondBinding;
|
||||
|
||||
public class SecondFragment extends Fragment {
|
||||
|
||||
private FragmentSecondBinding binding;
|
||||
|
||||
@Override
|
||||
public View onCreateView(
|
||||
LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState
|
||||
) {
|
||||
|
||||
binding = FragmentSecondBinding.inflate(inflater, container, false);
|
||||
return binding.getRoot();
|
||||
|
||||
}
|
||||
|
||||
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
binding.buttonSecond.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
NavHostFragment.findNavController(SecondFragment.this)
|
||||
.navigate(R.id.action_SecondFragment_to_FirstFragment);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
binding = null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
public interface AsyncResponse {
|
||||
//Add requestCode to identify request.
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
public interface AsyncResponseTX {
|
||||
//Add requestCode to identify request.
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.AsyncTask;
|
||||
@@ -11,7 +11,7 @@ import java.util.ArrayList;
|
||||
import java.util.BitSet;
|
||||
import java.util.List;
|
||||
|
||||
import static org.furrtek.pricehax.DitherBitmap.floydSteinbergDithering;
|
||||
import static org.furrtek.pricehax2.DitherBitmap.floydSteinbergDithering;
|
||||
|
||||
public class DMConvert extends AsyncTask<Bitmap, Integer, DMImage> {
|
||||
private ImageView mImageView;
|
||||
@@ -117,6 +117,7 @@ public class DMConvert extends AsyncTask<Bitmap, Integer, DMImage> {
|
||||
byte[] bytes = bitstream.toByteArray();
|
||||
for (byte b : bytes) {
|
||||
int x = 0;
|
||||
// Reverse bit order
|
||||
for (int c = 0; c < 8; c++) {
|
||||
x >>= 1;
|
||||
if (b < 0)
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.AsyncTask;
|
||||
@@ -12,7 +12,7 @@ import java.util.Arrays;
|
||||
import java.util.BitSet;
|
||||
import java.util.List;
|
||||
|
||||
import static org.furrtek.pricehax.DitherBitmap.floydSteinbergDithering;
|
||||
import static org.furrtek.pricehax2.DitherBitmap.floydSteinbergDithering;
|
||||
|
||||
public class DMGen {
|
||||
public static List<IRFrame> DMGenFrames(DMImage dmImage, boolean BWR, Long PLID, int dispPage) {
|
||||
@@ -22,6 +22,7 @@ public class DMGen {
|
||||
Byte[] payload = {(byte) 0x17, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
||||
frames.add(new IRFrame(PLID, (byte)0x85, Arrays.asList(payload), 30, 200)); // TODO: Check delay and repeats
|
||||
|
||||
// Start frame
|
||||
int datalen = dmImage.byteStreamBW.size(); // TODO: Pass selected BW or BWR bytestream instead of dmImage
|
||||
int width = dmImage.bitmapBW.getWidth();
|
||||
int height = dmImage.bitmapBW.getHeight();
|
||||
@@ -45,42 +46,13 @@ public class DMGen {
|
||||
};
|
||||
frames.add(new IRFrame(PLID, (byte)0x85, Arrays.asList(payload_start), 30, 1)); // TODO: Check delay and repeats
|
||||
|
||||
/*ymax = datalen / 40; // WAS 20
|
||||
|
||||
for (y = 0; y < datalen / 40; y++) { // WAS 20
|
||||
|
||||
startcode[0] = (byte) 0x85;
|
||||
startcode[1] = (byte) (plID & 255);
|
||||
startcode[2] = (byte) (plID >> 8);
|
||||
startcode[3] = (byte) (plID >> 16);
|
||||
startcode[4] = (byte) (plID >> 24);
|
||||
startcode[5] = (byte) 0x34;
|
||||
startcode[6] = (byte) 0x00;
|
||||
startcode[7] = (byte) 0x00;
|
||||
startcode[8] = (byte) 0x00;
|
||||
startcode[9] = (byte) 0x20;
|
||||
startcode[10] = (byte) (y >> 16);
|
||||
startcode[11] = (byte) (y & 255);
|
||||
|
||||
for (int cp = 0; cp < 40; cp++) { // WAS 20
|
||||
startcode[12 + cp] = hexlist.get(cp + (y * 40)); // WAS 20
|
||||
}
|
||||
|
||||
FrameCRC = CRCCalc.GetCRC(startcode, 52); // WAS 32
|
||||
startcode[52] = FrameCRC[0]; // WAS 32
|
||||
startcode[53] = FrameCRC[1]; // WAS 33
|
||||
|
||||
// Send !
|
||||
PP4C.sendPP4C(at.getApplicationContext(), startcode, 54, donglever, 1, audioTrack); // WAS 34
|
||||
}*/
|
||||
|
||||
// Data frames
|
||||
Log.d("PHX", String.format("Datalen %d", datalen));
|
||||
int ymax = (int) Math.ceil((double)datalen / 20);
|
||||
Log.d("PHX", String.format("ymax %d", ymax));
|
||||
for (y = 0; y < ymax; y++) {
|
||||
Byte[] payload_data = new Byte[27];
|
||||
Log.d("PHX", String.format("Gen data frame %d", y));
|
||||
/* (byte) 0x34, 0, 0, 0, 0x20, (byte) (y >> 8), (byte) (y & 255)*/
|
||||
payload_data[0] = (byte) 0x34;
|
||||
payload_data[1] = (byte) 0;
|
||||
payload_data[2] = (byte) 0;
|
||||
@@ -94,37 +66,7 @@ public class DMGen {
|
||||
frames.add(new IRFrame(PLID, (byte)0x85, Arrays.asList(payload_data), 30, 1)); // TODO: Check delay and repeats
|
||||
}
|
||||
|
||||
/*
|
||||
byte[] vercode = {(byte) 0x85, 0, 0, 0, 0, 0x34, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00};
|
||||
|
||||
vercode[1] = (byte) (plID & 255);
|
||||
vercode[2] = (byte) (plID >> 8);
|
||||
vercode[3] = (byte) (plID >> 16);
|
||||
vercode[4] = (byte) (plID >> 24);
|
||||
|
||||
FrameCRC = CRCCalc.GetCRC(vercode, 28);
|
||||
vercode[28] = FrameCRC[0];
|
||||
vercode[29] = FrameCRC[1];
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
txtworkh.setText("Verify frame...");
|
||||
}
|
||||
});
|
||||
|
||||
// Send !
|
||||
PP4C.sendPP4C(at.getApplicationContext(), vercode, 30, donglever, 10, audioTrack);
|
||||
|
||||
SystemClock.sleep(2000);
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
txtworkh.setText("Done ! ;-)");
|
||||
}
|
||||
});*/
|
||||
|
||||
// Refresh frame
|
||||
Byte[] payloadc = {(byte) 0x34, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
frames.add(new IRFrame(PLID, (byte)0x85, Arrays.asList(payloadc), 30, 1)); // TODO: Check delay and repeats
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.AsyncTask;
|
||||
@@ -95,6 +95,7 @@ public class ESLBlaster extends AsyncTask<List<IRFrame>, TXProgress, Boolean> {
|
||||
};
|
||||
}
|
||||
if (w == 10) {
|
||||
Log.d("PHX", "Comm timeout");
|
||||
endTX(); // Timed out
|
||||
return false;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
@@ -15,7 +15,6 @@ import android.hardware.Camera;
|
||||
import android.hardware.usb.UsbDevice;
|
||||
import android.hardware.usb.UsbDeviceConnection;
|
||||
import android.hardware.usb.UsbManager;
|
||||
import android.os.AsyncTask;
|
||||
import androidx.activity.result.ActivityResult;
|
||||
import androidx.activity.result.ActivityResultCallback;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
@@ -46,7 +45,7 @@ import net.sourceforge.zbar.Config;
|
||||
import net.sourceforge.zbar.Image;
|
||||
import net.sourceforge.zbar.ImageScanner;
|
||||
import net.sourceforge.zbar.Symbol;
|
||||
import org.furrtek.pricehax.databinding.ActivityMainBinding;
|
||||
import org.furrtek.pricehax2.databinding.ActivityMainBinding;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
@@ -59,25 +58,23 @@ public class MainActivity extends AppCompatActivity {
|
||||
private ActivityMainBinding binding;
|
||||
private Handler autoFocusHandler;
|
||||
private CameraPreview mPreview;
|
||||
private long lastPLID = 0;
|
||||
CoordinatorLayout mainlayout;
|
||||
private enum UsbPermission { Unknown, Requested, Granted, Denied }
|
||||
private static final String INTENT_ACTION_GRANT_USB = BuildConfig.APPLICATION_ID + ".GRANT_USB";
|
||||
private UsbSerialPort usbSerialPort;
|
||||
private UsbPermission usbPermission = UsbPermission.Unknown;
|
||||
private SerialInputOutputManager usbIoManager;
|
||||
FrameLayout preview;
|
||||
ImageScanner scanner;
|
||||
|
||||
private long lastPLID = 0;
|
||||
String lastBarcodeString = "";
|
||||
int imageScale = 100;
|
||||
DMImage dmImage = null;
|
||||
boolean inBWR = false;
|
||||
|
||||
private enum UsbPermission { Unknown, Requested, Granted, Denied }
|
||||
private static final String INTENT_ACTION_GRANT_USB = BuildConfig.APPLICATION_ID + ".GRANT_USB";
|
||||
|
||||
private int deviceId, portNum, baudRate;
|
||||
private UsbSerialPort usbSerialPort;
|
||||
private UsbPermission usbPermission = UsbPermission.Unknown;
|
||||
private SerialInputOutputManager usbIoManager;
|
||||
private boolean blasterConnected = false;
|
||||
char blasterHWVersion;
|
||||
int blasterFWVersion;
|
||||
CoordinatorLayout mainlayout;
|
||||
Uri selectedImageUri = null;
|
||||
int dispDurationIdx, dispPage;
|
||||
//AsyncResponseTX asyncTaskTX = null;
|
||||
@@ -165,7 +162,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
binding.main.buttonTXPageDM.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
// 0x85, 0x00, 0x00, 0x00, 0x00, 0x06, 0xF1, 0x00, 0x00, 0x00, 0x0A, 0x5D, 0x14
|
||||
// 0x85, 0x00, 0x00, 0x00, 0x00, 0x06, 0xF1, 0x00, 0x00, 0x00, 0x00
|
||||
List<IRFrame> frames = new ArrayList<IRFrame>();
|
||||
Byte[] payload = {0x06, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
payload[1] = (byte)(((dispPage & 7) << 3) | 1);
|
||||
@@ -296,7 +293,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
registerReceiver(USBReceiver, filter);
|
||||
|
||||
// Load default image
|
||||
selectedImageUri = Uri.parse("android.resource://org.furrtek.pricehax/" + R.drawable.dm_128x64);
|
||||
selectedImageUri = Uri.parse("android.resource://org.furrtek.pricehax2/" + R.drawable.dm_128x64);
|
||||
convertImage();
|
||||
}
|
||||
|
||||
@@ -409,12 +406,6 @@ public class MainActivity extends AppCompatActivity {
|
||||
binding.main.textLastScanned.setText("Last scanned:\n" + barcodeString + "\n (" + strSupplement + ")");
|
||||
}
|
||||
lastBarcodeString = barcodeString;
|
||||
|
||||
/*MainActivity.this.previewing = false;
|
||||
camera.setPreviewCallback(null);
|
||||
camera.stopPreview();
|
||||
MainActivity.this.scanButton.setText("Scan another ESL barcode?");*/
|
||||
//}
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -428,8 +419,6 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
Camera.AutoFocusCallback autoFocusCB = new Camera.AutoFocusCallback() {
|
||||
public void onAutoFocus(boolean success, Camera camera) {
|
||||
// postDelayed() will call doAutoFocus() and onAutoFocus() will be called again from mCamera.autoFocus().
|
||||
// This will create a timer that will readjust the focus every second.
|
||||
MainActivity.this.autoFocusHandler.postDelayed(MainActivity.this.doAutoFocus, 1000);
|
||||
}
|
||||
};
|
||||
@@ -438,7 +427,6 @@ public class MainActivity extends AppCompatActivity {
|
||||
// Init Camera preview
|
||||
this.autoFocusHandler = new Handler();
|
||||
this.mPreview = new CameraPreview(this, this.previewCb, this.autoFocusCB);
|
||||
//this.preview = (FrameLayout) findViewById(R.id.cameraPreview);
|
||||
this.preview = binding.main.cameraPreview;
|
||||
this.preview.addView(this.mPreview);
|
||||
|
||||
@@ -482,16 +470,14 @@ public class MainActivity extends AppCompatActivity {
|
||||
}
|
||||
UsbSerialDriver driver = UsbSerialProber.getDefaultProber().probeDevice(device);
|
||||
if (driver == null) {
|
||||
//status(view,"connection failed: no driver for device");
|
||||
//status(view, String.valueOf(device.getVendorId())); // 1155 = 0x483 ok
|
||||
status(String.valueOf(device.getProductId()));
|
||||
status("ESL Blaster connection failed: no driver found");
|
||||
return;
|
||||
}
|
||||
if (driver.getPorts().size() < portNum) {
|
||||
if (driver.getPorts().size() < 0) {
|
||||
status("ESL Blaster connection failed: not enough ports at device");
|
||||
return;
|
||||
}
|
||||
usbSerialPort = driver.getPorts().get(portNum);
|
||||
usbSerialPort = driver.getPorts().get(0);
|
||||
UsbDeviceConnection usbConnection = usbManager.openDevice(driver.getDevice());
|
||||
if (usbConnection == null && usbPermission == UsbPermission.Unknown && !usbManager.hasPermission(driver.getDevice())) {
|
||||
usbPermission = UsbPermission.Requested;
|
||||
@@ -569,12 +555,8 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
int id = item.getItemId();
|
||||
|
||||
//noinspection SimplifiableIfStatement
|
||||
if (id == R.id.action_about) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setMessage("App and ESL Blaster by furrtek\nhttps://github.com/furrtek/PrecIR/\n\nThanks to: Aoi, david4599, Deadbird, Dr.Windaube, Sigmounte, BiduleOhm, Virtualabs, LightSnivy")
|
||||
@@ -593,13 +575,4 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
/*@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
if("android.hardware.usb.action.USB_DEVICE_ATTACHED".equals(intent.getAction())) {
|
||||
//Log.i("PriceHax", "Device detected !");
|
||||
//MainActivity.this.scaneibarcode.setText("USB_DEVICE_ATTACHED !");
|
||||
}
|
||||
super.onNewIntent(intent);
|
||||
}*/
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.furrtek.pricehax;
|
||||
package org.furrtek.pricehax2;
|
||||
|
||||
public class TXProgress {
|
||||
public int percent;
|
||||
@@ -0,0 +1,15 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="#DD7F7F">
|
||||
<group android:scaleX="0.4524"
|
||||
android:scaleY="0.4524"
|
||||
android:translateX="6.5712"
|
||||
android:translateY="6.5712">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12,5c-3.87,0 -7,3.13 -7,7h2c0,-2.76 2.24,-5 5,-5s5,2.24 5,5h2c0,-3.87 -3.13,-7 -7,-7zM13,14.29c0.88,-0.39 1.5,-1.26 1.5,-2.29 0,-1.38 -1.12,-2.5 -2.5,-2.5S9.5,10.62 9.5,12c0,1.02 0.62,1.9 1.5,2.29v3.3L7.59,21 9,22.41l3,-3 3,3L16.41,21 13,17.59v-3.3zM12,1C5.93,1 1,5.93 1,12h2c0,-4.97 4.03,-9 9,-9s9,4.03 9,9h2c0,-6.07 -4.93,-11 -11,-11z"/>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -1,7 +1,7 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context="org.furrtek.pricehax.MainActivity">
|
||||
tools:context="org.furrtek.pricehax2.MainActivity">
|
||||
<item android:id="@+id/action_help"
|
||||
android:title="Help"
|
||||
android:orderInCategory="100"
|
||||
|
||||
BIN
PriceHax/app/src/main/res/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
PriceHax/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
PriceHax/app/src/main/res/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
PriceHax/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
PriceHax/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
PriceHax/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
PriceHax/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
PriceHax/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
PriceHax/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
PriceHax/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#8B1624</color>
|
||||
</resources>
|
||||
@@ -1,2 +0,0 @@
|
||||
..\dfu-util-0.9-win64\dfu-util --device 0483:df11 -a 0 -s 0x08000000:leave --upload readback.bin
|
||||
pause
|
||||
@@ -1,26 +0,0 @@
|
||||
dfu-util 0.9
|
||||
|
||||
These binaries are for Microsoft Windows 64-bit
|
||||
|
||||
They were built using MinGW-64 from MSYS2 with gcc 5.3.0,
|
||||
for build instructions please see:
|
||||
http://dfu-util.sourceforge.net/build.html
|
||||
|
||||
Source code:
|
||||
https://sourceforge.net/p/dfu-util/dfu-util/ci/v0.9/tree/
|
||||
|
||||
dfu-util.exe requires libusb-1.0.dll. The shipped libusb-1.0.dll
|
||||
is built from libusb 1.0.20 and can be replaced with another
|
||||
version if desired.
|
||||
|
||||
dfu-util-static.exe has the libusb 1.0.20 code embedded and runs
|
||||
without any libusb-1.0.dll.
|
||||
|
||||
Notes:
|
||||
1. To work around a bug in gcc/mingw, a small patch was applied, see
|
||||
https://sourceforge.net/p/dfu-util/tickets/13/
|
||||
2. The dfu-util-static.exe includes libusb that has been patched
|
||||
to work around a silicon bug in STM32F42X devices:
|
||||
https://github.com/axoloti/axoloti/blob/master/platform_osx/src/libusb.stdfu.patch
|
||||
|
||||
2016-02-11 Tormod Volden
|
||||
@@ -1,52 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<project>
|
||||
|
||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1785665080" name="Debug">
|
||||
|
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
|
||||
|
||||
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1511937219142292811" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
|
||||
</provider>
|
||||
|
||||
</extension>
|
||||
|
||||
</configuration>
|
||||
|
||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1144516242" name="Release">
|
||||
|
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
|
||||
|
||||
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1437776012717722251" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
|
||||
</provider>
|
||||
|
||||
</extension>
|
||||
|
||||
</configuration>
|
||||
|
||||
</project>
|
||||
@@ -1,4 +0,0 @@
|
||||
2F62501ED4689FB349E356AB974DBE57=48E8977AAC6E0610396AB14E14747A8F
|
||||
8DF89ED150041C4CBC7CB9A9CAA90856=48E8977AAC6E0610396AB14E14747A8F
|
||||
DC22A860405A8BF2F2C095E5B6529F12=8536A59145044C9EC233B979117E068C
|
||||
eclipse.preferences.version=1
|
||||
@@ -1,26 +0,0 @@
|
||||
dfu-util 0.9
|
||||
|
||||
These binaries are for Microsoft Windows 64-bit
|
||||
|
||||
They were built using MinGW-64 from MSYS2 with gcc 5.3.0,
|
||||
for build instructions please see:
|
||||
http://dfu-util.sourceforge.net/build.html
|
||||
|
||||
Source code:
|
||||
https://sourceforge.net/p/dfu-util/dfu-util/ci/v0.9/tree/
|
||||
|
||||
dfu-util.exe requires libusb-1.0.dll. The shipped libusb-1.0.dll
|
||||
is built from libusb 1.0.20 and can be replaced with another
|
||||
version if desired.
|
||||
|
||||
dfu-util-static.exe has the libusb 1.0.20 code embedded and runs
|
||||
without any libusb-1.0.dll.
|
||||
|
||||
Notes:
|
||||
1. To work around a bug in gcc/mingw, a small patch was applied, see
|
||||
https://sourceforge.net/p/dfu-util/tickets/13/
|
||||
2. The dfu-util-static.exe includes libusb that has been patched
|
||||
to work around a silicon bug in STM32F42X devices:
|
||||
https://github.com/axoloti/axoloti/blob/master/platform_osx/src/libusb.stdfu.patch
|
||||
|
||||
2016-02-11 Tormod Volden
|
||||
@@ -1,52 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<project>
|
||||
|
||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1785665080" name="Debug">
|
||||
|
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
|
||||
|
||||
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1223743873136957093" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
|
||||
</provider>
|
||||
|
||||
</extension>
|
||||
|
||||
</configuration>
|
||||
|
||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1144516242" name="Release">
|
||||
|
||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
|
||||
|
||||
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1297905079561527653" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
|
||||
</provider>
|
||||
|
||||
</extension>
|
||||
|
||||
</configuration>
|
||||
|
||||
</project>
|
||||