Ian Craggs / Mbed 2 deprecated IBMIoTClientEthernetExample-MACfix-Debug

Dependencies:   C12832 EthernetInterface LM75B MMA7660 MQTT mbed-rtos mbed

Fork of IBMIoTClientEthernetExample-MACfix-DebugFix by James Sutton

Committer:
samdanbury
Date:
Wed Aug 20 12:45:14 2014 +0000
Revision:
6:37b6d0d56190
Code completely changed to improve the structure, flow and memory usage of the application

Who changed what in which revision?

UserRevisionLine numberNew contents of line
samdanbury 6:37b6d0d56190 1 /* mbed library for the mbed Lab Board 128*32 pixel LCD
samdanbury 6:37b6d0d56190 2 * use C12832 controller
samdanbury 6:37b6d0d56190 3 * Copyright (c) 2012 Peter Drescher - DC2PD
samdanbury 6:37b6d0d56190 4 * Released under the MIT License: http://mbed.org/license/mit
samdanbury 6:37b6d0d56190 5 *
samdanbury 6:37b6d0d56190 6 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
samdanbury 6:37b6d0d56190 7 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
samdanbury 6:37b6d0d56190 8 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
samdanbury 6:37b6d0d56190 9 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
samdanbury 6:37b6d0d56190 10 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
samdanbury 6:37b6d0d56190 11 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
samdanbury 6:37b6d0d56190 12 * THE SOFTWARE.
samdanbury 6:37b6d0d56190 13 */
samdanbury 6:37b6d0d56190 14
samdanbury 6:37b6d0d56190 15 #ifndef C12832_H
samdanbury 6:37b6d0d56190 16 #define C12832_H
samdanbury 6:37b6d0d56190 17
samdanbury 6:37b6d0d56190 18 #include "mbed.h"
samdanbury 6:37b6d0d56190 19 #include "GraphicsDisplay.h"
samdanbury 6:37b6d0d56190 20
samdanbury 6:37b6d0d56190 21
samdanbury 6:37b6d0d56190 22 /**
samdanbury 6:37b6d0d56190 23 * Optional Defines:
samdanbury 6:37b6d0d56190 24 * #define debug_lcd 1 enable infos to PC_USB
samdanbury 6:37b6d0d56190 25 */
samdanbury 6:37b6d0d56190 26
samdanbury 6:37b6d0d56190 27 // some defines for the DMA use
samdanbury 6:37b6d0d56190 28 #define DMA_CHANNEL_ENABLE 1
samdanbury 6:37b6d0d56190 29 #define DMA_TRANSFER_TYPE_M2P (1UL << 11)
samdanbury 6:37b6d0d56190 30 #define DMA_CHANNEL_TCIE (1UL << 31)
samdanbury 6:37b6d0d56190 31 #define DMA_CHANNEL_SRC_INC (1UL << 26)
samdanbury 6:37b6d0d56190 32 #define DMA_MASK_IE (1UL << 14)
samdanbury 6:37b6d0d56190 33 #define DMA_MASK_ITC (1UL << 15)
samdanbury 6:37b6d0d56190 34 #define DMA_SSP1_TX (1UL << 2)
samdanbury 6:37b6d0d56190 35 #define DMA_SSP0_TX (0)
samdanbury 6:37b6d0d56190 36 #define DMA_DEST_SSP1_TX (2UL << 6)
samdanbury 6:37b6d0d56190 37 #define DMA_DEST_SSP0_TX (0UL << 6)
samdanbury 6:37b6d0d56190 38
samdanbury 6:37b6d0d56190 39 /**
samdanbury 6:37b6d0d56190 40 * Draw mode
samdanbury 6:37b6d0d56190 41 * NORMAL
samdanbury 6:37b6d0d56190 42 * XOR set pixel by xor the screen
samdanbury 6:37b6d0d56190 43 */
samdanbury 6:37b6d0d56190 44 enum {NORMAL,XOR};
samdanbury 6:37b6d0d56190 45
samdanbury 6:37b6d0d56190 46 /**
samdanbury 6:37b6d0d56190 47 * Bitmap
samdanbury 6:37b6d0d56190 48 */
samdanbury 6:37b6d0d56190 49 struct Bitmap{
samdanbury 6:37b6d0d56190 50 int xSize;
samdanbury 6:37b6d0d56190 51 int ySize;
samdanbury 6:37b6d0d56190 52 int Byte_in_Line;
samdanbury 6:37b6d0d56190 53 char* data;
samdanbury 6:37b6d0d56190 54 };
samdanbury 6:37b6d0d56190 55
samdanbury 6:37b6d0d56190 56 /**
samdanbury 6:37b6d0d56190 57 * The C12832 class
samdanbury 6:37b6d0d56190 58 */
samdanbury 6:37b6d0d56190 59 class C12832 : public GraphicsDisplay
samdanbury 6:37b6d0d56190 60 {
samdanbury 6:37b6d0d56190 61 public:
samdanbury 6:37b6d0d56190 62 /**
samdanbury 6:37b6d0d56190 63 * Create a C12832 object connected to SPI1
samdanbury 6:37b6d0d56190 64 */
samdanbury 6:37b6d0d56190 65 C12832(PinName mosi, PinName sck, PinName reset, PinName a0, PinName ncs, const char* name = "LCD");
samdanbury 6:37b6d0d56190 66
samdanbury 6:37b6d0d56190 67 /**
samdanbury 6:37b6d0d56190 68 * Get the width of the screen in pixel
samdanbury 6:37b6d0d56190 69 *
samdanbury 6:37b6d0d56190 70 * @returns width of screen in pixel
samdanbury 6:37b6d0d56190 71 *
samdanbury 6:37b6d0d56190 72 */
samdanbury 6:37b6d0d56190 73 virtual int width();
samdanbury 6:37b6d0d56190 74
samdanbury 6:37b6d0d56190 75 /**
samdanbury 6:37b6d0d56190 76 * Get the height of the screen in pixel
samdanbury 6:37b6d0d56190 77 *
samdanbury 6:37b6d0d56190 78 * @returns height of screen in pixel
samdanbury 6:37b6d0d56190 79 */
samdanbury 6:37b6d0d56190 80 virtual int height();
samdanbury 6:37b6d0d56190 81
samdanbury 6:37b6d0d56190 82 /**
samdanbury 6:37b6d0d56190 83 * Draw a pixel at x,y black or white
samdanbury 6:37b6d0d56190 84 *
samdanbury 6:37b6d0d56190 85 * @param x horizontal position
samdanbury 6:37b6d0d56190 86 * @param y vertical position
samdanbury 6:37b6d0d56190 87 * @param color - 1 set pixel, 0 erase pixel
samdanbury 6:37b6d0d56190 88 */
samdanbury 6:37b6d0d56190 89 virtual void pixel(int x, int y,int colour);
samdanbury 6:37b6d0d56190 90
samdanbury 6:37b6d0d56190 91 /**
samdanbury 6:37b6d0d56190 92 * Draw a circle
samdanbury 6:37b6d0d56190 93 *
samdanbury 6:37b6d0d56190 94 * @param x0,y0 center
samdanbury 6:37b6d0d56190 95 * @param r radius
samdanbury 6:37b6d0d56190 96 * @param color - 1 set pixel, 0 erase pixel
samdanbury 6:37b6d0d56190 97 */
samdanbury 6:37b6d0d56190 98 void circle(int x, int y, int r, int colour);
samdanbury 6:37b6d0d56190 99
samdanbury 6:37b6d0d56190 100 /**
samdanbury 6:37b6d0d56190 101 * Draw a filled circle
samdanbury 6:37b6d0d56190 102 *
samdanbury 6:37b6d0d56190 103 * @param x0,y0 center
samdanbury 6:37b6d0d56190 104 * @param r radius
samdanbury 6:37b6d0d56190 105 * @param color - 1 set pixel, 0 erase pixel
samdanbury 6:37b6d0d56190 106 *
samdanbury 6:37b6d0d56190 107 * Use circle with different radius,
samdanbury 6:37b6d0d56190 108 * Can miss some pixels
samdanbury 6:37b6d0d56190 109 */
samdanbury 6:37b6d0d56190 110 void fillcircle(int x, int y, int r, int colour);
samdanbury 6:37b6d0d56190 111
samdanbury 6:37b6d0d56190 112 /**
samdanbury 6:37b6d0d56190 113 * Draw a 1 pixel line
samdanbury 6:37b6d0d56190 114 *
samdanbury 6:37b6d0d56190 115 * @param x0,y0 start point
samdanbury 6:37b6d0d56190 116 * @param x1,y1 stop point
samdanbury 6:37b6d0d56190 117 * @param color - 1 set pixel, 0 erase pixel
samdanbury 6:37b6d0d56190 118 */
samdanbury 6:37b6d0d56190 119 void line(int x0, int y0, int x1, int y1, int colour);
samdanbury 6:37b6d0d56190 120
samdanbury 6:37b6d0d56190 121 /**
samdanbury 6:37b6d0d56190 122 * Draw a rect
samdanbury 6:37b6d0d56190 123 *
samdanbury 6:37b6d0d56190 124 * @param x0,y0 top left corner
samdanbury 6:37b6d0d56190 125 * @param x1,y1 down right corner
samdanbury 6:37b6d0d56190 126 * @param color - 1 set pixel, 0 erase pixel
samdanbury 6:37b6d0d56190 127 */
samdanbury 6:37b6d0d56190 128 void rect(int x0, int y0, int x1, int y1, int colour);
samdanbury 6:37b6d0d56190 129
samdanbury 6:37b6d0d56190 130 /**
samdanbury 6:37b6d0d56190 131 * Draw a filled rect
samdanbury 6:37b6d0d56190 132 *
samdanbury 6:37b6d0d56190 133 * @param x0,y0 top left corner
samdanbury 6:37b6d0d56190 134 * @param x1,y1 down right corner
samdanbury 6:37b6d0d56190 135 * @param color - 1 set pixel, 0 erase pixel
samdanbury 6:37b6d0d56190 136 */
samdanbury 6:37b6d0d56190 137 void fillrect(int x0, int y0, int x1, int y1, int colour);
samdanbury 6:37b6d0d56190 138
samdanbury 6:37b6d0d56190 139 /**
samdanbury 6:37b6d0d56190 140 * Copy display buffer to LCD
samdanbury 6:37b6d0d56190 141 */
samdanbury 6:37b6d0d56190 142 void copy_to_lcd(void);
samdanbury 6:37b6d0d56190 143
samdanbury 6:37b6d0d56190 144 /**
samdanbury 6:37b6d0d56190 145 * Set the orienation of the screen
samdanbury 6:37b6d0d56190 146 */
samdanbury 6:37b6d0d56190 147
samdanbury 6:37b6d0d56190 148 void set_contrast(unsigned int o);
samdanbury 6:37b6d0d56190 149
samdanbury 6:37b6d0d56190 150 /**
samdanbury 6:37b6d0d56190 151 * Read the contrast level
samdanbury 6:37b6d0d56190 152 */
samdanbury 6:37b6d0d56190 153 unsigned int get_contrast(void);
samdanbury 6:37b6d0d56190 154
samdanbury 6:37b6d0d56190 155 /**
samdanbury 6:37b6d0d56190 156 * Invert the screen
samdanbury 6:37b6d0d56190 157 *
samdanbury 6:37b6d0d56190 158 * @param o = 0 normal, 1 invert
samdanbury 6:37b6d0d56190 159 */
samdanbury 6:37b6d0d56190 160 void invert(unsigned int o);
samdanbury 6:37b6d0d56190 161
samdanbury 6:37b6d0d56190 162 /**
samdanbury 6:37b6d0d56190 163 * Clear the screen
samdanbury 6:37b6d0d56190 164 */
samdanbury 6:37b6d0d56190 165 virtual void cls(void);
samdanbury 6:37b6d0d56190 166
samdanbury 6:37b6d0d56190 167 /**
samdanbury 6:37b6d0d56190 168 * Set the drawing mode
samdanbury 6:37b6d0d56190 169 *
samdanbury 6:37b6d0d56190 170 * @param mode NORMAl or XOR
samdanbury 6:37b6d0d56190 171 */
samdanbury 6:37b6d0d56190 172 void setmode(int mode);
samdanbury 6:37b6d0d56190 173
samdanbury 6:37b6d0d56190 174 virtual int columns(void);
samdanbury 6:37b6d0d56190 175
samdanbury 6:37b6d0d56190 176 /**
samdanbury 6:37b6d0d56190 177 * Calculate the max number of columns.
samdanbury 6:37b6d0d56190 178 * Depends on actual font size
samdanbury 6:37b6d0d56190 179 *
samdanbury 6:37b6d0d56190 180 * @returns max column
samdanbury 6:37b6d0d56190 181 */
samdanbury 6:37b6d0d56190 182 virtual int rows(void);
samdanbury 6:37b6d0d56190 183
samdanbury 6:37b6d0d56190 184 /**
samdanbury 6:37b6d0d56190 185 * Put a char on the screen
samdanbury 6:37b6d0d56190 186 *
samdanbury 6:37b6d0d56190 187 * @param value char to print
samdanbury 6:37b6d0d56190 188 * @returns printed char
samdanbury 6:37b6d0d56190 189 */
samdanbury 6:37b6d0d56190 190 virtual int _putc(int value);
samdanbury 6:37b6d0d56190 191
samdanbury 6:37b6d0d56190 192 /**
samdanbury 6:37b6d0d56190 193 * Draw a character on given position out of the active font to the LCD
samdanbury 6:37b6d0d56190 194 *
samdanbury 6:37b6d0d56190 195 * @param x x-position of char (top left)
samdanbury 6:37b6d0d56190 196 * @param y y-position
samdanbury 6:37b6d0d56190 197 * @param c char to print
samdanbury 6:37b6d0d56190 198 */
samdanbury 6:37b6d0d56190 199 virtual void character(int x, int y, int c);
samdanbury 6:37b6d0d56190 200
samdanbury 6:37b6d0d56190 201 /**
samdanbury 6:37b6d0d56190 202 * Setup cursor position
samdanbury 6:37b6d0d56190 203 *
samdanbury 6:37b6d0d56190 204 * @param x x-position (top left)
samdanbury 6:37b6d0d56190 205 * @param y y-position
samdanbury 6:37b6d0d56190 206 */
samdanbury 6:37b6d0d56190 207 virtual void locate(int x, int y);
samdanbury 6:37b6d0d56190 208
samdanbury 6:37b6d0d56190 209 /**
samdanbury 6:37b6d0d56190 210 * Setup auto update of screen
samdanbury 6:37b6d0d56190 211 *
samdanbury 6:37b6d0d56190 212 * @param up 1 = on , 0 = off
samdanbury 6:37b6d0d56190 213 *
samdanbury 6:37b6d0d56190 214 * if switched off the program has to call copy_to_lcd()
samdanbury 6:37b6d0d56190 215 * to update screen from framebuffer
samdanbury 6:37b6d0d56190 216 */
samdanbury 6:37b6d0d56190 217 void set_auto_up(unsigned int up);
samdanbury 6:37b6d0d56190 218
samdanbury 6:37b6d0d56190 219 /**
samdanbury 6:37b6d0d56190 220 * Get status of the auto update function
samdanbury 6:37b6d0d56190 221 *
samdanbury 6:37b6d0d56190 222 * @returns if auto update is on
samdanbury 6:37b6d0d56190 223 */
samdanbury 6:37b6d0d56190 224 unsigned int get_auto_up(void);
samdanbury 6:37b6d0d56190 225
samdanbury 6:37b6d0d56190 226 /** Vars */
samdanbury 6:37b6d0d56190 227 SPI _spi;
samdanbury 6:37b6d0d56190 228 DigitalOut _reset;
samdanbury 6:37b6d0d56190 229 DigitalOut _A0;
samdanbury 6:37b6d0d56190 230 DigitalOut _CS;
samdanbury 6:37b6d0d56190 231 unsigned char* font;
samdanbury 6:37b6d0d56190 232 unsigned int draw_mode;
samdanbury 6:37b6d0d56190 233
samdanbury 6:37b6d0d56190 234
samdanbury 6:37b6d0d56190 235 /**
samdanbury 6:37b6d0d56190 236 * Select the font to use
samdanbury 6:37b6d0d56190 237 *
samdanbury 6:37b6d0d56190 238 * @param f pointer to font array
samdanbury 6:37b6d0d56190 239 *
samdanbury 6:37b6d0d56190 240 * font array can created with GLCD Font Creator from http://www.mikroe.com
samdanbury 6:37b6d0d56190 241 * you have to add 4 parameter at the beginning of the font array to use:
samdanbury 6:37b6d0d56190 242 * - the number of byte / char
samdanbury 6:37b6d0d56190 243 * - the vertial size in pixel
samdanbury 6:37b6d0d56190 244 * - the horizontal size in pixel
samdanbury 6:37b6d0d56190 245 * - the number of byte per vertical line
samdanbury 6:37b6d0d56190 246 * you also have to change the array to char[]
samdanbury 6:37b6d0d56190 247 */
samdanbury 6:37b6d0d56190 248 void set_font(unsigned char* f);
samdanbury 6:37b6d0d56190 249
samdanbury 6:37b6d0d56190 250 /**
samdanbury 6:37b6d0d56190 251 * Print bitmap to buffer
samdanbury 6:37b6d0d56190 252 *
samdanbury 6:37b6d0d56190 253 * @param bm Bitmap in flash
samdanbury 6:37b6d0d56190 254 * @param x x start
samdanbury 6:37b6d0d56190 255 * @param y y start
samdanbury 6:37b6d0d56190 256 */
samdanbury 6:37b6d0d56190 257 void print_bm(Bitmap bm, int x, int y);
samdanbury 6:37b6d0d56190 258
samdanbury 6:37b6d0d56190 259 protected:
samdanbury 6:37b6d0d56190 260
samdanbury 6:37b6d0d56190 261 /**
samdanbury 6:37b6d0d56190 262 * Draw a horizontal line
samdanbury 6:37b6d0d56190 263 *
samdanbury 6:37b6d0d56190 264 * @param x0 horizontal start
samdanbury 6:37b6d0d56190 265 * @param x1 horizontal stop
samdanbury 6:37b6d0d56190 266 * @param y vertical position
samdanbury 6:37b6d0d56190 267 * @param color - 1 set pixel, 0 erase pixel
samdanbury 6:37b6d0d56190 268 */
samdanbury 6:37b6d0d56190 269 void hline(int x0, int x1, int y, int colour);
samdanbury 6:37b6d0d56190 270
samdanbury 6:37b6d0d56190 271 /**
samdanbury 6:37b6d0d56190 272 * Draw a vertical line
samdanbury 6:37b6d0d56190 273 *
samdanbury 6:37b6d0d56190 274 * @param x horizontal position
samdanbury 6:37b6d0d56190 275 * @param y0 vertical start
samdanbury 6:37b6d0d56190 276 * @param y1 vertical stop
samdanbury 6:37b6d0d56190 277 * @param color - 1 set pixel, 0 erase pixel
samdanbury 6:37b6d0d56190 278 */
samdanbury 6:37b6d0d56190 279 void vline(int y0, int y1, int x, int colour);
samdanbury 6:37b6d0d56190 280
samdanbury 6:37b6d0d56190 281 /**
samdanbury 6:37b6d0d56190 282 * Init the C12832 LCD controller
samdanbury 6:37b6d0d56190 283 */
samdanbury 6:37b6d0d56190 284 void lcd_reset();
samdanbury 6:37b6d0d56190 285
samdanbury 6:37b6d0d56190 286 /**
samdanbury 6:37b6d0d56190 287 * Write data to the LCD controller
samdanbury 6:37b6d0d56190 288 *
samdanbury 6:37b6d0d56190 289 * @param dat data written to LCD controller
samdanbury 6:37b6d0d56190 290 */
samdanbury 6:37b6d0d56190 291 void wr_dat(unsigned char value);
samdanbury 6:37b6d0d56190 292
samdanbury 6:37b6d0d56190 293 /**
samdanbury 6:37b6d0d56190 294 * Write a command the LCD controller
samdanbury 6:37b6d0d56190 295 *
samdanbury 6:37b6d0d56190 296 * @param cmd: command to be written
samdanbury 6:37b6d0d56190 297 */
samdanbury 6:37b6d0d56190 298 void wr_cmd(unsigned char value);
samdanbury 6:37b6d0d56190 299
samdanbury 6:37b6d0d56190 300 void wr_cnt(unsigned char cmd);
samdanbury 6:37b6d0d56190 301
samdanbury 6:37b6d0d56190 302 unsigned int orientation;
samdanbury 6:37b6d0d56190 303 unsigned int char_x;
samdanbury 6:37b6d0d56190 304 unsigned int char_y;
samdanbury 6:37b6d0d56190 305 unsigned char buffer[512];
samdanbury 6:37b6d0d56190 306 unsigned int contrast;
samdanbury 6:37b6d0d56190 307 unsigned int auto_up;
samdanbury 6:37b6d0d56190 308
samdanbury 6:37b6d0d56190 309 };
samdanbury 6:37b6d0d56190 310
samdanbury 6:37b6d0d56190 311
samdanbury 6:37b6d0d56190 312
samdanbury 6:37b6d0d56190 313
samdanbury 6:37b6d0d56190 314 #endif