Richard Sewell
/
ucam
This is the code we showed at Uncraftivism
ucam.h@2:01115080f6da, 2009-12-14 (annotated)
- Committer:
- jarkman
- Date:
- Mon Dec 14 08:28:21 2009 +0000
- Revision:
- 2:01115080f6da
- Parent:
- 0:57f4fdadc97f
Who changed what in which revision?
User | Revision | Line number | New 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 | }; |