VC0706 driver for radio shack camera shield
Sample Code
#include "mbed.h" #include "SDFileSystem.h" #include "CameraShield.h" #include <stdio.h> unsigned char VC0706_rx_buffer[80]; SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd", PTE6, SDFileSystem::SWITCH_POS_NO, 25000000); // MOSI, MISO, SCLK, SSEL CameraShield camera(PTC17, PTC16); void CapturePhoto() { uint32_t frame_length = camera.VC0706_get_frame_buffer_length(); //get frame buffer length uint32_t vc_frame_address = READ_DATA_BLOCK_NO; FILE* camFile = fopen("/sd/temp.jpg", "w"); while(vc_frame_address<frame_length) { camera.VC0706_read_frame_buffer(vc_frame_address - READ_DATA_BLOCK_NO, READ_DATA_BLOCK_NO); wait_ms(9); //get the data with length=READ_DATA_BLOCK_NObytes camera.buffer_read(VC0706_rx_buffer, 80); // write data to temp.jpg fwrite(VC0706_rx_buffer + 5, sizeof(char), READ_DATA_BLOCK_NO, camFile); //read next READ_DATA_BLOCK_NO bytes from frame buffer vc_frame_address = vc_frame_address + READ_DATA_BLOCK_NO; } // get the last data vc_frame_address = vc_frame_address - READ_DATA_BLOCK_NO; uint32_t last_data_length = frame_length - vc_frame_address; camera.VC0706_read_frame_buffer(vc_frame_address, last_data_length); wait_ms(9); //get the data camera.buffer_read(VC0706_rx_buffer, 80); fwrite(VC0706_rx_buffer+5, sizeof(char), last_data_length, camFile); fclose(camFile); } int main (void) { // Check to see if the file exists: // if exists,delete the file: sd.remove("/sd/temp.jpg"); camera.Init(); camera.VC0706_image_size(VC0706_640x480); camera.ResumeVideo(); wait_ms(500); while(1) { camera.ResumeVideo(); wait_ms(1000); camera.TakeSnapShot(); CapturePhoto(); } }
CameraShield.cpp@1:5cff9e627e06, 2014-12-18 (annotated)
- Committer:
- davidr99
- Date:
- Thu Dec 18 04:36:48 2014 +0000
- Revision:
- 1:5cff9e627e06
- Parent:
- 0:e5fc19091502
Added modserial to its dependency
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
davidr99 | 0:e5fc19091502 | 1 | /***************************************************************************************** |
davidr99 | 0:e5fc19091502 | 2 | ** File: CameraShield.cpp ** |
davidr99 | 0:e5fc19091502 | 3 | ** ** |
davidr99 | 0:e5fc19091502 | 4 | ** For radio shack Camera Shield. ** |
davidr99 | 0:e5fc19091502 | 5 | ** http://blog.radioshack.com/2013/01/radioshack-camera-shield-for-arduino-boards/ ** |
davidr99 | 0:e5fc19091502 | 6 | *****************************************************************************************/ |
davidr99 | 0:e5fc19091502 | 7 | |
davidr99 | 0:e5fc19091502 | 8 | #include "CameraShield.h" |
davidr99 | 0:e5fc19091502 | 9 | |
davidr99 | 0:e5fc19091502 | 10 | |
davidr99 | 0:e5fc19091502 | 11 | CameraShield::CameraShield ( PinName tx, PinName rx, int speed ) : _serial(tx, rx) |
davidr99 | 0:e5fc19091502 | 12 | { |
davidr99 | 0:e5fc19091502 | 13 | _serial.baud(speed); |
davidr99 | 0:e5fc19091502 | 14 | } |
davidr99 | 0:e5fc19091502 | 15 | |
davidr99 | 0:e5fc19091502 | 16 | |
davidr99 | 0:e5fc19091502 | 17 | void CameraShield::Init() |
davidr99 | 0:e5fc19091502 | 18 | { |
davidr99 | 0:e5fc19091502 | 19 | VC0706_compression_ratio(63); |
davidr99 | 0:e5fc19091502 | 20 | wait_ms(100); |
davidr99 | 0:e5fc19091502 | 21 | |
davidr99 | 0:e5fc19091502 | 22 | VC0706_frame_control(3); |
davidr99 | 0:e5fc19091502 | 23 | wait_ms(10); |
davidr99 | 0:e5fc19091502 | 24 | } |
davidr99 | 0:e5fc19091502 | 25 | |
davidr99 | 0:e5fc19091502 | 26 | |
davidr99 | 0:e5fc19091502 | 27 | void CameraShield::TakeSnapShot() |
davidr99 | 0:e5fc19091502 | 28 | { |
davidr99 | 0:e5fc19091502 | 29 | VC0706_frame_control(0); |
davidr99 | 0:e5fc19091502 | 30 | wait_ms(10); |
davidr99 | 0:e5fc19091502 | 31 | _serial.rxBufferFlush(); |
davidr99 | 0:e5fc19091502 | 32 | } |
davidr99 | 0:e5fc19091502 | 33 | |
davidr99 | 0:e5fc19091502 | 34 | |
davidr99 | 0:e5fc19091502 | 35 | void CameraShield::ResumeVideo() |
davidr99 | 0:e5fc19091502 | 36 | { |
davidr99 | 0:e5fc19091502 | 37 | VC0706_frame_control(3); |
davidr99 | 0:e5fc19091502 | 38 | wait_ms(10); |
davidr99 | 0:e5fc19091502 | 39 | _serial.rxBufferFlush(); |
davidr99 | 0:e5fc19091502 | 40 | } |
davidr99 | 0:e5fc19091502 | 41 | |
davidr99 | 0:e5fc19091502 | 42 | |
davidr99 | 0:e5fc19091502 | 43 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 44 | * Function Name : VC0706_reset |
davidr99 | 0:e5fc19091502 | 45 | * Description : Reset VC0706 |
davidr99 | 0:e5fc19091502 | 46 | * |
davidr99 | 0:e5fc19091502 | 47 | * Input : None |
davidr99 | 0:e5fc19091502 | 48 | * |
davidr99 | 0:e5fc19091502 | 49 | * Output : None |
davidr99 | 0:e5fc19091502 | 50 | * Return : None |
davidr99 | 0:e5fc19091502 | 51 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 52 | void CameraShield::VC0706_reset(void) |
davidr99 | 0:e5fc19091502 | 53 | { |
davidr99 | 0:e5fc19091502 | 54 | unsigned char tx_vcbuffer[4]; |
davidr99 | 0:e5fc19091502 | 55 | |
davidr99 | 0:e5fc19091502 | 56 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 57 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 58 | tx_vcbuffer[2]=VC0706_COMMAND_RESET; |
davidr99 | 0:e5fc19091502 | 59 | tx_vcbuffer[3]=0x00; |
davidr99 | 0:e5fc19091502 | 60 | |
davidr99 | 0:e5fc19091502 | 61 | buffer_send(tx_vcbuffer, 4); |
davidr99 | 0:e5fc19091502 | 62 | } |
davidr99 | 0:e5fc19091502 | 63 | |
davidr99 | 0:e5fc19091502 | 64 | |
davidr99 | 0:e5fc19091502 | 65 | |
davidr99 | 0:e5fc19091502 | 66 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 67 | * Function Name : VC0706_get_version |
davidr99 | 0:e5fc19091502 | 68 | * Description : Request version string from VC0706 |
davidr99 | 0:e5fc19091502 | 69 | * |
davidr99 | 0:e5fc19091502 | 70 | * Input : None |
davidr99 | 0:e5fc19091502 | 71 | * |
davidr99 | 0:e5fc19091502 | 72 | * Output : None |
davidr99 | 0:e5fc19091502 | 73 | * Return : None |
davidr99 | 0:e5fc19091502 | 74 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 75 | void CameraShield::VC0706_get_version() |
davidr99 | 0:e5fc19091502 | 76 | { |
davidr99 | 0:e5fc19091502 | 77 | unsigned char tx_vcbuffer[4]; |
davidr99 | 0:e5fc19091502 | 78 | |
davidr99 | 0:e5fc19091502 | 79 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 80 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 81 | tx_vcbuffer[2]=VC0706_COMMAND_GEN_VERSION; |
davidr99 | 0:e5fc19091502 | 82 | tx_vcbuffer[3]=0x00; |
davidr99 | 0:e5fc19091502 | 83 | |
davidr99 | 0:e5fc19091502 | 84 | buffer_send(tx_vcbuffer, 4); |
davidr99 | 0:e5fc19091502 | 85 | } |
davidr99 | 0:e5fc19091502 | 86 | |
davidr99 | 0:e5fc19091502 | 87 | |
davidr99 | 0:e5fc19091502 | 88 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 89 | * Function Name : VC0706_tv_out_control |
davidr99 | 0:e5fc19091502 | 90 | * Description : stop or start TV output from VC0706 |
davidr99 | 0:e5fc19091502 | 91 | * |
davidr99 | 0:e5fc19091502 | 92 | * Input : on=0 stop tv output |
davidr99 | 0:e5fc19091502 | 93 | ; : on=1 start tv output |
davidr99 | 0:e5fc19091502 | 94 | * |
davidr99 | 0:e5fc19091502 | 95 | * Output : None |
davidr99 | 0:e5fc19091502 | 96 | * Return : None |
davidr99 | 0:e5fc19091502 | 97 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 98 | void CameraShield::VC0706_tv_out_control(int on) |
davidr99 | 0:e5fc19091502 | 99 | { |
davidr99 | 0:e5fc19091502 | 100 | unsigned char tx_vcbuffer[5]; |
davidr99 | 0:e5fc19091502 | 101 | |
davidr99 | 0:e5fc19091502 | 102 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 103 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 104 | tx_vcbuffer[2]=VC0706_COMMAND_TV_OUT_CTRL; |
davidr99 | 0:e5fc19091502 | 105 | tx_vcbuffer[3]=0x01; |
davidr99 | 0:e5fc19091502 | 106 | tx_vcbuffer[4]=on; |
davidr99 | 0:e5fc19091502 | 107 | |
davidr99 | 0:e5fc19091502 | 108 | buffer_send(tx_vcbuffer, 5); |
davidr99 | 0:e5fc19091502 | 109 | } |
davidr99 | 0:e5fc19091502 | 110 | |
davidr99 | 0:e5fc19091502 | 111 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 112 | * Function Name : VC0706_osd_add_char |
davidr99 | 0:e5fc19091502 | 113 | * Description : ADD OSD CHARACTERS TO CHANNELS(CHANNEL 1) |
davidr99 | 0:e5fc19091502 | 114 | * |
davidr99 | 0:e5fc19091502 | 115 | * Input : col : Display column |
davidr99 | 0:e5fc19091502 | 116 | * ` row: Display Row |
davidr99 | 0:e5fc19091502 | 117 | * osd_string : display string (max 14 characters) |
davidr99 | 0:e5fc19091502 | 118 | * |
davidr99 | 0:e5fc19091502 | 119 | * Output : None |
davidr99 | 0:e5fc19091502 | 120 | * Return : None |
davidr99 | 0:e5fc19091502 | 121 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 122 | void CameraShield::VC0706_osd_add_char(int col, int row, char * osd_string) |
davidr99 | 0:e5fc19091502 | 123 | { |
davidr99 | 0:e5fc19091502 | 124 | unsigned char tx_vcbuffer[80]; |
davidr99 | 0:e5fc19091502 | 125 | unsigned char col_row; |
davidr99 | 0:e5fc19091502 | 126 | int string_length; |
davidr99 | 0:e5fc19091502 | 127 | int i; |
davidr99 | 0:e5fc19091502 | 128 | |
davidr99 | 0:e5fc19091502 | 129 | col&=0x0f; |
davidr99 | 0:e5fc19091502 | 130 | row&=0x0f; |
davidr99 | 0:e5fc19091502 | 131 | col_row=(unsigned char)(col<<4 | row); |
davidr99 | 0:e5fc19091502 | 132 | |
davidr99 | 0:e5fc19091502 | 133 | string_length=strlen(osd_string); |
davidr99 | 0:e5fc19091502 | 134 | if (string_length>14) |
davidr99 | 0:e5fc19091502 | 135 | string_length=14; // max 14 osd characters |
davidr99 | 0:e5fc19091502 | 136 | |
davidr99 | 0:e5fc19091502 | 137 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 138 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 139 | tx_vcbuffer[2]=VC0706_COMMAND_OSD_ADD_CHAR; |
davidr99 | 0:e5fc19091502 | 140 | tx_vcbuffer[3]=string_length+2; |
davidr99 | 0:e5fc19091502 | 141 | tx_vcbuffer[4]=string_length; // character number |
davidr99 | 0:e5fc19091502 | 142 | tx_vcbuffer[5]=col_row; |
davidr99 | 0:e5fc19091502 | 143 | |
davidr99 | 0:e5fc19091502 | 144 | for (i=0;i<string_length;i++) |
davidr99 | 0:e5fc19091502 | 145 | { |
davidr99 | 0:e5fc19091502 | 146 | tx_vcbuffer[i+6]=osd_string[i]; |
davidr99 | 0:e5fc19091502 | 147 | } |
davidr99 | 0:e5fc19091502 | 148 | |
davidr99 | 0:e5fc19091502 | 149 | |
davidr99 | 0:e5fc19091502 | 150 | buffer_send(tx_vcbuffer, string_length+6); |
davidr99 | 0:e5fc19091502 | 151 | } |
davidr99 | 0:e5fc19091502 | 152 | |
davidr99 | 0:e5fc19091502 | 153 | |
davidr99 | 0:e5fc19091502 | 154 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 155 | * Function Name : VC0706_w_h_downsize |
davidr99 | 0:e5fc19091502 | 156 | * Description : control width and height downsize attribute |
davidr99 | 0:e5fc19091502 | 157 | * |
davidr99 | 0:e5fc19091502 | 158 | * Input : scale_width = 0 1:1 |
davidr99 | 0:e5fc19091502 | 159 | * = 1 1:2 |
davidr99 | 0:e5fc19091502 | 160 | * = 2 1:4 |
davidr99 | 0:e5fc19091502 | 161 | * scale_height= 0 1:1 |
davidr99 | 0:e5fc19091502 | 162 | * = 1 1:2 |
davidr99 | 0:e5fc19091502 | 163 | * = 2 1:4 |
davidr99 | 0:e5fc19091502 | 164 | * |
davidr99 | 0:e5fc19091502 | 165 | * Output : None |
davidr99 | 0:e5fc19091502 | 166 | * Return : None |
davidr99 | 0:e5fc19091502 | 167 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 168 | void CameraShield::VC0706_w_h_downsize(int scale_width, int scale_height) |
davidr99 | 0:e5fc19091502 | 169 | { |
davidr99 | 0:e5fc19091502 | 170 | int scale; |
davidr99 | 0:e5fc19091502 | 171 | unsigned char tx_vcbuffer[5]; |
davidr99 | 0:e5fc19091502 | 172 | |
davidr99 | 0:e5fc19091502 | 173 | if (scale_width>=2) scale_width=2; |
davidr99 | 0:e5fc19091502 | 174 | if (scale_height>scale_width) scale_height=scale_width; |
davidr99 | 0:e5fc19091502 | 175 | scale=(unsigned char)(scale_height<<2 | scale_width); |
davidr99 | 0:e5fc19091502 | 176 | |
davidr99 | 0:e5fc19091502 | 177 | |
davidr99 | 0:e5fc19091502 | 178 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 179 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 180 | tx_vcbuffer[2]=VC0706_COMMAND_DOWNSIZE_SIZE; |
davidr99 | 0:e5fc19091502 | 181 | tx_vcbuffer[3]=0x01; |
davidr99 | 0:e5fc19091502 | 182 | |
davidr99 | 0:e5fc19091502 | 183 | tx_vcbuffer[4]=scale; //bit[1:0] width zooming proportion |
davidr99 | 0:e5fc19091502 | 184 | //bit[3:2] height zooming proportion |
davidr99 | 0:e5fc19091502 | 185 | |
davidr99 | 0:e5fc19091502 | 186 | buffer_send(tx_vcbuffer, 5); |
davidr99 | 0:e5fc19091502 | 187 | } |
davidr99 | 0:e5fc19091502 | 188 | |
davidr99 | 0:e5fc19091502 | 189 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 190 | * Function Name : VC0706_read_frame_buffer |
davidr99 | 0:e5fc19091502 | 191 | * Description : read image data from FBUF |
davidr99 | 0:e5fc19091502 | 192 | * |
davidr99 | 0:e5fc19091502 | 193 | * Input : buffer_address(4 bytes); buffer_length(4 bytes) |
davidr99 | 0:e5fc19091502 | 194 | * |
davidr99 | 0:e5fc19091502 | 195 | * Output : None |
davidr99 | 0:e5fc19091502 | 196 | * Return : None |
davidr99 | 0:e5fc19091502 | 197 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 198 | void CameraShield::VC0706_read_frame_buffer(unsigned long buffer_address, unsigned long buffer_length) |
davidr99 | 0:e5fc19091502 | 199 | { |
davidr99 | 0:e5fc19091502 | 200 | unsigned char tx_vcbuffer[16]; |
davidr99 | 0:e5fc19091502 | 201 | |
davidr99 | 0:e5fc19091502 | 202 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 203 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 204 | tx_vcbuffer[2]=VC0706_COMMAND_READ_FBUF; |
davidr99 | 0:e5fc19091502 | 205 | tx_vcbuffer[3]=0x0c; |
davidr99 | 0:e5fc19091502 | 206 | tx_vcbuffer[4]=FBUF_CURRENT_FRAME; |
davidr99 | 0:e5fc19091502 | 207 | tx_vcbuffer[5]=0x0a; // 0x0a=data transfer by MCU mode; 0x0f=data transfer by SPI interface |
davidr99 | 0:e5fc19091502 | 208 | tx_vcbuffer[6]=buffer_address>>24; //starting address |
davidr99 | 0:e5fc19091502 | 209 | tx_vcbuffer[7]=buffer_address>>16; |
davidr99 | 0:e5fc19091502 | 210 | tx_vcbuffer[8]=buffer_address>>8; |
davidr99 | 0:e5fc19091502 | 211 | tx_vcbuffer[9]=buffer_address&0x0ff; |
davidr99 | 0:e5fc19091502 | 212 | |
davidr99 | 0:e5fc19091502 | 213 | tx_vcbuffer[10]=buffer_length>>24; // data length |
davidr99 | 0:e5fc19091502 | 214 | tx_vcbuffer[11]=buffer_length>>16; |
davidr99 | 0:e5fc19091502 | 215 | tx_vcbuffer[12]=buffer_length>>8; |
davidr99 | 0:e5fc19091502 | 216 | tx_vcbuffer[13]=buffer_length&0x0ff; |
davidr99 | 0:e5fc19091502 | 217 | tx_vcbuffer[14]=0x00; // delay time |
davidr99 | 0:e5fc19091502 | 218 | tx_vcbuffer[15]=0x0a; |
davidr99 | 0:e5fc19091502 | 219 | |
davidr99 | 0:e5fc19091502 | 220 | |
davidr99 | 0:e5fc19091502 | 221 | buffer_send(tx_vcbuffer, 16); |
davidr99 | 0:e5fc19091502 | 222 | } |
davidr99 | 0:e5fc19091502 | 223 | |
davidr99 | 0:e5fc19091502 | 224 | |
davidr99 | 0:e5fc19091502 | 225 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 226 | * Function Name : VC0706_get_frame_buffer_length |
davidr99 | 0:e5fc19091502 | 227 | * Description : Get frame buffer length |
davidr99 | 0:e5fc19091502 | 228 | * |
davidr99 | 0:e5fc19091502 | 229 | * Input : None |
davidr99 | 0:e5fc19091502 | 230 | * Output : Frame Length |
davidr99 | 0:e5fc19091502 | 231 | * Return : None |
davidr99 | 0:e5fc19091502 | 232 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 233 | uint32_t CameraShield::VC0706_get_frame_buffer_length() |
davidr99 | 0:e5fc19091502 | 234 | { |
davidr99 | 0:e5fc19091502 | 235 | unsigned char tx_vcbuffer[20]; |
davidr99 | 0:e5fc19091502 | 236 | uint32_t frame_length; |
davidr99 | 0:e5fc19091502 | 237 | |
davidr99 | 0:e5fc19091502 | 238 | _serial.rxBufferFlush(); |
davidr99 | 0:e5fc19091502 | 239 | |
davidr99 | 0:e5fc19091502 | 240 | //get frame buffer length |
davidr99 | 0:e5fc19091502 | 241 | VC0706_get_framebuffer_length(0); |
davidr99 | 0:e5fc19091502 | 242 | wait_ms(10); |
davidr99 | 0:e5fc19091502 | 243 | buffer_read(tx_vcbuffer, sizeof(tx_vcbuffer)); |
davidr99 | 0:e5fc19091502 | 244 | |
davidr99 | 0:e5fc19091502 | 245 | // store frame buffer length for coming reading |
davidr99 | 0:e5fc19091502 | 246 | frame_length = (tx_vcbuffer[5]<<8) + tx_vcbuffer[6]; |
davidr99 | 0:e5fc19091502 | 247 | frame_length = frame_length << 16; |
davidr99 | 0:e5fc19091502 | 248 | frame_length = frame_length + (0x0ff00 & (tx_vcbuffer[7]<<8)) + tx_vcbuffer[8]; |
davidr99 | 0:e5fc19091502 | 249 | |
davidr99 | 0:e5fc19091502 | 250 | return frame_length; |
davidr99 | 0:e5fc19091502 | 251 | } |
davidr99 | 0:e5fc19091502 | 252 | |
davidr99 | 0:e5fc19091502 | 253 | |
davidr99 | 0:e5fc19091502 | 254 | |
davidr99 | 0:e5fc19091502 | 255 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 256 | * Function Name : VC0706_frame_control |
davidr99 | 0:e5fc19091502 | 257 | * Description : control frame buffer register |
davidr99 | 0:e5fc19091502 | 258 | * |
davidr99 | 0:e5fc19091502 | 259 | * Input : frame_control=control flag(1byte) |
davidr99 | 0:e5fc19091502 | 260 | * : 0 = stop current frame ; 1= stop next frame;2=step frame;3 =resume frame; |
davidr99 | 0:e5fc19091502 | 261 | * |
davidr99 | 0:e5fc19091502 | 262 | * Output : None |
davidr99 | 0:e5fc19091502 | 263 | * Return : None |
davidr99 | 0:e5fc19091502 | 264 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 265 | void CameraShield::VC0706_frame_control(char frame_control) |
davidr99 | 0:e5fc19091502 | 266 | { |
davidr99 | 0:e5fc19091502 | 267 | unsigned char tx_vcbuffer[5]; |
davidr99 | 0:e5fc19091502 | 268 | |
davidr99 | 0:e5fc19091502 | 269 | if(frame_control>3)frame_control=3; |
davidr99 | 0:e5fc19091502 | 270 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 271 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 272 | tx_vcbuffer[2]=VC0706_COMMAND_FBUF_CTRL; |
davidr99 | 0:e5fc19091502 | 273 | tx_vcbuffer[3]=0x01; |
davidr99 | 0:e5fc19091502 | 274 | tx_vcbuffer[4]=frame_control; |
davidr99 | 0:e5fc19091502 | 275 | |
davidr99 | 0:e5fc19091502 | 276 | buffer_send(tx_vcbuffer, 5); |
davidr99 | 0:e5fc19091502 | 277 | } |
davidr99 | 0:e5fc19091502 | 278 | |
davidr99 | 0:e5fc19091502 | 279 | |
davidr99 | 0:e5fc19091502 | 280 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 281 | * Function Name : VC0706_motion_detection |
davidr99 | 0:e5fc19091502 | 282 | * Description : get motion monitoring status in communication interface. |
davidr99 | 0:e5fc19091502 | 283 | * |
davidr99 | 0:e5fc19091502 | 284 | * Input : control_flag = 0 stop motion monitoring |
davidr99 | 0:e5fc19091502 | 285 | * = 1 start motion monitoring |
davidr99 | 0:e5fc19091502 | 286 | * |
davidr99 | 0:e5fc19091502 | 287 | * Output : None |
davidr99 | 0:e5fc19091502 | 288 | * Return : None |
davidr99 | 0:e5fc19091502 | 289 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 290 | void CameraShield::VC0706_motion_detection(int control_flag) |
davidr99 | 0:e5fc19091502 | 291 | { |
davidr99 | 0:e5fc19091502 | 292 | unsigned char tx_vcbuffer[5]; |
davidr99 | 0:e5fc19091502 | 293 | |
davidr99 | 0:e5fc19091502 | 294 | |
davidr99 | 0:e5fc19091502 | 295 | if(control_flag>1)control_flag=1; |
davidr99 | 0:e5fc19091502 | 296 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 297 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 298 | tx_vcbuffer[2]=VC0706_COMMAND_COMM_MOTION_CTRL; |
davidr99 | 0:e5fc19091502 | 299 | tx_vcbuffer[3]=0x01; |
davidr99 | 0:e5fc19091502 | 300 | tx_vcbuffer[4]=control_flag; |
davidr99 | 0:e5fc19091502 | 301 | |
davidr99 | 0:e5fc19091502 | 302 | buffer_send(tx_vcbuffer, 5); |
davidr99 | 0:e5fc19091502 | 303 | } |
davidr99 | 0:e5fc19091502 | 304 | |
davidr99 | 0:e5fc19091502 | 305 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 306 | * Function Name : VC0706_motion_control |
davidr99 | 0:e5fc19091502 | 307 | * Description : motion control |
davidr99 | 0:e5fc19091502 | 308 | * |
davidr99 | 0:e5fc19091502 | 309 | * Input : control_flag = 0 forbid motion monitoring |
davidr99 | 0:e5fc19091502 | 310 | * = 1 enable motion monitoring |
davidr99 | 0:e5fc19091502 | 311 | * |
davidr99 | 0:e5fc19091502 | 312 | * Output : None |
davidr99 | 0:e5fc19091502 | 313 | * Return : None |
davidr99 | 0:e5fc19091502 | 314 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 315 | void CameraShield::VC0706_motion_control(int control_flag) |
davidr99 | 0:e5fc19091502 | 316 | { |
davidr99 | 0:e5fc19091502 | 317 | unsigned char tx_vcbuffer[7]; |
davidr99 | 0:e5fc19091502 | 318 | |
davidr99 | 0:e5fc19091502 | 319 | |
davidr99 | 0:e5fc19091502 | 320 | if(control_flag>1)control_flag=1; |
davidr99 | 0:e5fc19091502 | 321 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 322 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 323 | tx_vcbuffer[2]=VC0706_COMMAND_MOTION_CTRL; |
davidr99 | 0:e5fc19091502 | 324 | tx_vcbuffer[3]=0x03; |
davidr99 | 0:e5fc19091502 | 325 | tx_vcbuffer[4]=0x00; //motion control attribute |
davidr99 | 0:e5fc19091502 | 326 | tx_vcbuffer[5]=0x01; //mcu uart control |
davidr99 | 0:e5fc19091502 | 327 | tx_vcbuffer[6]=control_flag; |
davidr99 | 0:e5fc19091502 | 328 | |
davidr99 | 0:e5fc19091502 | 329 | buffer_send(tx_vcbuffer, 7); |
davidr99 | 0:e5fc19091502 | 330 | } |
davidr99 | 0:e5fc19091502 | 331 | |
davidr99 | 0:e5fc19091502 | 332 | |
davidr99 | 0:e5fc19091502 | 333 | |
davidr99 | 0:e5fc19091502 | 334 | |
davidr99 | 0:e5fc19091502 | 335 | |
davidr99 | 0:e5fc19091502 | 336 | |
davidr99 | 0:e5fc19091502 | 337 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 338 | * Function Name : VC0706_get_framebuffer_length |
davidr99 | 0:e5fc19091502 | 339 | * Description : get byte-lengths in FBUF |
davidr99 | 0:e5fc19091502 | 340 | * |
davidr99 | 0:e5fc19091502 | 341 | * Input : fbuf_type =current or next frame |
davidr99 | 0:e5fc19091502 | 342 | * 0 = current frame |
davidr99 | 0:e5fc19091502 | 343 | * 1 = next frame |
davidr99 | 0:e5fc19091502 | 344 | * |
davidr99 | 0:e5fc19091502 | 345 | * Output : None |
davidr99 | 0:e5fc19091502 | 346 | * Return : None |
davidr99 | 0:e5fc19091502 | 347 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 348 | void CameraShield::VC0706_get_framebuffer_length(char fbuf_type) |
davidr99 | 0:e5fc19091502 | 349 | { |
davidr99 | 0:e5fc19091502 | 350 | unsigned char tx_vcbuffer[5]; |
davidr99 | 0:e5fc19091502 | 351 | |
davidr99 | 0:e5fc19091502 | 352 | if(fbuf_type>1)fbuf_type=1; |
davidr99 | 0:e5fc19091502 | 353 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 354 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 355 | tx_vcbuffer[2]=VC0706_COMMAND_GET_FBUF_LEN; |
davidr99 | 0:e5fc19091502 | 356 | tx_vcbuffer[3]=0x01; |
davidr99 | 0:e5fc19091502 | 357 | tx_vcbuffer[4]=fbuf_type; |
davidr99 | 0:e5fc19091502 | 358 | |
davidr99 | 0:e5fc19091502 | 359 | buffer_send(tx_vcbuffer, 5); |
davidr99 | 0:e5fc19091502 | 360 | } |
davidr99 | 0:e5fc19091502 | 361 | |
davidr99 | 0:e5fc19091502 | 362 | |
davidr99 | 0:e5fc19091502 | 363 | |
davidr99 | 0:e5fc19091502 | 364 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 365 | * Function Name : VC0706_uart_power_save |
davidr99 | 0:e5fc19091502 | 366 | * Description : stop current frame for reading |
davidr99 | 0:e5fc19091502 | 367 | * |
davidr99 | 0:e5fc19091502 | 368 | * Input : power_on =1 start power-save |
davidr99 | 0:e5fc19091502 | 369 | * = 0 stop power-save |
davidr99 | 0:e5fc19091502 | 370 | * |
davidr99 | 0:e5fc19091502 | 371 | * Output : None |
davidr99 | 0:e5fc19091502 | 372 | * Return : None |
davidr99 | 0:e5fc19091502 | 373 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 374 | void CameraShield::VC0706_uart_power_save(char power_save_on) |
davidr99 | 0:e5fc19091502 | 375 | { |
davidr99 | 0:e5fc19091502 | 376 | unsigned char tx_vcbuffer[7]; |
davidr99 | 0:e5fc19091502 | 377 | |
davidr99 | 0:e5fc19091502 | 378 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 379 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 380 | tx_vcbuffer[2]=VC0706_COMMAND_POWER_SAVE_CTRL; |
davidr99 | 0:e5fc19091502 | 381 | tx_vcbuffer[3]=0x03; |
davidr99 | 0:e5fc19091502 | 382 | tx_vcbuffer[4]=00; //power save control mode |
davidr99 | 0:e5fc19091502 | 383 | tx_vcbuffer[5]=01; // control by UART |
davidr99 | 0:e5fc19091502 | 384 | tx_vcbuffer[6]=power_save_on; //start power save |
davidr99 | 0:e5fc19091502 | 385 | |
davidr99 | 0:e5fc19091502 | 386 | |
davidr99 | 0:e5fc19091502 | 387 | buffer_send(tx_vcbuffer, 7); |
davidr99 | 0:e5fc19091502 | 388 | } |
davidr99 | 0:e5fc19091502 | 389 | |
davidr99 | 0:e5fc19091502 | 390 | |
davidr99 | 0:e5fc19091502 | 391 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 392 | * Function Name : VC0706_uart_color_control |
davidr99 | 0:e5fc19091502 | 393 | * Description : stop current frame for reading |
davidr99 | 0:e5fc19091502 | 394 | * |
davidr99 | 0:e5fc19091502 | 395 | * Input : show_mode = 0 automatically step black-white and colour |
davidr99 | 0:e5fc19091502 | 396 | * 1 manually step color, select colour |
davidr99 | 0:e5fc19091502 | 397 | * 2 manually step color, select black-white |
davidr99 | 0:e5fc19091502 | 398 | * |
davidr99 | 0:e5fc19091502 | 399 | * Output : None |
davidr99 | 0:e5fc19091502 | 400 | * Return : None |
davidr99 | 0:e5fc19091502 | 401 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 402 | void CameraShield::VC0706_uart_color_control(char show_mode) |
davidr99 | 0:e5fc19091502 | 403 | { |
davidr99 | 0:e5fc19091502 | 404 | unsigned char tx_vcbuffer[6]; |
davidr99 | 0:e5fc19091502 | 405 | |
davidr99 | 0:e5fc19091502 | 406 | if(show_mode>2) show_mode=2; |
davidr99 | 0:e5fc19091502 | 407 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 408 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 409 | tx_vcbuffer[2]=VC0706_COMMAND_COLOR_CTRL; |
davidr99 | 0:e5fc19091502 | 410 | tx_vcbuffer[3]=0x02; |
davidr99 | 0:e5fc19091502 | 411 | tx_vcbuffer[4]=01; //control by UART |
davidr99 | 0:e5fc19091502 | 412 | tx_vcbuffer[5]=show_mode; // automatically step black-white and colour |
davidr99 | 0:e5fc19091502 | 413 | |
davidr99 | 0:e5fc19091502 | 414 | buffer_send(tx_vcbuffer, 6); |
davidr99 | 0:e5fc19091502 | 415 | } |
davidr99 | 0:e5fc19091502 | 416 | |
davidr99 | 0:e5fc19091502 | 417 | |
davidr99 | 0:e5fc19091502 | 418 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 419 | * Function Name : VC0706_image_size |
davidr99 | 0:e5fc19091502 | 420 | * Description : resizing the image |
davidr99 | 0:e5fc19091502 | 421 | * |
davidr99 | 0:e5fc19091502 | 422 | * Input : VC0706_640x480 |
davidr99 | 0:e5fc19091502 | 423 | * VC0706_320x240 |
davidr99 | 0:e5fc19091502 | 424 | * VC0706_160x120 |
davidr99 | 0:e5fc19091502 | 425 | * |
davidr99 | 0:e5fc19091502 | 426 | * Output : None |
davidr99 | 0:e5fc19091502 | 427 | * Return : None |
davidr99 | 0:e5fc19091502 | 428 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 429 | void CameraShield::VC0706_image_size(int ratio) |
davidr99 | 0:e5fc19091502 | 430 | { |
davidr99 | 0:e5fc19091502 | 431 | unsigned char tx_vcbuffer[9]; |
davidr99 | 0:e5fc19091502 | 432 | |
davidr99 | 0:e5fc19091502 | 433 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 434 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 435 | tx_vcbuffer[2]=VC0706_COMMAND_WRITE_DATA; |
davidr99 | 0:e5fc19091502 | 436 | tx_vcbuffer[3]=0x05; |
davidr99 | 0:e5fc19091502 | 437 | tx_vcbuffer[4]=0x04; |
davidr99 | 0:e5fc19091502 | 438 | tx_vcbuffer[5]=0x01; |
davidr99 | 0:e5fc19091502 | 439 | tx_vcbuffer[6]=0x00; |
davidr99 | 0:e5fc19091502 | 440 | tx_vcbuffer[7]=0x19; |
davidr99 | 0:e5fc19091502 | 441 | tx_vcbuffer[8]=ratio; //data |
davidr99 | 0:e5fc19091502 | 442 | |
davidr99 | 0:e5fc19091502 | 443 | buffer_send(tx_vcbuffer, 9); |
davidr99 | 0:e5fc19091502 | 444 | } |
davidr99 | 0:e5fc19091502 | 445 | |
davidr99 | 0:e5fc19091502 | 446 | |
davidr99 | 0:e5fc19091502 | 447 | |
davidr99 | 0:e5fc19091502 | 448 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 449 | * Function Name : VC0706_compression_ratio |
davidr99 | 0:e5fc19091502 | 450 | * Description : stop current frame for reading |
davidr99 | 0:e5fc19091502 | 451 | * |
davidr99 | 0:e5fc19091502 | 452 | * Input : ration >13(minimum) |
davidr99 | 0:e5fc19091502 | 453 | * <63(max) |
davidr99 | 0:e5fc19091502 | 454 | * |
davidr99 | 0:e5fc19091502 | 455 | * Output : None |
davidr99 | 0:e5fc19091502 | 456 | * Return : None |
davidr99 | 0:e5fc19091502 | 457 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 458 | void CameraShield::VC0706_compression_ratio(int ratio) |
davidr99 | 0:e5fc19091502 | 459 | { |
davidr99 | 0:e5fc19091502 | 460 | unsigned char tx_vcbuffer[9]; |
davidr99 | 0:e5fc19091502 | 461 | |
davidr99 | 0:e5fc19091502 | 462 | if(ratio>63)ratio=63; |
davidr99 | 0:e5fc19091502 | 463 | if(ratio<13)ratio=13; |
davidr99 | 0:e5fc19091502 | 464 | int vc_comp_ratio=(ratio-13)*4+53; |
davidr99 | 0:e5fc19091502 | 465 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 466 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 467 | tx_vcbuffer[2]=VC0706_COMMAND_WRITE_DATA; |
davidr99 | 0:e5fc19091502 | 468 | tx_vcbuffer[3]=0x05; |
davidr99 | 0:e5fc19091502 | 469 | tx_vcbuffer[4]=01; //chip register |
davidr99 | 0:e5fc19091502 | 470 | tx_vcbuffer[5]=0x01; //data num ready to write |
davidr99 | 0:e5fc19091502 | 471 | tx_vcbuffer[6]=0x12; //register address |
davidr99 | 0:e5fc19091502 | 472 | tx_vcbuffer[7]=0x04; |
davidr99 | 0:e5fc19091502 | 473 | tx_vcbuffer[8]=vc_comp_ratio; //data |
davidr99 | 0:e5fc19091502 | 474 | |
davidr99 | 0:e5fc19091502 | 475 | buffer_send(tx_vcbuffer, 9); |
davidr99 | 0:e5fc19091502 | 476 | } |
davidr99 | 0:e5fc19091502 | 477 | |
davidr99 | 0:e5fc19091502 | 478 | |
davidr99 | 0:e5fc19091502 | 479 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 480 | * Function Name : VC0706_motion_windows_setting |
davidr99 | 0:e5fc19091502 | 481 | * Description : motion windows setting |
davidr99 | 0:e5fc19091502 | 482 | * |
davidr99 | 0:e5fc19091502 | 483 | * Input : register_address(2 bytes); |
davidr99 | 0:e5fc19091502 | 484 | * data(4 bytes)= data ready to write |
davidr99 | 0:e5fc19091502 | 485 | * |
davidr99 | 0:e5fc19091502 | 486 | * Output : None |
davidr99 | 0:e5fc19091502 | 487 | * Return : None |
davidr99 | 0:e5fc19091502 | 488 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 489 | void CameraShield::VC0706_motion_windows_setting(unsigned int register_address, unsigned long data) |
davidr99 | 0:e5fc19091502 | 490 | { |
davidr99 | 0:e5fc19091502 | 491 | unsigned char tx_vcbuffer[12]; |
davidr99 | 0:e5fc19091502 | 492 | |
davidr99 | 0:e5fc19091502 | 493 | tx_vcbuffer[0]=VC0706_PROTOCOL_SIGN; |
davidr99 | 0:e5fc19091502 | 494 | tx_vcbuffer[1]=VC0706_SERIAL_NUMBER; |
davidr99 | 0:e5fc19091502 | 495 | tx_vcbuffer[2]=VC0706_COMMAND_WRITE_DATA; |
davidr99 | 0:e5fc19091502 | 496 | tx_vcbuffer[3]=0x08; |
davidr99 | 0:e5fc19091502 | 497 | tx_vcbuffer[4]=01; //chip register |
davidr99 | 0:e5fc19091502 | 498 | tx_vcbuffer[5]=0x04; //data num ready to write |
davidr99 | 0:e5fc19091502 | 499 | tx_vcbuffer[6]=register_address>>8; //register address |
davidr99 | 0:e5fc19091502 | 500 | tx_vcbuffer[7]=register_address&0x0ff;; |
davidr99 | 0:e5fc19091502 | 501 | |
davidr99 | 0:e5fc19091502 | 502 | tx_vcbuffer[8]=data>>24; // data ready to write |
davidr99 | 0:e5fc19091502 | 503 | tx_vcbuffer[9]=data>>16; |
davidr99 | 0:e5fc19091502 | 504 | tx_vcbuffer[10]=data>>8; |
davidr99 | 0:e5fc19091502 | 505 | tx_vcbuffer[11]=data&0x0ff; |
davidr99 | 0:e5fc19091502 | 506 | |
davidr99 | 0:e5fc19091502 | 507 | buffer_send(tx_vcbuffer, 12); |
davidr99 | 0:e5fc19091502 | 508 | } |
davidr99 | 0:e5fc19091502 | 509 | |
davidr99 | 0:e5fc19091502 | 510 | |
davidr99 | 0:e5fc19091502 | 511 | |
davidr99 | 0:e5fc19091502 | 512 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 513 | * Function Name : buffer_send |
davidr99 | 0:e5fc19091502 | 514 | * Description : Transmit buffer to VC0706 |
davidr99 | 0:e5fc19091502 | 515 | * |
davidr99 | 0:e5fc19091502 | 516 | * Input : buff pointer |
davidr99 | 0:e5fc19091502 | 517 | * : buffer length |
davidr99 | 0:e5fc19091502 | 518 | * |
davidr99 | 0:e5fc19091502 | 519 | * Output : None |
davidr99 | 0:e5fc19091502 | 520 | * Return : None |
davidr99 | 0:e5fc19091502 | 521 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 522 | void CameraShield::buffer_send(unsigned char *buff, int buffSize) |
davidr99 | 0:e5fc19091502 | 523 | { |
davidr99 | 0:e5fc19091502 | 524 | int i=0; |
davidr99 | 0:e5fc19091502 | 525 | |
davidr99 | 0:e5fc19091502 | 526 | for (i=0;i<buffSize;i++) |
davidr99 | 0:e5fc19091502 | 527 | _serial.putc(buff[i]); |
davidr99 | 0:e5fc19091502 | 528 | |
davidr99 | 0:e5fc19091502 | 529 | // Wait for buffer to send |
davidr99 | 0:e5fc19091502 | 530 | while(_serial.txIsBusy()) |
davidr99 | 0:e5fc19091502 | 531 | { |
davidr99 | 0:e5fc19091502 | 532 | wait_us(1); |
davidr99 | 0:e5fc19091502 | 533 | } |
davidr99 | 0:e5fc19091502 | 534 | } |
davidr99 | 0:e5fc19091502 | 535 | |
davidr99 | 0:e5fc19091502 | 536 | |
davidr99 | 0:e5fc19091502 | 537 | |
davidr99 | 0:e5fc19091502 | 538 | /******************************************************************************* |
davidr99 | 0:e5fc19091502 | 539 | * Function Name : buffer_read |
davidr99 | 0:e5fc19091502 | 540 | * Description : Receive buffer from VC0706 |
davidr99 | 0:e5fc19091502 | 541 | * |
davidr99 | 0:e5fc19091502 | 542 | * Input : buffer pointer |
davidr99 | 0:e5fc19091502 | 543 | * : buffer size |
davidr99 | 0:e5fc19091502 | 544 | * |
davidr99 | 0:e5fc19091502 | 545 | * Output : length of buffer read |
davidr99 | 0:e5fc19091502 | 546 | * Return : None |
davidr99 | 0:e5fc19091502 | 547 | *******************************************************************************/ |
davidr99 | 0:e5fc19091502 | 548 | int CameraShield::buffer_read(unsigned char *buff, int buffSize) |
davidr99 | 0:e5fc19091502 | 549 | { |
davidr99 | 0:e5fc19091502 | 550 | bool validity=true; |
davidr99 | 0:e5fc19091502 | 551 | int rx_counter = 0; |
davidr99 | 0:e5fc19091502 | 552 | |
davidr99 | 0:e5fc19091502 | 553 | buff[0]=0; |
davidr99 | 0:e5fc19091502 | 554 | while (_serial.readable() > 0 && rx_counter < buffSize) |
davidr99 | 0:e5fc19091502 | 555 | { |
davidr99 | 0:e5fc19091502 | 556 | buff[rx_counter++]= _serial.getc(); |
davidr99 | 0:e5fc19091502 | 557 | } |
davidr99 | 0:e5fc19091502 | 558 | |
davidr99 | 0:e5fc19091502 | 559 | if (buff[0]!=0x76) |
davidr99 | 0:e5fc19091502 | 560 | validity=false; |
davidr99 | 0:e5fc19091502 | 561 | if (buff[1]!=VC0706_SERIAL_NUMBER) |
davidr99 | 0:e5fc19091502 | 562 | validity=false; |
davidr99 | 0:e5fc19091502 | 563 | |
davidr99 | 0:e5fc19091502 | 564 | if (validity) |
davidr99 | 0:e5fc19091502 | 565 | return 0; |
davidr99 | 0:e5fc19091502 | 566 | |
davidr99 | 0:e5fc19091502 | 567 | return rx_counter; |
davidr99 | 0:e5fc19091502 | 568 | } |