Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions src/accessoryaccess.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
using System;

using CoreFoundation;
using Foundation;
using ObjCRuntime;

// 'xpc_object_t' is an opaque OS_object that's shuttled across XPC boundaries; it has no managed API
// surface of its own, so macios binds it as NSObject everywhere (see src/browserenginekit.cs).
using OS_xpc_object = Foundation.NSObject;

namespace AccessoryAccess {

[Mac (27, 0)]
[Native]
[ErrorDomain ("AAErrorDomain")]
public enum AAErrorCode : long {
Internal = 1,
AccessoryListenerAlreadyRegistered = 2,
AccessoryNotAccessible = 3,
InvalidAccessoryState = 4,
}

[Mac (27, 0)]
[Native ("AAUSBAccessoryMatchingCriteriaInterfaceMatchingOption")]
public enum AAUsbAccessoryMatchingCriteriaInterfaceMatchingOption : long {
MatchAll,
MatchAny,
}

// 'device' is a live IOUSBHostDevice handle (an IOUSBHost Objective-C object). IOUSBHost is
// intentionally not bound in macios (a low-level IOKit/DriverKit-adjacent, NS_REFINED_FOR_SWIFT
// framework; see IGNORED_MACOS_FRAMEWORKS in tests/xtro-sharpie/Makefile), so the handle is surfaced
// as a raw IntPtr that stays valid until the accessory is closed (Close). To perform USB I/O, hand
// the accessory to a native/Swift service via CreateXpcRepresentation, or bridge the handle through
// native IOUSBHost code.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At least part of this information sounds like it could be useful in an xml comment on the delegate.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot understand the context and please apply this suggestion

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in 8e8538b. I added XML documentation to AAUsbAccessoryOpenCompletionHandler, including the device handle semantics and native IOUSBHost guidance.

delegate void AAUsbAccessoryOpenCompletionHandler (IntPtr device, [NullAllowed] NSError error);
delegate void AAUsbAccessoryCloseCompletionHandler ([NullAllowed] NSError error);

[Mac (27, 0)]
[BaseType (typeof (NSObject), Name = "AAUSBAccessory")]
[DisableDefaultCtor]
interface AAUsbAccessory : NSSecureCoding {
[Export ("initWithXPCRepresentation:")]
[DesignatedInitializer]
NativeHandle Constructor (OS_xpc_object xpcRepresentation);

[Export ("registryID")]
ulong RegistryId { get; }

[Export ("deviceDescriptorData")]
NSData DeviceDescriptorData { get; }

[NullAllowed, Export ("configurationDescriptorData")]
NSData ConfigurationDescriptorData { get; }

[Export ("createXPCRepresentation")]
OS_xpc_object CreateXpcRepresentation ();

[Export ("openWithServiceQueue:completionHandler:")]
[Async]
void Open ([NullAllowed] DispatchQueue serviceQueue, AAUsbAccessoryOpenCompletionHandler completionHandler);

[Export ("closeWithCompletionHandler:")]
[Async]
void Close (AAUsbAccessoryCloseCompletionHandler completionHandler);
}

interface IAAUsbAccessoryListener { }

[Mac (27, 0)]
[Protocol (BackwardsCompatibleCodeGeneration = false, Name = "AAUSBAccessoryListener"), Model]
[BaseType (typeof (NSObject))]
interface AAUsbAccessoryListener {
[Export ("usbAccessoryDidConnect:")]
void UsbAccessoryDidConnect (AAUsbAccessory usbAccessory);

[Export ("usbAccessoryDidDisconnect:")]
void UsbAccessoryDidDisconnect (AAUsbAccessory usbAccessory);
}

delegate void AAUsbAccessoryManagerRegisterListenerCompletionHandler (AAUsbAccessory [] accessories, [NullAllowed] NSError error);
delegate void AAUsbAccessoryManagerUnregisterListenerCompletionHandler ();

[Mac (27, 0)]
[BaseType (typeof (NSObject), Name = "AAUSBAccessoryManager")]
[DisableDefaultCtor]
interface AAUsbAccessoryManager {
[Static]
[Export ("sharedManager", ArgumentSemantic.Strong)]
AAUsbAccessoryManager SharedManager { get; }

[Export ("registerListener:withMatchingCriteria:completionHandler:")]
[Async]
void RegisterListener (IAAUsbAccessoryListener listener, AAUsbAccessoryMatchingCriteria [] matchingCriteria, AAUsbAccessoryManagerRegisterListenerCompletionHandler completionHandler);

[Export ("unregisterListener:completionHandler:")]
[Async]
void UnregisterListener (IAAUsbAccessoryListener listener, AAUsbAccessoryManagerUnregisterListenerCompletionHandler completionHandler);
}

[Mac (27, 0)]
[BaseType (typeof (NSObject), Name = "AAUSBAccessoryMatchingCriteria")]
[DisableDefaultCtor]
interface AAUsbAccessoryMatchingCriteria : NSCopying {
[Export ("initWithDeviceMatchingDictionary:")]
[DesignatedInitializer]
NativeHandle Constructor (NSDictionary<NSString, NSObject> dictionary);

[Export ("initWithDeviceMatchingDictionary:interfaceMatchingDictionaries:interfaceMatchingOption:")]
[DesignatedInitializer]
NativeHandle Constructor ([NullAllowed] NSDictionary<NSString, NSObject> deviceMatchingDictionary, NSDictionary<NSString, NSObject> [] interfaceMatchingDictionaries, AAUsbAccessoryMatchingCriteriaInterfaceMatchingOption interfaceMatchingOption);
}
}
3 changes: 3 additions & 0 deletions src/build/dotnet/generator-frameworks.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ partial class Frameworks {
internal readonly HashSet<string> macosframeworks = new HashSet<string> {
"Accelerate",
"Accessibility",
"AccessoryAccess",
"Accounts",
"AdServices",
"AdSupport",
Expand Down Expand Up @@ -532,6 +533,7 @@ partial class Frameworks {
};
bool? _Accelerate;
bool? _Accessibility;
bool? _AccessoryAccess;
bool? _AccessorySetupKit;
bool? _Accounts;
bool? _AddressBook;
Expand Down Expand Up @@ -706,6 +708,7 @@ partial class Frameworks {
bool? _XKit;
public bool HaveAccelerate { get { if (!_Accelerate.HasValue) _Accelerate = GetValue ("Accelerate"); return _Accelerate.Value; } }
public bool HaveAccessibility { get { if (!_Accessibility.HasValue) _Accessibility = GetValue ("Accessibility"); return _Accessibility.Value; } }
public bool HaveAccessoryAccess { get { if (!_AccessoryAccess.HasValue) _AccessoryAccess = GetValue ("AccessoryAccess"); return _AccessoryAccess.Value; } }
public bool HaveAccessorySetupKit { get { if (!_AccessorySetupKit.HasValue) _AccessorySetupKit = GetValue ("AccessorySetupKit"); return _AccessorySetupKit.Value; } }
public bool HaveAccounts { get { if (!_Accounts.HasValue) _Accounts = GetValue ("Accounts"); return _Accounts.Value; } }
public bool HaveAddressBook { get { if (!_AddressBook.HasValue) _AddressBook = GetValue ("AddressBook"); return _AddressBook.Value; } }
Expand Down
1 change: 1 addition & 0 deletions src/frameworks.sources
Original file line number Diff line number Diff line change
Expand Up @@ -2022,6 +2022,7 @@ COMMON_FRAMEWORKS = \

MACOS_FRAMEWORKS = \
$(COMMON_FRAMEWORKS) \
AccessoryAccess \
Accounts \
AdServices \
AdSupport \
Expand Down
1 change: 1 addition & 0 deletions src/rsp/dotnet/macos-defines-dotnet.rsp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
-d:HAS_ACCELERATE
-d:HAS_ACCESSIBILITY
-d:HAS_ACCESSORYACCESS
-d:HAS_ACCOUNTS
-d:HAS_ADSERVICES
-d:HAS_ADSUPPORT
Expand Down
35 changes: 35 additions & 0 deletions tests/cecil-tests/Documentation.KnownFailures.txt
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,12 @@ F:Accessibility.AXTechnology.SwitchControl
F:Accessibility.AXTechnology.VoiceControl
F:Accessibility.AXTechnology.VoiceOver
F:Accessibility.AXTechnology.Zoom
F:AccessoryAccess.AAErrorCode.AccessoryListenerAlreadyRegistered
F:AccessoryAccess.AAErrorCode.AccessoryNotAccessible
F:AccessoryAccess.AAErrorCode.Internal
F:AccessoryAccess.AAErrorCode.InvalidAccessoryState
F:AccessoryAccess.AAUsbAccessoryMatchingCriteriaInterfaceMatchingOption.MatchAll
F:AccessoryAccess.AAUsbAccessoryMatchingCriteriaInterfaceMatchingOption.MatchAny
F:AccessorySetupKit.ASAccessoryEventType.AccessoryAdded
F:AccessorySetupKit.ASAccessoryEventType.AccessoryChanged
F:AccessorySetupKit.ASAccessoryEventType.AccessoryRemoved
Expand Down Expand Up @@ -8345,6 +8351,22 @@ M:Accessibility.AXPrefers.ActionSliderAlternative
M:Accessibility.AXPrefers.HorizontalTextEnabled
M:Accessibility.AXPrefers.NonBlinkingTextInsertionIndicator
M:Accessibility.AXSettings.ShowBordersEnabled
M:AccessoryAccess.AAUsbAccessory.#ctor(Foundation.NSObject)
M:AccessoryAccess.AAUsbAccessory.Close(AccessoryAccess.AAUsbAccessoryCloseCompletionHandler)
M:AccessoryAccess.AAUsbAccessory.CloseAsync
M:AccessoryAccess.AAUsbAccessory.CreateXpcRepresentation
M:AccessoryAccess.AAUsbAccessory.Open(CoreFoundation.DispatchQueue,AccessoryAccess.AAUsbAccessoryOpenCompletionHandler)
M:AccessoryAccess.AAUsbAccessory.OpenAsync(CoreFoundation.DispatchQueue)
M:AccessoryAccess.AAUsbAccessoryListener.UsbAccessoryDidConnect(AccessoryAccess.AAUsbAccessory)
M:AccessoryAccess.AAUsbAccessoryListener.UsbAccessoryDidDisconnect(AccessoryAccess.AAUsbAccessory)
M:AccessoryAccess.AAUsbAccessoryManager.RegisterListener(AccessoryAccess.IAAUsbAccessoryListener,AccessoryAccess.AAUsbAccessoryMatchingCriteria[],AccessoryAccess.AAUsbAccessoryManagerRegisterListenerCompletionHandler)
M:AccessoryAccess.AAUsbAccessoryManager.RegisterListenerAsync(AccessoryAccess.IAAUsbAccessoryListener,AccessoryAccess.AAUsbAccessoryMatchingCriteria[])
M:AccessoryAccess.AAUsbAccessoryManager.UnregisterListener(AccessoryAccess.IAAUsbAccessoryListener,AccessoryAccess.AAUsbAccessoryManagerUnregisterListenerCompletionHandler)
M:AccessoryAccess.AAUsbAccessoryManager.UnregisterListenerAsync(AccessoryAccess.IAAUsbAccessoryListener)
M:AccessoryAccess.AAUsbAccessoryMatchingCriteria.#ctor(Foundation.NSDictionary{Foundation.NSString,Foundation.NSObject},Foundation.NSDictionary{Foundation.NSString,Foundation.NSObject}[],AccessoryAccess.AAUsbAccessoryMatchingCriteriaInterfaceMatchingOption)
M:AccessoryAccess.AAUsbAccessoryMatchingCriteria.#ctor(Foundation.NSDictionary{Foundation.NSString,Foundation.NSObject})
M:AccessoryAccess.IAAUsbAccessoryListener.UsbAccessoryDidConnect(AccessoryAccess.AAUsbAccessory)
M:AccessoryAccess.IAAUsbAccessoryListener.UsbAccessoryDidDisconnect(AccessoryAccess.AAUsbAccessory)
M:AccessorySetupKit.ASAccessorySession.Activate(CoreFoundation.DispatchQueue,System.Action{AccessorySetupKit.ASAccessoryEvent})
M:AccessorySetupKit.ASAccessorySession.FailAuthorization(AccessorySetupKit.ASAccessory,AccessorySetupKit.ASAccessorySessionCompletionHandler)
M:AccessorySetupKit.ASAccessorySession.FailAuthorizationAsync(AccessorySetupKit.ASAccessory)
Expand Down Expand Up @@ -31411,6 +31433,10 @@ P:Accessibility.IAXCustomContentProvider.AccessibilityCustomContentHandler
P:Accessibility.IAXDataAxisDescriptor.AttributedTitle
P:Accessibility.IAXDataAxisDescriptor.Title
P:Accessibility.IAXMathExpressionProvider.AccessibilityMathExpression
P:AccessoryAccess.AAUsbAccessory.ConfigurationDescriptorData
P:AccessoryAccess.AAUsbAccessory.DeviceDescriptorData
P:AccessoryAccess.AAUsbAccessory.RegistryId
P:AccessoryAccess.AAUsbAccessoryManager.SharedManager
P:AccessorySetupKit.ASAccessory.BluetoothIdentifier
P:AccessorySetupKit.ASAccessory.BluetoothTransportBridgingIdentifier
P:AccessorySetupKit.ASAccessory.Descriptor
Expand Down Expand Up @@ -55842,6 +55868,15 @@ T:Accessibility.AXSettings
T:Accessibility.AXSettingsFeature
T:Accessibility.AXTechnology
T:Accessibility.ValueDescriptionProviderHandler
T:AccessoryAccess.AAErrorCode
T:AccessoryAccess.AAUsbAccessory
T:AccessoryAccess.AAUsbAccessoryCloseCompletionHandler
T:AccessoryAccess.AAUsbAccessoryManager
T:AccessoryAccess.AAUsbAccessoryManagerRegisterListenerCompletionHandler
T:AccessoryAccess.AAUsbAccessoryManagerUnregisterListenerCompletionHandler
T:AccessoryAccess.AAUsbAccessoryMatchingCriteria
T:AccessoryAccess.AAUsbAccessoryMatchingCriteriaInterfaceMatchingOption
T:AccessoryAccess.AAUsbAccessoryOpenCompletionHandler
T:AccessorySetupKit.ASAccessory
T:AccessorySetupKit.ASAccessoryEvent
T:AccessorySetupKit.ASAccessoryEventType
Expand Down
1 change: 1 addition & 0 deletions tests/dotnet/UnitTests/ProjectTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3377,6 +3377,7 @@ public void AppendRuntimeIdentifierToOutputPath_DisableDirectoryBuildProps (Appl
"@executable_path/../../Contents/MonoBundle/libSystem.Security.Cryptography.Native.Apple.dylib",
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate",
"/System/Library/Frameworks/Accessibility.framework/Versions/A/Accessibility",
"/System/Library/Frameworks/AccessoryAccess.framework/Versions/A/AccessoryAccess",
"/System/Library/Frameworks/Accounts.framework/Versions/A/Accounts",
"/System/Library/Frameworks/AdServices.framework/Versions/A/AdServices",
"/System/Library/Frameworks/AdSupport.framework/Versions/A/AdSupport",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
AppBundleSize: 258,452,232 bytes (252,394.8 KB = 246.5 MB)
AppBundleSize: 258,521,450 bytes (252,462.4 KB = 246.5 MB)
# The following list of files and their sizes is just informational / for review, and isn't used in the test:
Contents/Info.plist:
723 bytes (0.7 KB = 0.0 MB)
741 bytes (0.7 KB = 0.0 MB)
Contents/MacOS/SizeTestApp:
7,355,192 bytes (7,182.8 KB = 7.0 MB)
7,373,192 bytes (7,200.4 KB = 7.0 MB)
Contents/MonoBundle/.xamarin/osx-arm64/_Microsoft.macOS.TypeMap.dll:
4,875,776 bytes (4,761.5 KB = 4.6 MB)
4,880,384 bytes (4,766.0 KB = 4.7 MB)
Contents/MonoBundle/.xamarin/osx-arm64/_SizeTestApp.TypeMap.dll:
3,072 bytes (3.0 KB = 0.0 MB)
Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.CSharp.dll:
892,752 bytes (871.8 KB = 0.9 MB)
Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.macOS.dll:
37,647,872 bytes (36,765.5 KB = 35.9 MB)
37,668,864 bytes (36,786.0 KB = 35.9 MB)
Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.Core.dll:
1,334,608 bytes (1,303.3 KB = 1.3 MB)
Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.dll:
Expand Down Expand Up @@ -357,13 +357,13 @@ Contents/MonoBundle/.xamarin/osx-arm64/System.Xml.XPath.XDocument.dll:
Contents/MonoBundle/.xamarin/osx-arm64/WindowsBase.dll:
16,208 bytes (15.8 KB = 0.0 MB)
Contents/MonoBundle/.xamarin/osx-x64/_Microsoft.macOS.TypeMap.dll:
4,875,776 bytes (4,761.5 KB = 4.6 MB)
4,880,384 bytes (4,766.0 KB = 4.7 MB)
Contents/MonoBundle/.xamarin/osx-x64/_SizeTestApp.TypeMap.dll:
3,072 bytes (3.0 KB = 0.0 MB)
Contents/MonoBundle/.xamarin/osx-x64/Microsoft.CSharp.dll:
795,984 bytes (777.3 KB = 0.8 MB)
Contents/MonoBundle/.xamarin/osx-x64/Microsoft.macOS.dll:
37,647,872 bytes (36,765.5 KB = 35.9 MB)
37,668,864 bytes (36,786.0 KB = 35.9 MB)
Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.Core.dll:
1,166,160 bytes (1,138.8 KB = 1.1 MB)
Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.dll:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
AppBundleSize: 248,786,358 bytes (242,955.4 KB = 237.3 MB)
AppBundleSize: 248,831,016 bytes (242,999.0 KB = 237.3 MB)
# The following list of files and their sizes is just informational / for review, and isn't used in the test:
Contents/Info.plist:
723 bytes (0.7 KB = 0.0 MB)
741 bytes (0.7 KB = 0.0 MB)
Contents/MacOS/SizeTestApp:
8,013,368 bytes (7,825.6 KB = 7.6 MB)
8,015,000 bytes (7,827.1 KB = 7.6 MB)
Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.CSharp.dll:
892,752 bytes (871.8 KB = 0.9 MB)
Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.macOS.dll:
37,364,224 bytes (36,488.5 KB = 35.6 MB)
37,385,728 bytes (36,509.5 KB = 35.7 MB)
Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.Core.dll:
1,334,608 bytes (1,303.3 KB = 1.3 MB)
Contents/MonoBundle/.xamarin/osx-arm64/Microsoft.VisualBasic.dll:
Expand Down Expand Up @@ -355,7 +355,7 @@ Contents/MonoBundle/.xamarin/osx-arm64/WindowsBase.dll:
Contents/MonoBundle/.xamarin/osx-x64/Microsoft.CSharp.dll:
795,984 bytes (777.3 KB = 0.8 MB)
Contents/MonoBundle/.xamarin/osx-x64/Microsoft.macOS.dll:
37,364,224 bytes (36,488.5 KB = 35.6 MB)
37,385,728 bytes (36,509.5 KB = 35.7 MB)
Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.Core.dll:
1,166,160 bytes (1,138.8 KB = 1.1 MB)
Contents/MonoBundle/.xamarin/osx-x64/Microsoft.VisualBasic.dll:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
AppBundleSize: 32,655,611 bytes (31,890.2 KB = 31.1 MB)
AppBundleSize: 32,672,029 bytes (31,906.3 KB = 31.2 MB)
# The following list of files and their sizes is just informational / for review, and isn't used in the test:
Contents/Info.plist:
723 bytes (0.7 KB = 0.0 MB)
741 bytes (0.7 KB = 0.0 MB)
Contents/MacOS/SizeTestApp:
29,566,328 bytes (28,873.4 KB = 28.2 MB)
29,582,728 bytes (28,889.4 KB = 28.2 MB)
Contents/MonoBundle/libSystem.Globalization.Native.dylib:
267,872 bytes (261.6 KB = 0.3 MB)
Contents/MonoBundle/libSystem.IO.Compression.Native.dylib:
Expand Down

This file was deleted.

2 changes: 2 additions & 0 deletions tools/common/Frameworks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,8 @@ public static Frameworks MacFrameworks {
{ "SecurityUI", "SecurityUI", 15, 4 },

{ "GameSave", "GameSave", 26, 0 },

{ "AccessoryAccess", "AccessoryAccess", 27, 0 },
};
}
return mac_frameworks;
Expand Down
Loading