From 5c084a0aba46dae0d1f12bc5ae200a976ec182e2 Mon Sep 17 00:00:00 2001 From: Yann Hendrikx Date: Sun, 5 Mar 2017 17:18:08 +0100 Subject: [PATCH 1/2] make compatible to WICED feather --- Adafruit_VC0706.cpp | 12 ++++++------ Adafruit_VC0706.h | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Adafruit_VC0706.cpp b/Adafruit_VC0706.cpp index 4864808..20da868 100644 --- a/Adafruit_VC0706.cpp +++ b/Adafruit_VC0706.cpp @@ -19,7 +19,7 @@ // Initialization code used by all constructor types void Adafruit_VC0706::common_init(void) { -#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) +#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) swSerial = NULL; #endif hwSerial = NULL; @@ -28,7 +28,7 @@ void Adafruit_VC0706::common_init(void) { serialNum = 0; } -#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) +#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) // Constructor when using SoftwareSerial or NewSoftSerial #if ARDUINO >= 100 Adafruit_VC0706::Adafruit_VC0706(SoftwareSerial *ser) { @@ -48,7 +48,7 @@ Adafruit_VC0706::Adafruit_VC0706(HardwareSerial *ser) { } boolean Adafruit_VC0706::begin(uint16_t baud) { -#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) +#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) if(swSerial) swSerial->begin(baud); else #endif @@ -378,7 +378,7 @@ boolean Adafruit_VC0706::runCommand(uint8_t cmd, uint8_t *args, uint8_t argn, } void Adafruit_VC0706::sendCommand(uint8_t cmd, uint8_t args[] = 0, uint8_t argn = 0) { -#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) +#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) if(swSerial) { #if ARDUINO >= 100 swSerial->write((byte)0x56); @@ -436,7 +436,7 @@ uint8_t Adafruit_VC0706::readResponse(uint8_t numbytes, uint8_t timeout) { int avail; while ((timeout != counter) && (bufferLen != numbytes)){ -#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) +#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) avail = swSerial ? swSerial->available() : hwSerial->available(); #else avail = hwSerial->available(); @@ -448,7 +448,7 @@ uint8_t Adafruit_VC0706::readResponse(uint8_t numbytes, uint8_t timeout) { } counter = 0; // there's a byte! -#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) +#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) camerabuff[bufferLen++] = swSerial ? swSerial->read() : hwSerial->read(); #else camerabuff[bufferLen++] = hwSerial->read(); diff --git a/Adafruit_VC0706.h b/Adafruit_VC0706.h index 6c3c158..609c73d 100644 --- a/Adafruit_VC0706.h +++ b/Adafruit_VC0706.h @@ -17,7 +17,7 @@ #if ARDUINO >= 100 #include "Arduino.h" - #if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) + #if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) #include #endif #else @@ -65,7 +65,7 @@ class Adafruit_VC0706 { public: -#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) +#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) #if ARDUINO >= 100 Adafruit_VC0706(SoftwareSerial *ser); // Constructor when using SoftwareSerial #else @@ -113,7 +113,7 @@ char* setBaud115200(); uint8_t bufferLen; uint16_t frameptr; -#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) +#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) #if ARDUINO >= 100 SoftwareSerial *swSerial; #else From 5bf9b49643801442214937cf49051315c15a7a89 Mon Sep 17 00:00:00 2001 From: Yann Hendrikx Date: Thu, 10 May 2018 16:34:23 +0200 Subject: [PATCH 2/2] Use uint32_t where appropriate Use header guards --- .gitignore | 2 ++ Adafruit_VC0706.cpp | 55 +++++++++++++++++++++++++++++++-------------- Adafruit_VC0706.h | 13 +++++++---- 3 files changed, 49 insertions(+), 21 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4b0c5a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.iml +.idea \ No newline at end of file diff --git a/Adafruit_VC0706.cpp b/Adafruit_VC0706.cpp index 20da868..8ba4e93 100644 --- a/Adafruit_VC0706.cpp +++ b/Adafruit_VC0706.cpp @@ -47,7 +47,7 @@ Adafruit_VC0706::Adafruit_VC0706(HardwareSerial *ser) { hwSerial = ser; // ...override hwSerial with value passed. } -boolean Adafruit_VC0706::begin(uint16_t baud) { +boolean Adafruit_VC0706::begin(uint32_t baud) { #if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) if(swSerial) swSerial->begin(baud); else @@ -63,7 +63,7 @@ boolean Adafruit_VC0706::reset() { } boolean Adafruit_VC0706::motionDetected() { - if (readResponse(4, 200) != 4) { + if (readResponse(camerabuff, 4, 200) != 4) { return false; } if (! verifyResponse(VC0706_COMM_MOTION_DETECTED)) @@ -145,7 +145,7 @@ char * Adafruit_VC0706::getVersion(void) { sendCommand(VC0706_GEN_VERSION, args, 1); // get reply - if (!readResponse(CAMERABUFFSIZ, 200)) + if (!readResponse(camerabuff, CAMERABUFFSIZ, 200)) return 0; camerabuff[bufferLen] = 0; // end it! return (char *)camerabuff; // return it! @@ -159,7 +159,7 @@ char* Adafruit_VC0706::setBaud9600() { sendCommand(VC0706_SET_PORT, args, sizeof(args)); // get reply - if (!readResponse(CAMERABUFFSIZ, 200)) + if (!readResponse(camerabuff, CAMERABUFFSIZ, 200)) return 0; camerabuff[bufferLen] = 0; // end it! return (char *)camerabuff; // return it! @@ -171,7 +171,7 @@ char* Adafruit_VC0706::setBaud19200() { sendCommand(VC0706_SET_PORT, args, sizeof(args)); // get reply - if (!readResponse(CAMERABUFFSIZ, 200)) + if (!readResponse(camerabuff, CAMERABUFFSIZ, 200)) return 0; camerabuff[bufferLen] = 0; // end it! return (char *)camerabuff; // return it! @@ -182,7 +182,7 @@ char* Adafruit_VC0706::setBaud38400() { sendCommand(VC0706_SET_PORT, args, sizeof(args)); // get reply - if (!readResponse(CAMERABUFFSIZ, 200)) + if (!readResponse(camerabuff, CAMERABUFFSIZ, 200)) return 0; camerabuff[bufferLen] = 0; // end it! return (char *)camerabuff; // return it! @@ -193,7 +193,7 @@ char* Adafruit_VC0706::setBaud57600() { sendCommand(VC0706_SET_PORT, args, sizeof(args)); // get reply - if (!readResponse(CAMERABUFFSIZ, 200)) + if (!readResponse(camerabuff, CAMERABUFFSIZ, 200)) return 0; camerabuff[bufferLen] = 0; // end it! return (char *)camerabuff; // return it! @@ -204,7 +204,7 @@ char* Adafruit_VC0706::setBaud115200() { sendCommand(VC0706_SET_PORT, args, sizeof(args)); // get reply - if (!readResponse(CAMERABUFFSIZ, 200)) + if (!readResponse(camerabuff, CAMERABUFFSIZ, 200)) return 0; camerabuff[bufferLen] = 0; // end it! return (char *)camerabuff; // return it! @@ -350,7 +350,7 @@ uint8_t * Adafruit_VC0706::readPicture(uint8_t n) { // read into the buffer PACKETLEN! - if (readResponse(n+5, CAMERADELAY) == 0) + if (readResponse(camerabuff, n+5, CAMERADELAY) == 0) return 0; @@ -359,6 +359,27 @@ uint8_t * Adafruit_VC0706::readPicture(uint8_t n) { return camerabuff; } + +uint8_t * Adafruit_VC0706::readPicture(uint8_t *buffer, uint32_t n) { + uint8_t args[] = {0x0C, 0x0, 0x0A, + frameptr >> 24, frameptr >> 16 & 0xFF, frameptr >> 8 & 0xFF, frameptr & 0xFF, + n >> 24, n >> 16 & 0xFF, n >> 8 & 0xFF, n & 0xFF, + CAMERADELAY >> 8, CAMERADELAY & 0xFF}; + + if (! runCommand(VC0706_READ_FBUF, args, sizeof(args), 5, false)) + return 0; + + + // read into the buffer PACKETLEN! + if (readResponse(buffer, n+5, CAMERADELAY) == 0) + return 0; + + + frameptr += n; + + return buffer; +} + /**************** low level commands */ @@ -366,11 +387,11 @@ boolean Adafruit_VC0706::runCommand(uint8_t cmd, uint8_t *args, uint8_t argn, uint8_t resplen, boolean flushflag) { // flush out anything in the buffer? if (flushflag) { - readResponse(100, 10); + readResponse(camerabuff, 100, 10); } sendCommand(cmd, args, argn); - if (readResponse(resplen, 200) != resplen) + if (readResponse(camerabuff, resplen, 200) != resplen) return false; if (! verifyResponse(cmd)) return false; @@ -430,8 +451,8 @@ void Adafruit_VC0706::sendCommand(uint8_t cmd, uint8_t args[] = 0, uint8_t argn //Serial.println(); } -uint8_t Adafruit_VC0706::readResponse(uint8_t numbytes, uint8_t timeout) { - uint8_t counter = 0; +uint32_t Adafruit_VC0706::readResponse(uint8_t* buffer, uint32_t numbytes, uint8_t timeout) { + uint32_t counter = 0; bufferLen = 0; int avail; @@ -449,14 +470,14 @@ uint8_t Adafruit_VC0706::readResponse(uint8_t numbytes, uint8_t timeout) { counter = 0; // there's a byte! #if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) - camerabuff[bufferLen++] = swSerial ? swSerial->read() : hwSerial->read(); + buffer[bufferLen++] = swSerial ? swSerial->read() : hwSerial->read(); #else - camerabuff[bufferLen++] = hwSerial->read(); + buffer[bufferLen++] = hwSerial->read(); #endif } //printBuff(); -//camerabuff[bufferLen] = 0; -//Serial.println((char*)camerabuff); + //camerabuff[bufferLen] = 0; + //Serial.println((char*)camerabuff); return bufferLen; } diff --git a/Adafruit_VC0706.h b/Adafruit_VC0706.h index 609c73d..43ddf1b 100644 --- a/Adafruit_VC0706.h +++ b/Adafruit_VC0706.h @@ -14,6 +14,8 @@ BSD license, all text above must be included in any redistribution ****************************************************/ +#ifndef ADAFRUIT_VC0706 +#define ADAFRUIT_VC0706 #if ARDUINO >= 100 #include "Arduino.h" @@ -73,12 +75,13 @@ class Adafruit_VC0706 { #endif #endif Adafruit_VC0706(HardwareSerial *ser); // Constructor when using HardwareSerial - boolean begin(uint16_t baud = 38400); + boolean begin(uint32_t baud = 38400); boolean reset(void); boolean TVon(void); boolean TVoff(void); boolean takePicture(void); uint8_t *readPicture(uint8_t n); + uint8_t *readPicture(uint8_t *buffer, uint32_t n); boolean resumeVideo(void); uint32_t frameLength(void); char *getVersion(void); @@ -110,8 +113,8 @@ char* setBaud115200(); private: uint8_t serialNum; uint8_t camerabuff[CAMERABUFFSIZ+1]; - uint8_t bufferLen; - uint16_t frameptr; + uint32_t bufferLen; + uint32_t frameptr; #if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_) #if ARDUINO >= 100 @@ -125,7 +128,9 @@ char* setBaud115200(); void common_init(void); boolean runCommand(uint8_t cmd, uint8_t args[], uint8_t argn, uint8_t resp, boolean flushflag = true); void sendCommand(uint8_t cmd, uint8_t args[], uint8_t argn); - uint8_t readResponse(uint8_t numbytes, uint8_t timeout); + uint32_t readResponse(uint8_t *buffer, uint32_t numbytes, uint8_t timeout); boolean verifyResponse(uint8_t command); void printBuff(void); }; + +#endif