This is the code we showed at Uncraftivism

Dependencies:   mbed

Committer:
jarkman
Date:
Mon Dec 14 08:28:21 2009 +0000
Revision:
2:01115080f6da
Parent:
0:57f4fdadc97f

        

Who changed what in which revision?

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