A simple example using a display and networking at the same time.
Dependencies: EALib EthernetInterface mbed-rtos mbed
Diff: main.cpp
- Revision:
- 0:833824a40ced
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jul 21 09:42:16 2014 +0000 @@ -0,0 +1,164 @@ +/****************************************************************************** + * Includes + *****************************************************************************/ + +#include "mbed.h" + +#include "LcdController.h" +#include "EaLcdBoard.h" +#include "sdram.h" + +#include "BubbleDemo.h" +#include "EthernetInterface.h" +#include "TCPSocketConnection.h" +#include "cmsis_os.h" + + +/****************************************************************************** + * Typedefs and defines + *****************************************************************************/ + +#define RESET_FLAG \ + do { \ + if (abortTest) { \ + abortTest = false; \ + wait(0.04); \ + } \ + } while(false) + +/****************************************************************************** + * Local variables + *****************************************************************************/ + +static InterruptIn buttonInterrupt(P2_10); +static DigitalOut led(LED1); +static DigitalOut led3(LED3); + +static BubbleDemo* bubbleDemo; + +/****************************************************************************** + * Global variables + *****************************************************************************/ + +EaLcdBoard lcdBoard(P0_27, P0_28); +bool abortTest = false; + +/****************************************************************************** + * Interrupt functions + *****************************************************************************/ + +void trigger() { + abortTest = true; +} + +/****************************************************************************** + * Main + *****************************************************************************/ + +void bubble_thread(void const *argument) { + while (true) { + bubbleDemo->run(750, 20); + RESET_FLAG; + } +} +void net_thread(void const *argument) { + EthernetInterface eth; + eth.init(); //Use DHCP + eth.connect(); + printf("IP Address is %s\n", eth.getIPAddress()); + TCPSocketConnection sock; + while (true) { + led3 = !led3; + sock.connect("mbed.org", 80); + sock.set_blocking(false, 3000); + + char http_cmd[] = "GET /media/uploads/donatien/hello.txt HTTP/1.1\r\nHost: %s\r\n\r\n"; + printf("sending:\n---\n%s\n---\n", http_cmd); + sock.send(http_cmd, sizeof(http_cmd) - 1);//, 3000); + + char in_buf[256]; + bool firstIteration = true; + int ret; + do { + printf("reading...\n"); + ret = sock.receive(in_buf, 255);//, firstIteration?3000:0); + in_buf[ret] = '\0'; + + printf("Received %d chars from server: %s\n", ret, in_buf); + firstIteration = false; + } while ( ret == 255 ); // once we get less that full buffer we know all data has been received +// } while ( ret > 0 ); + + sock.close(); + + //eth.disconnect(); + + led3 = !led3; + osDelay(500); + } +} + +osThreadDef(bubble_thread, osPriorityNormal, DEFAULT_STACK_SIZE); +osThreadDef(net_thread, osPriorityNormal, DEFAULT_STACK_SIZE); + +int main (void) { + + EaLcdBoard::Result result; + LcdController::Config lcdCfg; + uint32_t frameBuf1 = (uint32_t) SDRAM_BASE; + + printf("Simple example of using network (HTTP GET) and LCD at the same time\n"); + + // Listen for button presses + buttonInterrupt.mode(PullUp); + buttonInterrupt.fall(&trigger); + + do { + // framebuffer is put in SDRAM + if (sdram_init() == 1) { + printf("Failed to initialize SDRAM\n"); + break; + } + + result = lcdBoard.open(NULL, NULL); + if (result != EaLcdBoard::Ok) { + printf("Failed to open display: %d\n", result); + break; + } + + result = lcdBoard.setFrameBuffer(frameBuf1); + if (result != EaLcdBoard::Ok) { + printf("Failed to activate frameBuffer: %d\n", result); + break; + } + + result = lcdBoard.getLcdConfig(&lcdCfg); + if (result != EaLcdBoard::Ok) { + printf("Failed to get LCD configuration: %d\n", result); + break; + } + + // Prepare 3 consequtive framebuffers (2 will be used for background buffers) + memset((void*)frameBuf1, 0x0, lcdCfg.width*lcdCfg.height*2 *3); + + bubbleDemo = new BubbleDemo((uint8_t *)frameBuf1, lcdCfg.width, lcdCfg.height); + osThreadCreate(osThread(bubble_thread), NULL); + + osThreadCreate(osThread(net_thread), NULL); + + while (true) { + led = 0; + wait(0.1); + led = 1; + wait(0.5); + } + } while(0); + + // Blink to indicate error + while (1) { + led = 0; + wait(0.2); + led = 1; + wait(0.2); + } +}