1 using System;
2 using System.Reflection;
3 
4 // using Android.Runtime;
5 // using Android.Util;
6 
7 namespace Mono.Unix.Android
8 {
9 	internal sealed class AndroidUtils
10 	{
11 		const string TAG = "Mono.Posix";
12 
DetectCPUAndArchitecture(out ushort builtForCPU, out ushort runningOnCPU, out bool is64bit)13 		delegate void DetectCPUAndArchitecture (out ushort builtForCPU, out ushort runningOnCPU, out bool is64bit);
14 
15 		readonly static DetectCPUAndArchitecture detectCPUAndArchitecture;
16 
AndroidUtils()17 		static AndroidUtils ()
18 		{
19 			Type androidRuntime = Type.GetType ("Android.Runtime.AndroidEnvironment, Mono.Android", true);
20 
21 			MethodInfo mi = androidRuntime.GetMethod ("DetectCPUAndArchitecture", BindingFlags.NonPublic | BindingFlags.Static);
22 			detectCPUAndArchitecture = (DetectCPUAndArchitecture) Delegate.CreateDelegate (typeof(DetectCPUAndArchitecture), mi);
23 		}
24 
AreRealTimeSignalsSafe()25 		public static bool AreRealTimeSignalsSafe ()
26 		{
27 			ushort built_for_cpu;
28 			ushort running_on_cpu;
29 			bool is64bit;
30 
31 			detectCPUAndArchitecture (out built_for_cpu, out running_on_cpu, out is64bit);
32 
33 			// CPUArchitecture builtForCPU = Enum.IsDefined (typeof (CPUArchitecture), built_for_cpu) ? (CPUArchitecture)built_for_cpu : CPUArchitecture.Unknown;
34 			// CPUArchitecture runningOnCPU = Enum.IsDefined (typeof (CPUArchitecture), running_on_cpu) ? (CPUArchitecture)running_on_cpu : CPUArchitecture.Unknown;
35 
36 			// Log.Info (TAG, " Built for CPU: {0}", builtForCPU);
37 			// Log.Info (TAG, "Running on CPU: {0}", runningOnCPU);
38 			// Log.Info (TAG, "64-bit process: {0}", is64bit ? "yes" : "no");
39 
40 			// For now real-time signals aren't safe at all, alas
41 			bool safe = false;
42 			// Log.Info (TAG, "Real-time signals are {0}safe on this platform", safe ? String.Empty : "not ");
43 
44 			return safe;
45 		}
46 	}
47 }