123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- #include "stm32f10x.h"
- #include "rtthread.h"
- #include <rtgui/rtgui.h>
- #include <rtgui/driver.h>
- #include <rtgui/rtgui_server.h>
- #include <rtgui/rtgui_system.h>
- #define lcd_hw_version 1
- /*
- 1 FMT0371
- 2 ILI9325
- */
- #if (lcd_hw_version == 1)
- #include "fmt0371/FMT0371.h"
- #endif
- #if (lcd_hw_version == 2)
- #include "ili9325/ili9320.h"
- #endif
- rt_err_t rt_hw_lcd_init(void);
- void rt_hw_lcd_update(rtgui_rect_t *rect);
- rt_uint8_t * rt_hw_lcd_get_framebuffer(void);
- void rt_hw_lcd_set_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y);
- void rt_hw_lcd_get_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y);
- void rt_hw_lcd_draw_hline(rtgui_color_t *c, rt_base_t x1, rt_base_t x2, rt_base_t y);
- void rt_hw_lcd_draw_vline(rtgui_color_t *c, rt_base_t x, rt_base_t y1, rt_base_t y2);
- void rt_hw_lcd_draw_raw_hline(rt_uint8_t *pixels, rt_base_t x1, rt_base_t x2, rt_base_t y);
- struct rtgui_graphic_driver _rtgui_lcd_driver =
- {
- "lcd",
- 2,
- 240,
- 320,
- rt_hw_lcd_update,
- rt_hw_lcd_get_framebuffer,
- rt_hw_lcd_set_pixel,
- rt_hw_lcd_get_pixel,
- rt_hw_lcd_draw_hline,
- rt_hw_lcd_draw_vline,
- rt_hw_lcd_draw_raw_hline
- };
- extern void info_init(void);
- extern void player_init(void);
- void radio_rtgui_init(void)
- {
- rtgui_rect_t rect;
- rtgui_system_server_init();
- /* register dock panel */
- rect.x1 = 0;
- rect.y1 = 0;
- rect.x2 = 240;
- rect.y2 = 25;
- rtgui_panel_register("info", &rect);
- /* register main panel */
- rect.x1 = 0;
- rect.y1 = 25;
- rect.x2 = 320;
- rect.y2 = 320;
- rtgui_panel_register("main", &rect);
- rtgui_panel_set_default_focused("main");
- rt_hw_lcd_init();
- info_init();
- player_init();
- }
- #if (lcd_hw_version == 1)
- void rt_hw_lcd_update(rtgui_rect_t *rect)
- {
- /* nothing for none-DMA mode driver */
- }
- rt_uint8_t * rt_hw_lcd_get_framebuffer(void)
- {
- return RT_NULL; /* no framebuffer driver */
- }
- void rt_hw_lcd_set_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y)
- {
- unsigned short p;
- /* get color pixel */
- p = rtgui_color_to_565p(*c);
- /* set X point */
- LCD_ADDR = 0x02;
- LCD_DATA = x;
- /* set Y point */
- LCD_ADDR = 0x03;
- LCD_DATA16(y);
- /* write pixel */
- LCD_ADDR = 0x0E;
- LCD_DATA16(p);
- }
- void rt_hw_lcd_get_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y)
- {
- unsigned short p;
- /* set X point */
- LCD_ADDR = 0x02;
- LCD_DATA = x;
- /* set Y point */
- LCD_ADDR = 0x03;
- LCD_DATA16( y );
- /* read pixel */
- LCD_ADDR = 0x0F;
- LCD_DATA16_READ(p);
- *c = rtgui_color_from_565p(p);
- }
- void rt_hw_lcd_draw_hline(rtgui_color_t *c, rt_base_t x1, rt_base_t x2, rt_base_t y)
- {
- unsigned short p;
- /* get color pixel */
- p = rtgui_color_to_565p(*c);
- /* set X point */
- LCD_ADDR = 0x02;
- LCD_DATA = x1;
- /* set Y point */
- LCD_ADDR = 0x03;
- LCD_DATA16( y );
- /* write pixel */
- LCD_ADDR = 0x0E;
- while (x1 < x2)
- {
- LCD_DATA16(p);
- x1 ++;
- }
- }
- void rt_hw_lcd_draw_vline(rtgui_color_t *c, rt_base_t x, rt_base_t y1, rt_base_t y2)
- {
- unsigned short p;
- /* get color pixel */
- p = rtgui_color_to_565p(*c);
- /* set X point */
- LCD_ADDR = 0x02;
- LCD_DATA = x;
- while (y1 < y2)
- {
- /* set Y point */
- LCD_ADDR = 0x03;
- LCD_DATA16( y1 );
- /* write pixel */
- LCD_ADDR = 0x0E;
- LCD_DATA16(p);
- y1 ++;
- }
- }
- void rt_hw_lcd_draw_raw_hline(rt_uint8_t *pixels, rt_base_t x1, rt_base_t x2, rt_base_t y)
- {
- rt_uint16_t *ptr;
- /* get pixel */
- ptr = (rt_uint16_t*) pixels;
- /* set X point */
- LCD_ADDR = 0x02;
- LCD_DATA = x1;
- /* set Y point */
- LCD_ADDR = 0x03;
- LCD_DATA16( y );
- /* write pixel */
- LCD_ADDR = 0x0E;
- while (x1 < x2)
- {
- LCD_DATA16(*ptr);
- x1 ++;
- ptr ++;
- }
- }
- rt_err_t rt_hw_lcd_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOF,&GPIO_InitStructure);
- GPIO_SetBits(GPIOF,GPIO_Pin_9);
- ftm0371_port_init();
- ftm0371_init();
- #ifndef DRIVER_TEST
- /* add lcd driver into graphic driver */
- rtgui_graphic_driver_add(&_rtgui_lcd_driver);
- #endif
- return RT_EOK;
- }
- #include <finsh.h>
- void hline(rt_base_t x1, rt_base_t x2, rt_base_t y, rt_uint32_t pixel)
- {
- rt_hw_lcd_draw_hline(&pixel, x1, x2, y);
- }
- FINSH_FUNCTION_EXPORT(hline, draw a hline);
- void vline(int x, int y1, int y2, rt_uint32_t pixel)
- {
- rt_hw_lcd_draw_vline(&pixel, x, y1, y2);
- }
- FINSH_FUNCTION_EXPORT(vline, draw a vline);
- void cls()
- {
- rt_size_t index;
- rtgui_color_t white = RTGUI_RGB(0xff, 0xff, 0xff);
- for (index = 0; index < 320; index ++)
- rt_hw_lcd_draw_hline(&white, 0, 240, index);
- }
- FINSH_FUNCTION_EXPORT(cls, clear screen);
- #endif
- #if (lcd_hw_version == 2)
- void rt_hw_lcd_update(rtgui_rect_t *rect)
- {
- /* nothing for none-DMA mode driver */
- }
- rt_uint8_t * rt_hw_lcd_get_framebuffer(void)
- {
- return RT_NULL; /* no framebuffer driver */
- }
- /* 设置像素点 颜色,X,Y */
- void rt_hw_lcd_set_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y)
- {
- unsigned short p;
- if ( (x>320)||(y>240) ) return;
- /* get color pixel */
- p = rtgui_color_to_565p(*c);
- ili9320_SetCursor(x,y);
- LCD_WriteRAM_Prepare();
- LCD_WriteRAM(p);
- }
- /* 获取像素点颜色 */
- void rt_hw_lcd_get_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y)
- {
- unsigned short p;
- ili9320_SetCursor(x,y);
- //if (DeviceCode==0x7783)
- //{
- // p = (LCD_ReadRAM());
- //}
- //else
- //{
- p = (ili9320_BGR2RGB(LCD_ReadRAM()));
- //}
- *c = rtgui_color_from_565p(p);
- }
- /* 画水平线 */
- void rt_hw_lcd_draw_hline(rtgui_color_t *c, rt_base_t x1, rt_base_t x2, rt_base_t y)
- {
- unsigned short p;
- /* get color pixel */
- p = rtgui_color_to_565p(*c);
- /* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */
- LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(0<<4) | (0<<3) );
- ili9320_SetCursor(x1, y);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- while (x1 < x2)
- {
- //LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(p);
- x1++;
- //ili9320_SetCursor(x1, y);
- }
- }
- /* 垂直线 */
- void rt_hw_lcd_draw_vline(rtgui_color_t *c, rt_base_t x, rt_base_t y1, rt_base_t y2)
- {
- unsigned short p;
- /* get color pixel */
- p = rtgui_color_to_565p(*c);
- /* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */
- LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(0<<4) | (1<<3) );
- ili9320_SetCursor(x, y1);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- while (y1 < y2)
- {
- //LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM(p);
- y1++;
- //ili9320_SetCursor(x, y1);
- }
- }
- /* ?? */
- void rt_hw_lcd_draw_raw_hline(rt_uint8_t *pixels, rt_base_t x1, rt_base_t x2, rt_base_t y)
- {
- rt_uint16_t *ptr;
- /* get pixel */
- ptr = (rt_uint16_t*) pixels;
- /* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */
- //LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(0<<4) | (0<<3) );
- ili9320_SetCursor(x1, y);
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- while (x1 < x2)
- {
- LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
- LCD_WriteRAM( *ptr );
- x1 ++;
- ptr ++;
- ili9320_SetCursor(x1, y);
- }
- }
- rt_err_t rt_hw_lcd_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOF,&GPIO_InitStructure);
- GPIO_SetBits(GPIOF,GPIO_Pin_9);
- ili9320_Initializtion();
- #ifndef DRIVER_TEST
- /* add lcd driver into graphic driver */
- rtgui_graphic_driver_add(&_rtgui_lcd_driver);
- #endif
- return RT_EOK;
- }
- #include <finsh.h>
- void hline(rt_base_t x1, rt_base_t x2, rt_base_t y, rt_uint32_t pixel)
- {
- rt_hw_lcd_draw_hline(&pixel, x1, x2, y);
- }
- FINSH_FUNCTION_EXPORT(hline, draw a hline);
- void vline(int x, int y1, int y2, rt_uint32_t pixel)
- {
- rt_hw_lcd_draw_vline(&pixel, x, y1, y2);
- }
- FINSH_FUNCTION_EXPORT(vline, draw a vline);
- void cls()
- {
- ili9320_Clear(0xF800);
- }
- FINSH_FUNCTION_EXPORT(cls, clear screen);
- #endif
|