This builds on TCPSocket_HelloWorld and others to read an in-coming buffer and then build and send a buffer. Very much work in progress
Dependencies: EthernetInterface mbed-rtos mbed
Fork of TCPSocket_HelloWorld by
Revision 12:cce8fa67de18, committed 2013-02-09
- Comitter:
- acodd
- Date:
- Sat Feb 09 22:29:18 2013 +0000
- Parent:
- 11:59dcefdda506
- Commit message:
- First main release
Changed in this revision
--- a/EthernetInterface.lib Fri Aug 10 09:41:51 2012 +0000 +++ b/EthernetInterface.lib Sat Feb 09 22:29:18 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/EthernetInterface/#c9bb345dcc65 +http://mbed.org/users/acodd/code/EthernetInterface/#8ed49d2ec6f8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/NokiaLCD/NokiaLCD.cpp Sat Feb 09 22:29:18 2013 +0000
@@ -0,0 +1,464 @@
+/* mbed Nokia LCD Library
+ * Copyright (c) 2007-2010, sford
+ */
+
+#include "NokiaLCD.h"
+
+#include "mbed.h"
+
+#define NOKIALCD_ROWS 16
+#define NOKIALCD_COLS 16
+#define NOKIALCD_WIDTH 130
+#define NOKIALCD_HEIGHT 130
+#define NOKIALCD_FREQUENCY 5000000
+
+NokiaLCD::NokiaLCD(PinName mosi, PinName sclk, PinName cs, PinName rst, LCDType type)
+ : _spi(mosi, NC, sclk)
+ , _rst(rst)
+ , _cs(cs) {
+
+ _type = type;
+
+ _row = 0;
+ _column = 0;
+ _foreground = 0x00FFFFFF;
+ _background = 0x00000000;
+
+ reset();
+}
+
+void NokiaLCD::reset() {
+
+ // setup the SPI interface and bring display out of reset
+ _cs = 1;
+ _rst = 0;
+ _spi.format(9);
+ _spi.frequency(NOKIALCD_FREQUENCY);
+ wait_ms(1);
+ _rst = 1;
+ wait_ms(1);
+
+ _cs = 0;
+
+ switch (_type) {
+ case LCD6100:
+ command(0xCA); // display control
+ data(0);
+ data(32);
+ data(0);
+ command(0xBB);
+ data(1);
+ command(0xD1); // oscillator on
+ command(0x94); // sleep out
+ command(0x20); // power control
+ data(0x0F);
+ command(0xA7); // invert display
+ command(0x81); // Voltage control
+ data(39); // contrast setting: 0..63
+ data(3); // resistance ratio
+ wait_ms(1);
+ command(0xBC);
+ data(0);
+ data(1);
+ data(4);
+ command(0xAF); // turn on the display
+ break;
+
+ case LCD6610:
+ command(0xCA); // display control
+ data(0);
+ data(31);
+ data(0);
+ command(0xBB);
+ data(1);
+ command(0xD1); // oscillator on
+ command(0x94); // sleep out
+ command(0x20); // power control
+ data(0x0F);
+ command(0xA7); // invert display
+ command(0x81); // Voltage control
+ data(39); // contrast setting: 0..63
+ data(3); // resistance ratio
+ wait_ms(1);
+ command(0xBC);
+ data(0);
+ data(0);
+ data(2);
+ command(0xAF); // turn on the display
+ break;
+
+ case PCF8833:
+ command(0x11); // sleep out
+ command(0x3A); // column mode
+ data(0x05);
+ command(0x36); // madctl
+ data(0x60); // vertical RAM, flip x
+ command(0x25); // setcon
+ data(0x30);// contrast 0x30
+ wait_ms(2);
+ command(0x29);//DISPON
+ command(0x03);//BSTRON
+ break;
+ }
+
+ _cs = 1;
+
+ cls();
+}
+
+void NokiaLCD::command(int value) {
+ _spi.write(value & 0xFF);
+}
+
+void NokiaLCD::data(int value) {
+ _spi.write(value | 0x100);
+}
+
+void NokiaLCD::_window(int x, int y, int width, int height) {
+ int x1 = x + 0;
+ int y1 = y + 1;
+ int x2 = x1 + width - 1;
+ int y2 = y1 + height - 1;
+
+ switch (_type) {
+ case LCD6100:
+ case LCD6610:
+ command(0x15); // column
+ data(x1);
+ data(x2);
+ command(0x75); // row
+ data(y1);
+ data(y2);
+ command(0x5C); // start write to ram
+ break;
+ case PCF8833:
+ command(0x2A); // column
+ data(x1);
+ data(x2);
+ command(0x2B); // row
+ data(y1);
+ data(y2);
+ command(0x2C); // start write to ram
+ break;
+ }
+}
+
+void NokiaLCD::_putp(int colour) {
+ int gr = ((colour >> 20) & 0x0F)
+ | ((colour >> 8 ) & 0xF0);
+ int nb = ((colour >> 4 ) & 0x0F);
+ data(nb);
+ data(gr);
+}
+
+const unsigned char FONT8x8[97][8] = {
+ 0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, // columns, rows, num_bytes_per_char
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20
+ 0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // !
+ 0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // "
+ 0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
+ 0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
+ 0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00, // %
+ 0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00, // &
+ 0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00, // '
+ 0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // (
+ 0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // )
+ 0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // *
+ 0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // +
+ 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // ,
+ 0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // -
+ 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // .
+ 0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, // / (forward slash)
+ 0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00, // 0 0x30
+ 0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00, // 1
+ 0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00, // 2
+ 0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, // 3
+ 0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00, // 4
+ 0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00, // 5
+ 0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // 6
+ 0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00, // 7
+ 0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00, // 8
+ 0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00, // 9
+ 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // :
+ 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ;
+ 0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00, // <
+ 0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // =
+ 0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00, // >
+ 0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00, // ?
+ 0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00, // @ 0x40
+ 0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00, // A
+ 0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00, // B
+ 0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00, // C
+ 0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00, // D
+ 0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00, // E
+ 0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00, // F
+ 0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00, // G
+ 0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00, // H
+ 0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I
+ 0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // J
+ 0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00, // K
+ 0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00, // L
+ 0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00, // M
+ 0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00, // N
+ 0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00, // O
+ 0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // P 0x50
+ 0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00, // Q
+ 0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00, // R
+ 0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00, // S
+ 0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00, // T
+ 0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, // U
+ 0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00, // V
+ 0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, // W
+ 0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00, // X
+ 0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y
+ 0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00, // Z
+ 0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [
+ 0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, // \ (back slash)
+ 0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ]
+ 0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // ^
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _
+ 0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // ` 0x60
+ 0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00, // a
+ 0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00, // b
+ 0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00, // c
+ 0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00, // d
+ 0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, // e
+ 0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00, // f
+ 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C, // g
+ 0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00, // h
+ 0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i
+ 0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j
+ 0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00, // k
+ 0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l
+ 0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, // m
+ 0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00, // n
+ 0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, // o
+ 0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78, // p
+ 0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F, // q
+ 0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00, // r
+ 0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, // s
+ 0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00, // t
+ 0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00, // u
+ 0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00, // v
+ 0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00, // w
+ 0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00, // x
+ 0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C, // y
+ 0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z
+ 0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // {
+ 0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00, // |
+ 0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // }
+ 0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, // ~
+ 0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00
+}; // DEL
+
+void NokiaLCD::locate(int column, int row) {
+ _column = column;
+ _row = row;
+}
+
+void NokiaLCD::newline() {
+ _column = 0;
+ _row++;
+ if (_row >= _rows) {
+ _row = 0;
+ }
+}
+
+int NokiaLCD::_putc(int value) {
+ int x = _column * 8; // FIXME: Char sizes
+ int y = _row * 8;
+ bitblit(x + 1, y + 1, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
+
+ _column++;
+
+ if (_column >= NOKIALCD_COLS) {
+ _row++;
+ _column = 0;
+ }
+
+ if (_row >= NOKIALCD_ROWS) {
+ _row = 0;
+ }
+
+ return value;
+}
+
+void NokiaLCD::cls() {
+ fill(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT, _background);
+ _row = 0;
+ _column = 0;
+}
+
+
+void NokiaLCD::window(int x, int y, int width, int height) {
+ _cs = 0;
+ _window(x, y, width, height);
+ _cs = 1;
+}
+
+void NokiaLCD::putp(int colour) {
+ _cs = 0;
+ _putp(colour);
+ _cs = 1;
+}
+
+/*void NokiaLCD::pixel(int x, int y, int colour) {
+ _cs = 0;
+ _window(x, y, 1, 1);
+ _putp(colour);
+ _cs = 1;
+}*/
+void NokiaLCD::pixel(int x, int y, int colour) {
+ _cs = 0;
+ _window(x, y, 1, 1);
+ switch (_type) {
+ case LCD6100:
+ case PCF8833:
+
+ _putp(colour);
+
+ break;
+ case LCD6610:
+
+ int r4 = (colour >> (16 + 4)) & 0xF;
+ int g4 = (colour >> (8 + 4)) & 0xF;
+ int b4 = (colour >> (0 + 4)) & 0xF;
+ int d1 = (r4 << 4) | g4;
+ int d2 = (b4 << 4) | r4;
+ int d3 = (g4 << 4) | b4;
+ data(d1);
+ data(d2);
+ data(d3);
+
+ break;
+ }
+ _cs = 1;
+}
+
+void NokiaLCD::fill(int x, int y, int width, int height, int colour) {
+ _cs = 0;
+ _window(x, y, width, height);
+ switch (_type) {
+ case LCD6100:
+ case PCF8833:
+ for (int i=0; i<width*height; i++) {
+ _putp(colour);
+ }
+ break;
+ case LCD6610:
+ for (int i=0; i<width*height/2; i++) {
+ int r4 = (colour >> (16 + 4)) & 0xF;
+ int g4 = (colour >> (8 + 4)) & 0xF;
+ int b4 = (colour >> (0 + 4)) & 0xF;
+ int d1 = (r4 << 4) | g4;
+ int d2 = (b4 << 4) | r4;
+ int d3 = (g4 << 4) | b4;
+ data(d1);
+ data(d2);
+ data(d3);
+ }
+ break;
+ }
+ _window(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT);
+ _cs = 1;
+}
+
+void NokiaLCD::blit(int x, int y, int width, int height, const int* colour) {
+ _cs = 0;
+ _window(x, y, width, height);
+
+ switch (_type) {
+ case LCD6100:
+ case PCF8833:
+ for (int i=0; i<width*height; i++) {
+ _putp(colour[i]);
+ }
+ break;
+ case LCD6610:
+ for (int i=0; i<width*height/2; i++) {
+ int r41 = (colour[i*2] >> (16 + 4)) & 0xF;
+ int g41 = (colour[i*2] >> (8 + 4)) & 0xF;
+ int b41 = (colour[i*2] >> (0 + 4)) & 0xF;
+
+ int r42 = (colour[i*2+1] >> (16 + 4)) & 0xF;
+ int g42 = (colour[i*2+1] >> (8 + 4)) & 0xF;
+ int b42 = (colour[i*2+1] >> (0 + 4)) & 0xF;
+ int d1 = (r41 << 4) | g41;
+ int d2 = (b41 << 4) | r42;
+ int d3 = (g42 << 4) | b42;
+ data(d1);
+ data(d2);
+ data(d3);
+ }
+ break;
+ }
+ _window(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT);
+ _cs = 1;
+}
+
+void NokiaLCD::bitblit(int x, int y, int width, int height, const char* bitstream) {
+ _cs = 0;
+ _window(x, y, width, height);
+
+ switch (_type) {
+ case LCD6100:
+ case PCF8833:
+ for (int i=0; i<height*width; i++) {
+ int byte = i / 8;
+ int bit = i % 8;
+ int colour = ((bitstream[byte] << bit) & 0x80) ? _foreground : _background;
+ _putp(colour);
+ }
+ break;
+ case LCD6610:
+ for(int i=0; i<height*width/2; i++) {
+ int byte1 = (i*2) / 8;
+ int bit1 = (i*2) % 8;
+ int colour1 = ((bitstream[byte1] << bit1) & 0x80) ? _foreground : _background;
+ int byte2 = (i*2+1) / 8;
+ int bit2 = (i*2+1) % 8;
+ int colour2 = ((bitstream[byte2] << bit2) & 0x80) ? _foreground : _background;
+
+ int r41 = (colour1 >> (16 + 4)) & 0xF;
+ int g41 = (colour1 >> (8 + 4)) & 0xF;
+ int b41 = (colour1 >> (0 + 4)) & 0xF;
+
+ int r42 = (colour2 >> (16 + 4)) & 0xF;
+ int g42 = (colour2 >> (8 + 4)) & 0xF;
+ int b42 = (colour2 >> (0 + 4)) & 0xF;
+ int d1 = (r41 << 4) | g41;
+ int d2 = (b41 << 4) | r42;
+ int d3 = (g42 << 4) | b42;
+ data(d1);
+ data(d2);
+ data(d3);
+ }
+ break;
+ }
+ _window(0, 0, _width, _height);
+ _cs = 1;
+}
+
+void NokiaLCD::foreground(int c) {
+ _foreground = c;
+}
+
+void NokiaLCD::background(int c) {
+ _background = c;
+}
+
+int NokiaLCD::width() {
+ return NOKIALCD_WIDTH;
+}
+
+int NokiaLCD::height() {
+ return NOKIALCD_HEIGHT;
+}
+
+int NokiaLCD::columns() {
+ return NOKIALCD_COLS;
+}
+
+int NokiaLCD::rows() {
+ return NOKIALCD_ROWS;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/NokiaLCD/NokiaLCD.h Sat Feb 09 22:29:18 2013 +0000
@@ -0,0 +1,151 @@
+/* mbed NokiaLCD Library, for a 130x130 Nokia colour LCD
+ * Copyright (c) 2007-2010, sford
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MBED_NOKIALCD_H
+#define MBED_NOKIALCD_H
+
+#include "mbed.h"
+
+/** An interface for the 130x130 Nokia Mobile phone screens
+ *
+ * @code
+ * #include "mbed.h"
+ * #include "NokiaLCD.h"
+ *
+ * NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::6610); // mosi, sclk, cs, rst, type
+ *
+ * int main() {
+ * lcd.printf("Hello World!");
+ * }
+ * @endcode
+ */
+class NokiaLCD : public Stream {
+
+public:
+ /** LCD panel format */
+ enum LCDType {
+ LCD6100 /**< Nokia 6100, as found on sparkfun board (default) */
+ , LCD6610 /**< Nokia 6610, as found on olimex board */
+ , PCF8833
+ };
+
+ /** Create and Nokia LCD interface, using a SPI and two DigitalOut interfaces
+ *
+ * @param mosi SPI data out
+ * @param sclk SPI clock
+ * @param cs Chip Select (DigitalOut)
+ * @param rst Reset (DigitalOut)
+ * @param type The LCDType to select driver chip variants
+ */
+ NokiaLCD(PinName mosi, PinName sclk, PinName cs, PinName rst, LCDType type = LCD6100);
+
+#if DOXYGEN_ONLY
+ /** Write a character to the LCD
+ *
+ * @param c The character to write to the display
+ */
+ int putc(int c);
+
+ /** Write a formated string to the LCD
+ *
+ * @param format A printf-style format string, followed by the
+ * variables to use in formating the string.
+ */
+ int printf(const char* format, ...);
+#endif
+
+ /** Locate to a screen column and row
+ *
+ * @param column The horizontal position from the left, indexed from 0
+ * @param row The vertical position from the top, indexed from 0
+ */
+ void locate(int column, int row);
+
+ /** Clear the screen and locate to 0,0 */
+ void cls();
+
+ /** Set a pixel on te screen
+ *
+ * @param x horizontal position from left
+ * @param y vertical position from top
+ * @param colour 24-bit colour in format 0x00RRGGBB
+ */
+ void pixel(int x, int y, int colour);
+
+ /** Fill an area of the screen
+ *
+ * @param x horizontal position from left
+ * @param y vertical position from top
+ * @param width width in pixels
+ * @param height height in pixels
+ * @param colour 24-bit colour in format 0x00RRGGBB
+ */
+ void fill(int x, int y, int width, int height, int colour);
+
+ void blit(int x, int y, int width, int height, const int* colour);
+ void bitblit(int x, int y, int width, int height, const char* bitstream);
+
+ int width();
+ int height();
+ int columns();
+ int rows();
+
+ void reset();
+
+ /** Set the foreground colour
+ *
+ * @param c 24-bit colour
+ */
+ void foreground(int c);
+
+ /** Set the background colour
+ *
+ * @param c 24-bit colour
+ */
+ void background(int c);
+
+protected:
+ virtual void _window(int x, int y, int width, int height);
+ virtual void _putp(int colour);
+
+ void command(int value);
+ void data(int value);
+
+ void newline();
+ virtual int _putc(int c);
+ virtual int _getc() {
+ return 0;
+ }
+ void putp(int v);
+ void window(int x, int y, int width, int height);
+
+ SPI _spi;
+ DigitalOut _rst;
+ DigitalOut _cs;
+
+ LCDType _type;
+ int _row, _column, _rows, _columns, _foreground, _background, _width, _height;
+};
+
+#endif
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/TCP_Serialisation.cpp Sat Feb 09 22:29:18 2013 +0000
@@ -0,0 +1,91 @@
+#include "mbed.h"
+#include "EthernetInterface.h"
+#include "NokiaLCD.h"
+
+NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type
+DigitalOut led1(LED1, "led1");
+DigitalOut led2(LED2, "led2");
+DigitalOut led3(LED3, "led3");
+DigitalOut led4(LED4, "led4");
+
+EthernetInterface eth; //, ethMask, ethNull, ethNull);
+
+typedef struct _data {
+ int pan;
+ int tilt;
+} data;
+data real;
+
+char InBound[300]; // incomming data
+char OutBound[300]; // outbound data
+char outpan[10];
+char outtilt[10];
+char header[] = "real ";
+char space[] = " ";
+
+void BuildOut(data outdata)
+{
+ htons(outdata.pan);
+ htons(outdata.tilt);
+ sprintf(outpan, "%d", outdata.pan);
+ sprintf(outtilt, "%d", outdata.tilt);
+ strncpy(OutBound, header, sizeof(OutBound)-1);
+ strcat(OutBound, outpan);
+ strcat(OutBound, space);
+ strcat(OutBound, outtilt);
+}
+
+int main()
+{
+
+ eth.init("198.168.1.20","255.255.255.0","0.0.0.0");
+ eth.connect();
+
+ TCPSocketServer sock;
+ if (sock.bind(80)>=0) {
+ led4=1;
+ }
+ sock.listen(1);
+ //create a TCPSocketConnection instance that will handle the incoming connection.
+ TCPSocketConnection client;
+
+ while (!client.is_connected()) {
+ sock.accept(client);
+ }
+ led3 = 1;
+
+ while(true) {
+
+ int ret = client.receive(InBound, sizeof(InBound)-1);
+
+ if (ret >=0) {
+ led2=1;
+ lcd.locate(0,1);
+ lcd.printf(InBound);
+ // Go head and do stuff the inbound data
+ //Now send out your outbound packet with someinformation:
+ real.pan = 321; //as read by your devices
+ real.tilt = 654; //as read by your devices
+ BuildOut(real);
+ lcd.locate(0,0);
+ lcd.printf(OutBound);
+ client.send(OutBound, sizeof(OutBound));
+
+ ret = -1;
+ }
+ }
+}
+//lcd.printf("Values %d %d", real.pan, real.tilt);
+//strcat(OutBound, header);
+
+//char test[] = "123 456 789";
+
+//int first, sec, third;
+//if (sscanf(InBound, "%d %d %d", &first, &sec, &third) <= 3){
+//lcd.locate(0,1);
+//lcd.printf("first is %d", first);
+//lcd.locate(0,2);
+//lcd.printf("Sec is %d", sec);
+//lcd.locate(0,3);
+//lcd.printf("third is %d", third);
+//}
--- a/main.cpp Fri Aug 10 09:41:51 2012 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#include "mbed.h"
-#include "EthernetInterface.h"
-
-int main() {
- EthernetInterface eth;
- eth.init(); //Use DHCP
- eth.connect();
- printf("IP Address is %s\n", eth.getIPAddress());
-
- TCPSocketConnection sock;
- sock.connect("mbed.org", 80);
-
- char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
- sock.send_all(http_cmd, sizeof(http_cmd)-1);
-
- char buffer[300];
- int ret;
- while (true) {
- ret = sock.receive(buffer, sizeof(buffer)-1);
- if (ret <= 0)
- break;
- buffer[ret] = '\0';
- printf("Received %d chars from server:\n%s\n", ret, buffer);
- }
-
- sock.close();
-
- eth.disconnect();
-
- while(1) {}
-}
