NOTES:
  - all numbers are in hex unless otherwise specified
  - all multibyte values are big endian unless otherwise specified
  - a command expects no data to be returned from camera
  - a query expects data from camera


KNOWN COMMANDS:

  33000d0t 0000001A - set time and date display settings (command)
    d - 0=dd/mm/yy, 1=mm/dd/yy, 2=yy/mm/dd
    t - 0=12hour, 1=24hour

  34000u00 0000001A - set macro units (command)
    u - 0=cm, 1=inch

  3500000f 0000001A - set default flash setting (command)
    f - 0=auto, 1=fill, 2=none

  4100bbbb 0000001A - set baud rate (command)
    bbbb - 9600=9600baud (binary coded decimal), 
	   1920=19200,
	   3840=38400,
	   5760=57600,
	   1152=115200,
	   2304=230400

  42000000 0000001A - set album names (command)
  extra data to camera:
    80414C42 554D2031 00000000 00000000 414C4255 4D203200 00000000 00000041
    4C42554D 20330000 00000000 0000414C 42554D20 34000000 00000000 00414C42
    554D2035 00000000 00000000 414C4255 4D203600 00000000 00000041 4C42554D
    20370000 00000000 0000414C 42554D20 38000000 00000000 0000043F 01000027
    300000EF 16C04BCF 17000000 00B7270F 000D001C 6202007B 4BEF1608 7F052AAF
    170F0000 00B7271C 6202003F 011E7F97 46AF170F 000000B7 27D00000 001C6202
    009C4670 7F28006F 010F0000 00B727D0 007D16F6 BFD714D6 14467F89 40487F48
    7F2841BF 173F0127 30F7BFC2 40907F28 007716F6 BF110100 00010000 00A8A17F
    000B
 
  43000000 0000001A - get album names (query)

  450c0000 0a00001A - get number of files (query)
    c - 0=memory, 1=card
    a - 0=no album, 1..8=album
  returns:
    byte   zero1[2];
    uint16 nfiles;     
    byte   zero2[12];
    uint8  checksum;

  49000a00 0000001A - set album (command)
    a - 0=no album, 1..8=album number

  4A0c0000 0a00001A - get multiple filenames (query)
    c - 0=memory, 1=card
    a - 0=no album, 1..8=album
  returns:
    uint16 nfiles;    
    dc120_file file[12];
    byte   zero[14];
    uint8  checksum;
  where dc120_file is:
    char   name[12];
    byte   data[4];
    uint32 size;      

  5401nnnn 0a00001A - get file data (query)
  6401nnnn 0a00001A - get file data (from card)
    nnnn - picture number
    a - 0=no album, 1..8 album number

  5501nnnn 0a00001A - get image info (query)
  6501nnnn 0a00001A - get image info (from card)
    nnnn - picture number
    a - 0=no album, 1..8 album number

  5601nnnn 0a00001A - get thumbnail image (query)
  6601nnnn 0a00001A - get thumbnail image (from card)
    nnnn - picture number
    a - 0=no album, 1..8 album number

  71000q00 0000001A - set storage quality (command)
    q - 0=uncompressed, 1=best, 2=better, 3=good

  72000f00 0000001A - set flash setting (command)
    f - 0=auto, 1=fill, 2=none

  73000f00 0000001A - set focus setting (command)
    f - 0=multi-spot, 1=single-spot, 2=macro

  74000t00 0000001A - set self timer (command)
    t - 0=off, 1=on

  7500ssss ssss001A - set time and date (command)
    ssssssss - number of half seconds since 19940101 00:00
    00000034 - 19940101 00:00
    03C26734 - 19950101 00:00
    0784CE34 - 19960101 00:00
    0B49D834 - 19970101 00:00
    0F0C3F34 - 19980101 00:00
    12CEA634 - 19990101 00:00
    12CEA6AC - 19990101 00:01
    12CEC254 - 19990101 01:00
    12D14934 - 19990102 00:00
    13206334 - 19990201 00:00
    16910D34 - 20000101 00:00
    1A561734 - 20010101 00:00

  78000z00 0000001A - zoom setting (command)
    z - 0=37mm, 1=46mm, 2=61mm, 3=77mm, 4=92mm, 5=100mm, 6=111mm

  7B00nnnn 0000001A - erase picture (command)
  7B01nnnn 0000001A - erase picture (from card)
    nnnn - picture number

  7C000000 0000001A - take picture (command)

  7F000000 0000001A - get id and settings (query)
    byte unknown[4];
    byte unknown[4];

    byte unknown;
    byte unknown;
    byte sleepTimeout;    // seconds, timeouts could be mixed up
    byte lcdTimeout;	  // seconds

    byte date[4];         // half seconds since 19940101

    byte focuszoom;	  // lsn: 0=wide angle, 6=maximum zoom
			  // msn: 0=three point, 1=one point
			  // 0x27 = macro mode
    byte unknown;
    byte unknown;
    byte compression;     // 0=uncomp, 1=best, 2=better, 3=good 

    byte flash;           // 0=auto, 1=always, 2=never 
    byte exposureSetting; // 0=none, 1..4=+0.5..+2.0, 81..84=-0.5..-2.0
    byte unknown;
    byte manualExposure;  // 0=auto, 1=manual

    byte shutterSpeed[4]; // in 10us units

    byte unknown;
    byte timer;           // 0=off, 1=on
    byte card;		  // 0=none, 0x80=16MB card
    byte unknown;

    byte dateSetting;	  // 0=dd/mm/yy, 1=mm/dd/yy, 2=yy/mm/dd
    byte timeSetting;	  // 0=12hour, 1=24hour
    byte macroUnits;	  // 0=cm, 1=inch
    byte unknown;

    byte unknown[20];

    byte cardpics[2];
    byte card2[8];
    byte card3[11];
    char cardname[11];
    byte card4[2];
    char name[30];
    byte unknown;
    byte unknown;
    uint16 memoryAlbums;  // number of albums in use in main memory
    uint16 cardAlbums;    // number of albums in use in card
    byte zeros[130];
    uint8 checksum;


  8200tt00 0000001A - set camera power timeout (command)
    tt - 3C=1minute, 78=2minute

  8201tt00 0000001A - set LCD sleep timeout (command)
    tt - 3C=1minute, 78=2minute

  8B000m00 0000001A - set manual exposure (command)
    m - 0=auto, 1=manual (shutter speed set with command 81)

  8000ee00 0000001A - update exposure compensation (command)
		      (do not use with manual shutter speed)
    ee - 00=none, 01=+0.5, 02=+1.0, 03=+1.5, 04=+2.0, 
		  81=-0.5, 82=-1.0, 83=-1.5, 84=-2.0

  810000ss ssss001A - set manual shutter speed (command)
		      (do not use with exposure compensation)
    ssssss - 0000C8=1/500, (units of 10us)
	     0000E9=1/430,
	     000107=1/380,
	     00012F=1/330,
	     00014D=1/300,
	     000190=1/250,
	     0001BC=1/225,
	     000320=1/125,
	     000683=1/60,
	     000D05=1/30,
	     001A0B=1/15,
	     0030D4=1/8,
	     0061A8=1/4,
	     00C350=1/2,
	     0186A0=1sec
	     030D40=2
	     061A80=4
	     0C3500=8
	     186A00=16

  96000000 0000001A - ??? (command)

  97000000 0000001A - ??? (command)

  99000000 0000001A - ??? (query)
