diff --git a/include/interface/graphic_lcd/display.h b/include/interface/graphic_lcd/display.h index ebc3982..6137eda 100644 --- a/include/interface/graphic_lcd/display.h +++ b/include/interface/graphic_lcd/display.h @@ -19,13 +19,14 @@ typedef struct display { int height; int width; uint8_t backlight[3]; + int invert; int (*init)(void*); int (*quit)(void); int (*update)(void); - unsigned char *output_buffer; + uint8_t *output_buffer; }DISPLAY; -DISPLAY pipe_fifo; -DISPLAY disp_MatrixOrbitalGX; +extern DISPLAY pipe_fifo; +extern DISPLAY disp_MatrixOrbitalGX; #endif /* SRC_DISPLAY_GRAPHIC_LCD_DISPLAY_H_ */ diff --git a/src/interface/display/driver/drv_MatrixOrbitalGX.c b/src/interface/display/driver/drv_MatrixOrbitalGX.c index 6f4d37f..3f5abc3 100644 --- a/src/interface/display/driver/drv_MatrixOrbitalGX.c +++ b/src/interface/display/driver/drv_MatrixOrbitalGX.c @@ -50,7 +50,9 @@ //#include //#include +#include "debug.h" #include "libusb-compat-0.1/libusb/usb.h" +#include "interface/graphic_lcd/display.h" //#include "usb.h" /* #include "debug.h" @@ -66,6 +68,8 @@ #include "drv_generic_graphic.h" */ +#define MOGX_TAG "Matrix Orbital driver" + #define MatrixOrbitalGX_VENDOR 0x1b3d #define MatrixOrbitalGX_DEVICE_1 0x000a #define MatrixOrbitalGX_DEVICE_2 0x000b @@ -81,15 +85,15 @@ #define SCREEN_SIZE (SCREEN_H * SCREEN_W) /*****************************************/ -#if 1 +/*#if 1 #define DEBUG(x) debug("%s(): %s", __FUNCTION__, x); #else #define DEBUG(x) -#endif +#endif*/ -static char Name[] = "MatrixOrbitalGX"; -static unsigned char *MOGX_framebuffer; +//static char Name[] = "MatrixOrbitalGX"; +static uint8_t *MOGX_framebuffer; /* used to display white text on blue background or inverse */ static unsigned char invert = 0x00; @@ -128,7 +132,7 @@ static int drv_MOGX_open(void) lcd_dev = NULL; - info("%s: scanning for Matrix Orbital GX Series LCD...", Name); + debug(MOGX_TAG, "Scanning for Matrix Orbital GX Series LCD..."); usb_set_debug(0); @@ -148,17 +152,17 @@ static int drv_MOGX_open(void) if (dev->descriptor.idProduct == MatrixOrbitalGX_DEVICE_2) backlight_RGB = 0; - info("%s: found Matrix Orbital GX Series LCD on bus %s device %s", Name, bus->dirname, dev->filename); + debug(MOGX_TAG, "Found Matrix Orbital GX Series LCD on bus %s device %s"/*, bus->dirname, dev->filename*/); lcd_dev = usb_open(dev); ret = usb_get_driver_np(lcd_dev, 0, driver, sizeof(driver)); if (ret == 0) { - info("%s: interface 0 already claimed by '%s'", Name, driver); - info("%s: attempting to detach driver...", Name); + debug(MOGX_TAG, "Interface 0 already claimed by '%s'"/*, driver*/); + debug(MOGX_TAG, "Attempting to detach driver..."); if (usb_detach_kernel_driver_np(lcd_dev, 0) < 0) { - error("%s: usb_detach_kernel_driver_np() failed!", Name); + error(MOGX_TAG, "%s: usb_detach_kernel_driver_np() failed!"); return -1; } } @@ -167,7 +171,7 @@ static int drv_MOGX_open(void) usleep(100); if (usb_claim_interface(lcd_dev, 0) < 0) { - error("%s: usb_claim_interface() failed!", Name); + error(MOGX_TAG, "usb_claim_interface() failed!"); return -1; } @@ -177,17 +181,17 @@ static int drv_MOGX_open(void) usb_get_string_simple(lcd_dev, dev->descriptor.iManufacturer, manufacturer, sizeof(manufacturer)); usb_get_string_simple(lcd_dev, dev->descriptor.iSerialNumber, serialnumber, sizeof(serialnumber)); - info("%s: Manufacturer='%s' Product='%s' SerialNumber='%s'", Name, manufacturer, product, serialnumber); + //info("%s: Manufacturer='%s' Product='%s' SerialNumber='%s'", Name, manufacturer, product, serialnumber); return 0; } } } - error("%s: could not find a Matrix Orbital GX Series LCD", Name); + error(MOGX_TAG, "Could not find a Matrix Orbital GX Series LCD"); return -1; } -static void drv_MOGX_send(const unsigned char *data, const unsigned int size) +static int drv_MOGX_send(const unsigned char *data, const unsigned int size) { int __attribute__ ((unused)) ret; @@ -202,6 +206,7 @@ static void drv_MOGX_send(const unsigned char *data, const unsigned int size) //printf("\nReply : "); //for (i=0;i 0) - if (value1 > 0) { - info("%s: Display is inverted", Name); + //if (cfg_number(section, "Invert", 0, 0, 1, &value1) > 0) + if (pdisp->invert > 0) { + info(MOGX_TAG, "Display is inverted"); invert = 0x01; } @@ -405,9 +409,9 @@ static int drv_MOGX_start(const char *section, const __attribute__ ((unused)) } /* Init framebuffer buffer */ - MOGX_framebuffer = (unsigned char *) malloc(SCREEN_SIZE * sizeof(unsigned char)); + MOGX_framebuffer = (uint8_t *) malloc(SCREEN_SIZE * sizeof(uint8_t)); if (!MOGX_framebuffer) { - error("%s: framebuffer could not be allocated: malloc() failed", Name); + error(MOGX_TAG, "framebuffer could not be allocated: malloc() failed"); return -1; } @@ -424,7 +428,7 @@ static int drv_MOGX_start(const char *section, const __attribute__ ((unused)) } */ /* if lcd has three color backlight call the backlightRGB function */ - if (backlight_RGB) { + /*if (backlight_RGB) { if ((cfg_number(section, "Backlight_R", 0, 0, 255, &value1) > 0) && (cfg_number(section, "Backlight_G", 0, 0, 255, &value2) > 0) && (cfg_number(section, "Backlight_B", 0, 0, 255, &value3) > 0)) { @@ -436,7 +440,8 @@ static int drv_MOGX_start(const char *section, const __attribute__ ((unused)) info("%s: Setting backlight to %d", Name, value1); drv_MOGX_backlight(value1); } - } + }*/ + drv_MOGX_backlightRGB(pdisp->backlight[0], pdisp->backlight[1], pdisp->backlight[2]); //info("In %s\n", __FUNCTION__); @@ -500,8 +505,9 @@ int drv_MOGX_list(void) } /* initialize driver & display */ -int drv_MOGX_init(const char *section, const int quiet) +int drv_MOGX_init(void *ptr) { + DISPLAY *pdisp = ptr; int ret; //info("%s: %s", Name, "$Rev: 2$"); @@ -511,7 +517,7 @@ int drv_MOGX_init(const char *section, const int quiet) // drv_generic_graphic_real_blit = drv_MOGX_blit; /* start display */ - if ((ret = drv_MOGX_start(section, quiet)) != 0) + if ((ret = drv_MOGX_start(pdisp)) != 0) return ret; /* initialize generic graphic driver */ @@ -542,21 +548,22 @@ int drv_MOGX_init(const char *section, const int quiet) memset(MOGX_framebuffer, 0x00, SCREEN_SIZE); //DEBUG("zeroed"); + pdisp->output_buffer = MOGX_framebuffer; + return 0; } /* close driver & display */ -int drv_MOGX_quit(const __attribute__ ((unused)) - int quiet) +int drv_MOGX_quit(void) { - info("%s: shutting down.", Name); + info(MOGX_TAG, "shutting down."); /* clear display */ drv_MOGX_clear(); - drv_generic_graphic_quit(); + //drv_generic_graphic_quit(); //debug("closing connection"); drv_MOGX_close(); @@ -576,3 +583,11 @@ int drv_MOGX_quit(const __attribute__ ((unused)) .quit = drv_MOGX_quit, }; */ + +DISPLAY disp_MatrixOrbitalGX = { + .height = SCREEN_H, + .width = SCREEN_W, + .init = drv_MOGX_init, + .update = drv_MOGX_update_lcd, + .quit = drv_MOGX_quit +};