/**
* @section LICENSE
******************************************************************************
* (C) Copyright 2009 Energy Micro AS, www.energymicro.com
******************************************************************************
*
* This source code is the property of Energy Micro AS. The source/compiled
* code may not be used, redistributed or modified without a written consent
* from Energy Micro AS.
*
* This copyright notice may not be removed from the source code nor changed.
*
* DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Energy Micro AS has no
* obligation to support this Software. Energy Micro AS is providing the
* Software "AS IS", with no express or implied warranties of any kind,
* including, but not limited to, any implied warranties of merchantability
* or fitness for any particular purpose or warranties against infringement
* of any proprietary rights of a third party.
*
* Energy Micro AS will not be liable for any consequential, incidental, or
* special damages, or any other relief, or for any claim by any third party,
* arising from your use of this Software.
*
******************************************************************************
* @file dmd_ssd2119.h
* @brief Dot matrix display driver for LCD controller SSD2119
* @author Energy Micro AS
******************************************************************************
*/
#ifndef __DMD_SSD2119_H
#define __DMD_SSD2119_H
#include
#include "graphics/em_types.h"
/* TODO: remove this and replace with include types and ecodes */
#define ECODE_DMD_BASE 0x00000000
/* Error codes */
/** Successful call */
#define DMD_OK 0x00000000
/** Driver not initialized correctly */
#define DMD_ERROR_DRIVER_NOT_INITIALIZED (ECODE_DMD_BASE | 0x0001)
/** Driver is already initialized */
#define DMD_ERROR_DRIVER_ALREADY_INITIALIZED (ECODE_DMD_BASE | 0x0002)
/** Length of data is larger than size of clip */
#define DMD_ERROR_TOO_MUCH_DATA (ECODE_DMD_BASE | 0x0003)
/** Pixel is outside current clipping area */
#define DMD_ERROR_PIXEL_OUT_OF_BOUNDS (ECODE_DMD_BASE | 0x0004)
/** Clipping area is empty */
#define DMD_ERROR_EMPTY_CLIPPING_AREA (ECODE_DMD_BASE | 0x0005)
/** Wrong device code */
#define DMD_ERROR_WRONG_DEVICE_CODE (ECODE_DMD_BASE | 0x0006)
/** Memory error */
#define DMD_ERROR_MEMORY_ERROR (ECODE_DMD_BASE | 0x0007)
/** Error code expected, but didn't happen */
#define DMD_ERROR_NO_ERROR_CODE (ECODE_DMD_BASE | 0x0008)
/** Test run failed */
#define DMD_ERROR_TEST_FAILED (ECODE_DMD_BASE | 0x0009)
/** Frame update frequency of display */
#define DMD_FRAME_FREQUENCY 80
/** Horizontal size of the display */
#define DMD_HORIZONTAL_SIZE 320
/** Vertical size of the display */
#define DMD_VERTICAL_SIZE 240
/* Tests */
/** Device code test */
#define DMD_TEST_DEVICE_CODE 0x00000001
/** Memory test */
#define DMD_TEST_MEMORY 0x00000002
/** Parameter checks test */
#define DMD_TEST_PARAMETER_CHECKS 0x00000004
/** Color test */
#define DMD_TEST_COLORS 0x00000008
/** Clipping test */
#define DMD_TEST_CLIPPING 0x00000010
#define DMD_MEMORY_TEST_WIDTH 4
#define DMD_MEMORY_TEST_HEIGHT 3
/** @struct __DMD_DisplayGeometry
* @brief Dimensions of the display
*/
typedef struct __DMD_DisplayGeometry
{
/** Horizontal size of the display, in pixels */
uint16_t xSize;
/** Vertical size of the display, in pixels */
uint16_t ySize;
/** X coordinate of the top left corner of the clipping area */
uint16_t xClipStart;
/** Y coordinate of the top left corner of the clipping area */
uint16_t yClipStart;
/** Width of the clipping area */
uint16_t clipWidth;
/** Height of the clipping area */
uint16_t clipHeight;
} DMD_DisplayGeometry; /**< Typedef for display dimensions */
/** @struct __DMD_MemoryError
* @brief Information about a memory error
*/
typedef struct __DMD_MemoryError
{
/** X coordinate of the address where the error happened */
uint16_t x;
/** Y coordinate of the address where the error happened */
uint16_t y;
/** The color that was written to the memory address */
uint8_t writtenColor[3];
/** The color that was read from the memory address */
uint8_t readColor[3];
} DMD_MemoryError; /**< Typedef for memory error information */
/* Module prototypes */
EMSTATUS DMD_init(uint32_t cmdRegAddr, uint32_t dataRegAddr);
EMSTATUS DMD_getDisplayGeometry(DMD_DisplayGeometry **geometry);
EMSTATUS DMD_setClippingArea(uint16_t xStart, uint16_t yStart,
uint16_t width, uint16_t height);
EMSTATUS DMD_writeData(uint16_t x, uint16_t y,
const uint8_t data[], uint32_t numPixels);
EMSTATUS DMD_writeDataRLE(uint16_t x, uint16_t y, uint16_t xlen, uint16_t ylen,
const uint8_t *data);
EMSTATUS DMD_writeDataRLEFade(uint16_t x, uint16_t y, uint16_t xlen, uint16_t ylen,
const uint8_t *data,
int red, int green, int blue, int weight);
EMSTATUS DMD_readData(uint16_t x, uint16_t y,
uint8_t data[], uint32_t numPixels);
EMSTATUS DMD_writeColor(uint16_t x, uint16_t y, uint8_t red,
uint8_t green, uint8_t blue, uint32_t numPixels);
EMSTATUS DMD_writePixel(uint16_t x, uint16_t y, uint16_t color,
uint32_t numPixels);
EMSTATUS DMD_readPixel(uint16_t x, uint16_t y, uint16_t *color);
EMSTATUS DMD_sleep(void);
EMSTATUS DMD_wakeUp(void);
/* Test functions */
EMSTATUS DMD_testParameterChecks(void);
EMSTATUS DMD_testMemory(uint16_t x, uint16_t y,
uint32_t useClipWrite, uint32_t useClipRead,
DMD_MemoryError *memoryError);
EMSTATUS DMD_testMemory2(uint16_t x, uint16_t y,
uint32_t useClipWrite);
EMSTATUS DMD_testDeviceCode(void);
EMSTATUS DMD_testColors(uint32_t delay);
EMSTATUS DMD_testClipping(void);
EMSTATUS DMD_runTests(uint32_t tests, uint32_t *result);
EMSTATUS DMD_flipDisplay(int horizontal, int vertical);
#endif