WWDC2001 Session 206
Transcript
Kind: captions
Language: en
good afternoon and welcome to the fire
wire in-depth session yesterday in the
fire wire overview session we reviewed
the Macintosh firewire hardware as well
as demonstrated the fire wire software
stack on Mac OS 10 today we'd like to go
into some into more details regarding
fire wire driver development for Mac OS
10 so we can see a lot of exciting
firewire devices for the Macintosh
platform with that said I'd like to turn
it over to Erik Anderson engineering
manager for the firewire software
development team thank you Greg
you know this is a USB device
I just meant I'm not familiar with it
okay yesterday we talked to length about
just all things firewire that we have it
on all of our products all that the
great devices that you guys have made
1394 be where we're going and we told
you that Mac OS 10 has lots of good
firewire services so today we're gonna
talk in depth about all of those
firewire services on Mac OS 10 in
particular the message I want to give
all of you is that we are providing the
tools you need to develop drivers
applications plug-ins for firewire for
Mac OS 10 and we'll spend a lot of time
going through how that works in
particular we'll have some in-depth
discussion of how driver loading works
and how driver matching is done of
course it's very important to have your
driver match your device otherwise
what's the point will tell you where to
find the SDK it's right there on the
slide it'll be on the slide at the end
also you don't have to scramble to write
that down and we'll talk about source
there's the URL for darwin much of the
firewire family is in open source we've
already started to receive feedback from
some of our developers bug fixes
comments that's terrific that's exactly
how it's supposed to work
now please keep that up
okay the firewire API in Mac OS 10 is
very similar to what's in Mac OS 9
because you need to do the same things
it's been changed mechanically to fit
with an i/o kit C++ but all the concepts
are basically the same
we have asynchronous isochronous
services for sending and receiving
packets it's based on forming a command
and then sending it it's just done in an
i/o kit way yes ah cron is transport in
particular use is the same DCL mechanism
that we used in Mac OS 9 if you have
existing DC LS it should be very easy to
adapt them to work with Mac OS 10 we
have the same SBP to service layer in
fact it was ported over directly this
makes it easier to write drivers for
devices like disks cameras printers
scanners that use the SPP 2 protocol has
all the same features unlimited logical
units unlimited orbs and it's not tied
to storage it's an all-purpose SBP 2
interface finally we have something new
in Mac OS 10 because it didn't really
apply in Mac OS 9 and that's a user
client more properly known as a device
interface this allows you to talk to
your firewire devices from the
application space which is much easier
than writing code to go inside the
kernel I'll talk about that later
specifically we have user clients for
both SB p2 and for just plain generic
firewire and you can use those
interchangeably you can use them both at
once we have an SDK available with
extensive sample code shows how to write
in user space there's an SP p2 cocoa
application there's command line
applications a bunch of good stuff in
there and significantly not only is this
SDK now available but it's available for
free public download to anybody you
don't need to have access to Apple's
developer relations program like was
necessary with Mac OS 9 for many years
so we're doing everything we can to get
this out and make it available to you
now let's talk in more detail about
what's in there and how it works
io firewire family is the core firewire
services in Mac OS 10 its job is
basically the same as what firewire
support did in Mac OS 9 it's a central
point of communication for all things
firewire if you have multiple devices
multiple drivers multiple applications
they all want to communicate on a single
firewire bus the firewire families job
is to let them all do that at the same
time without interfering with each other
so it's a multiplexing point in Mac OS
10 the firewire family is implemented as
a dynamically loadable kernel extension
also known as a kext it will be loaded
whenever there's a firewire bus that
needs this software service there's
three main parts to the core io firewire
family dot text is the firewire services
and there are two hardware drivers for
the two kinds of firewire interface that
we have shipped in our products apple
links text is a driver for the older PCI
links interface that was used in the
blue and white g3 Apple FW ohci dot text
is the driver for the industry standard
1394 open host controller interface that
we ship in all of our products today in
Mac OS 9 these two drivers were bundled
together into the file
firewire enabler in Mac OS tend to fit
within the way that i/o kit loads
drivers they're present as independent
texts within the extensions folder we
have some additional firewire services
they come along as part of the standard
installation io firewire DV is the
standard device driver for DV cameras
very similar to what we had in Mac OS 9
it's also a text I'll talk more about
this later it may not really belong in
the kernel but that's where it is now
io firewire SBP to dot text is the
service layer that provides the SPP to
API in Mac OS 9 this was simply built in
to firewire support in Mac OS tend to be
consistent with the way that I okay it
works
it's provided as a separate text but it
will load whenever an SP p2 devices
around and provide you with the API to
allow you to talk to that device finally
as I mentioned we have user clients or
device interfaces for both ordinary
firewire and for SP p2 in particular to
make all of these services available out
in user land to minimize your need to
write code in the kernel
this picture shows where firewire fits
in the grander scheme of Mac OS 10 down
at the bottom you can see that drivers
for firewire exist at the very bottom of
the kernel within the i/o kit framework
that's where IO firewire family is
located and also the ohci or Lynx
drivers depending on what hardware you
have in your system the figure shows
that above them is the BSD layer where
you find things like the file system
some kinds of firewire drivers will go
up to that layer for example a mass
storage driver goes to the file system
because it provides a block storage
device on which the file system actually
implements directories and structures to
store your files but other kinds of
driver may bypass the bsd system as
shown by this path over here to the
right for example the DV driver goes
straight to QuickTime which is an
application level service so BSD really
isn't involved in the DV driver also up
on top I've shown carbon and cocoa
because these are places that using the
user clients you can access firewire
services so you don't need to go down in
the very bottom of the kernel you can
write up in application space
now I'm going to show in much more
detail what elements are in the stack of
fire wire services and how they get
built up when a device is plugged in so
that you'll find out where your driver
exists within all of these layers of
software everything begins with an IO
PCI device the PCI family will have
discovered a firewire interface of some
kind probably on a PCI card built-in or
on a card bus card and we'll create an
IO PCI device object corresponding to it
in IO kit the information in that object
matches to Apple in this case we'll use
the example of open HCI it matches to
Apple firewire ohci which is a subclass
of i/o firewire link iya firewire link
has all of the functions that would be
needed for any firewire interface Apple
firewire ohci has specific Hardware
control for the open HCI it's DMA
engines for example are quite different
from PCI links those two are loaded as
one as a unit that will provide the
device driver layer service for actually
controlling the firewire hardware in
response to having those loaded the next
layer up is instantiated IO firewire
controller which is a subclass of IO
firewire bus this is where the family
exists all of the family services are
provided in this layer and it's invoked
when there's actual Hardware for it to
provide services for pushing IO firewire
controller now down to the bottom of the
picture will keep building up from where
we were the family will scan the bus
looking for devices that we might load
drivers for for every device on the bus
that at least has a configuration ROM
containing at least a bus info block
which is where the gooood or serial
number is located we will create an IO
FireWire device this corresponds to a
device with a note ID that's out there
on the bus
it's actually responding to our request
to read the configure on IO FireWire
device itself is a subclass of IO
firewire nub which is just a more
general object for talking to firewire
devices the IO FireWire device layer
will scan the config ROM looking for
unit directories in a FireWire device a
unit directory publishes information
about what that device does a disk drive
has an SB p2 unit directory that says it
speaks the SBP to protocol within there
are further details about the fact that
it's a disk drive or a DVD Ram or some
other kind of device a DV camcorder has
a unit directory that says it speaks the
AVC command set
and then there's further information
within about exactly what kind of device
it is the i/o FireWire device layers job
is to scan the config ROM finding
hopefully at least one maybe more unit
directories and it will create this i/o
firewire unit object which itself is
also a subclass of i/o firewire nub iya
firewire unit actually gives us the
first hint about what this device really
does so IO firewire unit further scans
the config ROM and puts information in
the i/o registry that's used to match a
driver to this device
pushing i/o firewire unit down to the
bottom let me show the example of how
things load for a disk drive from the
unit directory we learn that the device
is SB p2 it has a spec ID and software
version that indicate the SBP 2 protocol
consequently the i/o firewire SBP to
target layer gets loaded this is the
general service layer for an SB p2
device it will further scan the
configuration ROM to discover SBP 2
logical units within that device for
each logical unit that it finds it will
create io firewire SP p21 LUN being
short for logical unit
finally the Lund will match against a
particular driver for the actual device
that you've plugged in in the case of a
hard drive Apple provides a standard
built in driver if you use Mac OS 9 and
you remember the API call FW get local
FW reference ID from FW reference ID
you'll love this Apple firewire
mass-storage drivers which is a subclass
of i/o firewire serial bus protocol
transport together these are apples
standard driver for mass storage devices
it covers hard drives magneto-optical
cd-rom various other standard kinds of
devices this puzzle piece architecture
you probably recognize this from the USB
and the storage presentations the puzzle
piece edge that's sticking out the right
hand side of Apple firewire Mass Storage
drivers indicates that this is a layer
that you might want to subclass if you
have your own device that has vendor
unique functionality that makes it
better than somebody else's you don't
have to write an entire new driver for
your device you can start with apple
firewire match Mass Storage drivers or
perhaps just IO firewire serial bus
protocol transport and subclass the
unique functionality of your device at
this level
suppose your device isn't in the kernel
suppose you want to communicate to it
from user space if you went to the i/o
kit summary you've probably heard that
we recommend avoiding writing drivers in
the kernel if you possibly can it's much
easier to debug things in user space
than in the kernel so we provide a user
client which is a piece of software that
can bridge the user kernel gap going
back down to i/o FireWire device and die
or firewire unit if you want to talk to
a device from user space then IO
firewire user client will be loaded
within the kernel as the driver for a
device this is basically just a bunch of
glue that knows how to talk up into
application space pushing user client
down to the bottom now we reach the user
kernel boundary above here we have IO
firewire lib this is another piece
provided by Apple it's the counterpart
to i/o firewire user client IO firewire
lib can be used by a CF plug-in that you
provide the CF plug-in is written in
user space and runs in an application
context and can talk to i/o firewire lib
to communicate with a FireWire device
typically it would be loaded by an
application as an example if you have a
firewire scanner your application might
be something like Photoshop your CF
plug-in might be a plug-in for the
particular kind of scanner that was
found so this gives you a flexible
architecture for dealing with multiple
kinds of device perhaps multiple
applications without rewriting a lot of
code over and over again it's not shown
here on the slide but if you had some
really unique FireWire device that was
only ever going to talk to a single
application like maybe some kind of
firewire salad shooter or something
you could connect this up directly to
i/o firewire live you don't have to use
the plug-in architecture but most people
want to write something that's flexible
that can talk to multiple applications
or multiple devices use the plug-in
architecture for that
and again this is the area where you
could write software you could write the
application you could write the plugins
the rest below is provided by Apple now
let's talk about more details about the
individual objects that you saw as we
built up the stack io firewire
controller is the heart of the firewire
family this is where all the logic
exists to manage a firewire interface as
I mentioned before a single firewire
interface may support multiple devices
multiple applications multiple protocols
all going through the same hardware
interface io firewire controller
provides the services to actually talk
to that hardware to multiplex the
different requests it also provides the
bus management services so some of the
things that are common that have to be
shared by all drivers address space
management some kinds of firewire
drivers will allocate firewire address
space that's a range of memory in the
Macintosh that can be addressed over
firewire drivers for DV and SBP don't
need to do this by themselves typically
but if you design your own protocol or
if you're doing a shared memory kind of
application you might allocate some
firewire address space so that other
devices on the bus can read and write
memory in the Macintosh that address
space is a shared resource so it's
handed out by i/o firewire controller
packet transmission and reception all
flows through here when a packet comes
into the Macintosh at this layer we can
look at it figure out who it's for hand
it to one of the appropriate drivers
that's loaded on the system
likewise when software wants to transmit
packets this is delay or whether get
queued up and transmitted one by one on
the firewire bus
if you want to write a protocol driver
io firewire controller will be the
provider for your driver a protocol
driver is software that loads once for
each firewire bus as opposed to an
ordinary firewire driver which loads
once for each instance of your device on
the bus a protocol driver might be used
if you're speaking a protocol like
tcp/ip or perhaps M LAN where you really
just want one driver on the Mac not
several
talking to each firewire bus and as I
mentioned earlier Apple links and Apple
fwo HCI are subclasses of i/o firewire
controller that know how to talk to the
specific DMA controllers in the products
that we've shipped I mentioned i/o
FireWire device that this is created for
any device on the bus where we are able
to read at least the bus information
block from the config ROM there will be
one of these per device IO FireWire
device keeps track of the node ID in a
device which may change from time to
time due to dynamic reconfiguration of
the bus IO FireWire device also
discovers the vendor ID which is in the
root directory and publishes this in the
IO registry so that you can use it for
driver matching but the main job for IO
FireWire device is to scan the
configuration ROM on the device that it
is attached to looking for unit
directories and when it finds them
published those unit directories in the
IO registry so that driver loading can
continue IO firewire unit this is what's
created by IO FireWire device for each
unit directory discovered in the config
ROM there's one i/o firewire unit the
unit will find and publish the unit
speck ID unit software version and again
the vendor ID in the i/o registry so
that this information can be used for
continued driver matching an ordinary
FireWire device driver in the kernel
will have IO firewire unit as its
provider both IO firewire driver and IO
firewire unit I'm sorry IO FireWire
device and IO firewire unit derived from
IO firewire nub if you want to find out
how these work you should definitely
look in the nub which is where a lot of
the activity takes place
now what kinds of things do we put in
the i/o registry there are two service
planes that firewire uses there's the
primary i/o kit service plane that's
what you get by default when you run io
registry Explorer you can find the i/o
firewire controller in there hanging off
of the corresponding PCI node you can
find i/o firewire device if you have any
devices on your bus and if you do you
can probably also find i/o firewire unit
there's also an i/o firewire plane
created by firewire in the registry this
is where we store some firewire specific
information about bus topology and you
can find firewire controller and
FireWire device objects in there okay
now I'd like to give a demonstration of
some of the things that we've included
in our software development kit so if I
can have demo one up on the screen thank
you I can't see you all really well but
I'd like to see a show of hands how many
people have downloaded installed and
used one of our firewire SDKs for Mac OS
10 can you raise your hands so most of
you haven't but thank you for everyone
who did what I'd like to show you now is
some of what we have in the SDK we have
spent a lot of time trying to provide a
foolproof straight forward SDK with
sample code with examples precompiled
binaries step-by-step instructions that
you just can't fail let me show you how
easy this is to use I have a CD here
with the firewire SDK on it you would
probably download this from our website
I'm simply going to drag it into my home
directory
here it is i/o firewire SDK seven dot
sit this is the latest one simply
double-click on the archive file and it
will expand and now we have a standard
Mac os10 installer for those of you who
started with firewire SDK number one you
may recall some very tedious steps for
how to install software if you went
through those you probably learned some
useful things about how UNIX works and
how we store texts but we've made it
quite a bit easier now you can simply
use the Installer pick a drive on which
you'd like to install choose a directory
within that drive such as Apple is the
local user here we'll put it in the
Documents folder select install and in
just a few seconds the SDK will be
installed and you'll be ready to go
there was a lot easier than going
through that script we used to have so
the SDK is now in My Documents folder as
firewire SDK here are some of the things
in here readme text and readme dot RTF
these are exactly the same file open
this one if you're running in classic or
Mac OS 9 open this one if you're running
in Mac OS 10 this has step-by-step
instructions for how to walk you through
installing building running everything
in the SDK you can't fail if you just
follow them line by line it's very
straightforward we've tried it over and
over again let me show you some of the
highlights of what's in here let's start
in the tools folder IO registry explorer
this is a standard Mac OS 10 developer
tool it's provided in the standard
developer install we've made a very
minor change that makes it a little more
convenient to use on fire wire
I'll run this and show you what's
changed and also show you how to
navigate around and find fire wire
objects actually before I do that I'm
gonna turn on this fire wire camera so
that we have somebody to talk to
within the registry Explorer you will
have to dig a little ways to find
FireWire registry Explorer is very
similar to display name registry from
Mac OS 9 except it's organized more like
Mac OS tens finder view that has these
rows of columns power Mac 3/4 is the
actual hardware we're running on if we
look inside the platform expert we find
various kinds of device this PCI bus I
just happened to know has firewire on it
you might try the other two first if you
can't find it
here's firewire over here firewire at E
and the system since it's rg4 has an
open HDI in it starting here you may
have spotted what we changed in this
particular version of registry Explorer
these numbers that are shown in decimal
are also shown in hex it's very little
thing but here's where it really starts
to matter if you go into our io firewire
controller and look at your node ID six
five four seven three I don't know if
that's right
but FFC one is clearly node one on the
firewire bus
so having hex in here it should be
helpful to you so these are the things
that you saw in the stack that built up
Apple fw ohci
which is a io firewire controller it has
discovered this camera on the bus that
created an i/o FireWire device within
the device you can see things like the
vendor name the model because they
provided a string in there for us the
note ID this device has a unit directory
so i/o firewire unit was created the
user client also gets tacked on at this
point here in the unit you can see the
unit spec ID a 0 2 D which specifies the
1394 trade association and the unit
software version 10,000 one hex this
specifies the AVC command set which is
reasonable because this is a DV
camcorder and in fact we loaded the i/o
f w DV driver against this device so you
can see that IO registry provides
information similar to display name
registry
and it has the details that you'll need
to figure out what we thought of your
device what we thought it's unit
contained its vendor was so that you can
find the information to enter in project
builder for matching your device so your
driver can load correctly against your
device one of the other tools provided
in the SDK is hack TV this is just a
standard QuickTime sample code it's a
little application that will receive
video from the camera is actually two
files provided hack TV structure dot
sketch is a really simple picture if you
attended our kitchen in Tokyo I think
we'll even do this on the fly and so we
put this in the SDK it just shows the
layers of things inside hack TV how all
the parts are working together hack TV
itself will open up a connection to the
camera and display video from it so here
you can see the DVS coming in just like
the iMovie demo that we showed yesterday
except this is running in just a simple
standard QuickTime sample code
Carbon vid out app is a similar
application that can take a DV file and
export it back to a camera and you can
watch it play yet full 30 frames per
second on the screen on the camera UUID
generator is a small tool that you may
need to use you can read about the
details when you get to that backing up
to the top of the sdk this directory
source contains full source code to the
io firewire family and io firewire SBP -
including all of the user clients so you
can find out exactly what we did a few
of you have even found bugs and reported
those we're fixing all that all the
other goodies are here in examples
there's a number of programs sample code
to show you how to use firewire and Mac
os10 let's start with SBP - sample
project let me show you just how easy it
is to compile build and run our sample
code for SBP - this is a cocoa
application I'll open it up in project
builder and build it this application
talks to an arbitrary SBP - device to
build the application all you do is
click on the hammer in project builder
wait a moment while it compiles
everything you can see there's a fair
amount of stuff in here this application
will talk to this firewire disk drive
and will serve as a sample or how to
gain access to your device how to form
an orb and send it to your device how to
get data back and it shows how to do it
all in project builder with cocoa as
well it'll take just a moment to build
sorry the question was do you have code
warrior sample code and we don't have
any at this time we'd certainly like to
add that however if one of you has
already figured that out we'd be happy
to throw it in the SDK if you just send
it to us otherwise we'll take care of
that ignore that build warning and it's
done we've built the SPP to sample and
you can find it here in this directory
that was created called build here's an
application text and plug-in I'm gonna
skip a few steps I've already installed
these in the system folders so that
they'll load now nothing's here because
I didn't actually plug in the drive
so the app has found an sp2 device in
fact it found the IO firewire SBP to one
object that I told you about earlier
corresponding to the single logical unit
that's present in a disk drive we will
select that and we get a window that
allows us to log into the device which I
will do and the device spins up in
response to that and now that it's
spinning we can press this button to
read a block from the device this simply
reads block zero and dumps it out
completely raw in this window
khoka makes this really easy to do
nothing in here was specific to disk
drive except actually the read block
zero command so you can use this
application and code as a starting point
for talking to just about any kind of SB
p2 device there's other things in the
SDK
I'm gonna go into the pre-built binaries
folder but all of this is provided a
source code as well FW util is a very
simple command line program that can
read quad let's out of your high wire
device just to show you how to start
talking to a device io firewire lib demo
is similar except it shows the entire
config realm of your device
firewire packet queue test can send
packets between two Macintosh systems
notifier provides you with some sample
code for how to get notification when
things happen on the bus like a device
appearing read test and write tests are
isochronous sample code that use the DV
driver to capture and export DV it does
it right from the command line as
opposed to hack TV which does it in a
nice GUI application so let's take a
look at some of these
oops
trust you can all see this
so using the terminal I'm going to run
some of the programs that are provided
in the pre-built binaries folder we'll
start with FW util this is a really
simple program the device it's talking
to I believe is this hard drive might be
the camera you can use commands similar
to what was in Firebug I'm going to read
a quad lit out of the configuration ROM
this particular quad lit is the first 32
bits of the serial number of the device
here's the next 32 bits this looks like
it's the disk drive because I know this
is the camera 85 is canons vendor ID so
we've read the serial number out of this
device using this command line tool not
terribly useful but all the source code
is provided so that you can adapt to
this into something that your customers
would actually use IO firewire lib demo
I mentioned earlier beats the entire
configure I'm all at once and dumps it
out in hex it's extremely easy to use
there you can see in fact it's dumped
them out for both devices on the
firewire bus the camera and the disk
drive one of them seems to have a lot of
empty space but all of the data is here
so as you can see we have a lot of stuff
in the SDK it's all completely ready to
use it's been pre compiled so you can
just run it building it in project
builder is just a single click some of
the command-line tools are built by
compiling them in terminal but there are
step by step there being one step
instructions in the SDK for how to do
that okay that's all the highlights for
things in the SDK hopefully what you'll
take away from this is that it's all
ready to use we believe you can ship you
can develop drivers applications user
space code and ship it to customers for
firewire with what we've got here of
course we're working on bringing you
more but we've got quite a bit to offer
in this SDK okay let's go back to the
slides
I think I went too far nope
so I'd like to continue talking about
some of the objects that are in Mac OS
tens firewire services that you will be
using when you write code for these
devices I OFW command is the sort of
all-purpose object for sending commands
to a FireWire device it's similar to the
firewire command object in Mac OS 9
except there's again mechanical changes
to fit within C++ and fit with an i/o
kit the i/o fw command object provides
all of the services you need for making
synchronous or asynchronous commands for
handling callbacks when things are
finished it's all handled in a common
way through this class there are a
number of derived classes for sending
particular kinds of commands to a device
in particular I OFW async command
handles all of your read write and lock
operations io fw bus command handles
commands that apply to the firewire bus
such as allocating local address space
or other bus resources the class IO fwi
sock channel that corresponds to a
channel command object in mac os9
an isochronous channel object exists
corresponding to one active isochronous
channel on the firewire bus the purpose
for the existence of the channel is to
keep track of the actual resources the
bandwidth and the channel number across
bus resets it also serves as a common
reference point for everyone who's doing
something sending or receiving on that
isochronous channel so associated with
it RI OFW I saw port class objects a
port corresponds to an actual point of
talking or listening on a channel if a
channel is going to do anything
interesting it probably has at least one
listening port and exactly one talking
port
you can subclass I OFW I sock port to
provide the mechanisms that are specific
to your device before starting and
stopping communication on a channel when
a channel is started each of its ports
will be called so that it can do port
specific things to start operating on
the channel the transmitter could start
a DCL program to send data the receiver
might program registers in a device that
cause it to pick up the data and do
something useful with it
similarly i OFW local I sock port is a
port on a channel that is corresponding
to Hardware on the Macintosh generally
if you have a channel you will have one
local I sock port on it unless you're
acting as a manager for two other
devices who think they're talking to
each other on the bus a local port
corresponds or has a DCL program
attached to it this is the same service
that we had in Mac OS 9 DCL stands for
data stream control language and it's an
abstract programming language where you
build a structure in memory describing
on a packet by packet basis how you're
going to send or receive isochronous
data we take that DCL program and
compile it into a DMA program that runs
on the kind of hardware that we have in
the Mac whether it's open HCI or PCI
links so your driver needs no knowledge
of the hardware specifics the DCL
programs in Mac os10 used the same op
codes and same structure as mac os9 it
should be very easy to adapt an existing
DCL to work in mac OS 10
okay more about user clients formerly
formally this is called the device
interface but everyone calls it a user
client so I will to a user client as I
said before is a layer of software that
allows you to talk to firewire devices
from application space there's many good
reasons for doing this in order to hook
up to your device you may need to put a
stub text in the kernel this could be as
simple as an empty text with a little
bit of XML to match your device in order
to give you control over your device for
example if you wanted to talk to a
device that also matched against apple's
standard disk driver you might create a
stub text that gets a higher probe score
or a tighter match that would enable you
to win over our disk driver and then
talk to your device from user space we
provide complete access to the firewire
services in the kernel through the user
client so if your device doesn't have to
be in the kernel because of OS specific
reasons put it in user space some
drivers simply have to go in the kernel
if you have a mass storage device that's
going to mount a filesystem that has to
be in the kernel but if you have some
kind of printer scanner digital video
device all of those can go up in user
space isochronous services will be
available very soon
in the user client they're not yet in
the SDK but that's our number one thing
that we're working on right now probably
in the next week or two we will post
another SDK with isochronous services
for the user client
the i/o firewire SBP - family I talked
about before it's the service layer it's
ported almost directly from mac os9 so
it's very similar in how it works
although it's been cleaned up to fit
properly an i/o kit so there's no
strange legacy mac os9 issues this layer
is used by the apple firewire disk
driver last year we had a monolithic
demonstration disk driver to show that
it could be done but all of the mass
storage layer SPP - had been rolled up
into one big mess and made a driver it
worked but it was not sustainable so
we've broken that up into discrete
layers this is what's in Mac OS 10 today
and it's what's used by our standard
driver I mentioned before i/o firewire
serial bus protocol transport text and
apple firewire mass storage drivers text
that's the Apple software that provides
a standard driver you can subclass that
or replace it if you need to provide a
driver for your own device one
particular function of i/o firewire SBP
- is it knows how to read the config ROM
of an SP p2 device and find SBP -
specific information to use for driver
matching SBP two devices publish a
command set a command set spec ID
logical units various other information
that is specific to SBB - you wouldn't
find it in a camcorder so io firewire SP
p2 is the layer that digs that out
publishes it in the i/o registry and
then allows i/o kit to perform more
precise device matching using that
information we have a user client before
SBP - this gives you all of the SPP -
services that are available in the
kernel and it makes them available in
user space if you want to write a driver
for a FireWire printer firewire scanner
firewire still camera you'll probably be
using the SVP - user client in
application space you can use this by
itself or you can use it in combination
with the ordinary firewire user client
if you have some device that has
additional functions outside of SBP -
you can talk to them with normal
firewire commands using the normal
firewire user client so you can use one
or the other
or both depending on the needs of your
device IO firewire DV this is the
standard DVD device driver that we
provide it provides services very
similar to what was in Mac OS 9 it is a
device driver for DV cameras it can
transmit and receive frame accurate 30
frames per second DV it supports normal
DV and the new SDL mode that is present
in that Canon camera I showed you
earlier presently IO firewire DV lives
in the kernel it lives there because we
don't have the isochronous API out and
user space yet so putting it in the
kernel worked we would like to move that
out to user space and we're going to try
to do that we certainly recommend if
you're developing an isochronous driver
try to do it in user space if you want
to use io firewire DV you can access it
through quick time using the sequence
grabber just like you would in Mac OS 9
and there's a lot of sample code in the
SDK as I showed you earlier that can get
you started on how to do that ok so what
do we have that's new we've actually
gotten quite a lot done since last year
when we told you about firewire and Mac
OS 10 for the first time this year in
the shipping version of Mac OS 10 we
have full support for open HCI last year
we were really working best on the blue
and white g3 with the old PCI links now
we fully support all the hardware the
SPP to service layer and the standard
apple disk driver are completely new
since last year
they're very full-featured the user
client for firewire and the SPP to user
client are also all new we now have a
standard DVD driver and quicktime
component as you may have seen yesterday
in the intro to firewire iMovie is
running just fine on Mac OS 10 we
couldn't show any kind of DV at all last
year
firewire booting there's not a whole lot
to say here you can boot from firewire
devices in Mac OS 10 just go into the
Preferences pick a FireWire device and
boot from it SDKs we have published a
bunch of firewire SDKs from Mac OS 10
already in a major change from what we
were doing on Mac OS 9 we've made these
free and completely available anyone can
download them just go to our website
here's what we're going to be working on
for the future as I mentioned the
isochronous services in the user client
aren't quite done yet
there was no corresponding service in
mac os9 this is something new we're
making good progress on it we expect to
have an SDK out within a week or two
that you can try in particular we intend
to provide a sample code for ad cam
camera device driver dkm is a format for
raw video on firewire it's not
compressed like the commercial consumer
DV cameras it's just raw VGA or similar
kinds of format sent over firewire it
uses much more bandwidth and it's the
number one application other than DV for
isochronous on firewire so we plan to
provide sample code for a driver for
that kind of camera we have more sample
code in general more documentation we've
added header doc more tools we also have
a bunch of bug fixes coming in the next
SDK here's some general areas that we're
gonna work on over the next year in 1390
4.3 also known as the peer to peer data
transport this is a protocol layer that
sits on top of SB p2 this was invented
by the printer community it's suitable
for printers and may be useful for other
kinds of devices as well it provides
multiple streams or pipes of
communication over a single SBB -
connection if you have a device I don't
believe there's any shipping today but
if you have a device that uses this
protocol you could write software for it
with the SBP - user client but part of
what you invent there would be common to
any PPD T device so we will provide a
standard layer to make that even easier
to do I Triple E 1212 R is a revision to
the specification that says how config
roms are laid out in particular it
contains a new service called instance
directories this is a slightly different
way to describe the functions in your
device as opposed to the unit directory
that we use today many of the consumer
electronics vendors felt it would be
better to describe a device based on its
function rather than based on its
protocol so an instance directory tells
you what kind of
functions a device has we plan to add
support for that since devices are
starting to appear that have this kind
of data in their config ROM this would
give you an alternate way of loading
device drivers for device the purpose of
instance directories is to be a better
way to discover functions so it's
natural to make it available for driver
matching and loading finally as I talked
about yesterday at the intro section
we're going to be spending a lot of time
working on 1394 B or more precisely our
Hardware folks are going to be spending
a lot of time working on 1394 be almost
nothing changed in software so we'll
make a few little touch-ups and then
ship that out to you in conclusion for
Mac OS 10 we have extensive fire wire
services we believe it's really the
equal of what we had in Mac OS 9
everything is there for you to start
writing drivers today please pick up the
SDK here's the URL again that provides
information for both the SDK and our
mailing list this is a public mailing
list anybody can subscribe the exact
details are at this URL all we ask is
that if you do have confidential
information maybe we've sent you a seed
unit or you're working on some new
product that nobody knows about please
don't talk about it on the mailing list
you can ask general questions sometimes
people do ask secret questions and I
remove the secret information and post
the response on the mailing list the
response so far has been quite good many
of you have been answering each other's
questions on the mailing list which is
great we do what we can to answer
questions as well so if you're not
participating please sign up and please
participate in that mailing list finally
as I said much of our source code is
open source it's in Darwin it's also all
provided in our SDK if you do find a bug
or you find something that could be done
better a feature you'd like to add let
us know about it use the standard Darwin
mechanism to submit your change we've
already picked up and incorporated some
changes that you sent in
related sessions here at dub dub DC
yesterday there was a very good
presentation on storage drivers in IO
kit this is information that you'd need
if you're writing or sub classing
drivers for storage devices on firewire
if you missed the presentation yesterday
I believe there will be a DVD series
available from dub dub DC so you can
catch it there tomorrow at the same time
two o'clock we will have our feedback
form combined firewire and USB that's in
room J one down at the complete opposite
end of the Convention Center from where
we were yesterday
that is like open mic night you can just
come and say whatever you want tell us
what you like what you don't like ask
questions it's completely open we just
want your feedback for whether or not
we're meeting your needs in Mac OS 10
finally tomorrow night starting at 7:00
back at Apple in the piano bar I think
it says 6:00 there we will have a
firewire and USB plug fest so there's a
big apple party at the Apple Campus
tomorrow come on by the piano bar it's
in building 4 right out front by the
parking lot that's where we'll be
bringing your firewire device or your
USB device you can hang out with
firewire engineers if you do have bugs
we will have all the engineers there
with the source code we'll try to look
at things as well as we can between
taking big jokes and beer
you