someone shared some helpful information regarding CoreMIDI and also some code 
for a USB device using it.

however, i don’t think that can work here.

after some preliminary testing, i’m not sure i can implement MIDI in a PCI 
device.

there are header conflicts between IOKit/pci/IOPCIdevice.h and CoreMIDI/*.h

this is disappointing, but right now i’m getting header conflicts.

> Showing All Messages
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/stdlib.h:228:7:
>  Functions that differ only in their return type cannot be overloaded
> 
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/MacTypes.h:287:41:
>  Typedef redefinition with different types ('UnsignedWide' vs 'UInt64' (aka 
> 'unsigned long long'))
> 
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/MacTypes.h:309:41:
>  Typedef redefinition with different types ('unsigned char' vs 'bool')
> 
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/MacTypes.h:596:9:
>  Unknown type name 'wide'
> 
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/MacTypes.h:689:9:
>  Unknown type name 'wide'
> 
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/MacTypes.h:708:1:
>  Conflicting types for 'Debugger'


relevant includes are:

> #include <IOKit/pci/IOPCIDevice.h>
> #include <CoreMIDI/MIDIServices.h>
> #include <IOKit/audio/IOAudioControl.h>
> #include <IOKit/audio/IOAudioLevelControl.h>
> #include <IOKit/audio/IOAudioToggleControl.h>
> #include <IOKit/audio/IOAudioDefines.h>
> #include <IOKit/audio/IOAudioPort.h>


i recall getting this kind of error early-on (with other headers) but obviously 
it got resolved. i’m hoping there is something similar i can do this time.

i don’t know if it’d be possible to communicate with the CFBundle in an 
interrupt context the way apple is suggesting.

i am thinking CoreMIDIServer.h is what i need, but unsurprisingly there is no 
header in the frameworks directory.

i’ll keep you guys updated, but there has to be a way around this. of course 
apple would make it difficult given their direction in the past 2+ years.

midi in a pci audio device is too obvious of a “need”

Thanks,
Gagan

> On Dec 11, 2022, at 7:08 AM, Gagan Sidhu via Coreaudio-api 
> <[email protected]> wrote:
> 
> hi again all,
> 
> before i begin my testing, i wanted to ask about handling rudimentary MIDI 
> calls.
> 
> the documentation reads:
> 
>> "Note:  MIDI device drivers are not I/O Kit drivers. The MIDI device driver 
>> model is based on the CFPlugIn architecture and typically loads a CFPlugIn 
>> bundle from /System/Library/Extensions or Library/Audio/MIDI Drivers.
>> 
>> For MIDI devices that cannot be directly addressed from a user-space device 
>> driver (for example, a MIDI interface built into a PCI card), you must split 
>> your driver into two parts: an I/O Kit device driver that matches against 
>> the device and a CFPlugIn bundle that manipulates the I/O Kit driver using a 
>> user client.”
> 
> (https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/WritingAudioDrivers/AudioOnMacOSX/AudioOnMacOSX.html#//apple_ref/doc/uid/TP30000730-TPXREF103)
> 
> this is exactly the case i’m trying to handle, but i’m not sure if a 
> PCIAudioDevice driver is considered user-space or not.
>       -this may sound like a noobish confession, but i understand this line 
> is drawn differently for BSD and Linux, and i don’t know where exactly it was 
> at the time these docs were writen.
>               -i do know that the newer (bad) SampleIOAudioDevice (from 
> wwdc21) driver highlights being more “user-space”, so maybe a driver written 
> for IOKit is considered “kernel space”
> 
> anyways, i have a MIDI device that should be accessible within the device 
> driver, as Clemens does here with the creation of am MPU401 device:
> 
> https://elixir.bootlin.com/linux/v4.14.298/source/sound/pci/oxygen/oxygen_lib.c#L702
> 
> i have googled around the terms “ioaudiodevice” and midi, only to find 
> nothing.
> 
> the OS-X and Kernel Programming book by halvorson and clarke says:
> 
> "Core MIDI / MIDI Server framework contains APIs for working MIDI.”
> 
> i was hoping one of the readers could point me to some documentation that may 
> be helpful on this topic. i am hopeful the midi/uart interface can be dealt 
> with inside the driver.
> 
> and if it can’t, i am hoping this bundle i’d need to write wouldn’t be that 
> bad. but i already have all of the uart stuff put in the right spot, so it’s 
> just a matter of having a way to handle a uart interrupt on the workloop for 
> a midi device.
> 
> see the interrupt handling for the driver here: 
> https://elixir.bootlin.com/linux/v4.14.298/source/sound/pci/oxygen/oxygen_lib.c#L117
>  
> 
> i just converted this function to the IOWorkLoop-equivalent.
> 
> 
> Thanks,
> Gagan
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Coreaudio-api mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/coreaudio-api/broly%40mac.com
> 
> This email sent to [email protected]

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/coreaudio-api/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to