Port of TI's CC3100 Websock camera demo. Using FreeRTOS, mbedTLS, also parts of Arducam for cams ov5642 and 0v2640. Can also use MT9D111. Work in progress. Be warned some parts maybe a bit flacky. This is for Seeed Arch max only, for an M3, see the demo for CM3 using the 0v5642 aducam mini.

Dependencies:   mbed

Committer:
dflet
Date:
Tue Sep 15 16:45:04 2015 +0000
Revision:
22:f9b5e0b80bf2
Parent:
14:90603ea1e85b
Removed some debug.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1 #ifndef __MT9D111_H__
dflet 0:50cedd586816 2 #define __MT9D111_H__
dflet 0:50cedd586816 3
dflet 0:50cedd586816 4 //*****************************************************************************
dflet 0:50cedd586816 5 //
dflet 0:50cedd586816 6 // If building with a C++ compiler, make all of the definitions in this header
dflet 0:50cedd586816 7 // have a C binding.
dflet 0:50cedd586816 8 //
dflet 0:50cedd586816 9 //*****************************************************************************
dflet 0:50cedd586816 10 #ifdef __cplusplus
dflet 0:50cedd586816 11 extern "C"
dflet 0:50cedd586816 12 {
dflet 0:50cedd586816 13 #endif
dflet 0:50cedd586816 14
dflet 14:90603ea1e85b 15 #define MT9D111_ID 0x1519
dflet 14:90603ea1e85b 16 /* firmware drivers ID */
dflet 14:90603ea1e85b 17 #define MON_DRV_ID 0
dflet 14:90603ea1e85b 18 #define SEQ_DRV_ID 1
dflet 14:90603ea1e85b 19 #define AE_DRV_ID 2
dflet 14:90603ea1e85b 20 #define AWB_DRV_ID 3
dflet 14:90603ea1e85b 21 #define FD_DRV_ID 4
dflet 14:90603ea1e85b 22 #define AF_DRV_ID 5
dflet 14:90603ea1e85b 23 #define AFM_DRV_ID 6
dflet 14:90603ea1e85b 24 #define MODE_DRV_ID 7
dflet 14:90603ea1e85b 25
dflet 14:90603ea1e85b 26 /* Monitor driver variables */
dflet 14:90603ea1e85b 27 #define MON_VER_OFFSET 12
dflet 14:90603ea1e85b 28
dflet 14:90603ea1e85b 29 /* Sequencer driver variables */
dflet 14:90603ea1e85b 30 #define SEQ_MODE_OFFSET 2
dflet 14:90603ea1e85b 31 #define SEQ_STATE_OFFSET 4
dflet 14:90603ea1e85b 32
dflet 14:90603ea1e85b 33 /* Sequencer Driver states */
dflet 14:90603ea1e85b 34 #define SEQ_STATE_INIT 0
dflet 14:90603ea1e85b 35 #define SEQ_STATE_TO_PREVIEW 1
dflet 14:90603ea1e85b 36 #define SEQ_STATE_ENTER_PREVIEW 2
dflet 14:90603ea1e85b 37 #define SEQ_STATE_PREVIEW 3
dflet 14:90603ea1e85b 38 #define SEQ_STATE_LEAVE_PREVIEW 4
dflet 14:90603ea1e85b 39 #define SEQ_STATE_TO_CAPTURE 5
dflet 14:90603ea1e85b 40 #define SEQ_STATE_ENTER_CAPTURE 6
dflet 14:90603ea1e85b 41 #define SEQ_STATE_CAPTURE 7
dflet 14:90603ea1e85b 42 #define SEQ_STATE_LEAVE_CAPTURE 8
dflet 14:90603ea1e85b 43 #define SEQ_STATE_STANDBY 9
dflet 14:90603ea1e85b 44
dflet 14:90603ea1e85b 45 /* pages */
dflet 14:90603ea1e85b 46 #define PAGE_SENSOR_CORE 0
dflet 14:90603ea1e85b 47 #define PAGE_IFP1 1
dflet 14:90603ea1e85b 48 #define PAGE_IFP2 2
dflet 14:90603ea1e85b 49
dflet 14:90603ea1e85b 50 #define REG_PAGE 0xF0
dflet 14:90603ea1e85b 51 #define REG_VAR_ADDR 0xC6
dflet 14:90603ea1e85b 52 #define REG_VAR_DATA 0xC8
dflet 14:90603ea1e85b 53
dflet 14:90603ea1e85b 54 /* Bits for Microcontroller variable access using logic address */
dflet 14:90603ea1e85b 55 #define VAR_LENGTH_16BIT 0
dflet 14:90603ea1e85b 56 #define VAR_LENGTH_8BIT 1
dflet 14:90603ea1e85b 57 #define VAR_LENGTH_SHIFT 15
dflet 14:90603ea1e85b 58 #define VAR_ADDRESS_TYPE_LOGIC 1
dflet 14:90603ea1e85b 59 #define VAR_ADDRESS_TYPE_SHIFT 13
dflet 14:90603ea1e85b 60 #define VAR_DRV_ID_SHIFT 8
dflet 14:90603ea1e85b 61 #define VAR_ADDRESS_SHIFT 0
dflet 14:90603ea1e85b 62
dflet 1:1a80c1529aa3 63 typedef struct MT9D111RegLst
dflet 1:1a80c1529aa3 64 {
dflet 1:1a80c1529aa3 65 unsigned char ucPageAddr;
dflet 1:1a80c1529aa3 66 unsigned char ucRegAddr;
dflet 1:1a80c1529aa3 67 unsigned short usValue;
dflet 1:1a80c1529aa3 68 } s_RegList;
dflet 1:1a80c1529aa3 69
dflet 13:bf45f592c2b6 70 void getCamId(void);
dflet 14:90603ea1e85b 71 static int wait_for_seq_state(int state);
dflet 14:90603ea1e85b 72 static uint16_t read_firmware_var(int id, int offset, int byte);
dflet 14:90603ea1e85b 73 int Start_still_capture(int frames);
dflet 14:90603ea1e85b 74 int Stop_still_capture(void);
dflet 14:90603ea1e85b 75 int cam_power_on(void);
dflet 14:90603ea1e85b 76 int cam_power_off(void);
dflet 14:90603ea1e85b 77 void cam_exit_standby(void);
dflet 14:90603ea1e85b 78 void cam_enter_standby(void);
dflet 13:bf45f592c2b6 79
dflet 0:50cedd586816 80 /*!
dflet 0:50cedd586816 81 \brief This function initilizes the camera sensor
dflet 0:50cedd586816 82
dflet 0:50cedd586816 83 \param[in] None
dflet 0:50cedd586816 84
dflet 0:50cedd586816 85 \return 0 - Success
dflet 0:50cedd586816 86 -1 - Error
dflet 0:50cedd586816 87
dflet 0:50cedd586816 88 \note
dflet 0:50cedd586816 89 \warning
dflet 0:50cedd586816 90 */
dflet 0:50cedd586816 91 int CameraSensorInit();
dflet 0:50cedd586816 92
dflet 0:50cedd586816 93 /*!
dflet 0:50cedd586816 94 \brief Configures sensor in JPEG mode
dflet 0:50cedd586816 95
dflet 0:50cedd586816 96 \param[in] None
dflet 0:50cedd586816 97
dflet 0:50cedd586816 98 \return 0 - Success
dflet 0:50cedd586816 99 -1 - Error
dflet 0:50cedd586816 100
dflet 0:50cedd586816 101 \note
dflet 0:50cedd586816 102 \warning
dflet 0:50cedd586816 103 */
dflet 0:50cedd586816 104 int StartSensorInJpegMode(int width, int height);
dflet 14:90603ea1e85b 105 int StartCaptureCmd(void);
dflet 0:50cedd586816 106 int CameraSensorResolution(int width, int height);
dflet 1:1a80c1529aa3 107 static int RegLstWrite(s_RegList *pRegLst, unsigned int ulNofItems);
dflet 0:50cedd586816 108 //*****************************************************************************
dflet 0:50cedd586816 109 //
dflet 0:50cedd586816 110 // Mark the end of the C bindings section for C++ compilers.
dflet 0:50cedd586816 111 //
dflet 0:50cedd586816 112 //*****************************************************************************
dflet 0:50cedd586816 113 #ifdef __cplusplus
dflet 0:50cedd586816 114 }
dflet 0:50cedd586816 115 #endif
dflet 0:50cedd586816 116
dflet 0:50cedd586816 117
dflet 0:50cedd586816 118 #endif //__MT9D111_H__
dflet 0:50cedd586816 119
dflet 14:90603ea1e85b 120