Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.iml
.idea
67 changes: 44 additions & 23 deletions Adafruit_VC0706.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand All @@ -47,8 +47,8 @@ Adafruit_VC0706::Adafruit_VC0706(HardwareSerial *ser) {
hwSerial = ser; // ...override hwSerial with value passed.
}

boolean Adafruit_VC0706::begin(uint16_t baud) {
#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_)
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
#endif
Expand All @@ -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))
Expand Down Expand Up @@ -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!
Expand All @@ -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!
Expand All @@ -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!
Expand All @@ -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!
Expand All @@ -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!
Expand All @@ -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!
Expand Down Expand Up @@ -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;


Expand All @@ -359,26 +359,47 @@ 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 */


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;
return true;
}

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);
Expand Down Expand Up @@ -430,13 +451,13 @@ 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;

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();
Expand All @@ -448,15 +469,15 @@ 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_)
camerabuff[bufferLen++] = swSerial ? swSerial->read() : hwSerial->read();
#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_)
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;
}

Expand Down
19 changes: 12 additions & 7 deletions Adafruit_VC0706.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@
BSD license, all text above must be included in any redistribution
****************************************************/

#ifndef ADAFRUIT_VC0706
#define ADAFRUIT_VC0706

#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 <SoftwareSerial.h>
#endif
#else
Expand Down Expand Up @@ -65,20 +67,21 @@

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
Adafruit_VC0706(NewSoftSerial *ser); // Constructor when using NewSoftSerial
#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);
Expand Down Expand Up @@ -110,10 +113,10 @@ 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_)
#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_) && not defined (_VARIANT_ARDUINO_STM32_)
#if ARDUINO >= 100
SoftwareSerial *swSerial;
#else
Expand All @@ -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