Info on sipix camera model SNAP chip MX88L510UC Version 0.31 update 26-03-2005 dd. 23-03-2005 ------------------------------------------------------- 1. USB command info 2. Frame header info 3. Some short usb logs 4. lsusb -vv output ------------------------------------------------------- 1. USB command info This is a first attempt to collect some info about the mx88l510uc register values, use as is, at your own risk, see also libgphoto2 camlib sipix blink2.txt file byte bRequest type 00 c0 -- write/read command bRequest wValue wIndex wLength data byte 01 02-03 04-05 06-07 04 01 00 01 15 -- iso video mode? 03 00 01 15 -- still camera mode? 07 00 00 02 .. .. -- size of jpeg frame c0 12 6e 11 ac 0a 08 03 00 02 -- get number of pixtures 0a 03 00 08 0-4, 3-7 -- mem start, length 0d 03 00 01 -- get directory 0e 03 00 01 -- capture picture 011 03 00 01 -- still camera, delete last image 12 03 00 01 -- still camera, delete all images 13 00 00 01 15 -- resync ? 14 03 00 01 15 -- mode 320 x 240 15 03 00 01 15 -- mode 640 x 480 16 03 00 01 -- read data in camera memory 17 03 3d 01 15 -- data read, value lower when more light 4e 61 18 03 00 06 06 00 00 02 0a 18 -- read string, version info? 19 03 (val) 01 -- flare 1a 03 (val) 01 -- still quality 1b 03 ff(val) 01 15 -- compression value? 1d 03 63(val) 01 15 -- white balance? downloading pictures from cam with sipix cam explorer (usb mass storage) included from blink2.txt ------------------------------------------------------ Blink2 Protocol (gphoto2 cvs 25-03-2005) Mostly control messages... (control bRequest, wValue, wIndex -> buf[wLength]) Get Firmware ID: control read 0x18, 0x03, 0x00 -> buf[6] Gets the firmware id. Number of Pictures: control read 0x8, 0x03, 0x00 -> buf[2] (high, low byte) Gets number of pictures. Get Directory: control read 0x0d, 0x03, 0x00 -> buf[1] bulk read (((8*(1+numpics))+0x3f) & ~0x3f) bytes. Buffer has now: i = 0 .. numpics: buf[8*(i+1)] - movie flag buf[8*(i+1)+5 ... 7] - 3 bytes start, MSB first buf[8*(i+1)+13 ... 15] - 3 bytes end, MSB first Gets the directory entries. Get Memory: Prepare buffer as: buf[0..4] start (MSB first) buf[5..7] length (MSB first) control write 0x0a, 0x03, 0x00, buf[8] bulk read (length) Gets the memory (imagedata) as specified. Capture Picture: control read 0x0e, 0x03, 0x00 -> buf[1] do control read 0x16, 0x03, 0x00 -> buf[1] while buf[0] == 0 Afterwards the image is in the camera memory. Delete All Images: control read 0x12, 0x03, 0x00 -> buf[1] All images on the camera are deleted. Delete Last Image: control read 0x11, 0x03, 0x00 -> buf[1] Last image on camera is deleted. Start Video: control read 0x4, 0x01, 0x00 -> buf[1] This starts the ISO transfers I suspect? Current Video Position (??): control read 0x7, 0x00, 0x00 -> buf[2] Unclear, I think it returns amount of data read in buf[2]. Initialize Still Mode: control read 0x4, 0x03, 0x00 -> buf[1] Hmm (?) / Resync Routine: control read 0x13, 0x0, 0x00 -> buf[1] Bandwith Allocate(type): 320x240: control read 0x14, 0x0, 0x00 -> buf[1] 640x480: control read 0x15, 0x0, 0x00 -> buf[1] I think this is for ISO transfers, started by 0x04,0x01. You need to change the interface accordingly. Set Exposure Count(value): control read 0x17, 0x03, value -> buf[1] Unclear. Set Compression(value): control read 0x1b, 0x03, value -> buf[1] Unclear. Set Whitebalance(value): control read 0x1d, 0x03, value -> buf[1] Unclear. Set Still Quality(value): control read 0x1a, 0x03, value -> buf[1] Unclear. Set Flare(value) control read 0x19, 0x03, value -> buf[1] Unclear. Internal Driver Properties: ID Name Range Default 0x01 Brightness 0-50 43 0x03 Sharpness 0-255 20 0x08 Saturation 0-128 128 0x0b Whitebalance 0-7 7 0x0c Gamma 0-11 9 0x0d Backlight 0-1 0 0x0e Contrast ? 0-14 7 ------------------------------------------------------- 2. Frame header info The header frame of the mx88l510uc is a jpeg one byte nr. val description 00 01: ff d8 --Start of image (SOI) marker 02 03: ff e0 --JFIF marker 04 05: 00 10 -- length 2 bytes 06 07 08 09 0a: 4a 46 49 46 00 -- five bytes identifyer 0b 0c: 01 01 -- version major, minor 0d: 00 -- no units 0e 0f: 00 01 --Xdensity 10 11: 00 01 --Ydensity 12: 00 -- no thumbnail 13: 00 -- no thumbnail 14 15: ff db --define quantization table marker 16 17: 00 84 --number of bytes xx xx: ff c4 -- define huffman table marker yy yy: ff c0 -- ??define start of frame maker ww ww: ff da -- ??start of scan marker vv vv: ff fe -- ??comment marker zz zz: ff d9 -- end of image (EOI) marker 00000000: ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00000010: 00 01 00 00 ff db 00 84 00 01 01 01 01 01 01 01 00000020: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00000030: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00000040: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00000050: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00000380: 37 ab 3e f6 5d d1 a3 01 be b8 31 59 9d 28 53 94 00000390: 95 56 9f bf 51 27 52 a5 a8 c6 34 ae 9c 93 5c 8f 000003a0: 96 2a 11 8c 3d bc 2a 29 c2 31 73 84 67 14 b0 7c 000003b0: bb c9 be c9 ef ae ba 3e ba 36 af 7b 5f 5d 15 b5 000003c0: fc bf 96 e1 06 e3 24 87 20 67 71 5c 0d bd 7e f7 000003d0: 40 06 07 5c f3 d5 47 4a fd 11 be f1 65 a5 8c 77 000003e0: 13 5d dc cd 6c 89 23 ca ef 32 24 61 36 48 d9 2e 000003f0: f9 21 51 48 c3 bc 85 72 e8 e1 c6 c9 11 ab e7 IsoPacket[23].Offset = 23529 IsoPacket[23].Length = 549 IsoPacket[23].Status = 00000000 00000000: 71 bc 41 85 c3 51 95 5c 56 22 54 23 0a 0a 53 75 00000010: 29 be 4a 31 51 bc aa 4a af b5 71 82 8f 2c bd e9 000001b0: b1 79 71 76 cb 14 f1 b8 13 b2 59 47 61 08 55 46 000001c0: 8e 50 ea ee 02 cb 93 90 c8 17 f9 bb 38 fa 77 f1 000001d0: 06 6b 5a a4 38 7f 82 b0 58 3a 13 f6 73 c3 d7 cd 000001e0: 71 b8 fc cf 92 35 2a ce 50 f6 94 f0 f2 cb 9a 94 000001f0: 7d c9 fb 38 fb 5d 2a 5a 51 9c e5 14 fe bd f1 25 00000200: 27 7f 65 46 4f 45 ca ea 34 93 57 76 7a 73 dd fa 00000210: 75 76 77 d0 ff d9 00 00 00 00 00 00 00 52 a5 5f 00000220: de 55 4d d4 a9 IsoPacket[24].Offset = 24552 IsoPacket[24].Length = 0 IsoPacket[24].Status = 00000000 ------------------------------------------------------- 3. Some short usb logs [177 ms] >>> URB 1 going down >>> -- URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: 00000000: 12 01 10 01 ff ff ff 08 77 0c 10 10 00 01 01 02 00000010: 00 01 SetupPacket = 00000000: 80 06 00 01 00 00 12 00 [183 ms] >>> URB 2 going down >>> -- URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: [194 ms] <<< URB 2 coming back <<< 00000000: 09 02 e5 00 01 01 04 c0 f2 09 04 00 00 05 ff ff 00000010: ff 05 07 05 81 01 00 00 01 07 05 82 01 00 00 01 00000020: 07 05 83 02 40 00 00 07 05 04 02 40 00 00 07 05 00000030: 85 03 08 00 0a 09 04 00 01 05 ff ff ff 05 07 05 SetupPacket = 00000000: 80 06 00 02 00 00 40 00 [194 ms] >>> URB 3 going down >>> -- URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE: [226 ms] <<< URB 3 coming back <<< 00000000: 09 02 e5 00 01 01 04 c0 f2 09 04 00 00 05 ff ff 00000010: ff 05 07 05 81 01 00 00 01 07 05 82 01 00 00 01 00000020: 07 05 83 02 40 00 00 07 05 04 02 40 00 00 07 05 00000030: 85 03 08 00 0a 09 04 00 01 05 ff ff ff 05 07 05 00000040: 81 01 ff 03 01 07 05 82 01 40 00 01 07 05 83 02 00000050: 40 00 00 07 05 04 02 40 00 00 07 05 85 03 08 00 00000060: 0a 09 04 00 02 05 ff ff ff 05 07 05 81 01 80 03 00000070: 01 07 05 82 01 40 00 01 07 05 83 02 40 00 00 07 00000080: 05 04 02 40 00 00 07 05 85 03 08 00 0a 09 04 00 00000090: 03 05 ff ff ff 05 07 05 81 01 00 03 01 07 05 82 000000a0: 01 40 00 01 07 05 83 02 40 00 00 07 05 04 02 40 000000b0: 00 00 07 05 85 03 08 00 0a 09 04 00 04 05 ff ff 000000c0: ff 05 07 05 81 01 00 02 01 07 05 82 01 40 00 01 000000d0: 07 05 83 02 40 00 00 07 05 04 02 40 00 00 07 05 000000e0: 85 03 08 00 0a SetupPacket = 00000000: 80 06 00 02 00 00 e5 00 [226 ms] >>> URB 4 [287 ms] Interface[0]: AlternateSetting = 0 [287 ms] >>> URB 5 [292 ms] 06 00 00 02 0a 18 : c0 18 03 00 00 00 06 00 [9353 ms] >>> URB 6 [9451 ms] Interface: AlternateSetting = 1 [9452 ms] >>> URB 7 [9456 ms] 15 : c0 1d 03 00 63 00 01 00 [9456 ms] >>> URB 8 [9460 ms] 15 : c0 17 03 00 3d 00 01 00 [9460 ms] >>> URB 9 going down 15 SetupPacket : c0 1b 03 00 ff 00 01 00 [9465 ms] >>> URB 10 [9469 ms] 15 SetupPacket : c0 14 03 00 00 00 01 00 [9712 ms] >>> URB 11 [9716 ms] 15 SetupPacket : c0 04 01 00 00 00 01 00 [10112 ms] >>> URB 12[10117 ms] 76 11 SetupPacket : c0 07 00 00 00 00 02 00 [10168 ms] >>> URB 13 Interface: AlternateSetting = 0 [10323 ms] <<< URB 14 Interface: AlternateSetting = 1 [10323 ms] >>> URB 15 00000000: 15 SetupPacket : c0 1d 03 00 63 00 01 00 [10327 ms] >>> URB 16 [10331 ms] 15 SetupPacket : c0 17 03 00 3d 00 01 00 [10331 ms] >>> URB 17 [10335 ms] 15 SetupPacket : c0 1b 03 00 ff 00 01 00 [10336 ms] >>> URB 18 [10340 ms] 15 SetupPacket : c0 14 03 00 00 00 01 00 [10533 ms] >>> URB 19 [10537 ms] 15 SetupPacket : c0 04 01 00 00 00 01 00 [10933 ms] >>> URB 20 [10939 ms] 6e 11 : c0 07 00 00 00 00 02 00 [10958 ms] >>> URB 21 _FUNCTION_RESET_PIPE: [endpoint 0x00000081] [10958 ms] [10958 ms] >>> URB 22 URB_FUNCTION_GET_CURRENT_FRAME_NUMBER: [10958 ms] FrameNumber = 0008c03c [10958 ms] >>> URB 23 URB_FUNCTION_ISOCH_TRANSFER: [endpoint 0x00000081] StartFrame = 0008c046 NumberOfPackets = 00000020 IsoPacket[0].Offset = 0 IsoPacket[0].Length = 0 IsoPacket[1].Offset = 1023 UrbLink = 00000000 [10958 ms] >>> URB 24 URB_FUNCTION_ISOCH_TRANSFER: 00000020 [11000 ms] <<< URB 23 <<< StartFrame = 0008c046 NumberOfPackets = 00000020 [11002 ms] >>> URB 25 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11032 ms] <<< URB 24 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11034 ms] >>> URB 26 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11064 ms] <<< URB 25 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11066 ms] >>> URB 27 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11096 ms] <<< URB 26 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11098 ms] >>> URB 28 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11128 ms] <<< URB 27 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11129 ms] >>> URB 29 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11160 ms] <<< URB 28 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11161 ms] >>> URB 30 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11192 ms] <<< URB 29 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11193 ms] >>> URB 31 URB_FUNCTION_ISOCH_TRANSFER: [11224 ms] <<< URB 30 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11225 ms] >>> URB 32 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11256 ms] <<< URB 31 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11258 ms] >>> URB 33 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11288 ms] <<< URB 32 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11289 ms] >>> URB 34 URB_FUNCTION_VENDOR_DEVICE: [11290 ms] >>> URB 35 URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 [11293 ms] <<< URB 34 15 : c0 13 00 00 00 00 01 00 [11303 ms] >>> URB 36 [11307 ms] c0 12 : c0 07 00 00 00 00 02 00 [11321 ms] <<< URB 33 coming back <<< -- URB_FUNCTION_ISOCH_TRANSFER: NumberOfPackets = 00000020 IsoPacket[18].Offset = 18414 IsoPacket[18].Length = 1023 IsoPacket[18].Status = 00000000 -------------------------------------------------------------------------- 4. lusb -vv output Bus 002 Device 002: ID 0c77:1010 Sipix Group, Ltd Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 255 Vendor Specific Subclass bDeviceProtocol 255 Vendor Specific Protocol bMaxPacketSize0 8 idVendor 0x0c77 Sipix Group, Ltd idProduct 0x1010 bcdDevice 1.00 iManufacturer 1 SiPix iProduct 2 StyleCam RAVE/SNAP DSC iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 229 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 4 Configuration bmAttributes 0xc0 Self Powered MaxPower 484mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 1 2 3 4 bNumEndpoints 5 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 5 Interface Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes 0 wMaxPacketSize 0x03ff 1x 1023 bytes 1 wMaxPacketSize 0x0380 1x 896 bytes 2 wMaxPacketSize 0x0300 1x 768 bytes 3 wMaxPacketSize 0x0200 1x 512 bytes 4 bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes 0 wMaxPacketSize 0x0040 1x 64 bytes 1 2 3 4 bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x85 EP 5 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10