Tedd OKANO / MARY_CAMERA
Revision:
4:cb0ef3fd89c9
Parent:
3:e5752853eb26
Child:
5:960221bde814
Child:
7:942d8d0a1760
--- a/MARY_CAMERA.h	Mon Feb 17 06:23:08 2014 +0000
+++ b/MARY_CAMERA.h	Mon Feb 17 23:44:08 2014 +0000
@@ -1,39 +1,120 @@
-#ifndef        MBED_MARY_CAMERA
-#define        MBED_MARY_CAMERA
+#ifndef MBED_MARY_CAMERA
+#define MBED_MARY_CAMERA
 
-#define     PIXEL_PER_LINE  176
-#define     BYTE_PER_PIXEL  2
-#define     BYTE_PER_LINE   (PIXEL_PER_LINE * BYTE_PER_PIXEL)
-
-#define     SPI_FREQUENCY                   12000000
-
-//  sample  MARY_CAMERA     camera( p5, p6, p7, p22, p9, p26, p28, p27 )
+#define SPI_FREQUENCY       12000000
 
 
+/** MARY_CAMERA class
+ *
+ *  MARY_CAMERA driver library
+ *  This driver has been made to get camera data from MARY CAMERA.
+ *
+ *  Example:
+ *  @code
+ *  
+ *  #include "mbed.h"
+ *  #include "MARMEX_OB_oled.h"
+ *  #include "MARY_CAMERA.h"
+ *  
+ *  MARMEX_OB_oled  oled1( p5, p7,  p20, p16, p15 ); // mosi, sclk, cs, rst, power_control     -- maple-mini-type-b-slot1
+ *  MARY_CAMERA     camera( p5, p6, p7, p22, p26, p28, p27 ); // mosi, miso, sclk, cs, reset, I2C_SDA, I2C_SCL
+ *  BusOut          led( LED3, LED4 );
+ *  
+ *  #define X_OFFSET        ((MARY_CAMERA::PIXEL_PER_LINE - MARMEX_OB_oled::WIDTH ) / 2)
+ *  #define Y_OFFSET        ((MARY_CAMERA::LINE_PER_FRAME - MARMEX_OB_oled::HEIGHT) / 2)
+ *  
+ *  int main()
+ *  {
+ *      led    = 0x3;
+ *  
+ *      oled1.cls();
+ *  
+ *      short   buf[ MARMEX_OB_oled::WIDTH ];
+ *  
+ *      while ( 1 ) {
+ *  
+ *          led    = 0x1;
+ *          camera.open_transfer();
+ *  
+ *          for ( int line = 0; line < 128; line++  ) {
+ *              camera.transfer_a_line( buf, line + Y_OFFSET, X_OFFSET, 128 );
+ *              oled1.blit565( 0, line, 128, 1, buf );
+ *          }
+ *  
+ *          camera.close_transfer();
+ *          led    = 0x2;
+ *     }
+ *  }
+ *  @endcode
+ */
+ 
+ 
 class MARY_CAMERA
 {
 public:
 
-    /** Create a MARY_CAMERA instance connected to specified SPI and DigitalOut pins with specified address
+    /** General parameters for MARMEX_OB_oled */
+    enum  {
+        PIXEL_PER_LINE  = 176,  /**< pixels in a line  */
+        LINE_PER_FRAME  = 144,  /**< pixels in a line  */
+        BYTE_PER_PIXEL  = 2,    /**< bytes per pixel  */
+        BYTE_PER_LINE   = (PIXEL_PER_LINE * BYTE_PER_PIXEL) /**< data size of 1 line  */
+    };
+
+    /** Create a MARY_CAMERA instance connected to specified SPI, DigitalOut and I2C pins
      *
-     * @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)
+     * @param SPI_mosi   SPI-bus MOSI pin
+     * @param SPI_miso   SPI-bus MISO pin
+     * @param SPI_sclk   SPI-bus SCLK pin
+     * @param SPI_cs     SPI-bus Chip Select pin
+     * @param cam_reset  Camera reset pin
+     * @param I2C_sda    I2C-bus SDA pin
+     * @param I2C_scl    I2C-bus SCL pin
      */
 
     MARY_CAMERA(
-        PinName spi_mosi,
-        PinName spi_miso,
-        PinName spi_sck,
-        PinName spi_cs,
+        PinName SPI_mosi,
+        PinName SPI_miso,
+        PinName SPI_sck,
+        PinName SPI_cs,
         PinName cam_reset,
-        PinName i2c_sda,
-        PinName i2c_scl
+        PinName I2C_sda,
+        PinName I2C_scl
     );
+
+    /** Initialization
+     *
+     *  Performs MARY_CAMERA reset and initializations
+     *  This function is called from MARY_CAMERA constoructor. So user don't have to call in the user code. 
+     *
+     *  This function takes about 2 seconds because there is 99 times I2C access with 20ms interval. 
+     */
     void init( void );
+
+    /** Open transfer
+     *
+     *  Let the MARY_CAMERA get ready to transfer the data. 
+     *  When this function is called, the camera will stop updating buffer at end of frame. 
+     */
     void open_transfer( void );
+
+    /** Close transfer
+     *
+     *  Letting the MARY_CAMERA to know the data transfer done. 
+     *  This function should be called when the data transfer done to resume the buffer update by camera
+     */
     void close_transfer( void );
+    
+    /** Transfer a line
+     *
+     *  Reads 1 line data from MARY_CAMERA
+     *  This function should be called when the data transfer done to resume the buffer update by camera
+     *  
+     * @param *p            pointer to array of short
+     * @param line_number   to select which line want to read
+     * @param x_offset      holizontal offset (from left) to start the read
+     * @param n_of_pixels   pixels to be read
+     */
     void transfer_a_line( short *p, int line_number, int x_offset, int n_of_pixels );
 
 private:
@@ -41,12 +122,11 @@
     void write_register( char reg, char value );
     int read_register( char reg );
     void set_address( int address );
-    void very_short_wait( void );
 
-    SPI         spi;
-    DigitalOut  cs;
-    DigitalOut  reset;
-    I2C         i2c;
+    SPI         _spi;
+    DigitalOut  _cs;
+    DigitalOut  _reset;
+    I2C         _i2c;
 };