QC Control software

Dependencies:   mbed

Fork of dgps by Colin Stearns

Committer:
dylanembed123
Date:
Fri Feb 21 15:15:25 2014 +0000
Revision:
6:434d20e99e49
Parent:
2:f480097b329d
Camera takes an image and sends it back to the USB.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dylanembed123 6:434d20e99e49 1 /***************************************************
dylanembed123 6:434d20e99e49 2 This is a library for the Adafruit TTL JPEG Camera (VC0706 chipset)
dylanembed123 6:434d20e99e49 3
dylanembed123 6:434d20e99e49 4 Pick one up today in the adafruit shop!
dylanembed123 6:434d20e99e49 5 ------> http://www.adafruit.com/products/397
dylanembed123 6:434d20e99e49 6
dylanembed123 6:434d20e99e49 7 These displays use Serial to communicate, 2 pins are required to interface
dylanembed123 6:434d20e99e49 8
dylanembed123 6:434d20e99e49 9 Adafruit invests time and resources providing this open source code,
dylanembed123 6:434d20e99e49 10 please support Adafruit and open-source hardware by purchasing
dylanembed123 6:434d20e99e49 11 products from Adafruit!
dylanembed123 6:434d20e99e49 12
dylanembed123 6:434d20e99e49 13 Written by Limor Fried/Ladyada for Adafruit Industries.
dylanembed123 6:434d20e99e49 14 BSD license, all text above must be included in any redistribution
dylanembed123 6:434d20e99e49 15 ****************************************************/
dylanembed123 6:434d20e99e49 16
dylanembed123 6:434d20e99e49 17
dylanembed123 6:434d20e99e49 18 #include "camera.h"
dylanembed123 6:434d20e99e49 19
dylanembed123 6:434d20e99e49 20 Serial* Camera::camera=NULL;
dylanembed123 6:434d20e99e49 21 uint8_t Camera::serialNum=0;
dylanembed123 6:434d20e99e49 22
dylanembed123 6:434d20e99e49 23 Serial& Camera::getSerial(){
dylanembed123 6:434d20e99e49 24 if(camera==NULL){
dylanembed123 6:434d20e99e49 25 // Init Camera
dylanembed123 6:434d20e99e49 26 camera=new Serial(CAMERAPINTX,CAMERAPINRX);
dylanembed123 6:434d20e99e49 27 camera->baud(CAMERABAUD);
dylanembed123 6:434d20e99e49 28 serialNum=0;
dylanembed123 6:434d20e99e49 29 Camera temp;
dylanembed123 6:434d20e99e49 30 temp.reset();
dylanembed123 6:434d20e99e49 31 }
dylanembed123 6:434d20e99e49 32 return *camera;
dylanembed123 6:434d20e99e49 33 }
dylanembed123 6:434d20e99e49 34
dylanembed123 6:434d20e99e49 35 bool Camera::reset() {
dylanembed123 6:434d20e99e49 36 uint8_t args[] = {0x0};
dylanembed123 6:434d20e99e49 37 return runCommand(VC0706_RESET, args, 1, 5);
dylanembed123 6:434d20e99e49 38 }
dylanembed123 6:434d20e99e49 39
dylanembed123 6:434d20e99e49 40 /*
dylanembed123 6:434d20e99e49 41 // Initialization code used by all constructor types
dylanembed123 6:434d20e99e49 42 void Camera::common_init(void) {
dylanembed123 6:434d20e99e49 43 swSerial = NULL;
dylanembed123 6:434d20e99e49 44 hwSerial = NULL;
dylanembed123 6:434d20e99e49 45 frameptr = 0;
dylanembed123 6:434d20e99e49 46 bufferLen = 0;
dylanembed123 6:434d20e99e49 47 serialNum = 0;
dylanembed123 6:434d20e99e49 48 }
dylanembed123 6:434d20e99e49 49
dylanembed123 6:434d20e99e49 50 // Constructor when using SoftwareSerial or NewSoftSerial
dylanembed123 6:434d20e99e49 51 #if ARDUINO >= 100
dylanembed123 6:434d20e99e49 52 Camera::Camera(SoftwareSerial *ser) {
dylanembed123 6:434d20e99e49 53 #else
dylanembed123 6:434d20e99e49 54 Camera::Camera(NewSoftSerial *ser) {
dylanembed123 6:434d20e99e49 55 #endif
dylanembed123 6:434d20e99e49 56 common_init(); // Set everything to common state, then...
dylanembed123 6:434d20e99e49 57 swSerial = ser; // ...override swSerial with value passed.
dylanembed123 6:434d20e99e49 58 }
dylanembed123 6:434d20e99e49 59
dylanembed123 6:434d20e99e49 60 // Constructor when using HardwareSerial
dylanembed123 6:434d20e99e49 61 Camera::Camera(HardwareSerial *ser) {
dylanembed123 6:434d20e99e49 62 common_init(); // Set everything to common state, then...
dylanembed123 6:434d20e99e49 63 hwSerial = ser; // ...override hwSerial with value passed.
dylanembed123 6:434d20e99e49 64 }
dylanembed123 6:434d20e99e49 65
dylanembed123 6:434d20e99e49 66 boolean Camera::begin(uint16_t baud) {
dylanembed123 6:434d20e99e49 67 if(swSerial) swSerial->begin(baud);
dylanembed123 6:434d20e99e49 68 else hwSerial->begin(baud);
dylanembed123 6:434d20e99e49 69 return reset();
dylanembed123 6:434d20e99e49 70 }
dylanembed123 6:434d20e99e49 71
dylanembed123 6:434d20e99e49 72
dylanembed123 6:434d20e99e49 73 boolean Camera::motionDetected() {
dylanembed123 6:434d20e99e49 74 if (readResponse(4, 200) != 4) {
dylanembed123 6:434d20e99e49 75 return false;
dylanembed123 6:434d20e99e49 76 }
dylanembed123 6:434d20e99e49 77 if (! verifyResponse(VC0706_COMM_MOTION_DETECTED))
dylanembed123 6:434d20e99e49 78 return false;
dylanembed123 6:434d20e99e49 79
dylanembed123 6:434d20e99e49 80 return true;
dylanembed123 6:434d20e99e49 81 }
dylanembed123 6:434d20e99e49 82
dylanembed123 6:434d20e99e49 83
dylanembed123 6:434d20e99e49 84 uint8_t Camera::setMotionStatus(uint8_t x, uint8_t d1, uint8_t d2) {
dylanembed123 6:434d20e99e49 85 uint8_t args[] = {0x03, x, d1, d2};
dylanembed123 6:434d20e99e49 86
dylanembed123 6:434d20e99e49 87 return runCommand(VC0706_MOTION_CTRL, args, sizeof(args), 5);
dylanembed123 6:434d20e99e49 88 }
dylanembed123 6:434d20e99e49 89
dylanembed123 6:434d20e99e49 90
dylanembed123 6:434d20e99e49 91 uint8_t Camera::getMotionStatus(uint8_t x) {
dylanembed123 6:434d20e99e49 92 uint8_t args[] = {0x01, x};
dylanembed123 6:434d20e99e49 93
dylanembed123 6:434d20e99e49 94 return runCommand(VC0706_MOTION_STATUS, args, sizeof(args), 5);
dylanembed123 6:434d20e99e49 95 }
dylanembed123 6:434d20e99e49 96
dylanembed123 6:434d20e99e49 97
dylanembed123 6:434d20e99e49 98 boolean Camera::setMotionDetect(boolean flag) {
dylanembed123 6:434d20e99e49 99 if (! setMotionStatus(VC0706_MOTIONCONTROL,
dylanembed123 6:434d20e99e49 100 VC0706_UARTMOTION, VC0706_ACTIVATEMOTION))
dylanembed123 6:434d20e99e49 101 return false;
dylanembed123 6:434d20e99e49 102
dylanembed123 6:434d20e99e49 103 uint8_t args[] = {0x01, flag};
dylanembed123 6:434d20e99e49 104
dylanembed123 6:434d20e99e49 105 runCommand(VC0706_COMM_MOTION_CTRL, args, sizeof(args), 5);
dylanembed123 6:434d20e99e49 106 }
dylanembed123 6:434d20e99e49 107
dylanembed123 6:434d20e99e49 108
dylanembed123 6:434d20e99e49 109
dylanembed123 6:434d20e99e49 110 boolean Camera::getMotionDetect(void) {
dylanembed123 6:434d20e99e49 111 uint8_t args[] = {0x0};
dylanembed123 6:434d20e99e49 112
dylanembed123 6:434d20e99e49 113 if (! runCommand(VC0706_COMM_MOTION_STATUS, args, 1, 6))
dylanembed123 6:434d20e99e49 114 return false;
dylanembed123 6:434d20e99e49 115
dylanembed123 6:434d20e99e49 116 return camerabuff[5];
dylanembed123 6:434d20e99e49 117 }
dylanembed123 6:434d20e99e49 118 */
dylanembed123 6:434d20e99e49 119 uint8_t Camera::getImageSize() {
dylanembed123 6:434d20e99e49 120 uint8_t args[] = {0x4, 0x4, 0x1, 0x00, 0x19};
dylanembed123 6:434d20e99e49 121 if (! runCommand(VC0706_READ_DATA, args, sizeof(args), 6))
dylanembed123 6:434d20e99e49 122 return 0xFF;
dylanembed123 6:434d20e99e49 123
dylanembed123 6:434d20e99e49 124 return camerabuff[5];
dylanembed123 6:434d20e99e49 125 }
dylanembed123 6:434d20e99e49 126
dylanembed123 6:434d20e99e49 127 bool Camera::setImageSize(uint8_t x) {
dylanembed123 6:434d20e99e49 128 uint8_t args[] = {0x05, 0x04, 0x01, 0x00, 0x19, x};
dylanembed123 6:434d20e99e49 129 return runCommand(VC0706_WRITE_DATA, args, sizeof(args), 5);
dylanembed123 6:434d20e99e49 130 }
dylanembed123 6:434d20e99e49 131 /*
dylanembed123 6:434d20e99e49 132 // downsize image control
dylanembed123 6:434d20e99e49 133
dylanembed123 6:434d20e99e49 134 uint8_t Camera::getDownsize(void) {
dylanembed123 6:434d20e99e49 135 uint8_t args[] = {0x0};
dylanembed123 6:434d20e99e49 136 if (! runCommand(VC0706_DOWNSIZE_STATUS, args, 1, 6))
dylanembed123 6:434d20e99e49 137 return -1;
dylanembed123 6:434d20e99e49 138
dylanembed123 6:434d20e99e49 139 return camerabuff[5];
dylanembed123 6:434d20e99e49 140 }
dylanembed123 6:434d20e99e49 141
dylanembed123 6:434d20e99e49 142 boolean Camera::setDownsize(uint8_t newsize) {
dylanembed123 6:434d20e99e49 143 uint8_t args[] = {0x01, newsize};
dylanembed123 6:434d20e99e49 144
dylanembed123 6:434d20e99e49 145 return runCommand(VC0706_DOWNSIZE_CTRL, args, 2, 5);
dylanembed123 6:434d20e99e49 146 }
dylanembed123 6:434d20e99e49 147
dylanembed123 6:434d20e99e49 148 // other high level commands
dylanembed123 6:434d20e99e49 149 */
dylanembed123 6:434d20e99e49 150 char * Camera::getVersion(void) {
dylanembed123 6:434d20e99e49 151 uint8_t args[] = {0x01};
dylanembed123 6:434d20e99e49 152
dylanembed123 6:434d20e99e49 153 sendCommand(VC0706_GEN_VERSION, args, 1);
dylanembed123 6:434d20e99e49 154 // get reply
dylanembed123 6:434d20e99e49 155 if (!readResponse(CAMERABUFFSIZ, 200)){
dylanembed123 6:434d20e99e49 156 return 0;
dylanembed123 6:434d20e99e49 157 }
dylanembed123 6:434d20e99e49 158 camerabuff[bufferLen] = 0; // end it!
dylanembed123 6:434d20e99e49 159 return (char *)camerabuff; // return it!
dylanembed123 6:434d20e99e49 160 }
dylanembed123 6:434d20e99e49 161 /*
dylanembed123 6:434d20e99e49 162
dylanembed123 6:434d20e99e49 163 // high level photo comamnds
dylanembed123 6:434d20e99e49 164
dylanembed123 6:434d20e99e49 165 void Camera::OSD(uint8_t x, uint8_t y, char *str) {
dylanembed123 6:434d20e99e49 166 if (strlen(str) > 14) { str[13] = 0; }
dylanembed123 6:434d20e99e49 167
dylanembed123 6:434d20e99e49 168 uint8_t args[17] = {strlen(str), strlen(str)-1, (y & 0xF) | ((x & 0x3) << 4)};
dylanembed123 6:434d20e99e49 169
dylanembed123 6:434d20e99e49 170 for (uint8_t i=0; i<strlen(str); i++) {
dylanembed123 6:434d20e99e49 171 char c = str[i];
dylanembed123 6:434d20e99e49 172 if ((c >= '0') && (c <= '9')) {
dylanembed123 6:434d20e99e49 173 str[i] -= '0';
dylanembed123 6:434d20e99e49 174 } else if ((c >= 'A') && (c <= 'Z')) {
dylanembed123 6:434d20e99e49 175 str[i] -= 'A';
dylanembed123 6:434d20e99e49 176 str[i] += 10;
dylanembed123 6:434d20e99e49 177 } else if ((c >= 'a') && (c <= 'z')) {
dylanembed123 6:434d20e99e49 178 str[i] -= 'a';
dylanembed123 6:434d20e99e49 179 str[i] += 36;
dylanembed123 6:434d20e99e49 180 }
dylanembed123 6:434d20e99e49 181
dylanembed123 6:434d20e99e49 182 args[3+i] = str[i];
dylanembed123 6:434d20e99e49 183 }
dylanembed123 6:434d20e99e49 184
dylanembed123 6:434d20e99e49 185 runCommand(VC0706_OSD_ADD_CHAR, args, strlen(str)+3, 5);
dylanembed123 6:434d20e99e49 186 printBuff();
dylanembed123 6:434d20e99e49 187 }
dylanembed123 6:434d20e99e49 188
dylanembed123 6:434d20e99e49 189 boolean Camera::setCompression(uint8_t c) {
dylanembed123 6:434d20e99e49 190 uint8_t args[] = {0x5, 0x1, 0x1, 0x12, 0x04, c};
dylanembed123 6:434d20e99e49 191 return runCommand(VC0706_WRITE_DATA, args, sizeof(args), 5);
dylanembed123 6:434d20e99e49 192 }
dylanembed123 6:434d20e99e49 193
dylanembed123 6:434d20e99e49 194 uint8_t Camera::getCompression(void) {
dylanembed123 6:434d20e99e49 195 uint8_t args[] = {0x4, 0x1, 0x1, 0x12, 0x04};
dylanembed123 6:434d20e99e49 196 runCommand(VC0706_READ_DATA, args, sizeof(args), 6);
dylanembed123 6:434d20e99e49 197 printBuff();
dylanembed123 6:434d20e99e49 198 return camerabuff[5];
dylanembed123 6:434d20e99e49 199 }
dylanembed123 6:434d20e99e49 200
dylanembed123 6:434d20e99e49 201 boolean Camera::setPTZ(uint16_t wz, uint16_t hz, uint16_t pan, uint16_t tilt) {
dylanembed123 6:434d20e99e49 202 uint8_t args[] = {0x08, wz >> 8, wz,
dylanembed123 6:434d20e99e49 203 hz >> 8, wz,
dylanembed123 6:434d20e99e49 204 pan>>8, pan,
dylanembed123 6:434d20e99e49 205 tilt>>8, tilt};
dylanembed123 6:434d20e99e49 206
dylanembed123 6:434d20e99e49 207 return (! runCommand(VC0706_SET_ZOOM, args, sizeof(args), 5));
dylanembed123 6:434d20e99e49 208 }
dylanembed123 6:434d20e99e49 209
dylanembed123 6:434d20e99e49 210
dylanembed123 6:434d20e99e49 211 boolean Camera::getPTZ(uint16_t &w, uint16_t &h, uint16_t &wz, uint16_t &hz, uint16_t &pan, uint16_t &tilt) {
dylanembed123 6:434d20e99e49 212 uint8_t args[] = {0x0};
dylanembed123 6:434d20e99e49 213
dylanembed123 6:434d20e99e49 214 if (! runCommand(VC0706_GET_ZOOM, args, sizeof(args), 16))
dylanembed123 6:434d20e99e49 215 return false;
dylanembed123 6:434d20e99e49 216 printBuff();
dylanembed123 6:434d20e99e49 217
dylanembed123 6:434d20e99e49 218 w = camerabuff[5];
dylanembed123 6:434d20e99e49 219 w <<= 8;
dylanembed123 6:434d20e99e49 220 w |= camerabuff[6];
dylanembed123 6:434d20e99e49 221
dylanembed123 6:434d20e99e49 222 h = camerabuff[7];
dylanembed123 6:434d20e99e49 223 h <<= 8;
dylanembed123 6:434d20e99e49 224 h |= camerabuff[8];
dylanembed123 6:434d20e99e49 225
dylanembed123 6:434d20e99e49 226 wz = camerabuff[9];
dylanembed123 6:434d20e99e49 227 wz <<= 8;
dylanembed123 6:434d20e99e49 228 wz |= camerabuff[10];
dylanembed123 6:434d20e99e49 229
dylanembed123 6:434d20e99e49 230 hz = camerabuff[11];
dylanembed123 6:434d20e99e49 231 hz <<= 8;
dylanembed123 6:434d20e99e49 232 hz |= camerabuff[12];
dylanembed123 6:434d20e99e49 233
dylanembed123 6:434d20e99e49 234 pan = camerabuff[13];
dylanembed123 6:434d20e99e49 235 pan <<= 8;
dylanembed123 6:434d20e99e49 236 pan |= camerabuff[14];
dylanembed123 6:434d20e99e49 237
dylanembed123 6:434d20e99e49 238 tilt = camerabuff[15];
dylanembed123 6:434d20e99e49 239 tilt <<= 8;
dylanembed123 6:434d20e99e49 240 tilt |= camerabuff[16];
dylanembed123 6:434d20e99e49 241
dylanembed123 6:434d20e99e49 242 return true;
dylanembed123 6:434d20e99e49 243 }
dylanembed123 6:434d20e99e49 244
dylanembed123 6:434d20e99e49 245 */
dylanembed123 6:434d20e99e49 246 bool Camera::takePicture() {
dylanembed123 6:434d20e99e49 247 frameptr = 0;
dylanembed123 6:434d20e99e49 248 return cameraFrameBuffCtrl(VC0706_STOPCURRENTFRAME);
dylanembed123 6:434d20e99e49 249 }
dylanembed123 6:434d20e99e49 250 /*
dylanembed123 6:434d20e99e49 251 boolean Camera::resumeVideo() {
dylanembed123 6:434d20e99e49 252 return cameraFrameBuffCtrl(VC0706_RESUMEFRAME);
dylanembed123 6:434d20e99e49 253 }
dylanembed123 6:434d20e99e49 254
dylanembed123 6:434d20e99e49 255 boolean Camera::TVon() {
dylanembed123 6:434d20e99e49 256 uint8_t args[] = {0x1, 0x1};
dylanembed123 6:434d20e99e49 257 return runCommand(VC0706_TVOUT_CTRL, args, sizeof(args), 5);
dylanembed123 6:434d20e99e49 258 }
dylanembed123 6:434d20e99e49 259 boolean Camera::TVoff() {
dylanembed123 6:434d20e99e49 260 uint8_t args[] = {0x1, 0x0};
dylanembed123 6:434d20e99e49 261 return runCommand(VC0706_TVOUT_CTRL, args, sizeof(args), 5);
dylanembed123 6:434d20e99e49 262 }
dylanembed123 6:434d20e99e49 263 */
dylanembed123 6:434d20e99e49 264 bool Camera::cameraFrameBuffCtrl(uint8_t command) {
dylanembed123 6:434d20e99e49 265 uint8_t args[] = {0x1, command};
dylanembed123 6:434d20e99e49 266 return runCommand(VC0706_FBUF_CTRL, args, sizeof(args), 5);
dylanembed123 6:434d20e99e49 267 }
dylanembed123 6:434d20e99e49 268
dylanembed123 6:434d20e99e49 269 uint32_t Camera::frameLength(void) {
dylanembed123 6:434d20e99e49 270 uint8_t args[] = {0x01, 0x00};
dylanembed123 6:434d20e99e49 271 if (!runCommand(VC0706_GET_FBUF_LEN, args, sizeof(args), 9))
dylanembed123 6:434d20e99e49 272 return 0;
dylanembed123 6:434d20e99e49 273
dylanembed123 6:434d20e99e49 274 uint32_t len;
dylanembed123 6:434d20e99e49 275 len = camerabuff[5];
dylanembed123 6:434d20e99e49 276 len <<= 8;
dylanembed123 6:434d20e99e49 277 len |= camerabuff[6];
dylanembed123 6:434d20e99e49 278 len <<= 8;
dylanembed123 6:434d20e99e49 279 len |= camerabuff[7];
dylanembed123 6:434d20e99e49 280 len <<= 8;
dylanembed123 6:434d20e99e49 281 len |= camerabuff[8];
dylanembed123 6:434d20e99e49 282
dylanembed123 6:434d20e99e49 283 return len;
dylanembed123 6:434d20e99e49 284 }
dylanembed123 6:434d20e99e49 285 /*
dylanembed123 6:434d20e99e49 286
dylanembed123 6:434d20e99e49 287 uint8_t Camera::available(void) {
dylanembed123 6:434d20e99e49 288 return bufferLen;
dylanembed123 6:434d20e99e49 289 }
dylanembed123 6:434d20e99e49 290
dylanembed123 6:434d20e99e49 291 */
dylanembed123 6:434d20e99e49 292 uint8_t * Camera::readPicture(uint8_t n,uint8_t* outSize) {
dylanembed123 6:434d20e99e49 293 uint8_t args[] = {0x0C, 0x0, 0x0A,
dylanembed123 6:434d20e99e49 294 0, 0, frameptr >> 8, frameptr & 0xFF,
dylanembed123 6:434d20e99e49 295 0, 0, 0, n,
dylanembed123 6:434d20e99e49 296 CAMERADELAY >> 8, CAMERADELAY & 0xFF};
dylanembed123 6:434d20e99e49 297
dylanembed123 6:434d20e99e49 298 if (! runCommand(VC0706_READ_FBUF, args, sizeof(args), 5, false))
dylanembed123 6:434d20e99e49 299 return 0;
dylanembed123 6:434d20e99e49 300
dylanembed123 6:434d20e99e49 301
dylanembed123 6:434d20e99e49 302 // read into the buffer PACKETLEN!
dylanembed123 6:434d20e99e49 303 int outputSize=readResponse(n+5, CAMERADELAY)-5;
dylanembed123 6:434d20e99e49 304 if (outputSize == 0)
dylanembed123 6:434d20e99e49 305 return 0;
dylanembed123 6:434d20e99e49 306 if(outSize!=NULL)*outSize=outputSize;
dylanembed123 6:434d20e99e49 307
dylanembed123 6:434d20e99e49 308 frameptr += outputSize;
dylanembed123 6:434d20e99e49 309
dylanembed123 6:434d20e99e49 310 return camerabuff;
dylanembed123 6:434d20e99e49 311 }
dylanembed123 6:434d20e99e49 312
dylanembed123 6:434d20e99e49 313
dylanembed123 6:434d20e99e49 314 //
dylanembed123 6:434d20e99e49 315 // Low level commands
dylanembed123 6:434d20e99e49 316 //
dylanembed123 6:434d20e99e49 317
dylanembed123 6:434d20e99e49 318 bool Camera::runCommand(uint8_t cmd, uint8_t *args, uint8_t argn, uint8_t resplen, bool flushflag) {
dylanembed123 6:434d20e99e49 319 // flush out anything in the buffer?
dylanembed123 6:434d20e99e49 320 if (flushflag) {
dylanembed123 6:434d20e99e49 321 readResponse(100, 10);
dylanembed123 6:434d20e99e49 322 }
dylanembed123 6:434d20e99e49 323
dylanembed123 6:434d20e99e49 324 sendCommand(cmd, args, argn);
dylanembed123 6:434d20e99e49 325 if (readResponse(resplen, 200) != resplen)
dylanembed123 6:434d20e99e49 326 return false;
dylanembed123 6:434d20e99e49 327 if (! verifyResponse(cmd))
dylanembed123 6:434d20e99e49 328 return false;
dylanembed123 6:434d20e99e49 329 return true;
dylanembed123 6:434d20e99e49 330 }
dylanembed123 6:434d20e99e49 331
dylanembed123 6:434d20e99e49 332
dylanembed123 6:434d20e99e49 333 void Camera::sendCommand(uint8_t cmd, uint8_t args[], uint8_t argn) {
dylanembed123 6:434d20e99e49 334 getSerial().putc(0x56);
dylanembed123 6:434d20e99e49 335 getSerial().putc(serialNum);
dylanembed123 6:434d20e99e49 336 getSerial().putc(cmd);
dylanembed123 6:434d20e99e49 337
dylanembed123 6:434d20e99e49 338 for (uint8_t i=0; i<argn; i++) {
dylanembed123 6:434d20e99e49 339 getSerial().putc(args[i]);
dylanembed123 6:434d20e99e49 340 }
dylanembed123 6:434d20e99e49 341 }
dylanembed123 6:434d20e99e49 342
dylanembed123 6:434d20e99e49 343 uint8_t Camera::readResponse(uint8_t numbytes, uint8_t timeout) {
dylanembed123 6:434d20e99e49 344 uint8_t counter = 0;
dylanembed123 6:434d20e99e49 345 bufferLen = 0;
dylanembed123 6:434d20e99e49 346
dylanembed123 6:434d20e99e49 347 while ((timeout != counter) && (bufferLen != numbytes)){
dylanembed123 6:434d20e99e49 348 int avail = getSerial().readable();
dylanembed123 6:434d20e99e49 349 if (avail <= 0) {
dylanembed123 6:434d20e99e49 350 wait_ms(1);
dylanembed123 6:434d20e99e49 351 counter++;
dylanembed123 6:434d20e99e49 352 continue;
dylanembed123 6:434d20e99e49 353 }
dylanembed123 6:434d20e99e49 354 counter = 0;
dylanembed123 6:434d20e99e49 355 // there's a byte!
dylanembed123 6:434d20e99e49 356 camerabuff[bufferLen++] = getSerial().getc();
dylanembed123 6:434d20e99e49 357 }
dylanembed123 6:434d20e99e49 358 return bufferLen;
dylanembed123 6:434d20e99e49 359 }
dylanembed123 6:434d20e99e49 360
dylanembed123 6:434d20e99e49 361 bool Camera::verifyResponse(uint8_t command) {
dylanembed123 6:434d20e99e49 362 if ((camerabuff[0] != 0x76) ||
dylanembed123 6:434d20e99e49 363 (camerabuff[1] != serialNum) ||
dylanembed123 6:434d20e99e49 364 (camerabuff[2] != command) ||
dylanembed123 6:434d20e99e49 365 (camerabuff[3] != 0x0))
dylanembed123 6:434d20e99e49 366 return false;
dylanembed123 6:434d20e99e49 367 return true;
dylanembed123 6:434d20e99e49 368
dylanembed123 6:434d20e99e49 369 }
dylanembed123 6:434d20e99e49 370
dylanembed123 6:434d20e99e49 371 void Camera::printBuff() {
dylanembed123 6:434d20e99e49 372 }