diff options
author | inmarket <andrewh@inmarket.com.au> | 2015-11-21 19:28:12 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2015-11-21 19:28:12 +1000 |
commit | 3ae120406e1244d728276b2bcc74d03d1ccb230d (patch) | |
tree | f429f479c6e146e1c3cdfc986689ca6750b1c4c2 /boards/base/ArduinoTinyScreen/gfx | |
parent | c5a86757bd8309027d50f82d8947250c8e1197e6 (diff) | |
download | uGFX-3ae120406e1244d728276b2bcc74d03d1ccb230d.tar.gz uGFX-3ae120406e1244d728276b2bcc74d03d1ccb230d.tar.bz2 uGFX-3ae120406e1244d728276b2bcc74d03d1ccb230d.zip |
Add an Arduino Sketch project.
It shows how to add ugfx as a sketch library.
Diffstat (limited to 'boards/base/ArduinoTinyScreen/gfx')
-rw-r--r-- | boards/base/ArduinoTinyScreen/gfx/board_SSD1331.cpp | 88 | ||||
-rw-r--r-- | boards/base/ArduinoTinyScreen/gfx/board_SSD1331.h | 34 | ||||
-rw-r--r-- | boards/base/ArduinoTinyScreen/gfx/driver_SSD1331.c | 1 | ||||
-rw-r--r-- | boards/base/ArduinoTinyScreen/gfx/gdisp_lld_config.h | 1 | ||||
-rw-r--r-- | boards/base/ArduinoTinyScreen/gfx/gfx.c | 1 | ||||
-rw-r--r-- | boards/base/ArduinoTinyScreen/gfx/gfx.h | 1 | ||||
-rw-r--r-- | boards/base/ArduinoTinyScreen/gfx/gfxconf.h | 48 |
7 files changed, 174 insertions, 0 deletions
diff --git a/boards/base/ArduinoTinyScreen/gfx/board_SSD1331.cpp b/boards/base/ArduinoTinyScreen/gfx/board_SSD1331.cpp new file mode 100644 index 00000000..5065c34d --- /dev/null +++ b/boards/base/ArduinoTinyScreen/gfx/board_SSD1331.cpp @@ -0,0 +1,88 @@ +#include <Arduino.h> +#include <SPI.h> +#include <Wire.h> + +#include "board_SSD1331.h" + +#define LCD_BOARD_ID 0 // 0 or 1 - set by the position of a resistor near SX1505 (see schematic and board design) + +// GPIO Pins +#define GPIO_DC 0x01 +#define GPIO_CS 0x02 +#define GPIO_RES 0x08 +#define GPIO_BTN1 0x10 +#define GPIO_BTN2 0x20 +#define GPIO_BTN3 0x40 +#define GPIO_BTN4 0x80 +#define GPIO_CMD_START ~(GPIO_CS|GPIO_DC) +#define GPIO_DATA_START ~GPIO_CS +#define GPIO_TRANSFER_END GPIO_CS + +//GPIO Registers +#define GPIO_RegData 0x00 +#define GPIO_RegDir 0x01 +#define GPIO_RegPullUp 0x02 + +// Wire address of the SX1505 chip +#define GPIO_ADDR 0x20 + +static void writeGPIO(uint8_t regAddr, uint8_t regData) +{ + uint8_t oldTWBR=TWBR; + TWBR=0; + Wire.beginTransmission(GPIO_ADDR + LCD_BOARD_ID); + Wire.write(regAddr); + Wire.write(regData); + Wire.endTransmission(); + TWBR=oldTWBR; +} + +static bool isDataMode = false; +static bool isCmdMode = false; + +void SSD1331_init_board(void) { + //setup GPIO, reset SSD1331 + writeGPIO(GPIO_RegData,~GPIO_RES);//reset low, CS/other pins high + writeGPIO(GPIO_RegDir,~GPIO_RES);//set reset to output + delay(5); + writeGPIO(GPIO_RegDir,~(GPIO_CS|GPIO_DC));//reset to input, CS/DC output + writeGPIO(GPIO_RegPullUp,GPIO_BTN1|GPIO_BTN2|GPIO_BTN3|GPIO_BTN4);//button pullup enable + //init SPI + SPI.begin(); + SPI.setDataMode(SPI_MODE0);//wrong mode, works because we're only writing. this mode is compatible with SD cards. + SPI.setClockDivider(SPI_CLOCK_DIV2); + + isDataMode = isCmdMode = false; +} + +void SSD1331_setpin_reset(int state) { + // Ignore this as we did it in the init_board +} + +void SSD1331_aquirebus(void) { + // Do nothing as we do it in the data transfer +} + +void SSD1331_releasebus(void) { + if (!isDataMode && !isCmdMode) return; + writeGPIO(GPIO_RegData,GPIO_TRANSFER_END); + isDataMode = isCmdMode = false; +} + +void SSD1331_write_cmd(uint8_t cmd) { + if (!isCmdMode) { + writeGPIO(GPIO_RegData,GPIO_CMD_START); + isDataMode = false; + isCmdMode = true; + } + SPI.transfer(cmd); +} + +void SSD1331_write_data(uint8_t data) { + if (!isDataMode) { + writeGPIO(GPIO_RegData,GPIO_DATA_START); + isDataMode = true; + isCmdMode = false; + } + SPI.transfer(data); +} diff --git a/boards/base/ArduinoTinyScreen/gfx/board_SSD1331.h b/boards/base/ArduinoTinyScreen/gfx/board_SSD1331.h new file mode 100644 index 00000000..17b125c8 --- /dev/null +++ b/boards/base/ArduinoTinyScreen/gfx/board_SSD1331.h @@ -0,0 +1,34 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +#define init_board(g) SSD1331_init_board() +#define post_init_board(g) +#define setpin_reset(g, state) SSD1331_setpin_reset(state) +#define acquire_bus(g) SSD1331_aquirebus() +#define release_bus(g) SSD1331_releasebus() +#define write_cmd(g, cmd) SSD1331_write_cmd(cmd) +#define write_data(g, data) SSD1331_write_data(data) + +#ifdef __cplusplus +extern "C" { +#endif + +void SSD1331_init_board(void); +void SSD1331_setpin_reset(int state); +void SSD1331_aquirebus(void); +void SSD1331_releasebus(void); +void SSD1331_write_cmd(uint8_t cmd); +void SSD1331_write_data(uint8_t data); + +#ifdef __cplusplus +} +#endif + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/boards/base/ArduinoTinyScreen/gfx/driver_SSD1331.c b/boards/base/ArduinoTinyScreen/gfx/driver_SSD1331.c new file mode 100644 index 00000000..910ea06a --- /dev/null +++ b/boards/base/ArduinoTinyScreen/gfx/driver_SSD1331.c @@ -0,0 +1 @@ +#include "ugfx/drivers/gdisp/SSD1331/gdisp_lld_SSD1331.c"
\ No newline at end of file diff --git a/boards/base/ArduinoTinyScreen/gfx/gdisp_lld_config.h b/boards/base/ArduinoTinyScreen/gfx/gdisp_lld_config.h new file mode 100644 index 00000000..29757d09 --- /dev/null +++ b/boards/base/ArduinoTinyScreen/gfx/gdisp_lld_config.h @@ -0,0 +1 @@ +#include "ugfx/drivers/gdisp/SSD1331/gdisp_lld_config.h"
\ No newline at end of file diff --git a/boards/base/ArduinoTinyScreen/gfx/gfx.c b/boards/base/ArduinoTinyScreen/gfx/gfx.c new file mode 100644 index 00000000..b5836987 --- /dev/null +++ b/boards/base/ArduinoTinyScreen/gfx/gfx.c @@ -0,0 +1 @@ +#include "ugfx/src/gfx_mk.c" diff --git a/boards/base/ArduinoTinyScreen/gfx/gfx.h b/boards/base/ArduinoTinyScreen/gfx/gfx.h new file mode 100644 index 00000000..19116626 --- /dev/null +++ b/boards/base/ArduinoTinyScreen/gfx/gfx.h @@ -0,0 +1 @@ +#include "ugfx/gfx.h"
\ No newline at end of file diff --git a/boards/base/ArduinoTinyScreen/gfx/gfxconf.h b/boards/base/ArduinoTinyScreen/gfx/gfxconf.h new file mode 100644 index 00000000..1a1f8623 --- /dev/null +++ b/boards/base/ArduinoTinyScreen/gfx/gfxconf.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu <joel@unormal.org> + * Copyright (c) 2012, 2013, Andrew Hannam aka inmarket + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the <organization> nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + +/* The operating system to use. One of these must be defined - preferably in your Makefile */ +//#define GFX_USE_OS_CHIBIOS FALSE +//#define GFX_USE_OS_WIN32 FALSE +//#define GFX_USE_OS_LINUX FALSE +//#define GFX_USE_OS_OSX FALSE +#define GFX_USE_OS_ARDUINO TRUE + +/* GFX sub-systems to turn on */ +#define GFX_USE_GDISP TRUE + +/* Features for the GDISP sub-system. */ +#define GDISP_NEED_VALIDATION TRUE +#define GDISP_NEED_CLIP TRUE + +#endif /* _GFXCONF_H */ + |