Sample Code
OSX Driver and Kext Samples/ AFWAVendorSpecificDriver/ AFWAVendorSpecificDriver/ readme.rtfd/ TXT.rtf/
{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 {\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fnil\fcharset77 Monaco; } {\colortbl;\red255\green255\blue255;\red35\green110\blue37;\red137\green19\blue21;\red0\green0\blue255; } \vieww14780\viewh13080\viewkind0 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f0\b\fs28 \cf0 \ul \ulc0 DESCRIPTION\ulnone \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f1\b0\fs24 \cf0 \ This kernel extension allows for third-party FireWire audio vendors to customize various parameters used by the AppleFWAudio class-compliant driver. These parameters include a device's input and output latency, safety offsets and PowerPC G4-specific safety offsets.\ \ (a) Latency (input, output & safety offsets per sample rate).\ - InputLatency: hardware input latency in samples\ - OutputLatency: hardware output latency in samples\ - InputSafetyOffset: input safety offset in samples\ - OutputLatencyOffset: output safety offset in samples\ - InputSafetyOffset.G4: input safety offset in samples for G4 platform.\ - OutputLatencyOffset.G4: output safety offset in samples for G4 platform.\ \ The InputSafetyOffset.G4 and OutputLatencyOffset.G4 parameters are used for G4 systems only. They override the more general InputSafetyOffset and OutputSafetyOffset on a G4 system if they are present.\ \ Safety offset is a property that specifies a time lag, in samples, to improve the robustness of driver operation. The safety offset required for a given architecture includes time needed for memory access and to account for inaccuracies in a driver\'d5s timestamp resolution. Safety offset contributes to latency.\ \ (b) Options \ - Not used or specified at the moment. Should be zero.\ \ \ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f0\b\fs28 \cf0 \ul REQUIREMENTS \f1\b0\fs24 \ulnone \ \ Xcode 2.4.1 or later\ Mac OS X 10.5\ \ \ \ \f0\b\fs28 \ul STEPS TO CUSTOMIZE THIS DRIVER FOR A SPECIFIC VENDOR \f1\b0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \fs24 \cf0 \ulnone \ Following are the steps to customize the sample driver for a specific vendor. Let's say the vendor name is MyGreatCompany (vendor ID: 0x1234) and they have a FireWire audio device MyGreatFWDevice(model ID: 0x1ABCD). To create a KEXT specific to the vendor, modify the following files:\ \ (1) AFWAVendorSpecificDriver.h:\ \ \pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\ql\qnatural\pardirnatural \f2\fs20 \cf0 \CocoaLigature0 #define MySoftwareCompanyClass com_MyGreatCompany_driver_MyGreatCompanyOverrideDriver\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f1\fs24 \cf0 \CocoaLigature1 \ (2) AFWAVendorSpecificDriver.cpp:\ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \cf0 \f2\fs20 \CocoaLigature0 OSDefineMetaClassAndStructors(com_MyGreatCompany_driver_MyGreatCompanyOverrideDriver, IOService); \f1\fs24 \CocoaLigature1 \ \ \pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\ql\qnatural\pardirnatural \f2\fs20 \cf0 \CocoaLigature0 \cf2 // Publish all the devices supported by this driver. VendorID.ModelID is in hex, upper-case.\cf0 \ publishResource(\cf3 "AppleFireWireAudio.00001234.0001ABCD.OverrideLink"\cf0 , driverIOClass);\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f1\fs24 \cf0 \CocoaLigature1 \ (3) AFWAVendorSpecificDriver.plist\ \ Change the following fields:\ - CFBundleExecutable\ - CFBundleIdentifier\ - Model_ID (decimal)\ - VendorID (decimal)\ - VendorID.ModelID (hexadecimal, zero padded, all upper case)\ \ Modify the latency & safety offset values as needed. Add more sample rate to the DeviceSpecific section as required.\ \ \f2\fs20 \cf3 \CocoaLigature0 \f1\fs24 \cf0 \CocoaLigature1 ...\ \pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\ql\qnatural\pardirnatural \f2\fs20 \cf0 \CocoaLigature0 \cf3 <key>\cf0 CFBundleExecutable\cf3 </key>\cf0 \ \cf3 <string> \f1\fs24 \cf0 \CocoaLigature1 MyGreatCompanyOverrideDriver \f2\fs20 \cf3 \CocoaLigature0 </string>\cf0 \ \pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\ql\qnatural\pardirnatural \cf3 \f1\fs24 \cf0 \CocoaLigature1 ... \f2\fs20 \CocoaLigature0 \ \cf3 <key>\cf0 CFBundleIdentifier\cf3 </key>\cf0 \ \cf3 <string>\cf0 com. \f1\fs24 \CocoaLigature1 MyGreatCompany \f2\fs20 \CocoaLigature0 .driver. \f1\fs24 \CocoaLigature1 MyGreatCompanyOverrideDriver \f2\fs20 \cf3 \CocoaLigature0 </string>\ \f1\fs24 \cf0 \CocoaLigature1 ... \f2\fs20 \CocoaLigature0 \ \cf3 <key>\cf0 IOKitPersonalities\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key> \f1\fs24 \cf0 \CocoaLigature1 MyGreatFWDevice \f2\fs20 \CocoaLigature0 Override Information\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 CFBundleIdentifier\cf3 </key>\cf0 \ \cf3 <string>\cf0 com. \f1\fs24 \CocoaLigature1 MyGreatCompany \f2\fs20 \CocoaLigature0 .driver. \f1\fs24 \CocoaLigature1 MyGreatCompanyOverrideDriver \f2\fs20 \cf3 \CocoaLigature0 </string>\cf0 \ \cf3 <key>\cf0 IOClass\cf3 </key>\cf0 \ \cf3 <string>\cf0 MySoftwareCompanyClass\cf3 </string>\cf0 \ \cf3 <key>\cf0 IOMatchCategory\cf3 </key>\cf0 \ \cf3 <string>\cf0 MySoftwareCompanyClass\cf3 </string>\cf0 \ \cf3 <key>\cf0 IOProviderClass\cf3 </key>\cf0 \ \cf3 <string>\cf0 IOFireWireDevice\cf3 </string>\cf0 \ \cf3 <key>\cf0 Model_ID\cf3 </key>\cf0 \ \cf3 <integer>\cf4 109517\cf3 </integer> \cf2 <!-- Model ID in decimal -->\cf0 \ \cf3 <key>\cf0 Vendor_ID\cf3 </key>\cf0 \ \cf3 <integer>\cf4 4660\cf3 </integer> \cf2 <!-- Vendor ID in decimal -->\cf0 \ \cf3 <key>\cf0 params\cf3 </key>\cf0 \ \cf3 <array>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 DeviceSpecific\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf2 <!-- MyGreatFWDevice VendorID.ModelID -->\cf0 \ \cf3 <key>\cf4 0000\cf0 1234\cf4 .0001ABCD\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 Latency\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf4 44100\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 InputLatency\cf3 </key>\cf0 \ \cf3 <integer>\cf4 88\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputLatency\cf3 </key>\cf0 \ \cf3 <integer>\cf4 83\cf3 </integer>\cf0 \ \cf3 <key>\cf0 InputSafetyOffset\cf3 </key>\cf0 \ \cf3 <integer>\cf4 46\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputSafetyOffset\cf3 </key>\cf0 \ \cf3 <integer>\cf4 46\cf3 </integer>\cf0 \ \cf3 <key>\cf0 InputSafetyOffset.G4\cf3 </key>\cf0 \ \cf3 <integer>\cf4 50\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputSafetyOffset.G4\cf3 </key>\cf0 \ \cf3 <integer>\cf4 50\cf3 </integer>\cf0 \ \cf3 </dict>\cf0 \ \cf3 <key>\cf4 48000\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 InputLatency\cf3 </key>\cf0 \ \cf3 <integer>\cf4 96\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputLatency\cf3 </key>\cf0 \ \cf3 <integer>\cf4 96\cf3 </integer>\cf0 \ \cf3 <key>\cf0 InputSafetyOffset\cf3 </key>\cf0 \ \cf3 <integer>\cf4 50\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputSafetyOffset\cf3 </key>\cf0 \ \cf3 <integer>\cf4 50\cf3 </integer>\cf0 \ \cf3 <key>\cf0 InputSafetyOffset.G4\cf3 </key>\cf0 \ \cf3 <integer>\cf4 56\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputSafetyOffset.G4\cf3 </key>\cf0 \ \cf3 <integer>\cf4 56\cf3 </integer>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </dict>\cf0 \ \cf3 <key>\cf0 Options\cf3 </key>\cf0 \ \cf3 <integer>\cf4 0\cf3 </integer>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </array>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </dict>\cf0 \ \cf3 \f1\fs24 \cf0 \CocoaLigature1 ... \f2\fs20 \CocoaLigature0 \ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f1\fs24 \cf0 \CocoaLigature1 Multiple devices can be supported in a single KEXT by specifying the devices in Info.plist under the IOKitPersonalities section. For example, if MyGreatCompany has another FireWire audio device called MyOtherGreatFWDevice (model ID: 0x1CCCC), then it can be added as follow to the IOKitPersonalities section.\ \ \pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\ql\qnatural\pardirnatural \f2\fs20 \cf0 \CocoaLigature0 \cf3 <key> \f1\fs24 \cf0 \CocoaLigature1 MyOtherGreatFWDevice \f2\fs20 \CocoaLigature0 Override Information\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 CFBundleIdentifier\cf3 </key>\cf0 \ \cf3 <string>\cf0 com. \f1\fs24 \CocoaLigature1 MyGreatCompany \f2\fs20 \CocoaLigature0 .driver. \f1\fs24 \CocoaLigature1 MyGreatCompanyOverrideDriver \f2\fs20 \cf3 \CocoaLigature0 </string>\cf0 \ \cf3 <key>\cf0 IOClass\cf3 </key>\cf0 \ \cf3 <string>\cf0 MySoftwareCompanyClass\cf3 </string>\cf0 \ \cf3 <key>\cf0 IOMatchCategory\cf3 </key>\cf0 \ \cf3 <string>\cf0 MySoftwareCompanyClass\cf3 </string>\cf0 \ \cf3 <key>\cf0 IOProviderClass\cf3 </key>\cf0 \ \cf3 <string>\cf0 IOFireWireDevice\cf3 </string>\cf0 \ \cf3 <key>\cf0 Model_ID\cf3 </key>\cf0 \ \cf3 <integer>\cf4 117964\cf3 </integer> \cf2 <!-- Model ID in decimal -->\cf0 \ \cf3 <key>\cf0 Vendor_ID\cf3 </key>\cf0 \ \cf3 <integer>\cf4 4660\cf3 </integer> \cf2 <!-- Vendor ID in decimal -->\cf0 \ \cf3 <key>\cf0 params\cf3 </key>\cf0 \ \cf3 <array>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 DeviceSpecific\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf2 <!-- MyOtherGreatFWDevice VendorID.ModelID -->\cf0 \ \cf3 <key>\cf4 0000\cf0 1234\cf4 .0001CCCC\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 Latency\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf4 44100\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 InputLatency\cf3 </key>\cf0 \ \cf3 <integer>\cf4 88\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputLatency\cf3 </key>\cf0 \ \cf3 <integer>\cf4 83\cf3 </integer>\cf0 \ \cf3 <key>\cf0 InputSafetyOffset\cf3 </key>\cf0 \ \cf3 <integer>\cf4 46\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputSafetyOffset\cf3 </key>\cf0 \ \cf3 <integer>\cf4 46\cf3 </integer>\cf0 \ \cf3 </dict>\cf0 \ \cf3 <key>\cf4 48000\cf3 </key>\cf0 \ \cf3 <dict>\cf0 \ \cf3 <key>\cf0 InputLatency\cf3 </key>\cf0 \ \cf3 <integer>\cf4 96\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputLatency\cf3 </key>\cf0 \ \cf3 <integer>\cf4 96\cf3 </integer>\cf0 \ \cf3 <key>\cf0 InputSafetyOffset\cf3 </key>\cf0 \ \cf3 <integer>\cf4 50\cf3 </integer>\cf0 \ \cf3 <key>\cf0 OutputSafetyOffset\cf3 </key>\cf0 \ \cf3 <integer>\cf4 50\cf3 </integer>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </dict>\cf0 \ \cf3 <key>\cf0 Options\cf3 </key>\cf0 \ \cf3 <integer>\cf4 0\cf3 </integer>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </dict>\cf0 \ \cf3 </array>\cf0 \ \cf3 </dict>\cf0 \ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f1\fs24 \cf0 \CocoaLigature1 (4) InfoPlist.strings\ \ \pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\ql\qnatural\pardirnatural \f2\fs20 \cf0 \CocoaLigature0 CFBundleName = \cf3 " \f1\fs24 \cf0 \CocoaLigature1 MyGreatCompanyOverrideDriver \f2\fs20 \cf3 \CocoaLigature0 "\ \pard\tx480\tx960\tx1440\tx1920\tx2400\tx2880\tx3360\tx3840\tx4320\tx4800\tx5280\tx5760\tx6240\tx6720\tx7200\tx7680\tx8160\tx8640\tx9120\tx9600\tx10080\tx10560\tx11040\tx11520\tx12000\tx12480\tx12960\tx13440\tx13920\tx14400\tx14880\tx15360\tx15840\tx16320\tx16800\tx17280\tx17760\tx18240\tx18720\tx19200\tx19680\tx20160\tx20640\tx21120\tx21600\tx22080\tx22560\tx23040\tx23520\tx24000\tx24480\tx24960\tx25440\tx25920\tx26400\tx26880\tx27360\tx27840\tx28320\tx28800\tx29280\tx29760\tx30240\tx30720\tx31200\tx31680\tx32160\tx32640\tx33120\tx33600\tx34080\tx34560\tx35040\tx35520\tx36000\tx36480\tx36960\tx37440\tx37920\tx38400\tx38880\tx39360\tx39840\tx40320\tx40800\tx41280\tx41760\tx42240\tx42720\tx43200\tx43680\tx44160\tx44640\tx45120\tx45600\tx46080\tx46560\tx47040\tx47520\tx48000\ql\qnatural\pardirnatural \f1\fs24 \cf0 \CocoaLigature1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \cf0 (5) Under Targets/AFWAVendorSpecificDriver, change the the following settings:\ \ - Product Name \f0\b MyGreatCompanyOverrideDriver \f1\b0 .\ - MODULE_NAME \f2\fs20 \CocoaLigature0 com. \f0\b\fs24 \CocoaLigature1 MyGreatCompany \f2\b0\fs20 \CocoaLigature0 .driver. \f0\b\fs24 \CocoaLigature1 MyGreatCompanyOverrideDriver \f1\b0 \ \ \ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f0\b\fs28 \cf0 \ul BUILDING AND INSTALLING THE KEXT \f1\b0\fs24 \ulnone \ \ Clean All and build to generate the vendor specfic KEXT.\ \ To install:\ \ 1. sudo cp -r build/<Debug|Release>/AFWAVendorSpecificDriver.kext /tmp\ 2. sudo mv /tmp/AFWAVendorSpecificDriver.kext /System/Library/Extensions\ 3. sudo touch /System/Library/Extensions\ 4. Reboot the system.\ \ Step 1 is the simplest way to get the ownership and permissions correct for the kext. Step 3 is necessary in order for the new kext to be added to the various kernel caches.\ \ \ \f0\b\fs28 \ul TESTING \f1\b0\fs24 \ulnone \ \ Run AULab and setup a loopback test with AUPulseDetector* to measure the roundtrip latency for the vendor specific audio device. \ \ \ {{\NeXTGraphic AUPulseDetector.png \width10000 \height8000 }�}\ \ *AUPulseDetector can be found in /Developer/Examples/CoreAudio/AudioUnits/DiagnosticAUs. Build the AUPulseDetector and copy it into ~/Library/Audio/Plug-Ins/Components.\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \cf0 Under AULab menu, select Preferences to bring up the Preferences dialog. Choose Devices tab and select the vendor audio device. Open up the Expert Settings. \ \ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural \cf0 {{\NeXTGraphic Preferences.png \width9720 \height8960 }�}\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \cf0 \ The hardware latency and safety offset values should match the values specified in the vendor specific override kext. The reported roundtrip latency is the sum of Input Latency and Output Latency.\ \ The measured roundtrip latency should match the reported roundtrip latency value.\ \ }
Our Services
-
What our customers say about us?
Read our customer testimonials to find out why our clients keep returning for their projects.
View Testimonials