ben winstone
/
ucam
As of Monday morning, so this is the code we showed at Uncraftivism.
ucam.h@0:da6a22da11a2, 2009-12-11 (annotated)
- Committer:
- voidnoise
- Date:
- Fri Dec 11 21:59:44 2009 +0000
- Revision:
- 0:da6a22da11a2
Who changed what in which revision?
User | Revision | Line number | New 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 | }; |