(something to do with camera memory)
  extra data to camera:
    805C5043 43415244 5C444331 3230494D 475C414C 42554D2E 43544C00 00000000
    00000000 00000000 00000000 00000000 00000000 00000000 0000000E
  or:
    805C4D45 4D4F5259 5C414C42 554D2E43 544C0000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000 00000000 00000000 00000023
  or:
    805C4D45 4D4F5259 00000000 00000000 00000000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000 00000000 00000000 0000005D
(something to do with memory card)
    805C5043 43415244 5C444331 3230494D 475C414C 42554D2E 43544C00 00000000
    00000000 00000000 00000000 00000000 00000000 00000000 0000000E
  or:
    805C4D45 4D4F5259 5C414C42 554D2E43 544C0000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000 00000000 00000000 00000023
  or:
    805C5043 43415244 5C444331 3230494D 47000000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000 00000000 00000000 00000070

  9A000000 0000001A - ??? (query)
(something to do with camera memory)
  extra data to camera:
    805C5043 43415244 5C444331 3230494D 475C414C 42554D2E 43544C00 00000000
    00000000 00000000 00000000 00000000 00FFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    FF00000E
  or:
    805C4D45 4D4F5259 5C414C42 554D2E43 544C0000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000 00FFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    FF000023
(something to do with memory card)
    805C5043 43415244 5C444331 3230494D 475C414C 42554D2E 43544C00 00000000
    00000000 00000000 00000000 00000000 00FFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    FF00000E
  or:
    805C4D45 4D4F5259 5C414C42 554D2E43 544C0000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000 00FFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    FF000023

  9E000000 0000001A - set user name (command)
  extra data to camera:
    80436872 69732053 74756468 6F6C6D65 20283738 30292034 38342D38 39343200
    00000000 00000000 00000000 00000000 00000000 00000000 0000001A


ACK/NAK:

  00 - camera's acknowledgement of 0xD2 from computer

  D1 - command acknowledge from camera

  D2 - data acknowledge to camera

  E1 - line break acknowledge from camera

  E3 - repeat last data to camera

  E4 - abort transfer
