Skip to content

Commit 0003466

Browse files
committed
Xamarin: usb composite
1 parent 4b43706 commit 0003466

File tree

5 files changed

+104
-36
lines changed

5 files changed

+104
-36
lines changed

.github/workflows/main.yml

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ jobs:
7373
$manifest = [xml](Get-Content -Path ExtLibs\Xamarin\Xamarin.Android\Properties\AndroidManifest.xml -Raw)
7474
7575
$manifest.SelectNodes("manifest") | % { $_.versionCode = ""+$days }
76+
$manifest.SelectNodes("manifest") | % { $_.versionName = ""+$days }
7677
7778
$manifest.Save($current.Path + "\ExtLibs\Xamarin\Xamarin.Android\Properties\AndroidManifest.xml")
7879

ExtLibs/Xamarin/Xamarin.Android/MainActivity.cs

+51-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using System.Net.Sockets;
1515
using System.Runtime.InteropServices;
1616
using System.Text;
17+
using System.Threading;
1718
using System.Threading.Tasks;
1819
using Android;
1920
using Android.Bluetooth;
@@ -28,6 +29,7 @@
2829
using Thread = System.Threading.Thread;
2930
using Android.Content;
3031
using Java.Lang;
32+
using MissionPlanner.Utilities;
3133
using Xamarin.GCSViews;
3234
using Exception = System.Exception;
3335
using Process = Android.OS.Process;
@@ -41,12 +43,16 @@
4143
namespace Xamarin.Droid
4244
{ //global::Android.Content.Intent.CategoryLauncher
4345
//global::Android.Content.Intent.CategoryHome,
44-
[IntentFilter(new[] { global::Android.Content.Intent.ActionMain, global::Android.Content.Intent.ActionAirplaneModeChanged , global::Android.Content.Intent.ActionBootCompleted , UsbManager.ActionUsbDeviceAttached, UsbManager.ActionUsbDeviceDetached, BluetoothDevice.ActionAclConnected, UsbManager.ActionUsbAccessoryAttached }, Categories = new []{ global::Android.Content.Intent.CategoryDefault})]
46+
[IntentFilter(new[] { global::Android.Content.Intent.ActionMain, global::Android.Content.Intent.ActionAirplaneModeChanged ,
47+
global::Android.Content.Intent.ActionBootCompleted , UsbManager.ActionUsbDeviceAttached, UsbManager.ActionUsbDeviceDetached,
48+
BluetoothDevice.ActionAclConnected, UsbManager.ActionUsbAccessoryAttached},
49+
Categories = new []{ global::Android.Content.Intent.CategoryLauncher})]
50+
[MetaData("android.hardware.usb.action.USB_DEVICE_ATTACHED", Resource = "@xml/device_filter")]
4551
[Activity(Label = "Mission Planner", ScreenOrientation = ScreenOrientation.SensorLandscape, Icon = "@mipmap/icon", Theme = "@style/MainTheme",
4652
MainLauncher = true, HardwareAccelerated = true, DirectBootAware = true, Immersive = true)]
4753
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
4854
{
49-
readonly string TAG = typeof(MainActivity).FullName;
55+
readonly string TAG = "MP";
5056
private Socket server;
5157
public UsbDeviceReceiver UsbBroadcastReceiver;
5258

@@ -124,9 +130,23 @@ protected override void OnCreate(Bundle savedInstanceState)
124130
}
125131
}
126132

