As of Monday morning, so this is the code we showed at Uncraftivism.

Dependencies:   mbed

Committer:
voidnoise
Date:
Mon Dec 14 08:25:07 2009 +0000
Revision:
1:5d20e168f467
Parent:
0:da6a22da11a2

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
voidnoise 0:da6a22da11a2 1
voidnoise 0:da6a22da11a2 2 // This is a class for talking to the 4DSystems uCam JPEG camera module
voidnoise 0:da6a22da11a2 3 // from an mbed (mbed.org)
voidnoise 0:da6a22da11a2 4
voidnoise 0:da6a22da11a2 5 // Datasheet:
voidnoise 0:da6a22da11a2 6 // http://www.4dsystems.com.au/downloads/micro-CAM/Docs/uCAM-DS-rev2.pdf
voidnoise 0:da6a22da11a2 7
voidnoise 0:da6a22da11a2 8
voidnoise 0:da6a22da11a2 9 // Commands:
voidnoise 0:da6a22da11a2 10 #define UCAM_INITIAL 0xAA01
voidnoise 0:da6a22da11a2 11 #define UCAM_GET_PICTURE 0xAA04
voidnoise 0:da6a22da11a2 12 #define UCAM_SNAPSHOT 0xAA05
voidnoise 0:da6a22da11a2 13 #define UCAM_SET_PACKAGE_SIZE 0xAA06
voidnoise 0:da6a22da11a2 14 #define UCAM_RESET 0xAA08
voidnoise 0:da6a22da11a2 15 #define UCAM_DATA 0xAA0A
voidnoise 0:da6a22da11a2 16 #define UCAM_SYNC 0xAA0D
voidnoise 0:da6a22da11a2 17 #define UCAM_ACK 0xAA0E
voidnoise 0:da6a22da11a2 18 #define UCAM_ACK 0xAA0E
voidnoise 0:da6a22da11a2 19 #define UCAM_NAK 0xAA0F
voidnoise 0:da6a22da11a2 20 #define UCAM_LIGHT 0xAA13
voidnoise 0:da6a22da11a2 21
voidnoise 0:da6a22da11a2 22
voidnoise 0:da6a22da11a2 23 // Picture types;
voidnoise 0:da6a22da11a2 24 #define UCAM_PIC_TYPE_SNAPSHOT 0x01 // gets the pic taken with the SNAPSHOT command
voidnoise 0:da6a22da11a2 25 // in which case, the actualy type of the picture is the one specified by the SNAPSHOT
voidnoise 0:da6a22da11a2 26
voidnoise 0:da6a22da11a2 27 #define UCAM_PIC_TYPE_RAW_PREVIEW 0x02 // gets the current pic, doesn't require the SNAPSHOT command
voidnoise 0:da6a22da11a2 28 #define UCAM_PIC_TYPE_JPEG_PREVIEW 0x05 // gets the current pic, doesn't require the SNAPSHOT command
voidnoise 0:da6a22da11a2 29
voidnoise 0:da6a22da11a2 30
voidnoise 0:da6a22da11a2 31
voidnoise 0:da6a22da11a2 32 #define UCAM_COLOUR_2_BIT_GREY 0x01 //2-bit Gray Scale (RAW, 2-bit for Y only) 01h
voidnoise 0:da6a22da11a2 33 #define UCAM_COLOUR_4_BIT_GREY 0x02 //4-bit Gray Scale (RAW, 4-bit for Y only) 02h
voidnoise 0:da6a22da11a2 34 #define UCAM_COLOUR_8_BIT_GREY 0x03 // (RAW, 8-bit for Y only)
voidnoise 0:da6a22da11a2 35 #define UCAM_COLOUR_8_BIT_COLOUR 0x04 // (RAW, 332(RGB))
voidnoise 0:da6a22da11a2 36
voidnoise 0:da6a22da11a2 37 #define UCAM_COLOUR_12_BIT_COLOR 0x05 // (RAW, 444(RGB)) 05h
voidnoise 0:da6a22da11a2 38 #define UCAM_COLOUR_16_BIT_COLOR 0x06 //(RAW, 565(RGB)) 06h
voidnoise 0:da6a22da11a2 39 #define UCAM_COLOUR_JPEG 0x07
voidnoise 0:da6a22da11a2 40
voidnoise 0:da6a22da11a2 41 #define UCAM_COLOUR_NOT_SET 0xFF
voidnoise 0:da6a22da11a2 42
voidnoise 0:da6a22da11a2 43
voidnoise 0:da6a22da11a2 44 // Sizes for raw images
voidnoise 0:da6a22da11a2 45 #define UCAM_RAW_SIZE_80x60 0x01
voidnoise 0:da6a22da11a2 46 #define UCAM_RAW_SIZE_160x120 0x03
voidnoise 0:da6a22da11a2 47 #define UCAM_RAW_SIZE_320x240 0x05
voidnoise 0:da6a22da11a2 48 #define UCAM_RAW_SIZE_640x480 0x07
voidnoise 0:da6a22da11a2 49 #define UCAM_RAW_SIZE_128x128 0x09
voidnoise 0:da6a22da11a2 50 #define UCAM_RAW_SIZE_128x96 0x0B
voidnoise 0:da6a22da11a2 51
voidnoise 0:da6a22da11a2 52 // Sizes for jpeg images
voidnoise 0:da6a22da11a2 53
voidnoise 0:da6a22da11a2 54 #define UCAM_JPEG_SIZE_80x64 0x01
voidnoise 0:da6a22da11a2 55 #define UCAM_JPEG_SIZE_160x128 0x03
voidnoise 0:da6a22da11a2 56 #define UCAM_JPEG_SIZE_320x240 0x05
voidnoise 0:da6a22da11a2 57 #define UCAM_JPEG_SIZE_640x480 0x07
voidnoise 0:da6a22da11a2 58
voidnoise 0:da6a22da11a2 59 // Snapshot types
voidnoise 0:da6a22da11a2 60 #define UCAM_SNAPSHOT_JPEG 0x00
voidnoise 0:da6a22da11a2 61 #define UCAM_SNAPSHOT_RAW 0x01
voidnoise 0:da6a22da11a2 62
voidnoise 0:da6a22da11a2 63 #ifndef FILE_WRITE_STRING
voidnoise 0:da6a22da11a2 64 #define FILE_WRITE_STRING "w" // value for mbed - will be defined earlier on Win
voidnoise 0:da6a22da11a2 65 #define FILE_READ_STRING "r"
voidnoise 0:da6a22da11a2 66 #endif
voidnoise 0:da6a22da11a2 67
voidnoise 0:da6a22da11a2 68 class Frame;
voidnoise 0:da6a22da11a2 69
voidnoise 0:da6a22da11a2 70 #include "SerialBuffered.h"
voidnoise 0:da6a22da11a2 71
voidnoise 0:da6a22da11a2 72 class UCam
voidnoise 0:da6a22da11a2 73 {
voidnoise 0:da6a22da11a2 74 public:
voidnoise 0:da6a22da11a2 75
voidnoise 0:da6a22da11a2 76 UCam(PinName tx, PinName rx);
voidnoise 0:da6a22da11a2 77
voidnoise 0:da6a22da11a2 78 void doStartup();
voidnoise 0:da6a22da11a2 79 int doConfig( bool raw, uint8_t colourType, uint8_t imageSize );
voidnoise 0:da6a22da11a2 80
voidnoise 0:da6a22da11a2 81 Frame *doGetRawPictureToBuffer( uint8_t picType );
voidnoise 0:da6a22da11a2 82 int doGetJpegPictureToFile( uint8_t picType, char* filename );
voidnoise 0:da6a22da11a2 83
voidnoise 0:da6a22da11a2 84 private:
voidnoise 0:da6a22da11a2 85
voidnoise 0:da6a22da11a2 86 int doConnect();
voidnoise 0:da6a22da11a2 87 int fixConfusion();
voidnoise 0:da6a22da11a2 88 void sendCommand( int command, int p1, int p2, int p3, int p4 );
voidnoise 0:da6a22da11a2 89 int doCommand( int command, int p1, int p2, int p3, int p4 );
voidnoise 0:da6a22da11a2 90 int doReset();
voidnoise 0:da6a22da11a2 91 int doSyncs();
voidnoise 0:da6a22da11a2 92 int doSnapshot( uint8_t snapshotType );
voidnoise 0:da6a22da11a2 93
voidnoise 0:da6a22da11a2 94 void sendAck();
voidnoise 0:da6a22da11a2 95 void sendAckForPackage( uint16_t p);
voidnoise 0:da6a22da11a2 96 void sendAckForRawData( ) ;
voidnoise 0:da6a22da11a2 97 int readAckPatiently( uint16_t command );
voidnoise 0:da6a22da11a2 98 int readAck( uint16_t command );
voidnoise 0:da6a22da11a2 99 int readSync();
voidnoise 0:da6a22da11a2 100 uint32_t readData();
voidnoise 0:da6a22da11a2 101 int readBytes(uint8_t *bytes, int size );
voidnoise 0:da6a22da11a2 102
voidnoise 0:da6a22da11a2 103 uint16_t readUInt16();
voidnoise 0:da6a22da11a2 104 int readPackage( FILE *jpgFile, uint16_t targetPackage );
voidnoise 0:da6a22da11a2 105
voidnoise 0:da6a22da11a2 106
voidnoise 0:da6a22da11a2 107
voidnoise 0:da6a22da11a2 108 private:
voidnoise 0:da6a22da11a2 109 SerialBuffered camSerial;
voidnoise 0:da6a22da11a2 110 //Serial camSerial;
voidnoise 0:da6a22da11a2 111 uint8_t lastCommand;
voidnoise 0:da6a22da11a2 112
voidnoise 0:da6a22da11a2 113 int m_confused;
voidnoise 0:da6a22da11a2 114
voidnoise 0:da6a22da11a2 115 uint8_t packageBody[512];
voidnoise 0:da6a22da11a2 116
voidnoise 0:da6a22da11a2 117 bool m_raw;
voidnoise 0:da6a22da11a2 118 uint8_t m_colourType;
voidnoise 0:da6a22da11a2 119 uint8_t m_imageSize;
voidnoise 0:da6a22da11a2 120
voidnoise 0:da6a22da11a2 121 uint8_t m_bitsPerPixel;
voidnoise 0:da6a22da11a2 122 uint16_t m_width;
voidnoise 0:da6a22da11a2 123 uint16_t m_height;
voidnoise 0:da6a22da11a2 124
voidnoise 0:da6a22da11a2 125
voidnoise 0:da6a22da11a2 126
voidnoise 0:da6a22da11a2 127 };