OV7670 + 23LC1024 + Bluetooth
Dependencies: FastPWM MODSERIAL mbed
Diff: main.cpp
- Revision:
- 1:6e4d2cff76e8
- Parent:
- 0:f309a2b2f27b
--- a/main.cpp Mon Jul 22 23:55:34 2013 +0000 +++ b/main.cpp Tue Jul 23 06:33:27 2013 +0000 @@ -1,6 +1,9 @@ #include "mbed.h" +#include "Constants.h" #include "OV7670.h" #include "FastPWM.h" +#include "spi_ram.h" +#include "MODSERIAL.h" #define SIZEX (160) #define SIZEY (120) @@ -12,10 +15,9 @@ Port0, 0x07878000); // D0-D7 -> P11-p18 Serial host(USBTX, USBRX); +MODSERIAL bt(p9, p10, 16384, 512); DigitalOut status(p20); - -unsigned char bank0[SIZE]; -unsigned char *bank1 = (unsigned char *)(0x2007C000); +int feedMode = 0; int hexToInt(int i) { if(i >= '0' && i <= '9') return i - '0'; @@ -29,18 +31,21 @@ return (hexToInt(b1) << 4) | hexToInt(b2); } -void sendImage() { - // Write the image to the serial host - for (int i = 0; i < SIZE; i++) { - while(!(host.writeable())) {} - host.putc(bank0[i]); - while(!(host.writeable())) {} - host.putc(bank1[i]); +void readLine(Serial *ser, char *data) { + int i=0; + char c = '0'; + while(c != '\n') { + if(ser->readable()) { + c = ser->getc(); + data[i++] = c; + } } + data[i] = '\0'; } int main() { host.baud(115200); + bt.baud(230400); // Initialize a 12Mhz XCLK for the camera camera.Init(); @@ -52,28 +57,73 @@ camera.InitQQVGA(); char c; + char data[20]; while(1) { + if(bt.readable()) { + c = bt.getc(); + switch(c) { + case REQUEST_PROFILE: + host.printf("Profile requested\n\r"); + bt.putc(CLIENT_PROFILE); + bt.putc((TAPCAM_ID >> 4) & 0x0F); + bt.putc(TAPCAM_ID & 0x0F); + bt.printf("device\n"); + break; + case CLIENT_PROFILE: { + host.printf("Client profile:\n\r"); + int id = bt.getc() << 4; + id |= bt.getc(); + readLine(&bt, data); + host.printf("ID: %d\n\r", id); + host.printf("Type: %s\n\r", data); + break; + } + case FEED_REQUEST: + host.printf("Feed requested\n\r"); + bt.putc(FEED_START); + break; + case FEED_START_ACK: + host.printf("Feed start acknowledged\n\r"); + feedMode = 1; + break; + case FEED_CANCEL: + host.printf("Feed canceled\n\r"); + feedMode = 0; + break; + } + } + if(feedMode) { + int bytes = camera.captureImage(); + bt.putc(FRAME_READ); + bt.printf(ORIENTATION); + bt.printf("%d\n", bytes); + camera.sendImage(&bt, bytes); + host.printf("Sent %d\n\r", bytes); + wait_ms(100); + } if(host.readable()) { c = host.getc(); - } else { - continue; - } - if(c == 'r') { - int reg = getHexWord(&host); - host.printf("%d\n\r", camera.ReadReg(reg)); - } else if(c == 'w') { - int reg = getHexWord(&host); - int val = getHexWord(&host); - camera.WriteReg(reg, val); - host.printf("%d\n\r", camera.ReadReg(reg)); - } else if(c == 't') { - camera.scopeTest(&host); - } else if(c == 'c') { - status = 1; - int bytes = camera.captureImage(bank0, bank1); - //host.printf("%d\n", bytes); - sendImage(); - status = 0; + if(c == 'r') { + int reg = getHexWord(&host); + host.printf("%d\n\r", camera.ReadReg(reg)); + } else if(c == 'w') { + int reg = getHexWord(&host); + int val = getHexWord(&host); + camera.WriteReg(reg, val); + host.printf("%d\n\r", camera.ReadReg(reg)); + } else if(c == 't') { + camera.scopeTest(&host); + } else if(c == 'c') { + status = 1; + int bytes = camera.captureImage(); + host.printf("%d\n", bytes); + camera.sendImage(&host, bytes); + status = 0; + } else if(c == 's') { + feedMode = false; + } else if(c == 'p') { + bt.putc(REQUEST_PROFILE); + } } } }