133+
{
134+
// print some info
135+
var pm = this.PackageManager;
136+
var name = this.PackageName;
137+
138+
var pi = pm.GetPackageInfo(name, PackageInfoFlags.Activities);
139+
140+
Console.WriteLine("pi.ApplicationInfo.DataDir " + pi?.ApplicationInfo?.DataDir);
141+
Console.WriteLine("pi.ApplicationInfo.DeviceProtectedDataDir " +
142+
pi?.ApplicationInfo?.DeviceProtectedDataDir);
143+
Console.WriteLine("pi.ApplicationInfo.NativeLibraryDir " + pi?.ApplicationInfo?.NativeLibraryDir);
144+
}
145+
127146
{
128147
try
129148
{
149+
// restore assets
130150
Directory.CreateDirectory(Settings.GetUserDataDirectory());
131151

132152
File.WriteAllText(Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "airports.csv",
@@ -179,9 +199,38 @@ protected override void OnCreate(Bundle savedInstanceState)
179199
}
180200

181201
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
202+
203+
{
204+
// clean start, see if it was an intent/usb attach
205+
if (savedInstanceState == null)
206+
{
207+
proxyIfUsbAttached(this.Intent);
208+
}
209+
}
210+
182211
LoadApplication(new App());
183212
}
184213

214+
protected override void OnNewIntent(Intent intent)
215+
{
216+
base.OnNewIntent(intent);
217+
Console.WriteLine("OnNewIntent " + intent.Action);
218+
}
219+
220+
private void proxyIfUsbAttached(Intent intent) {
221+
222+
if (intent == null) return;
223+
224+
if (!UsbManager.ActionUsbDeviceAttached.Equals(intent.Action)) return;
225+
226+
Log.Verbose(TAG, "usb device attached");
227+
228+
WinForms.InitDevice = ()=>
229+
{
230+
UsbBroadcastReceiver.OnReceive(this.ApplicationContext, intent);
231+
};
232+
}
233+
185234
protected override void OnStart()
186235
{
187236
base.OnStart();
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
1-
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="27570" android:versionName="MP" package="com.michaeloborne.MissionPlanner" android:installLocation="auto">
3-
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
4-
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
5-
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
6-
<uses-permission android:name="android.permission.INTERNET" />
7-
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />
8-
<uses-permission android:name="android.permission.WAKE_LOCK" />
9-
<uses-permission android:name="android.permission.DEVICE_POWER" />
10-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
11-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
12-
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
13-
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
14-
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
15-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
16-
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
17-
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
18-
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
19-
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
20-
<uses-permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES" />
21-
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
22-
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
23-
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
24-
<uses-permission android:name="android.permission.BLUETOOTH" />
25-
<uses-permission android:name="android.permission.USB_PERMISSION" />
26-
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
27-
<uses-permission android:name="android.permission.BATTERY_STATS" />
28-
<supports-screens android:smallScreens="false" android:normalScreens="true" android:largeScreens="true" />
29-
<uses-feature android:name="android.hardware.usb.accessory" android:required="false" />
30-
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
31-
<uses-feature android:name="android.hardware.location" android:required="false" />
32-
<uses-feature android:name="android.hardware.telephony" android:required="false" />
33-
<uses-feature android:glEsVersion="0x00020000" android:required="true" />`
34-
<uses-feature android:name="android.hardware.faketouch" android:required="true" /><meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" /><application android:label="Mission Planner" android:hardwareAccelerated="true" android:icon="@mipmap/icon" /></manifest>
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="27757" android:versionName="27757" package="com.michaeloborne.MissionPlanner" android:installLocation="auto">
3+
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
4+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
5+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
6+
<uses-permission android:name="android.permission.INTERNET" />
7+
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />
8+
<uses-permission android:name="android.permission.WAKE_LOCK" />
9+
<uses-permission android:name="android.permission.DEVICE_POWER" />
10+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
11+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
12+
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
13+
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
14+
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
15+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
16+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
17+
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
18+
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
19+
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
20+
<uses-permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES" />
21+
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
22+
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
23+
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
24+
<uses-permission android:name="android.permission.BLUETOOTH" />
25+
<uses-permission android:name="android.permission.USB_PERMISSION" />
26+
<uses-permission android:name="android.permission.BATTERY_STATS" />
27+
<supports-screens android:smallScreens="false" android:normalScreens="true" android:largeScreens="true" />
28+
<uses-feature android:name="android.hardware.usb.accessory" android:required="false" />
29+
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
30+
<uses-feature android:name="android.hardware.location" android:required="false" />
31+
<uses-feature android:name="android.hardware.telephony" android:required="false" />
32+
<uses-feature android:glEsVersion="0x00020000" android:required="true" />`
33+
<uses-feature android:name="android.hardware.faketouch" android:required="true" /><application android:label="Mission Planner" android:hardwareAccelerated="true" android:extractNativeLibs="true" android:killAfterRestore="true" android:hasFragileUserData="true" android:icon="@mipmap/icon" /></manifest>

ExtLibs/Xamarin/Xamarin/GCSViews/WinForms.xaml.cs

+18
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ public static string BundledPath
5050
set { SITL.BundledPath = value; }
5151
}
5252

53+
public static Action InitDevice
54+
{
55+
get => _initDevice;
56+
set => _initDevice = value;
57+
}
58+
5359
protected override void OnAppearing()
5460
{
5561
if (!start)
@@ -194,8 +200,19 @@ private void StartThreads()
194200
{
195201
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
196202

203+
var init = true;
204+
197205
Application.Idle += (sender, args) =>
198206
{
207+
if (MainV2.instance != null && MainV2.instance.IsHandleCreated)
208+
{
209+
if (init)
210+
{
211+
Device.BeginInvokeOnMainThread(() => { InitDevice?.Invoke(); });
212+
init = false;
213+
}
214+
}
215+
199216
Thread.Sleep(0);
200217
};
201218

@@ -733,6 +750,7 @@ private void SkCanvasView_PaintSurface(object sender, SkiaSharp.Views.Forms.SKPa
733750
};
734751

735752
static private Thread winforms;
753+
private static Action _initDevice;
736754

737755
public void Activate()
738756
{

build - Lib.ps1

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ $days = [int]((New-TimeSpan -Start 2020-01-01 -End (Get-Date)).totaldays * 100)
99
$manifest = [xml](Get-Content -Path ExtLibs\Xamarin\Xamarin.Android\Properties\AndroidManifest.xml -Raw)
1010

1111
$manifest.SelectNodes("manifest") | % { $_.versionCode = ""+$days }
12+
$manifest.SelectNodes("manifest") | % { $_.versionName = ""+$days }
1213

1314
$manifest.Save($current.Path + "\ExtLibs\Xamarin\Xamarin.Android\Properties\AndroidManifest.xml")
1415

0 commit comments

Comments
 (0)