My fork of the blinky project to support ethernet and twitter

Dependencies:   EthernetInterface HTTPClient HTU21D OAuth4Tw SDFileSystem SPI_TFT_ILI9341 SerialShell mbed-rtos mbed-src

Fork of mbed_blinky by Mbed

Committer:
vpcola
Date:
Wed Apr 29 14:55:06 2015 +0000
Revision:
7:aafb9225f866
Parent:
4:81cea7a352b0
Child:
8:e3fb74a4772c
Updated added SerialShell;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan 0:7dec7e9ac085 1 #include "mbed.h"
vpcola 7:aafb9225f866 2 #include "rtos.h"
vpcola 7:aafb9225f866 3 #include "EthernetInterface.h"
vpcola 7:aafb9225f866 4 #include "Arial12x12.h"
vpcola 7:aafb9225f866 5 #include "Arial24x23.h"
vpcola 7:aafb9225f866 6 #include "SPI_TFT_ILI9341.h"
vpcola 7:aafb9225f866 7 #include "SDFileSystem.h"
vpcola 7:aafb9225f866 8 #include "Shell.h"
dan 0:7dec7e9ac085 9
dan 0:7dec7e9ac085 10 DigitalOut myled(LED1);
vpcola 7:aafb9225f866 11 //EthernetInterface eth;
vpcola 7:aafb9225f866 12 Serial pc(p9,p10);
vpcola 7:aafb9225f866 13
vpcola 7:aafb9225f866 14 SDFileSystem sd(p5,p6,p7,p8,"sd"); // mosi, miso, sck, cs
vpcola 7:aafb9225f866 15 SPI_TFT_ILI9341 TFT(p11,p12,p13,p15, p16, p17 ); // mosi, miso, sck, cs, eset, dc
vpcola 7:aafb9225f866 16 DigitalOut lcdOn(p14);
vpcola 7:aafb9225f866 17
vpcola 7:aafb9225f866 18 #define SHELL_STACK_SIZ 1024
vpcola 7:aafb9225f866 19 // Pre-allocate the shell's stack (on global mem)
vpcola 7:aafb9225f866 20 unsigned char shellStack[SHELL_STACK_SIZ];
vpcola 7:aafb9225f866 21 Shell shell(&pc);
vpcola 7:aafb9225f866 22
vpcola 7:aafb9225f866 23 // Local Commands
vpcola 7:aafb9225f866 24 /**
vpcola 7:aafb9225f866 25 * \brief Gets the amount of free memory
vpcola 7:aafb9225f866 26 * \param none
vpcola 7:aafb9225f866 27 * \return none
vpcola 7:aafb9225f866 28 **/
vpcola 7:aafb9225f866 29 static void cmd_mem(Stream * chp, int argc, char * argv[])
vpcola 7:aafb9225f866 30 {
vpcola 7:aafb9225f866 31 // In order to get free mem within RTOS
vpcola 7:aafb9225f866 32 // we need to get the main thread's stack pointer
vpcola 7:aafb9225f866 33 // and subtract it with the top of the heap
vpcola 7:aafb9225f866 34 // ------+-------------------+ Last Address of RAM (INITIAL_SP)
vpcola 7:aafb9225f866 35 // | Scheduler Stack |
vpcola 7:aafb9225f866 36 // +-------------------+
vpcola 7:aafb9225f866 37 // | Main Thread Stack |
vpcola 7:aafb9225f866 38 // | | |
vpcola 7:aafb9225f866 39 // | v |
vpcola 7:aafb9225f866 40 // +-------------------+ <- bottom_of_stack/__get_MSP()
vpcola 7:aafb9225f866 41 // RAM | |
vpcola 7:aafb9225f866 42 // | Available RAM |
vpcola 7:aafb9225f866 43 // | |
vpcola 7:aafb9225f866 44 // +-------------------+ <- top_of_heap
vpcola 7:aafb9225f866 45 // | ^ |
vpcola 7:aafb9225f866 46 // | | |
vpcola 7:aafb9225f866 47 // | Heap |
vpcola 7:aafb9225f866 48 // +-------------------+ <- __end__ / HEAP_START (linker defined var)
vpcola 7:aafb9225f866 49 // | ZI |
vpcola 7:aafb9225f866 50 // +-------------------+
vpcola 7:aafb9225f866 51 // | ZI: Shell Stack |
vpcola 7:aafb9225f866 52 // +-------------------+
vpcola 7:aafb9225f866 53 // | ZI: Idle Stack |
vpcola 7:aafb9225f866 54 // +-------------------+
vpcola 7:aafb9225f866 55 // | ZI: Timer Stack |
vpcola 7:aafb9225f866 56 // +-------------------+
vpcola 7:aafb9225f866 57 // | RW |
vpcola 7:aafb9225f866 58 // ------+===================+ First Address of RAM
vpcola 7:aafb9225f866 59 // | |
vpcola 7:aafb9225f866 60 // Flash | |
vpcola 7:aafb9225f866 61 //
vpcola 7:aafb9225f866 62
vpcola 7:aafb9225f866 63 uint32_t bottom_of_stack = __get_MSP();
vpcola 7:aafb9225f866 64 char * top_of_heap = (char *) malloc(sizeof(char));
vpcola 7:aafb9225f866 65 uint32_t diff = bottom_of_stack - (uint32_t) top_of_heap;
vpcola 7:aafb9225f866 66
vpcola 7:aafb9225f866 67 free((void *) top_of_heap);
vpcola 7:aafb9225f866 68 chp->printf("Available Memory : %d bytes\r\n",
vpcola 7:aafb9225f866 69 diff);
vpcola 7:aafb9225f866 70 }
vpcola 7:aafb9225f866 71
vpcola 7:aafb9225f866 72 /**
vpcola 7:aafb9225f866 73 * \brief List Directories and files
vpcola 7:aafb9225f866 74 * \param none
vpcola 7:aafb9225f866 75 * \return int
vpcola 7:aafb9225f866 76 **/
vpcola 7:aafb9225f866 77 static void cmd_ls(Stream * chp, int argc, char * argv[])
vpcola 7:aafb9225f866 78 {
vpcola 7:aafb9225f866 79 DIR * dp;
vpcola 7:aafb9225f866 80 struct dirent * dirp;
vpcola 7:aafb9225f866 81 char dirroot[256];
vpcola 7:aafb9225f866 82
vpcola 7:aafb9225f866 83 if (argc >= 1)
vpcola 7:aafb9225f866 84 sprintf(dirroot, "/sd/%s", argv[0]);
vpcola 7:aafb9225f866 85 else
vpcola 7:aafb9225f866 86 sprintf(dirroot, "/sd");
vpcola 7:aafb9225f866 87
vpcola 7:aafb9225f866 88 chp->printf("Listing directory [%s]\r\n", dirroot);
vpcola 7:aafb9225f866 89
vpcola 7:aafb9225f866 90 dp = opendir(dirroot);
vpcola 7:aafb9225f866 91 while((dirp = readdir(dp)) != NULL)
vpcola 7:aafb9225f866 92 {
vpcola 7:aafb9225f866 93 chp->printf("\t%s\r\n", dirp->d_name);
vpcola 7:aafb9225f866 94 }
vpcola 7:aafb9225f866 95 closedir(dp);
vpcola 7:aafb9225f866 96 }
vpcola 7:aafb9225f866 97
vpcola 7:aafb9225f866 98 static void cmd_load(Stream * chp, int argc, char * argv[])
vpcola 7:aafb9225f866 99 {
vpcola 7:aafb9225f866 100 char filename[256];
vpcola 7:aafb9225f866 101
vpcola 7:aafb9225f866 102 if (argc != 1)
vpcola 7:aafb9225f866 103 {
vpcola 7:aafb9225f866 104 chp->printf("load <bitmapfile>\r\n");
vpcola 7:aafb9225f866 105 return;
vpcola 7:aafb9225f866 106 }
vpcola 7:aafb9225f866 107
vpcola 7:aafb9225f866 108 sprintf(filename, "/sd/%s", argv[0]);
vpcola 7:aafb9225f866 109 // Load a bitmap startup file
vpcola 7:aafb9225f866 110 int err = TFT.BMP_16(0,0, filename);
vpcola 7:aafb9225f866 111 if (err != 1) TFT.printf(" - Err: %d", err);
vpcola 7:aafb9225f866 112 }
vpcola 7:aafb9225f866 113
vpcola 7:aafb9225f866 114
vpcola 7:aafb9225f866 115 /**
vpcola 7:aafb9225f866 116 * \brief Initialize LCD
vpcola 7:aafb9225f866 117 * \param none
vpcola 7:aafb9225f866 118 * \return void
vpcola 7:aafb9225f866 119 **/
vpcola 7:aafb9225f866 120 void init_LCD()
vpcola 7:aafb9225f866 121 {
vpcola 7:aafb9225f866 122 pc.printf("Initializing LCD Screen ...\r\n");
vpcola 7:aafb9225f866 123
vpcola 7:aafb9225f866 124 // Turn on the LCD
vpcola 7:aafb9225f866 125 lcdOn = 1;
vpcola 7:aafb9225f866 126
vpcola 7:aafb9225f866 127 TFT.claim(stdout);
vpcola 7:aafb9225f866 128 TFT.set_orientation(1);
vpcola 7:aafb9225f866 129 TFT.background(Black); // set background to black
vpcola 7:aafb9225f866 130 TFT.foreground(White); // set chars to white
vpcola 7:aafb9225f866 131 TFT.cls(); // clear the screen
vpcola 7:aafb9225f866 132
vpcola 7:aafb9225f866 133
vpcola 7:aafb9225f866 134 TFT.set_font((unsigned char*) Arial12x12);
vpcola 7:aafb9225f866 135 TFT.locate(0,0);
vpcola 7:aafb9225f866 136
vpcola 7:aafb9225f866 137 printf("Hello World of EMBED!\n");
vpcola 7:aafb9225f866 138
vpcola 7:aafb9225f866 139 }
vpcola 7:aafb9225f866 140
vpcola 7:aafb9225f866 141
vpcola 7:aafb9225f866 142 void led1_thread(void const *args) {
vpcola 7:aafb9225f866 143 while (true) {
vpcola 7:aafb9225f866 144 myled = !myled;
vpcola 7:aafb9225f866 145 Thread::wait(1000);
vpcola 7:aafb9225f866 146 }
vpcola 7:aafb9225f866 147 }
dan 0:7dec7e9ac085 148
dan 0:7dec7e9ac085 149 int main() {
vpcola 7:aafb9225f866 150 Thread * thread;
vpcola 7:aafb9225f866 151 pc.baud(115200);
vpcola 7:aafb9225f866 152
vpcola 7:aafb9225f866 153 pc.printf("\r\nStarting Mbed ...\r\n");
vpcola 7:aafb9225f866 154 // pc.printf("Inititalizing ethernet ....\r\n");
vpcola 7:aafb9225f866 155 // eth.init(); // Use DHCP
vpcola 7:aafb9225f866 156 // eth.connect();
vpcola 7:aafb9225f866 157 // pc.printf("IP Address is %s\n", eth.getIPAddress());
vpcola 7:aafb9225f866 158
vpcola 7:aafb9225f866 159 // Initialize the LCD
vpcola 7:aafb9225f866 160 init_LCD();
vpcola 7:aafb9225f866 161
vpcola 7:aafb9225f866 162 // After initializing the ethernet interface
vpcola 7:aafb9225f866 163 // run it in its own thread
vpcola 7:aafb9225f866 164 thread = new Thread(led1_thread);
vpcola 7:aafb9225f866 165
vpcola 7:aafb9225f866 166 // Start the shell
vpcola 7:aafb9225f866 167 pc.printf("Starting debug shell ...\r\n");
vpcola 7:aafb9225f866 168 shell.addCommand("ls", cmd_ls);
vpcola 7:aafb9225f866 169 //shell.addCommand("load", cmd_load);
vpcola 7:aafb9225f866 170 shell.addCommand("mem", cmd_mem);
vpcola 7:aafb9225f866 171 shell.start(osPriorityNormal, SHELL_STACK_SIZ, shellStack);
vpcola 7:aafb9225f866 172
vpcola 7:aafb9225f866 173 // Do something logical here
vpcola 7:aafb9225f866 174 // other than looping
dan 0:7dec7e9ac085 175 while(1) {
stevep 4:81cea7a352b0 176 wait(0.2);
stevep 4:81cea7a352b0 177 }
vpcola 7:aafb9225f866 178
vpcola 7:aafb9225f866 179 thread->terminate();
vpcola 7:aafb9225f866 180 delete thread;
dan 0:7dec7e9ac085 181 }