cansat_B 2019 / JPEGCamera

Dependents:   JPEGCameraExample JPEGCameraExample camera-pic-xbee

Files at this revision

API Documentation at this revision

Comitter:
saeichi
Date:
Mon Nov 25 08:19:27 2019 +0000
Parent:
2:84378dd8cc4b
Commit message:
camera-xbee

Changed in this revision

JPEGCamera.cpp Show diff for this revision Revisions of this file
JPEGCamera.h Show diff for this revision Revisions of this file
--- a/JPEGCamera.cpp	Thu Nov 14 06:51:59 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/* Arduino JPEGCamera Library
- * Copyright 2010 SparkFun Electronic
- * Written by Ryan Owens
- * Modified by arms22
- * Ported to mbed by yamaguch
- */
-
-#include "JPEGCamera.h"
-
-#define min(x, y) ((x) < (y)) ? (x) : (y)
-
-const int RESPONSE_TIMEOUT = 500;
-const int DATA_TIMEOUT = 1000;
-
-JPEGCamera::JPEGCamera(PinName tx, PinName rx) : Serial(tx, rx) {
-    printf("AA\r\n");
-    baud(38400);
-    state = READY;
-}
-
-bool JPEGCamera::setPictureSize(JPEGCamera::PictureSize size, bool doReset) {
-    char buf[9] = {0x56, 0x00, 0x31, 0x05, 0x04, 0x01, 0x00, 0x19, (char) size};
-    int ret = sendReceive(buf, sizeof buf, 5);
-
-    if (ret == 5 && buf[0] == 0x76) {
-        if (doReset)
-            reset();
-        return true;
-    } else
-        return false;
-}
-
-bool JPEGCamera::isReady() {
-    return state == READY;
-}
-
-bool JPEGCamera::isProcessing() {
-    return state == PROCESSING;
-}
-
-bool JPEGCamera::takePicture(char *filename) {
-    if (state == READY) {
-        fp = fopen(filename, "wb");
-        if (fp != 0) {
-            if (takePicture()) {
-                imageSize = getImageSize();
-                address = 0;
-                state = PROCESSING;
-            } else {
-                fclose(fp);
-                printf("takePicture(%s) failed", filename);
-                state = ERROR;
-            }
-        } else {
-            printf("fopen() failed");
-            state = ERROR;
-        }
-    }
-    return state != ERROR;
-}
-
-bool JPEGCamera::processPicture() {
-    if (state == PROCESSING) {
-        if (address < imageSize) {
-            char data[1024];
-            int size = readData(data, min(sizeof(data), imageSize - address), address);
-            int ret = fwrite(data, size, 1, fp);
-            if (ret > 0)
-                address += size;
-            if (ret == 0 || address >= imageSize) {
-                stopPictures();
-                fclose(fp);
-                wait(0.1); // ????
-                state = ret > 0 ? READY : ERROR;
-            }
-        }
-    }
-
-    return state == PROCESSING || state == READY;
-}
-
-bool JPEGCamera::reset() {
-    char buf[4] = {0x56, 0x00, 0x26, 0x00};
-    int ret = sendReceive(buf, sizeof buf, 4);
-    if (ret == 4 && buf[0] == 0x76) {
-        wait(4.0);
-        state = READY;
-    } else {
-        state = ERROR;
-    }
-    return state == READY;
-}
-
-bool JPEGCamera::takePicture() {
-    char buf[5] = {0x56, 0x00, 0x36, 0x01, 0x00};
-    int ret = sendReceive(buf, sizeof buf, 5);
-
-    return ret == 5 && buf[0] == 0x76;
-}
-
-bool JPEGCamera::stopPictures() {
-    char buf[5] = {0x56, 0x00, 0x36, 0x01, 0x03};
-    int ret = sendReceive(buf, sizeof buf, 5);
-
-    return ret == 4 && buf[0] == 0x76;
-}
-
-int JPEGCamera::getImageSize() {
-    char buf[9] = {0x56, 0x00, 0x34, 0x01, 0x00};
-    int ret = sendReceive(buf, sizeof buf, 9);
-
-    //The size is in the last 2 characters of the response.
-    return (ret == 9 && buf[0] == 0x76) ? (buf[7] << 8 | buf[8]) : 0;
-}
-
-int JPEGCamera::readData(char *dataBuf, int size, int address) {
-    char buf[16] = {0x56, 0x00, 0x32, 0x0C, 0x00, 0x0A, 0x00, 0x00,
-                    address >> 8, address & 255, 0x00, 0x00, size >> 8, size & 255, 0x00, 0x0A
-                   };
-    int ret = sendReceive(buf, sizeof buf, 5);
-
-    return (ret == 5 && buf[0] == 0x76) ? receive(dataBuf, size, DATA_TIMEOUT) : 0;
-}
-
-int JPEGCamera::sendReceive(char *buf, int sendSize, int receiveSize) {
-    while (readable()) getc();
-
-    for (int i = 0; i < sendSize; i++) putc(buf[i]);
-
-    return receive(buf, receiveSize, RESPONSE_TIMEOUT);
-}
-
-int JPEGCamera::receive(char *buf, int size, int timeout) {
-    timer.start();
-    timer.reset();
-
-    int i = 0;
-    while (i < size && timer.read_ms() < timeout) {
-        if (readable())
-            buf[i++] = getc();
-    }
-
-    return i;
-}
\ No newline at end of file
--- a/JPEGCamera.h	Thu Nov 14 06:51:59 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-
-/* Arduino JPEGCamera Library
- * Copyright 2010 SparkFun Electronics
- * Written by Ryan Owens
- * Modified by arms22
- * Ported to mbed by yamaguch
- */
-
-#ifndef JPEG_CAMERA_H
-#define JPEG_CAMERA_H
-
-#include "mbed.h"
-
-/**
- * Interface for LinkSprite JPEG Camera module LS-Y201
- */
-class JPEGCamera : public Serial {
-public:
-    /***/
-    enum PictureSize {
-        SIZE160x120 = 0x22,
-        SIZE320x240 = 0x11,
-        SIZE640x480 = 0x00,
-    };
-
-    /**
-     * Create JPEG Camera
-     *
-     * @param tx tx pin
-     * @param rx rx pin
-     */
-    JPEGCamera(PinName tx, PinName rx);
-
-    /**
-     * Set picture size
-     *
-     * @param size picture size (available sizes are SIZE160x120, SIZE320x240, SIZE640x480)
-     * @param doReset flag to perform reset operation after changing size
-     *
-     * @returns true if succeeded, false otherwise
-     */
-    bool setPictureSize(JPEGCamera::PictureSize size, bool doReset = true);
-
-    /**
-     * Return whether camera is ready or not
-     *
-     * @returns true if ready, false otherwise
-     */
-    bool isReady();
-
-    /**
-     * Return whether camera is processing the taken picture or not
-     *
-     * @returns true if the camera is in processing, false otherwise
-     */
-    bool isProcessing();
-
-    /**
-     * Take a picture
-     *
-     * @param filename filename to store the picture data
-     * @returns true if succeeded, false otherwise
-     */
-    bool takePicture(char *filename);
-    /**
-     * Process picture (writing the file)
-     *
-     * @returns true if no error in processing, false otherwise
-     */
-    bool processPicture();
-
-    /**
-     * Perform reset oepration (it takes 4 seconds)
-     *
-     * @returns true if succeeded, false otherwise
-     */
-    bool reset();
-
-    /**
-     * Send a picture command to the camera module
-     *
-     *  @returns true if succeeded, false otherwise
-     */
-    bool takePicture(void);
-
-    /**
-     * Send a stop pictures command to the camera module
-     *
-     *  @returns true if succeeded, false otherwise
-     */
-    bool stopPictures(void);
-
-    /**
-     * Get the picture image size
-     *
-     * @returns the actual image size in bytes
-     */
-    int getImageSize();
-
-    /**
-     * Read the picture data to the buffer
-     *
-     * @param dataBuf data buffer address to store the received data
-     * @param size data size to read
-     * @param address the address of the picture data to read
-     *
-     * @returns the size of the data read
-     */
-    int readData(char *dataBuf, int size, int address);
-
-//private:
-    Timer timer;
-    FILE *fp;
-    int imageSize;
-    int address;
-    enum State {UNKNOWN, READY, PROCESSING, ERROR = -1} state;
-    
-    int sendReceive(char *buf, int sendSize, int receiveSize);
-    int receive(char *buf, int size, int timeout);
-};
-
-#endif