Description.

Dependents:   RoboPanorama 4180_Project ProjetMacIntel

Fork of Camera_LS_Y201 by Shinichiro Nakamura

Committer:
lndv3
Date:
Fri Oct 12 16:41:24 2012 +0000
Revision:
2:e92ce527b8b0
Parent:
1:43358d40f879
Commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lndv3 2:e92ce527b8b0 1 /**
lndv3 2:e92ce527b8b0 2 * =============================================================================
lndv3 2:e92ce527b8b0 3 * LS-Y201 device driver class (Version 0.0.1)
lndv3 2:e92ce527b8b0 4 * Reference documents: LinkSprite JPEG Color Camera Serial UART Interface
lndv3 2:e92ce527b8b0 5 * January 2010
lndv3 2:e92ce527b8b0 6 * =============================================================================
lndv3 2:e92ce527b8b0 7 * Copyright (c) 2010 Shinichiro Nakamura (CuBeatSystems)
lndv3 2:e92ce527b8b0 8 *
lndv3 2:e92ce527b8b0 9 * Permission is hereby granted, free of charge, to any person obtaining a copy
lndv3 2:e92ce527b8b0 10 * of this software and associated documentation files (the "Software"), to deal
lndv3 2:e92ce527b8b0 11 * in the Software without restriction, including without limitation the rights
lndv3 2:e92ce527b8b0 12 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
lndv3 2:e92ce527b8b0 13 * copies of the Software, and to permit persons to whom the Software is
lndv3 2:e92ce527b8b0 14 * furnished to do so, subject to the following conditions:
lndv3 2:e92ce527b8b0 15 *
lndv3 2:e92ce527b8b0 16 * The above copyright notice and this permission notice shall be included in
lndv3 2:e92ce527b8b0 17 * all copies or substantial portions of the Software.
lndv3 2:e92ce527b8b0 18 *
lndv3 2:e92ce527b8b0 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
lndv3 2:e92ce527b8b0 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
lndv3 2:e92ce527b8b0 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
lndv3 2:e92ce527b8b0 22 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
lndv3 2:e92ce527b8b0 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
lndv3 2:e92ce527b8b0 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
lndv3 2:e92ce527b8b0 25 * THE SOFTWARE.
lndv3 2:e92ce527b8b0 26 * =============================================================================
lndv3 2:e92ce527b8b0 27 */
lndv3 2:e92ce527b8b0 28
lndv3 2:e92ce527b8b0 29 #ifndef LS_Y201_H
lndv3 2:e92ce527b8b0 30 #define LS_Y201_H
lndv3 2:e92ce527b8b0 31
lndv3 2:e92ce527b8b0 32 #include "mbed.h"
lndv3 2:e92ce527b8b0 33 #include "SerialBuffered.h"
lndv3 2:e92ce527b8b0 34
lndv3 2:e92ce527b8b0 35 /**
lndv3 2:e92ce527b8b0 36 * Camera
lndv3 2:e92ce527b8b0 37 */
lndv3 2:e92ce527b8b0 38 class Camera_LS_Y201 {
lndv3 2:e92ce527b8b0 39 public:
lndv3 2:e92ce527b8b0 40
lndv3 2:e92ce527b8b0 41 /**
lndv3 2:e92ce527b8b0 42 * Create.
lndv3 2:e92ce527b8b0 43 *
lndv3 2:e92ce527b8b0 44 * @param tx Transmitter.
lndv3 2:e92ce527b8b0 45 * @param rx Receiver.
lndv3 2:e92ce527b8b0 46 */
lndv3 2:e92ce527b8b0 47 Camera_LS_Y201(PinName tx, PinName rx);
lndv3 2:e92ce527b8b0 48
lndv3 2:e92ce527b8b0 49 /**
lndv3 2:e92ce527b8b0 50 * Dispose.
lndv3 2:e92ce527b8b0 51 */
lndv3 2:e92ce527b8b0 52 ~Camera_LS_Y201();
lndv3 2:e92ce527b8b0 53
lndv3 2:e92ce527b8b0 54 /**
lndv3 2:e92ce527b8b0 55 * Error code.
lndv3 2:e92ce527b8b0 56 */
lndv3 2:e92ce527b8b0 57 enum ErrorCode {
lndv3 2:e92ce527b8b0 58 NoError = 0,
lndv3 2:e92ce527b8b0 59 UnexpectedReply,
lndv3 2:e92ce527b8b0 60 Timeout,
lndv3 2:e92ce527b8b0 61 SendError,
lndv3 2:e92ce527b8b0 62 RecvError,
lndv3 2:e92ce527b8b0 63 InvalidArguments
lndv3 2:e92ce527b8b0 64 };
lndv3 2:e92ce527b8b0 65
lndv3 2:e92ce527b8b0 66 /**
lndv3 2:e92ce527b8b0 67 * Image size.
lndv3 2:e92ce527b8b0 68 */
lndv3 2:e92ce527b8b0 69 enum ImageSize {
lndv3 2:e92ce527b8b0 70 ImageSize160x120, /**< 160x120. */
lndv3 2:e92ce527b8b0 71 ImageSize320x280, /**< 320x280. */
lndv3 2:e92ce527b8b0 72 ImageSize640x480 /**< 640x480. */
lndv3 2:e92ce527b8b0 73 };
lndv3 2:e92ce527b8b0 74
lndv3 2:e92ce527b8b0 75 /**
lndv3 2:e92ce527b8b0 76 * Reset module.
lndv3 2:e92ce527b8b0 77 *
lndv3 2:e92ce527b8b0 78 * @return Error code.
lndv3 2:e92ce527b8b0 79 */
lndv3 2:e92ce527b8b0 80 ErrorCode reset();
lndv3 2:e92ce527b8b0 81
lndv3 2:e92ce527b8b0 82 /**
lndv3 2:e92ce527b8b0 83 * Set image size.
lndv3 2:e92ce527b8b0 84 *
lndv3 2:e92ce527b8b0 85 * @param is Image size.
lndv3 2:e92ce527b8b0 86 * @return Error code.
lndv3 2:e92ce527b8b0 87 */
lndv3 2:e92ce527b8b0 88 ErrorCode setImageSize(ImageSize is);
lndv3 2:e92ce527b8b0 89
lndv3 2:e92ce527b8b0 90 /**
lndv3 2:e92ce527b8b0 91 * Take picture.
lndv3 2:e92ce527b8b0 92 *
lndv3 2:e92ce527b8b0 93 * @return Error code.
lndv3 2:e92ce527b8b0 94 */
lndv3 2:e92ce527b8b0 95 ErrorCode takePicture();
lndv3 2:e92ce527b8b0 96
lndv3 2:e92ce527b8b0 97 /**
lndv3 2:e92ce527b8b0 98 * Read jpeg file size.
lndv3 2:e92ce527b8b0 99 *
lndv3 2:e92ce527b8b0 100 * @param fileSize File size.
lndv3 2:e92ce527b8b0 101 * @return Error code.
lndv3 2:e92ce527b8b0 102 */
lndv3 2:e92ce527b8b0 103 ErrorCode readJpegFileSize(int *fileSize);
lndv3 2:e92ce527b8b0 104
lndv3 2:e92ce527b8b0 105 /**
lndv3 2:e92ce527b8b0 106 * Read jpeg file content.
lndv3 2:e92ce527b8b0 107 *
lndv3 2:e92ce527b8b0 108 * @param func A pointer to a call back function.
lndv3 2:e92ce527b8b0 109 * @return Error code.
lndv3 2:e92ce527b8b0 110 */
lndv3 2:e92ce527b8b0 111 ErrorCode readJpegFileContent(void (*func)(int done, int total, uint8_t *buf, size_t siz));
lndv3 2:e92ce527b8b0 112
lndv3 2:e92ce527b8b0 113 /**
lndv3 2:e92ce527b8b0 114 * Stop taking pictures.
lndv3 2:e92ce527b8b0 115 *
lndv3 2:e92ce527b8b0 116 * @return Error code.
lndv3 2:e92ce527b8b0 117 */
lndv3 2:e92ce527b8b0 118 ErrorCode stopTakingPictures();
lndv3 2:e92ce527b8b0 119
lndv3 2:e92ce527b8b0 120 private:
lndv3 2:e92ce527b8b0 121 SerialBuffered serial;
lndv3 2:e92ce527b8b0 122
lndv3 2:e92ce527b8b0 123 /**
lndv3 2:e92ce527b8b0 124 * Wait init end codes.
lndv3 2:e92ce527b8b0 125 *
lndv3 2:e92ce527b8b0 126 * @return Error code.
lndv3 2:e92ce527b8b0 127 */
lndv3 2:e92ce527b8b0 128 ErrorCode waitInitEnd();
lndv3 2:e92ce527b8b0 129
lndv3 2:e92ce527b8b0 130 /**
lndv3 2:e92ce527b8b0 131 * Send bytes to camera module.
lndv3 2:e92ce527b8b0 132 *
lndv3 2:e92ce527b8b0 133 * @param buf Pointer to the data buffer.
lndv3 2:e92ce527b8b0 134 * @param len Length of the data buffer.
lndv3 2:e92ce527b8b0 135 *
lndv3 2:e92ce527b8b0 136 * @return True if the data sended.
lndv3 2:e92ce527b8b0 137 */
lndv3 2:e92ce527b8b0 138 bool sendBytes(uint8_t *buf, size_t len, int timeout_us);
lndv3 2:e92ce527b8b0 139
lndv3 2:e92ce527b8b0 140 /**
lndv3 2:e92ce527b8b0 141 * Receive bytes from camera module.
lndv3 2:e92ce527b8b0 142 *
lndv3 2:e92ce527b8b0 143 * @param buf Pointer to the data buffer.
lndv3 2:e92ce527b8b0 144 * @param len Length of the data buffer.
lndv3 2:e92ce527b8b0 145 *
lndv3 2:e92ce527b8b0 146 * @return True if the data received.
lndv3 2:e92ce527b8b0 147 */
lndv3 2:e92ce527b8b0 148 bool recvBytes(uint8_t *buf, size_t len, int timeout_us);
lndv3 2:e92ce527b8b0 149
lndv3 2:e92ce527b8b0 150 /**
lndv3 2:e92ce527b8b0 151 * Wait received.
lndv3 2:e92ce527b8b0 152 *
lndv3 2:e92ce527b8b0 153 * @return True if the data received.
lndv3 2:e92ce527b8b0 154 */
lndv3 2:e92ce527b8b0 155 bool waitRecv();
lndv3 2:e92ce527b8b0 156
lndv3 2:e92ce527b8b0 157 /**
lndv3 2:e92ce527b8b0 158 * Wait idle state.
lndv3 2:e92ce527b8b0 159 *
lndv3 2:e92ce527b8b0 160 * @return True if it succeed.
lndv3 2:e92ce527b8b0 161 */
lndv3 2:e92ce527b8b0 162 bool waitIdle();
lndv3 2:e92ce527b8b0 163
lndv3 2:e92ce527b8b0 164 };
lndv3 2:e92ce527b8b0 165
lndv3 2:e92ce527b8b0 166 #endif