Tedd OKANO / MARY_CAMERA

MARY_CAMERA.h

Committer:
okano
Date:
2014-02-14
Revision:
0:f4584dba3bac
Child:
1:1e51936de820
Child:
2:ee71ffdf317e

File content as of revision 0:f4584dba3bac:

#ifndef        MBED_MARY_CAMERA
#define        MBED_MARY_CAMERA

#define PARAM_NUM       99
#define CAM_I2C_ADDR    0x42

#define     COMMAND_WRITE                   0x00
#define     COMMAND_READ                    0x80
#define     COMMAND_ADDR_INCREMENT          0x20

#define     MEMORY_ADDR_LOW__REGISTER       0x0
#define     MEMORY_ADDR_MID__REGISTER       0x1
#define     MEMORY_ADDR_HIGH_REGISTER       0x2
#define     CAMERA_DATA_REGISTER            0x8
#define     CONTROL_DATA_REGISTER           0x3
#define     STATUS_REGISTER                 0x4

#define     CONTROL__PAUSE_BUFFER_UPDATE    0x01
#define     CONTROL__RESUME_BUFFER_UPDATE   0x00

#define     PIXEL_PER_LINE  176
#define     BYTE_PER_PIXEL  2
#define     BYTE_PER_LINE   (PIXEL_PER_LINE * BYTE_PER_PIXEL)

#define     SPI_FREQUENCY                   1000000

//  sample  MARY_CAMERA     camera( p5, p6, p7, p22, p9, p26, p28, p27 )


class MARY_CAMERA
{
public:

    /** Create a MARY_CAMERA instance connected to specified SPI and DigitalOut pins with specified address
     *
     * @param I2C_sda I2C-bus SDA pin
     * @param I2C_scl I2C-bus SCL pin
     * @param steps_per_rotation motor specific setting. This determines how many steps are needed to execute one full turn of motor shaft (360°).
     * @param I2C_address I2C-bus address (default: 0x42)
     */

    MARY_CAMERA(
        PinName spi_mosi,
        PinName spi_miso,
        PinName spi_sck,
        PinName spi_cs,
        PinName cam_vsync,
        PinName cam_reset,
        PinName i2c_sda,
        PinName i2c_scl
    );
    void init( void );
    void open_transfer( void );
    void close_transfer( void );
    void transfer_a_line( short *p, int line_number, int x_offset, int n_of_pixels );

private:
    int send_spi( char data );
    void write_register( char reg, char value );
    int read_register( char reg );
    void set_address( int address );


    SPI         spi;
    DigitalOut  cs;
    DigitalOut  vsync;
    DigitalOut  reset;
    I2C         i2c;
};




#if 0
SPI         camspi( p5, p6, p7 );
DigitalOut  cs2( p22 );
DigitalOut  vsync( p9 );
DigitalOut  camera_reset( p26 );
#endif

#define     COMMAND_WRITE                   0x00
#define     COMMAND_READ                    0x80
#define     COMMAND_ADDR_INCREMENT          0x20

#define     MEMORY_ADDR_LOW__REGISTER       0x0
#define     MEMORY_ADDR_MID__REGISTER       0x1
#define     MEMORY_ADDR_HIGH_REGISTER       0x2
#define     CAMERA_DATA_REGISTER            0x8
#define     CONTROL_DATA_REGISTER           0x3
#define     STATUS_REGISTER                 0x4

#define     CONTROL__PAUSE_BUFFER_UPDATE    0x01
#define     CONTROL__RESUME_BUFFER_UPDATE   0x00

#endif  //  MBED_MARY_CAMERA