Host Interface Spec, 1.0, November 10, 1998

p 5: Comm Flag

    Pod Receive Mode and Host Receive Mode bit fields in Comm Flag are
    undocumented, except that if Comm Flag is 0x00, then polled
    transport mode is used.

p 5: Checksum

    "Checksum is calculated on all bytes, using bytewise modulo-2
    addition."

    The checksum is actually modulo-256 -- it's the lower 8 bits of
    the sum of the bytes.  A mod-2 sum would be the lower 1 bit.

p 10: CPD message structure.  

    A checksum field is indicated, but does not appear to be
    transmitted except in the Beacon phase.

p 22: PNameTypeValueStruct.

    The typedef PNameType is used to declare the Type field, but
    PNameType is never defined; probably ValueType (p 21) is what was
    meant.

p 27: GetProductInfo

    "...you can request all product information by sending a PName
    value of NULL, in which case all ProductInfo parameters are
    returned."

    This is incorrect -- sending a pname of NULL causes the camera to
    return an empty list.  To request all parameters, omit the pname
    parameter entirely.

    The same treatment of NULL applies to some other commands such as
    GetFileList: don't send zeros, omit the parameter entirely.  On
    other commands, such as GetFileTag, the opposite is true, and the
    literal NULL must be sent.  Go figure.

pp 42-48: FileNameStruct

    In the File Commands section, a FileNameStruct is described as
    being "the DOSName and path" specifying a file.  This is
    incomplete, as FileNameStruct should include the drive number as
    well.  In other words, a FileNameStruct is the first three members 
    of the ResFileItem structure:

        typedef struct
        {
          SInteger DriveNo;
          String   PathName;
          DOSName  DOSName;
        } FileNameStruct;

p 42: GetFileList

    If a ListOrder of 1 (ascending) or 2 (descending) is specified,
    the entire list of images is returned, regardless of whether a
    FileNameStruct was specified.

    GetFileList will not return files in the SYSTEM directory.

p 46: EraseFile

    Discovered this one while implementing the USB delall command:
    in sending parameters to the EraseFile command, the FileNameStruct 
    must be followed by a UInteger (I send zeros -- don't know what
    other values will work).  This is required only on USB; the NSS
    version will work without the extra UInteger.  Happily, though, if 
    you send the extra UInteger across the NSS protocol, the command
    still works.

Undefined (but probably defined in the Digita Scripting SDK doco):

*   Interpretations of GetProductInfo fields, p 27.

*   Meanings of bits in VendorStatus (3rd) field of GetCameraStatus, p
    30.

*   Interpretations of GetCameraState fields, p 35. (Same as
    GetCameraCapabilities?)

*   How to capture an image.  Specifically, how does the camera need
    to be set up in order for the BeginCapture command to take a
    photo?

-- answer: Capture mode must be set first: single, burst, or time lapse.  
	   This is done with SetCameraState(mcap,flag);
	   Where flag is 0 for single, 1 for burst, and 2 for time lapse. 
	   After that StartCapture() starts the sequence. 
	   In HIS it's stated that StartCapture() doesn't require any 
	   parameters. This is wrong, without giving any parameters  
	   the camera returns error code 5, invalid parameters. 
	   According to the data dumps of Windows software, 
	   4 bytes (value of 0x00) are sent along with the StartCapture(). 
	   By adding those other bytes it _finally_ works. 
  

Oddities:

*   The camera sometimes sends more data than is required by its
    response to the message, even if it means sending an extra poll
    packet.  I have observed this in my camera weth the GetFileData
    command.  When asked for a particular thumbnail, the camera sends
    9636 bytes even though the thumbnail size is only 8640.  The extra 
    data following the thumbnail is zeros.  The camera sends 9 packets 
    of length 1021 followed by a packet of length 451.  The last
    packet consists entirely of zeros.

*   On the GetFileData command, the path and filename can be converted 
    to lower-case and the command still succeeds.  However, on the
    GetFileTag command, if the path and filename are converted to
    lower-case, the command fails with a kODSInvalidFileType error.
