Merge branch 'master' into freertos
This commit is contained in:
commit
33c721c009
216 changed files with 9344 additions and 5058 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -8,4 +8,5 @@ build
|
|||
*.lst
|
||||
*.o
|
||||
*.map
|
||||
*.sublime-*
|
||||
src/gdisp/fonts/*.dat
|
||||
|
|
2317
Doxygenfile
2317
Doxygenfile
File diff suppressed because it is too large
Load diff
|
@ -5,7 +5,9 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/* Board interface definitions for ED060SC4 PrimeView E-ink panel.
|
||||
/**
|
||||
* @file boards/addons/gdisp/board_ED060SC4_example.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ED060SC4 display.
|
||||
*
|
||||
* This file corresponds to the connections shown in example_schematics.png,
|
||||
* and is designed to interface with ChibiOS/RT.
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/HX8347D/board_HX8347D_stm32f4discovery.h
|
||||
* @file boards/addons/gdisp/board_HX8347D_stm32f4discovery.h
|
||||
* @brief GDISP Graphic Driver subsystem board SPI interface for the HX8347D display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9320/board_ILI9320_olimex_pic32mx_lcd.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9325 display.
|
||||
* @file boards/addons/gdisp/board_ILI9320_olimex_pic32mx_lcd.h
|
||||
* @brief GDISP Graphic Driver subsystem board SPI interface for the ILI9325 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -19,8 +19,11 @@
|
|||
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9325/board_ILI9325_hy_stm32_100p.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9325 display.
|
||||
* @file boards/addons/gdisp/board_ILI9325_hy_stm32_100p.h
|
||||
* @brief GDISP Graphic Driver subsystem board SPI interface for the ILI9325 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef GDISP_LLD_BOARD_H
|
||||
|
|
222
boards/addons/gdisp/board_ILI9341_spi.h
Normal file
222
boards/addons/gdisp/board_ILI9341_spi.h
Normal file
|
@ -0,0 +1,222 @@
|
|||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file boards/addons/gdisp/board_ILI9341_spi.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9341 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
#define _GDISP_LLD_BOARD_H
|
||||
|
||||
#define LCD_PORT GPIOB
|
||||
#define LCD_MOSI 15
|
||||
#define LCD_MISO 14
|
||||
#define LCD_SCK 13
|
||||
#define LCD_CS 12
|
||||
#define LCD_DC 11
|
||||
#define LCD_RES 10
|
||||
|
||||
#define LCD_DC_CMD palClearPad(LCD_PORT, LCD_DC)
|
||||
#define LCD_DC_DATA palSetPad(LCD_PORT, LCD_DC)
|
||||
#define LCD_SCK_SET palSetPad(LCD_PORT, LCD_SCK)
|
||||
#define LCD_SCK_RES palClearPad(LCD_PORT, LCD_SCK)
|
||||
#define LCD_CS_RES palSetPad(LCD_PORT, LCD_CS)
|
||||
#define LCD_CS_SET palClearPad(LCD_PORT, LCD_CS)
|
||||
|
||||
/**
|
||||
* SPI configuration structure.
|
||||
* Speed 12 MHz, CPHA=0, CPOL=0, 8bits frames, MSb transmitted first.
|
||||
* Soft slave select.
|
||||
*/
|
||||
static const SPIConfig spi2cfg = {
|
||||
NULL,
|
||||
LCD_PORT,
|
||||
LCD_CS,
|
||||
(SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI)
|
||||
};
|
||||
|
||||
static void send_data(uint16_t data);
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note Set the g->board member to whatever is appropriate. For multiple
|
||||
* displays this might be a pointer to the appropriate register set.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void init_board(GDisplay *g) {
|
||||
|
||||
// As we are not using multiple displays we set g->board to NULL as we don't use it.
|
||||
g->board = 0;
|
||||
|
||||
palSetPadMode(LCD_PORT, LCD_CS, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(LCD_PORT, LCD_DC, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(LCD_PORT, LCD_RES, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
|
||||
spiStart(&SPID2, &spi2cfg);
|
||||
spiSelectI(&SPID2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief After the initialisation.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void post_init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||
(void) g;
|
||||
|
||||
if (state == TRUE) {
|
||||
palClearPad(LCD_PORT, LCD_RES);
|
||||
} else {
|
||||
palSetPad(LCD_PORT, LCD_RES);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||
(void) g;
|
||||
(void) percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void acquire_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void release_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the lcd.
|
||||
*
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void send_data(uint16_t data) {
|
||||
// http://forum.easyelectronics.ru/viewtopic.php?p=262122#p262122
|
||||
while (!(SPI2->SR & SPI_SR_TXE)); // ïðè âõîäå íà îòïðàâêó ïðîâåðÿåì - à ïóñòîé ëè SPI_DR
|
||||
SPI2->DR = data; // çàãðóçèëè â SPI_DR êîä êîìàíäû
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the index register.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] index The index register to set
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||
(void) g;
|
||||
|
||||
while (SPI2->SR & SPI_SR_BSY);
|
||||
LCD_CS_RES;
|
||||
LCD_DC_CMD; // ïåðåâîäèì äèñïëåé â ðåæèì êîìàíä
|
||||
LCD_CS_SET;
|
||||
send_data(index);
|
||||
while (SPI2->SR & SPI_SR_BSY); // ïîêà ôëàã óñòàíîâëåí (==1) -- ìîäóëü SPI çàíÿò
|
||||
/* ëèøíèé öèêë îæèäàíèÿ îêîí÷àíèÿ ïåðåäà÷è êîìàíäû ïîçâîëÿåò â äàëüíåéøåì ñëàòü
|
||||
* áàéòû äàííûõ áåç íåíóæíûõ îæèäàíèé è çàäåðæåê.
|
||||
*/
|
||||
LCD_DC_DATA; // ïåðåâîäèì äèñïëåé â ðåæèì äàííûõ
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the lcd with DC control.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||
(void) g;
|
||||
|
||||
send_data(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus in read mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setreadmode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus back into write mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setwritemode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read data from the lcd.
|
||||
* @return The data from the lcd
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline uint16_t read_data(GDisplay *g) {
|
||||
(void) g;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _GDISP_LLD_BOARD_H */
|
||||
|
|
@ -6,9 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9481/board_ILI9481_firebullstm32f103.h
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for
|
||||
* the ILI9481 and compatible HVGA display
|
||||
* @file boards/addons/gdisp/board_ILI9481_firebullstm32f103.h
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the ILI9481 and compatible HVGA display
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/S6D1121/board_S6D1121_olimex_e407.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the S6D1121 display
|
||||
* @file boards/addons/gdisp/board_S6D1121_olimex_e407.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the S6D1121 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/SSD1289/board_SSD1289_stm32f4discovery.h
|
||||
* @file boards/addons/gdisp/board_SSD1289_stm32f4discovery.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the SSD1289 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/SSD1306/board_SSD1306_i2c.h
|
||||
* @file boards/addons/gdisp/board_SSD1306_i2c.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the SSD1306 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/SSD1306/board_SSD1306_spi.h
|
||||
* @file boards/addons/gdisp/board_SSD1306_spi.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the SSD1306 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/SSD1963/board_SSD1963_fsmc.h
|
||||
* @file boards/addons/gdisp/board_SSD1963_fsmc.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the SSD1963 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/SSD1963/board_SSD1963_gpio.h
|
||||
* @file boards/addons/gdisp/board_SSD1963_gpio.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the SSD1963 display.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
|
|
|
@ -6,12 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/touch/ADS7843/ginput_lld_mouse_board_olimex_stm32_e407.h
|
||||
* @file boards/addons/ginput/touch/ADS7843/ginput_lld_mouse_board_olimex_stm32_e407.h
|
||||
* @brief GINPUT Touch low level driver source for the ADS7843 on an Olimex STM32E407.
|
||||
*
|
||||
* @defgroup Mouse Mouse
|
||||
* @ingroup GINPUT
|
||||
* @{
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||
|
@ -87,4 +86,4 @@ static inline uint16_t read_value(uint16_t port) {
|
|||
}
|
||||
|
||||
#endif /* _GINPUT_LLD_MOUSE_BOARD_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -5,6 +5,14 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file boards/addons/ginput/touch/ADS7843/ginput_lld_mouse_board_st_stm32f4_discovery.h
|
||||
* @brief GINPUT Touch low level driver source for the ADS7843 on an st_stm32f4_discovery.
|
||||
*
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||
#define _GINPUT_LLD_MOUSE_BOARD_H
|
||||
|
||||
|
|
|
@ -6,13 +6,11 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/ginput/touch/MCU/ginput_lld_mouse_board_olimex_stm32_lcd.h
|
||||
* @file boards/addons/ginput/touch/MCU/ginput_lld_mouse_board_olimex_stm32_lcd.h
|
||||
* @brief GINPUT Touch low level driver source for the MCU on the example board.
|
||||
*
|
||||
* @defgroup Mouse Mouse
|
||||
* @ingroup GINPUT
|
||||
*
|
||||
* @{
|
||||
* @note This file contains a mix of hardware specific and operating system specific
|
||||
* code. You will need to change it for your CPU and/or operating system.
|
||||
*/
|
||||
|
||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||
|
|
|
@ -3,3 +3,4 @@ GFXSRC +=
|
|||
GFXDEFS += -DGFX_USE_OS_CHIBIOS=TRUE
|
||||
include $(GFXLIB)/drivers/gdisp/ILI9341/gdisp_lld.mk
|
||||
include $(GFXLIB)/drivers/ginput/touch/MCU/ginput_lld.mk
|
||||
include $(GFXLIB)/drivers/gaudio/vs1053/driver.mk
|
||||
|
|
|
@ -153,6 +153,7 @@ LD = $(TRGT)gcc
|
|||
CP = $(TRGT)objcopy
|
||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||
OD = $(TRGT)objdump
|
||||
SZ = $(TRGT)size
|
||||
HEX = $(CP) -O ihex
|
||||
BIN = $(CP) -O binary
|
||||
|
||||
|
|
|
@ -29,6 +29,10 @@
|
|||
*/
|
||||
|
||||
#define STM32F4xx_MCUCONF
|
||||
#define STM32F40_41xxx
|
||||
|
||||
// Define this if you are using an older ChibiOS version
|
||||
//#define STM32_VOS STM32_VOS_HIGH
|
||||
|
||||
/*
|
||||
* HAL driver system settings.
|
||||
|
@ -57,7 +61,6 @@
|
|||
#define STM32_I2SSRC STM32_I2SSRC_CKIN
|
||||
#define STM32_PLLI2SN_VALUE 192
|
||||
#define STM32_PLLI2SR_VALUE 5
|
||||
#define STM32_VOS STM32_VOS_HIGH
|
||||
#define STM32_PVD_ENABLE FALSE
|
||||
#define STM32_PLS STM32_PLS_LEV0
|
||||
#define STM32_BKPRAM_ENABLE FALSE
|
||||
|
|
97
boards/base/Mikromedia-STM32-M4-ILI9341/gaudio_play_board.h
Normal file
97
boards/base/Mikromedia-STM32-M4-ILI9341/gaudio_play_board.h
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* 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 GAUDIO_PLAY_BOARD_H
|
||||
#define GAUDIO_PLAY_BOARD_H
|
||||
|
||||
#define SET_CS palSetPad(GPIOC, GPIOC_MP3_CS)
|
||||
#define CLR_CS palClearPad(GPIOC, GPIOC_MP3_CS)
|
||||
#define SET_RST palSetPad(GPIOC, GPIOC_MP3_RST)
|
||||
#define CLR_RST palClearPad(GPIOC, GPIOC_MP3_RST)
|
||||
#define SET_DCS palSetPad(GPIOC, GPIOC_MP3_DCS)
|
||||
#define CLR_DCS palClearPad(GPIOC, GPIOC_MP3_DCS)
|
||||
#define GET_DREQ palReadPad(GPIOC, GPIOC_MP3_DREQ)
|
||||
#define SPI_PORT &SPID3
|
||||
|
||||
static const SPIConfig spicfg_init = {
|
||||
0,
|
||||
GPIOC,
|
||||
GPIOC_MP3_CS,
|
||||
SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0,
|
||||
};
|
||||
|
||||
static const SPIConfig spicfg = {
|
||||
0,
|
||||
GPIOC,
|
||||
GPIOC_MP3_CS,
|
||||
0,
|
||||
};
|
||||
|
||||
// Initialise the board
|
||||
static inline void board_init(void) {
|
||||
palSetPadMode(GPIOC, GPIOC_MP3_CS, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOC, GPIOC_MP3_RST, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOC, GPIOC_MP3_DCS, PAL_MODE_OUTPUT_PUSHPULL);
|
||||
palSetPadMode(GPIOC, GPIOC_MP3_DREQ, PAL_MODE_INPUT);
|
||||
SET_CS; SET_RST; SET_DCS;
|
||||
spiStart(SPI_PORT, &spicfg_init);
|
||||
}
|
||||
|
||||
// Chip is initialised enough so we can talk fast to it
|
||||
#define board_init_end() spiStart(SPI_PORT, &spicfg)
|
||||
|
||||
// Reset the board
|
||||
#define board_reset() { CLR_RST; gfxSleepMilliseconds(1); SET_RST; }
|
||||
|
||||
// Returns the state of the dreq pin
|
||||
#define board_dreq() GET_DREQ
|
||||
|
||||
// Start a command write
|
||||
static inline void board_startcmdwrite(void) {
|
||||
#if SPI_USE_MUTUAL_EXCLUSION
|
||||
spiAcquireBus(SPI_PORT);
|
||||
#endif
|
||||
CLR_CS;
|
||||
}
|
||||
|
||||
// End a command write
|
||||
static inline void board_endcmdwrite(void) {
|
||||
#if SPI_USE_MUTUAL_EXCLUSION
|
||||
spiReleaseBus(SPI_PORT);
|
||||
#endif
|
||||
SET_CS;
|
||||
}
|
||||
|
||||
// Start a command read
|
||||
#define board_startcmdread() board_startcmdwrite()
|
||||
|
||||
// End a command read
|
||||
#define board_endcmdread() board_endcmdwrite()
|
||||
|
||||
// Start a data write
|
||||
static inline void board_startdatawrite(void) {
|
||||
#if SPI_USE_MUTUAL_EXCLUSION
|
||||
spiAcquireBus(SPI_PORT);
|
||||
#endif
|
||||
CLR_DCS;
|
||||
}
|
||||
|
||||
// End a data write
|
||||
static inline void board_enddatawrite(void) {
|
||||
#if SPI_USE_MUTUAL_EXCLUSION
|
||||
spiReleaseBus(SPI_PORT);
|
||||
#endif
|
||||
SET_DCS;
|
||||
}
|
||||
|
||||
// Write data to the SPI port
|
||||
#define board_spiwrite(buf, len) spiSend(SPI_PORT, len, buf)
|
||||
|
||||
// Read data from the SPI port
|
||||
#define board_spiread(buf, len) spiReceive(SPI_PORT, len, buf)
|
||||
|
||||
#endif /* GAUDIO_PLAY_BOARD_H */
|
|
@ -4,6 +4,7 @@ running under ChibiOS with the ILI9341 display.
|
|||
On this board uGFX currently supports:
|
||||
- GDISP via the ILI9341 display
|
||||
- GINPUT-touch via the MCU driver
|
||||
- GAUDIO (play only) via the vs1053 driver
|
||||
|
||||
Note there are two variants of this board - one with the ILI9341 display
|
||||
and an older one with a different display. This one is for the ILI9341 display.
|
||||
|
|
|
@ -6,3 +6,4 @@ include $(GFXLIB)/drivers/gadc/AT91SAM7/gadc_lld.mk
|
|||
include $(GFXLIB)/drivers/ginput/dial/GADC/ginput_lld.mk
|
||||
include $(GFXLIB)/drivers/ginput/toggle/Pal/ginput_lld.mk
|
||||
include $(GFXLIB)/drivers/gaudio/gadc/driver.mk
|
||||
include $(GFXLIB)/drivers/gaudio/pwm/driver.mk
|
||||
|
|
|
@ -136,6 +136,7 @@ LD = $(TRGT)gcc
|
|||
CP = $(TRGT)objcopy
|
||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||
OD = $(TRGT)objdump
|
||||
SZ = $(TRGT)size
|
||||
HEX = $(CP) -O ihex
|
||||
BIN = $(CP) -O binary
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
* @brief Enables the GPT subsystem.
|
||||
*/
|
||||
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_GPT FALSE
|
||||
#define HAL_USE_GPT TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -116,10 +116,6 @@
|
|||
*/
|
||||
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
|
||||
#define HAL_USE_PWM TRUE
|
||||
#define PWM_USE_PWM1 FALSE
|
||||
#define PWM_USE_PWM2 TRUE
|
||||
#define PWM_USE_PWM3 FALSE
|
||||
#define PWM_USE_PWM4 FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
|
@ -52,6 +52,10 @@
|
|||
/*
|
||||
* PWM driver system settings.
|
||||
*/
|
||||
#define PWM_USE_PWM1 TRUE // used by audio-out
|
||||
#define PWM_USE_PWM2 TRUE // used by back-light
|
||||
#define PWM_USE_PWM3 FALSE
|
||||
#define PWM_USE_PWM4 FALSE
|
||||
|
||||
/*
|
||||
* SERIAL driver system settings.
|
||||
|
@ -69,3 +73,10 @@
|
|||
#define AT91SAM7_SPI_USE_SPI1 FALSE
|
||||
#define AT91SAM7_SPI0_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 1)
|
||||
#define AT91SAM7_SPI1_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 1)
|
||||
|
||||
/*
|
||||
* GPT driver system settings.
|
||||
*/
|
||||
#define AT91_GPT_USE_TC0 FALSE // used internally by ADC driver
|
||||
#define AT91_GPT_USE_TC1 TRUE // uGFX used for audio-out
|
||||
#define AT91_GPT_USE_TC2 FALSE
|
||||
|
|
75
boards/base/Olimex-SAM7EX256-GE8/gaudio_play_board.h
Normal file
75
boards/base/Olimex-SAM7EX256-GE8/gaudio_play_board.h
Normal file
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* 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 GAUDIO_PLAY_BOARD_H
|
||||
#define GAUDIO_PLAY_BOARD_H
|
||||
|
||||
/* Our timer callback */
|
||||
static void gptcallback(GPTDriver *gptp) {
|
||||
(void) gptp;
|
||||
gaudio_play_pwm_timer_callbackI();
|
||||
}
|
||||
|
||||
/* PWM configuration structure. The speaker is on PWM0/PB19 ie PWM1/PIN1 in ChibiOS speak */
|
||||
static PWMConfig pwmcfg = {
|
||||
1000000, /* 1 MHz PWM clock frequency. Ignored as we are using PWM_MCK_DIV_n */
|
||||
1024, /* PWM period is 1024 cycles (10 bits). */
|
||||
0,
|
||||
{
|
||||
{PWM_MCK_DIV_1 | PWM_OUTPUT_CENTER | PWM_OUTPUT_ACTIVE_HIGH | PWM_OUTPUT_PIN1 | PWM_DISABLEPULLUP_PIN1, 0},
|
||||
},
|
||||
};
|
||||
|
||||
/* Timer configuration structure. We use Timer 2 (TC1) */
|
||||
static GPTConfig gptcfg = {
|
||||
8192, // frequency
|
||||
gptcallback, // callback
|
||||
GPT_CLOCK_FREQUENCY, // clocksource
|
||||
GPT_GATE_NONE, // clockgate
|
||||
GPT_TRIGGER_NONE, // trigger
|
||||
};
|
||||
|
||||
static uint16_t lastvalue;
|
||||
|
||||
static bool gaudio_play_pwm_setup(uint32_t frequency, ArrayDataFormat format) {
|
||||
if (format == ARRAY_DATA_10BITUNSIGNED)
|
||||
pwmcfg.period = 1024;
|
||||
else if (format == ARRAY_DATA_8BITUNSIGNED)
|
||||
pwmcfg.period = 256;
|
||||
else
|
||||
return FALSE;
|
||||
gptcfg.frequency = frequency;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void gaudio_play_pwm_start(void) {
|
||||
/* Start the PWM */
|
||||
pwmStart(&PWMD1, &pwmcfg);
|
||||
lastvalue = pwmcfg.period>>1;
|
||||
pwmEnableChannelI(&PWMD1, 0, lastvalue);
|
||||
|
||||
/* Start the timer interrupt */
|
||||
gptStart(&GPTD2, &gptcfg);
|
||||
gptStartContinuous(&GPTD2, 0);
|
||||
}
|
||||
|
||||
static void gaudio_play_pwm_stop(void) {
|
||||
/* Stop the timer interrupt */
|
||||
gptStopTimer(&GPTD2);
|
||||
|
||||
/* Stop the PWM */
|
||||
pwmStop(&PWMD1);
|
||||
}
|
||||
|
||||
static void gaudio_play_pwm_setI(uint16_t value) {
|
||||
if (value != lastvalue) {
|
||||
lastvalue = value;
|
||||
pwmEnableChannelI(&PWMD1, 0, value);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* GAUDIO_PLAY_BOARD_H */
|
|
@ -19,13 +19,18 @@
|
|||
|
||||
#define GAUDIO_RECORD_NUM_CHANNELS 1
|
||||
|
||||
/**
|
||||
* @brief Whether each channel is mono or stereo
|
||||
*/
|
||||
#define GAUDIO_RECORD_CHANNEL0_IS_STEREO FALSE
|
||||
|
||||
/**
|
||||
* The list of audio channels and their uses
|
||||
*/
|
||||
#define GAUDIO_RECORD_MICROPHONE 0
|
||||
|
||||
#ifdef GAUDIO_RECORD_IMPLEMENTATION
|
||||
static uint32_t gaudin_lld_physdevs[GAUDIO_RECORD_NUM_CHANNELS] = {
|
||||
static uint32_t gaudio_gadc_physdevs[GAUDIO_RECORD_NUM_CHANNELS] = {
|
||||
GADC_PHYSDEV_MICROPHONE,
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -51,7 +51,6 @@
|
|||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_CONTROL TRUE
|
||||
#define GDISP_NEED_MULTITHREAD TRUE
|
||||
|
||||
/* GDISP - builtin fonts */
|
||||
|
|
|
@ -38,9 +38,6 @@
|
|||
/* Include internal GWIN routines so we can build our own superset class */
|
||||
#include "src/gwin/class_gwin.h"
|
||||
|
||||
/* The size of our dynamically allocated audio buffer */
|
||||
#define AUDIOBUFSZ 64*2
|
||||
|
||||
/* How many flat-line sample before we trigger */
|
||||
#define FLATLINE_SAMPLES 8
|
||||
|
||||
|
@ -50,10 +47,6 @@ static void _destroy(GHandle gh) {
|
|||
gfxFree(((GScopeObject *)gh)->lastscopetrace);
|
||||
((GScopeObject *)gh)->lastscopetrace = 0;
|
||||
}
|
||||
if (((GScopeObject *)gh)->audiobuf) {
|
||||
gfxFree(((GScopeObject *)gh)->audiobuf);
|
||||
((GScopeObject *)gh)->audiobuf = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static const gwinVMT scopeVMT = {
|
||||
|
@ -68,12 +61,9 @@ GHandle gwinGScopeCreate(GDisplay *g, GScopeObject *gs, GWindowInit *pInit, uint
|
|||
/* Initialise the base class GWIN */
|
||||
if (!(gs = (GScopeObject *)_gwindowCreate(g, &gs->g, pInit, &scopeVMT, 0)))
|
||||
return 0;
|
||||
gfxSemInit(&gs->bsem, 0, 1);
|
||||
gs->nextx = 0;
|
||||
if (!(gs->lastscopetrace = gfxAlloc(gs->g.width * sizeof(coord_t))))
|
||||
return 0;
|
||||
if (!(gs->audiobuf = gfxAlloc(AUDIOBUFSZ * sizeof(adcsample_t))))
|
||||
return 0;
|
||||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
||||
gs->lasty = gs->g.height/2;
|
||||
#elif TRIGGER_METHOD == TRIGGER_MINVALUE
|
||||
|
@ -82,8 +72,7 @@ GHandle gwinGScopeCreate(GDisplay *g, GScopeObject *gs, GWindowInit *pInit, uint
|
|||
#endif
|
||||
|
||||
/* Start the GADC high speed converter */
|
||||
gadcHighSpeedInit(physdev, frequency, gs->audiobuf, AUDIOBUFSZ, AUDIOBUFSZ/2);
|
||||
gadcHighSpeedSetBSem(&gs->bsem, &gs->myEvent);
|
||||
gadcHighSpeedInit(physdev, frequency);
|
||||
gadcHighSpeedStart();
|
||||
|
||||
gwinSetVisible((GHandle)gs, pInit->show);
|
||||
|
@ -97,6 +86,8 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
|||
coord_t yoffset;
|
||||
adcsample_t *pa;
|
||||
coord_t *pc;
|
||||
GDataBuffer *pd;
|
||||
uint8_t shr;
|
||||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
||||
bool_t rdytrigger;
|
||||
int flsamples;
|
||||
|
@ -109,20 +100,21 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
|||
if (gh->vmt != &scopeVMT)
|
||||
return;
|
||||
|
||||
/* Wait for a set of audio conversions */
|
||||
gfxSemWait(&gs->bsem, TIME_INFINITE);
|
||||
/* Wait for a set of conversions */
|
||||
pd = gadcHighSpeedGetData(TIME_INFINITE);
|
||||
|
||||
/* Ensure we are drawing in the right area */
|
||||
#if GDISP_NEED_CLIP
|
||||
gdispGSetClip(gh->display, gh->x, gh->y, gh->width, gh->height);
|
||||
#endif
|
||||
|
||||
shr = 16 - gfxSampleFormatBits(GADC_SAMPLE_FORMAT);
|
||||
yoffset = gh->height/2;
|
||||
if (!(GADC_SAMPLE_FORMAT & 1))
|
||||
if (!gfxSampleFormatIsSigned(GADC_SAMPLE_FORMAT))
|
||||
yoffset += (1<<SCOPE_Y_BITS)/2;
|
||||
x = gs->nextx;
|
||||
pc = gs->lastscopetrace+x;
|
||||
pa = gs->myEvent.buffer;
|
||||
pa = (adcsample_t *)(pd+1);
|
||||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
||||
rdytrigger = FALSE;
|
||||
flsamples = 0;
|
||||
|
@ -132,14 +124,10 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
|||
scopemin = 0;
|
||||
#endif
|
||||
|
||||
for(i = gs->myEvent.count; i; i--) {
|
||||
for(i = pd->len/sizeof(adcsample_t); i; i--) {
|
||||
|
||||
/* Calculate the new scope value - re-scale using simple shifts for efficiency, re-center and y-invert */
|
||||
#if GADC_BITS_PER_SAMPLE > SCOPE_Y_BITS
|
||||
y = yoffset - (*pa++ >> (GADC_BITS_PER_SAMPLE - SCOPE_Y_BITS));
|
||||
#else
|
||||
y = yoffset - (*pa++ << (SCOPE_Y_BITS - GADC_BITS_PER_SAMPLE));
|
||||
#endif
|
||||
y = yoffset - (((coord_t)(*pa++) << shr) >> (16-SCOPE_Y_BITS));
|
||||
|
||||
#if TRIGGER_METHOD == TRIGGER_MINVALUE
|
||||
/* Calculate the scopemin ready for the next trace */
|
||||
|
@ -205,5 +193,7 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
|||
gs->scopemin = scopemin;
|
||||
#endif
|
||||
|
||||
gfxBufferRelease(pd);
|
||||
|
||||
#undef gs
|
||||
}
|
||||
|
|
|
@ -64,9 +64,6 @@ typedef struct GScopeObject_t {
|
|||
GWindowObject g; // Base Class
|
||||
|
||||
coord_t *lastscopetrace; // To store last scope trace
|
||||
gfxSem bsem; // We get signalled on this
|
||||
adcsample_t *audiobuf; // To store audio samples
|
||||
GEventADC myEvent; // Information on received samples
|
||||
coord_t nextx; // Where we are up to
|
||||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
||||
coord_t lasty; // The last y value - used for trigger slope detection
|
||||
|
|
|
@ -167,6 +167,20 @@ int main(void) {
|
|||
gtimerStart(&lsTimer, LowSpeedTimer, ghText, TRUE, MY_LS_DELAY);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Allocate buffers for the high speed GADC device - eg. 4 x 128 byte buffers.
|
||||
* You may need to increase this for slower cpu's.
|
||||
* You may be able to decrease this for low latency operating systems.
|
||||
* 4 x 128 seems to work on the really slow Olimex SAM7EX256 board (display speed limitation)
|
||||
* If your oscilloscope display stops but the low speed reading keep going then it is likely that
|
||||
* your high speed timer has stalled due to running out of free buffers. Increase the number
|
||||
* of buffers..
|
||||
* If you make the buffers too large with a slow sample rate you may not allow enough time for all
|
||||
* the low speed items to occur in which case your memory will fill up with low speed requests until
|
||||
* you run out of memory.
|
||||
*/
|
||||
gfxBufferAlloc(4, 128);
|
||||
|
||||
/* Set up the scope window in the top right on the screen */
|
||||
{
|
||||
GWindowInit wi;
|
||||
|
|
|
@ -45,7 +45,6 @@
|
|||
#define GFX_USE_GDISP TRUE
|
||||
#define GFX_USE_GWIN TRUE
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
//#define GFX_USE_GADC TRUE
|
||||
#define GFX_USE_GAUDIO TRUE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
|
|
|
@ -96,7 +96,7 @@ GHandle gwinGScopeCreate(GDisplay *g, GScopeObject *gs, GWindowInit *pInit, uint
|
|||
|
||||
void gwinScopeWaitForTrace(GHandle gh) {
|
||||
#define gs ((GScopeObject *)(gh))
|
||||
GAudioData *paud;
|
||||
GDataBuffer *paud;
|
||||
int i;
|
||||
coord_t x, y;
|
||||
coord_t yoffset;
|
||||
|
@ -144,10 +144,10 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
|||
scopemin = 0;
|
||||
#endif
|
||||
|
||||
for(i = paud->len/(gfxSampleFormatBits(gs->format)/8); i; i--) {
|
||||
for(i = paud->len/((gfxSampleFormatBits(gs->format)+7)/8); i; i--) {
|
||||
|
||||
/* Calculate the new scope value - re-scale using simple shifts for efficiency, re-center and y-invert */
|
||||
if (gs->format <= 8)
|
||||
if (gfxSampleFormatBits(gs->format) <= 8)
|
||||
y = yoffset - (((coord_t)(*pa8++ ) << shr) >> (16-SCOPE_Y_BITS));
|
||||
else
|
||||
y = yoffset - (((coord_t)(*pa16++) << shr) >> (16-SCOPE_Y_BITS));
|
||||
|
@ -216,6 +216,6 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
|||
gs->scopemin = scopemin;
|
||||
#endif
|
||||
|
||||
gaudioReleaseBuffer(paud);
|
||||
gfxBufferRelease(paud);
|
||||
#undef gs
|
||||
}
|
||||
|
|
|
@ -55,10 +55,15 @@ int main(void) {
|
|||
|
||||
gfxInit();
|
||||
|
||||
// Allocate audio buffers - 4 x 128 byte buffers.
|
||||
// You may need to increase this for slower cpu's.
|
||||
// You may be able to decrease this for low latency operating systems.
|
||||
gaudioAllocBuffers(4, 128);
|
||||
/**
|
||||
* Allocate audio buffers - eg. 4 x 128 byte buffers.
|
||||
* You may need to increase this for slower cpu's.
|
||||
* You may be able to decrease this for low latency operating systems.
|
||||
* 8 x 256 seems to work on the really slow Olimex SAM7EX256 board (display speed limitation) @8kHz
|
||||
* If your oscilloscope display stops then it is likely that your driver has stalled due to running
|
||||
* out of free buffers. Increase the number of buffers..
|
||||
*/
|
||||
gfxBufferAlloc(8, 256);
|
||||
|
||||
/* Get the screen dimensions */
|
||||
swidth = gdispGetWidth();
|
||||
|
|
|
@ -52,7 +52,7 @@ int main(void) {
|
|||
uint32_t frequency;
|
||||
ArrayDataFormat datafmt;
|
||||
uint32_t len;
|
||||
GAudioData *paud;
|
||||
GDataBuffer *pd;
|
||||
|
||||
// Initialise everything
|
||||
gfxInit();
|
||||
|
@ -64,11 +64,12 @@ int main(void) {
|
|||
// Allocate audio buffers - 4 x 512 byte buffers.
|
||||
// You may need to increase this for slower cpu's.
|
||||
// You may be able to decrease this for low latency operating systems.
|
||||
if (!gaudioAllocBuffers(4, 512)) {
|
||||
if (!gfxBufferAlloc(4, 512)) {
|
||||
errmsg = "Err: No Memory";
|
||||
goto theend;
|
||||
}
|
||||
|
||||
repeatplay:
|
||||
// Open the wave file
|
||||
if (!(f = gfileOpen("allwrong.wav", "r"))) {
|
||||
errmsg = "Err: Open WAV";
|
||||
|
@ -164,20 +165,20 @@ int main(void) {
|
|||
gdispDrawString(0, gdispGetHeight()/2, "Playing...", font, Yellow);
|
||||
while(toplay) {
|
||||
// Get a buffer to put the data into
|
||||
paud = gaudioGetBuffer(TIME_INFINITE); // This should never fail as we are waiting forever
|
||||
pd = gfxBufferGet(TIME_INFINITE); // This should never fail as we are waiting forever
|
||||
|
||||
// How much data can we put in
|
||||
len = toplay > paud->size ? paud->size : toplay;
|
||||
paud->len = len;
|
||||
len = toplay > pd->size ? pd->size : toplay;
|
||||
pd->len = len;
|
||||
toplay -= len;
|
||||
|
||||
// Read the data
|
||||
if (gfileRead(f, paud+1, len) != len) {
|
||||
if (gfileRead(f, pd+1, len) != len) {
|
||||
errmsg = "Err: Read fail";
|
||||
goto theend;
|
||||
}
|
||||
|
||||
gaudioPlay(paud);
|
||||
gaudioPlay(pd);
|
||||
}
|
||||
gfileClose(f);
|
||||
|
||||
|
@ -185,6 +186,11 @@ int main(void) {
|
|||
gaudioPlayWait(TIME_INFINITE);
|
||||
gdispDrawString(0, gdispGetHeight()/2+10, "Done", font, Green);
|
||||
|
||||
// Repeat the whole thing
|
||||
gfxSleepMilliseconds(1500);
|
||||
gdispClear(Black);
|
||||
goto repeatplay;
|
||||
|
||||
// The end
|
||||
theend:
|
||||
if (errmsg)
|
||||
|
|
3
demos/modules/gwin/imagebox/demo.mk
Normal file
3
demos/modules/gwin/imagebox/demo.mk
Normal file
|
@ -0,0 +1,3 @@
|
|||
DEMODIR = $(GFXLIB)/demos/modules/gwin/imagebox
|
||||
GFXINC += $(DEMODIR)
|
||||
GFXSRC += $(DEMODIR)/main.c
|
241
demos/modules/gwin/imagebox/gfxconf.h
Normal file
241
demos/modules/gwin/imagebox/gfxconf.h
Normal file
|
@ -0,0 +1,241 @@
|
|||
/**
|
||||
* This file has a different license to the rest of the uGFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copy this file into your project directory and rename it as gfxconf.h
|
||||
* Edit your copy to turn on the uGFX features you want to use.
|
||||
* The values below are the defaults. You should delete anything
|
||||
* you are leaving as default.
|
||||
*
|
||||
* Please use spaces instead of tabs in this file.
|
||||
*/
|
||||
|
||||
#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 TRUE
|
||||
//#define GFX_USE_OS_WIN32 TRUE
|
||||
//#define GFX_USE_OS_LINUX TRUE
|
||||
//#define GFX_USE_OS_OSX TRUE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GDISP //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GDISP TRUE
|
||||
|
||||
#define GDISP_NEED_AUTOFLUSH FALSE
|
||||
#define GDISP_NEED_TIMERFLUSH FALSE
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_CIRCLE FALSE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_CONVEX_POLYGON FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_QUERY FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_STREAMING FALSE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_ANTIALIAS FALSE
|
||||
#define GDISP_NEED_UTF8 FALSE
|
||||
#define GDISP_NEED_TEXT_KERNING FALSE
|
||||
#define GDISP_INCLUDE_FONT_UI1 FALSE
|
||||
#define GDISP_INCLUDE_FONT_UI2 TRUE
|
||||
#define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS10 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS12 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS16 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS24 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS32 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_10X20 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_7X14 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_5X8 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA FALSE
|
||||
#define GDISP_INCLUDE_USER_FONTS FALSE
|
||||
|
||||
#define GDISP_NEED_IMAGE TRUE
|
||||
#define GDISP_NEED_IMAGE_NATIVE FALSE
|
||||
#define GDISP_NEED_IMAGE_GIF TRUE
|
||||
#define GDISP_NEED_IMAGE_BMP TRUE
|
||||
#define GDISP_NEED_IMAGE_BMP_1 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_4 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_4_RLE FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_8 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_8_RLE FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_16 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_24 TRUE
|
||||
#define GDISP_NEED_IMAGE_BMP_32 FALSE
|
||||
#define GDISP_NEED_IMAGE_JPG FALSE
|
||||
#define GDISP_NEED_IMAGE_PNG FALSE
|
||||
#define GDISP_NEED_IMAGE_ACCOUNTING FALSE
|
||||
|
||||
#define GDISP_NEED_STARTUP_LOGO TRUE
|
||||
|
||||
#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE
|
||||
#define GDISP_LINEBUF_SIZE 128
|
||||
|
||||
#define GDISP_TOTAL_DISPLAYS 1
|
||||
#if GDISP_TOTAL_DISPLAYS > 1
|
||||
#define GDISP_HARDWARE_STREAM_WRITE FALSE
|
||||
#define GDISP_HARDWARE_STREAM_READ FALSE
|
||||
#define GDISP_HARDWARE_STREAM_POS FALSE
|
||||
#define GDISP_HARDWARE_DRAWPIXEL FALSE
|
||||
#define GDISP_HARDWARE_CLEARS FALSE
|
||||
#define GDISP_HARDWARE_FILLS FALSE
|
||||
#define GDISP_HARDWARE_BITFILLS FALSE
|
||||
#define GDISP_HARDWARE_SCROLL FALSE
|
||||
#define GDISP_HARDWARE_PIXELREAD FALSE
|
||||
#define GDISP_HARDWARE_CONTROL FALSE
|
||||
#define GDISP_HARDWARE_QUERY FALSE
|
||||
#define GDISP_HARDWARE_CLIP FALSE
|
||||
#endif
|
||||
|
||||
#define GDISP_TOTAL_CONTROLLERS 1
|
||||
#if GDISP_TOTAL_CONTROLLERS > 1
|
||||
#define GDISP_CONTROLLER_LIST GDISPVMT_Win32, GDISPVMT_Win32
|
||||
#define GDISP_CONTROLLER_DISPLAYS 1, 1
|
||||
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB888
|
||||
#endif
|
||||
|
||||
#define GDISP_USE_GFXNET FALSE
|
||||
#define GDISP_GFXNET_PORT 13001
|
||||
#define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE
|
||||
#define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE
|
||||
#define GDISP_GFXNET_UNSAFE_SOCKETS FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GWIN //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GWIN TRUE
|
||||
|
||||
#define GWIN_NEED_WINDOWMANAGER TRUE
|
||||
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#define GWIN_CONSOLE_USE_HISTORY FALSE
|
||||
#define GWIN_CONSOLE_HISTORY_AVERAGING FALSE
|
||||
#define GWIN_CONSOLE_HISTORY_ATCREATE FALSE
|
||||
#define GWIN_CONSOLE_ESCSEQ FALSE
|
||||
#define GWIN_CONSOLE_USE_BASESTREAM FALSE
|
||||
#define GWIN_CONSOLE_USE_FLOAT FALSE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
|
||||
#define GWIN_NEED_WIDGET TRUE
|
||||
#define GWIN_NEED_LABEL FALSE
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_BUTTON_LAZY_RELEASE FALSE
|
||||
#define GWIN_NEED_SLIDER FALSE
|
||||
#define GWIN_NEED_CHECKBOX FALSE
|
||||
#define GWIN_NEED_IMAGE TRUE
|
||||
#define GWIN_NEED_IMAGE_ANIMATION TRUE
|
||||
#define GWIN_NEED_RADIO FALSE
|
||||
#define GWIN_NEED_LIST FALSE
|
||||
#define GWIN_NEED_LIST_IMAGES FALSE
|
||||
#define GWIN_NEED_PROGRESSBAR FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GEVENT //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GTIMER //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
|
||||
#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 2048
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GQUEUE //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GQUEUE TRUE
|
||||
|
||||
#define GQUEUE_NEED_ASYNC TRUE
|
||||
#define GQUEUE_NEED_GSYNC FALSE
|
||||
#define GQUEUE_NEED_FSYNC FALSE
|
||||
#define GQUEUE_NEED_BUFFERS FALSE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GINPUT //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GINPUT TRUE
|
||||
|
||||
#define GINPUT_NEED_MOUSE TRUE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GFILE //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GFILE TRUE
|
||||
|
||||
#define GFILE_NEED_PRINTG FALSE
|
||||
#define GFILE_NEED_SCANG FALSE
|
||||
#define GFILE_NEED_STRINGS FALSE
|
||||
#define GFILE_NEED_STDIO FALSE
|
||||
#define GFILE_ALLOW_FLOATS FALSE
|
||||
#define GFILE_ALLOW_DEVICESPECIFIC FALSE
|
||||
#define GFILE_MAX_GFILES 3
|
||||
|
||||
#define GFILE_NEED_MEMFS FALSE
|
||||
#define GFILE_NEED_ROMFS TRUE
|
||||
#define GFILE_NEED_RAMFS FALSE
|
||||
#define GFILE_NEED_FATFS FALSE
|
||||
#define GFILE_NEED_NATIVEFS FALSE
|
||||
#define GFILE_NEED_CHBIOSFS FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GADC //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GADC FALSE
|
||||
|
||||
#define GADC_MAX_LOWSPEED_DEVICES 4
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GAUDIO //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GAUDIO FALSE
|
||||
#define GAUDIO_NEED_PLAY FALSE
|
||||
#define GAUDIO_NEED_RECORD FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GMISC //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GMISC FALSE
|
||||
|
||||
#define GMISC_NEED_ARRAYOPS FALSE
|
||||
#define GMISC_NEED_FASTTRIG FALSE
|
||||
#define GMISC_NEED_FIXEDTRIG FALSE
|
||||
#define GMISC_NEED_INVSQRT FALSE
|
||||
#define GMISC_INVSQRT_MIXED_ENDIAN FALSE
|
||||
#define GMISC_INVSQRT_REAL_SLOW FALSE
|
||||
|
||||
|
||||
#endif /* _GFXCONF_H */
|
65
demos/modules/gwin/imagebox/main.c
Normal file
65
demos/modules/gwin/imagebox/main.c
Normal file
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#include "romfs_files.h"
|
||||
|
||||
GHandle ghImage1;
|
||||
|
||||
static void createWidgets(void) {
|
||||
GWidgetInit wi;
|
||||
|
||||
// Apply some default values for GWIN
|
||||
wi.g.show = TRUE;
|
||||
|
||||
// create the first image widget
|
||||
wi.g.x = 10; wi.g.y = 10; wi.g.width = 200; wi.g.height = 100;
|
||||
ghImage1 = gwinImageCreate(NULL, &wi.g);
|
||||
gwinImageOpenFile(ghImage1, "ugfx_logo_banner.bmp");
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
// Initialize µGFX and the underlying system
|
||||
gfxInit();
|
||||
|
||||
// Set the widget defaults
|
||||
gwinSetDefaultFont(gdispOpenFont("UI2"));
|
||||
gwinSetDefaultStyle(&WhiteWidgetStyle, FALSE);
|
||||
gdispClear(White);
|
||||
|
||||
// create the widget
|
||||
createWidgets();
|
||||
|
||||
while(1) {
|
||||
gfxSleepMilliseconds(100);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
7
demos/modules/gwin/imagebox/romfs_files.h
Normal file
7
demos/modules/gwin/imagebox/romfs_files.h
Normal file
|
@ -0,0 +1,7 @@
|
|||
/**
|
||||
* This file contains the list of files for the ROMFS.
|
||||
*
|
||||
* The files have been converted using...
|
||||
* file2c -dbcs infile outfile
|
||||
*/
|
||||
#include "ugfx_logo_banner.h"
|
1660
demos/modules/gwin/imagebox/ugfx_logo_banner.h
Normal file
1660
demos/modules/gwin/imagebox/ugfx_logo_banner.h
Normal file
File diff suppressed because it is too large
Load diff
3
demos/modules/gwin/label/demo.mk
Normal file
3
demos/modules/gwin/label/demo.mk
Normal file
|
@ -0,0 +1,3 @@
|
|||
DEMODIR = $(GFXLIB)/demos/modules/gwin/label
|
||||
GFXINC += $(DEMODIR)
|
||||
GFXSRC += $(DEMODIR)/main.c
|
243
demos/modules/gwin/label/gfxconf.h
Normal file
243
demos/modules/gwin/label/gfxconf.h
Normal file
|
@ -0,0 +1,243 @@
|
|||
/**
|
||||
* This file has a different license to the rest of the uGFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copy this file into your project directory and rename it as gfxconf.h
|
||||
* Edit your copy to turn on the uGFX features you want to use.
|
||||
* The values below are the defaults. You should delete anything
|
||||
* you are leaving as default.
|
||||
*
|
||||
* Please use spaces instead of tabs in this file.
|
||||
*/
|
||||
|
||||
#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 TRUE
|
||||
//#define GFX_USE_OS_WIN32 TRUE
|
||||
//#define GFX_USE_OS_LINUX TRUE
|
||||
//#define GFX_USE_OS_OSX TRUE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GDISP //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GDISP TRUE
|
||||
|
||||
#define GDISP_NEED_AUTOFLUSH FALSE
|
||||
#define GDISP_NEED_TIMERFLUSH FALSE
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_CIRCLE FALSE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_CONVEX_POLYGON FALSE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL FALSE
|
||||
#define GDISP_NEED_QUERY FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_STREAMING FALSE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_ANTIALIAS TRUE
|
||||
#define GDISP_NEED_UTF8 TRUE
|
||||
#define GDISP_NEED_TEXT_KERNING TRUE
|
||||
#define GDISP_INCLUDE_FONT_UI1 FALSE
|
||||
#define GDISP_INCLUDE_FONT_UI2 FALSE
|
||||
#define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS10 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS12 TRUE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS16 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS24 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS32 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_10X20 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_7X14 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_5X8 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA FALSE
|
||||
#define GDISP_INCLUDE_USER_FONTS FALSE
|
||||
|
||||
#define GDISP_NEED_IMAGE FALSE
|
||||
#define GDISP_NEED_IMAGE_NATIVE FALSE
|
||||
#define GDISP_NEED_IMAGE_GIF FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_1 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_4 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_4_RLE FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_8 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_8_RLE FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_16 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_24 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_32 FALSE
|
||||
#define GDISP_NEED_IMAGE_JPG FALSE
|
||||
#define GDISP_NEED_IMAGE_PNG FALSE
|
||||
#define GDISP_NEED_IMAGE_ACCOUNTING FALSE
|
||||
|
||||
#define GDISP_NEED_STARTUP_LOGO FALSE
|
||||
|
||||
#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE
|
||||
#define GDISP_LINEBUF_SIZE 128
|
||||
|
||||
#define GDISP_TOTAL_DISPLAYS 1
|
||||
#if GDISP_TOTAL_DISPLAYS > 1
|
||||
#define GDISP_HARDWARE_STREAM_WRITE FALSE
|
||||
#define GDISP_HARDWARE_STREAM_READ FALSE
|
||||
#define GDISP_HARDWARE_STREAM_POS FALSE
|
||||
#define GDISP_HARDWARE_DRAWPIXEL FALSE
|
||||
#define GDISP_HARDWARE_CLEARS FALSE
|
||||
#define GDISP_HARDWARE_FILLS FALSE
|
||||
#define GDISP_HARDWARE_BITFILLS FALSE
|
||||
#define GDISP_HARDWARE_SCROLL FALSE
|
||||
#define GDISP_HARDWARE_PIXELREAD FALSE
|
||||
#define GDISP_HARDWARE_CONTROL FALSE
|
||||
#define GDISP_HARDWARE_QUERY FALSE
|
||||
#define GDISP_HARDWARE_CLIP FALSE
|
||||
#endif
|
||||
|
||||
#define GDISP_TOTAL_CONTROLLERS 1
|
||||
#if GDISP_TOTAL_CONTROLLERS > 1
|
||||
#define GDISP_CONTROLLER_LIST GDISPVMT_Win32, GDISPVMT_Win32
|
||||
#define GDISP_CONTROLLER_DISPLAYS 1, 1
|
||||
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB888
|
||||
#endif
|
||||
|
||||
#define GDISP_USE_GFXNET FALSE
|
||||
#define GDISP_GFXNET_PORT 13001
|
||||
#define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE
|
||||
#define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE
|
||||
#define GDISP_GFXNET_UNSAFE_SOCKETS FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GWIN //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GWIN TRUE
|
||||
|
||||
#define GWIN_NEED_WINDOWMANAGER TRUE
|
||||
|
||||
#define GWIN_NEED_CONSOLE FALSE
|
||||
#define GWIN_CONSOLE_USE_HISTORY FALSE
|
||||
#define GWIN_CONSOLE_HISTORY_AVERAGING FALSE
|
||||
#define GWIN_CONSOLE_HISTORY_ATCREATE FALSE
|
||||
#define GWIN_CONSOLE_ESCSEQ FALSE
|
||||
#define GWIN_CONSOLE_USE_BASESTREAM FALSE
|
||||
#define GWIN_CONSOLE_USE_FLOAT FALSE
|
||||
#define GWIN_NEED_GRAPH FALSE
|
||||
#define GWIN_NEED_WIDGET FALSE
|
||||
#define GWIN_NEED_HIERARCHY FALSE
|
||||
#define GWIN_NEED_LABEL TRUE
|
||||
#define GWIN_LABEL_ATTRIBUTE TRUE
|
||||
#define GWIN_NEED_BUTTON FALSE
|
||||
#define GWIN_BUTTON_LAZY_RELEASE FALSE
|
||||
#define GWIN_NEED_SLIDER FALSE
|
||||
#define GWIN_NEED_CHECKBOX FALSE
|
||||
#define GWIN_NEED_IMAGE FALSE
|
||||
#define GWIN_NEED_IMAGE_ANIMATION FALSE
|
||||
#define GWIN_NEED_RADIO FALSE
|
||||
#define GWIN_NEED_LIST FALSE
|
||||
#define GWIN_NEED_LIST_IMAGES FALSE
|
||||
#define GWIN_NEED_PROGRESSBAR FALSE
|
||||
#define GWIN_NEED_FRAME FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GEVENT //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GTIMER //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
|
||||
#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 2048
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GQUEUE //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GQUEUE TRUE
|
||||
|
||||
#define GQUEUE_NEED_ASYNC TRUE
|
||||
#define GQUEUE_NEED_GSYNC FALSE
|
||||
#define GQUEUE_NEED_FSYNC FALSE
|
||||
#define GQUEUE_NEED_BUFFERS FALSE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GINPUT //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GINPUT TRUE
|
||||
|
||||
#define GINPUT_NEED_MOUSE TRUE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GFILE //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GFILE FALSE
|
||||
|
||||
#define GFILE_NEED_PRINTG FALSE
|
||||
#define GFILE_NEED_SCANG FALSE
|
||||
#define GFILE_NEED_STRINGS FALSE
|
||||
#define GFILE_NEED_STDIO FALSE
|
||||
#define GFILE_ALLOW_FLOATS FALSE
|
||||
#define GFILE_ALLOW_DEVICESPECIFIC FALSE
|
||||
#define GFILE_MAX_GFILES 3
|
||||
|
||||
#define GFILE_NEED_MEMFS FALSE
|
||||
#define GFILE_NEED_ROMFS FALSE
|
||||
#define GFILE_NEED_RAMFS FALSE
|
||||
#define GFILE_NEED_FATFS FALSE
|
||||
#define GFILE_NEED_NATIVEFS FALSE
|
||||
#define GFILE_NEED_CHBIOSFS FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GADC //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GADC FALSE
|
||||
|
||||
#define GADC_MAX_LOWSPEED_DEVICES 4
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GAUDIO //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GAUDIO FALSE
|
||||
#define GAUDIO_NEED_PLAY FALSE
|
||||
#define GAUDIO_NEED_RECORD FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GMISC //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GMISC FALSE
|
||||
|
||||
#define GMISC_NEED_ARRAYOPS FALSE
|
||||
#define GMISC_NEED_FASTTRIG FALSE
|
||||
#define GMISC_NEED_FIXEDTRIG FALSE
|
||||
#define GMISC_NEED_INVSQRT FALSE
|
||||
#define GMISC_INVSQRT_MIXED_ENDIAN FALSE
|
||||
#define GMISC_INVSQRT_REAL_SLOW FALSE
|
||||
|
||||
|
||||
#endif /* _GFXCONF_H */
|
84
demos/modules/gwin/label/main.c
Normal file
84
demos/modules/gwin/label/main.c
Normal file
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
GListener gl;
|
||||
GHandle ghLabel1, ghLabel2;
|
||||
|
||||
static void createWidgets(void) {
|
||||
GWidgetInit wi;
|
||||
|
||||
// Apply some default values for GWIN
|
||||
wi.customDraw = 0;
|
||||
wi.customParam = 0;
|
||||
wi.customStyle = 0;
|
||||
wi.g.show = TRUE;
|
||||
|
||||
// Create the IP label
|
||||
wi.g.width = 200; wi.g.height = 20; wi.g.x = 10, wi.g.y = 80;
|
||||
wi.text = "192.168.1.42";
|
||||
ghLabel1 = gwinLabelCreate(NULL, &wi);
|
||||
gwinLabelSetAttribute(ghLabel1, 100, "Current IP:");
|
||||
|
||||
// Create the DHCP label
|
||||
wi.g.width = 200; wi.g.height = 20; wi.g.x = 10, wi.g.y = 100;
|
||||
wi.text = "Off";
|
||||
ghLabel2 = gwinLabelCreate(NULL, &wi);
|
||||
gwinLabelSetAttribute(ghLabel2, 100, "DHCP:");
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
GEvent* pe;
|
||||
|
||||
// Initialize the display
|
||||
gfxInit();
|
||||
|
||||
// Set the widget defaults
|
||||
gwinSetDefaultFont(gdispOpenFont("*"));
|
||||
gwinSetDefaultStyle(&WhiteWidgetStyle, FALSE);
|
||||
gdispClear(White);
|
||||
|
||||
// Attach the mouse input
|
||||
gwinAttachMouse(0);
|
||||
|
||||
// create the widget
|
||||
createWidgets();
|
||||
|
||||
// We want to listen for widget events
|
||||
geventListenerInit(&gl);
|
||||
gwinAttachListener(&gl);
|
||||
|
||||
while(1) {
|
||||
// Get an Event
|
||||
pe = geventEventWait(&gl, TIME_INFINITE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -45,7 +45,7 @@
|
|||
#define GWIN_NEED_WIDGET TRUE
|
||||
#define GWIN_NEED_LABEL TRUE
|
||||
#define GWIN_NEED_LIST TRUE
|
||||
#define GWIN_NEED_LIST_IMAGES TRUE
|
||||
#define GWIN_NEED_LIST_IMAGES FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
@ -91,4 +91,3 @@
|
|||
#define GFX_USE_GMISC FALSE
|
||||
|
||||
#endif /* _GFXCONF_H */
|
||||
|
||||
|
|
|
@ -52,10 +52,6 @@ static void createWidgets(void) {
|
|||
wi.text = "List 2: Smooth scrolling";
|
||||
ghLabel1 = gwinLabelCreate(NULL, &wi);
|
||||
|
||||
// Make list widgets invisible by default as they would issue
|
||||
// a re-render at every time an item is added
|
||||
wi.g.show = FALSE;
|
||||
|
||||
// The first list widget
|
||||
wi.g.width = 150;
|
||||
wi.g.height = 100;
|
||||
|
@ -112,6 +108,9 @@ int main(void) {
|
|||
gwinListAddItem(ghList1, "Item 13", FALSE);
|
||||
|
||||
// Add some items to the second list widget
|
||||
// This time we will disable the render until
|
||||
// all the items have been added
|
||||
gwinListEnableRender(ghList2, FALSE);
|
||||
gwinListAddItem(ghList2, "Item 0", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 1", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 2", FALSE);
|
||||
|
@ -126,10 +125,7 @@ int main(void) {
|
|||
gwinListAddItem(ghList2, "Item 11", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 12", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 13", FALSE);
|
||||
|
||||
// Make all the lists visible
|
||||
gwinSetVisible(ghList1, TRUE);
|
||||
gwinSetVisible(ghList2, TRUE);
|
||||
gwinListEnableRender(ghList2, TRUE);
|
||||
|
||||
while(1) {
|
||||
// Get an Event
|
||||
|
|
|
@ -23,12 +23,20 @@ int main(void) {
|
|||
|
||||
_createWidget();
|
||||
|
||||
#if 1
|
||||
gwinProgressbarSetResolution(ghProgressbar, 10);
|
||||
gwinProgressbarStart(ghProgressbar, 500);
|
||||
|
||||
//gwinProgressbarSetPosition(ghProgressbar, 42);
|
||||
//gwinProgressbarIncrement(ghProgressbar);
|
||||
//gwinProgressbarDecrement(ghProgressbar);
|
||||
gfxSleepMilliseconds(3000);
|
||||
gwinProgressbarReset(ghProgressbar);
|
||||
|
||||
gfxSleepMilliseconds(3000);
|
||||
gwinDestroy(ghProgressbar);
|
||||
#else
|
||||
gwinProgressbarSetPosition(ghProgressbar, 42);
|
||||
gwinProgressbarIncrement(ghProgressbar);
|
||||
gwinProgressbarDecrement(ghProgressbar);
|
||||
#endif
|
||||
|
||||
while (1) {
|
||||
gfxSleepMilliseconds(500);
|
||||
|
|
|
@ -1,94 +1,241 @@
|
|||
/*
|
||||
* Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
* Copyright (c) 2012, 2013, Andrew Hannam aka inmarket
|
||||
/**
|
||||
* This file has a different license to the rest of the uGFX system.
|
||||
* You can copy, modify and distribute this file as you see fit.
|
||||
* You do not need to publish your source modifications to this file.
|
||||
* The only thing you are not permitted to do is to relicense it
|
||||
* under a different license.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copy this file into your project directory and rename it as gfxconf.h
|
||||
* Edit your copy to turn on the uGFX features you want to use.
|
||||
* The values below are the defaults. You should delete anything
|
||||
* you are leaving as default.
|
||||
*
|
||||
* 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.
|
||||
* Please use spaces instead of tabs in this file.
|
||||
*/
|
||||
|
||||
#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_CHIBIOS TRUE
|
||||
//#define GFX_USE_OS_WIN32 TRUE
|
||||
//#define GFX_USE_OS_LINUX TRUE
|
||||
//#define GFX_USE_OS_OSX TRUE
|
||||
|
||||
/* GFX sub-systems to turn on */
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GDISP //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GDISP TRUE
|
||||
#define GFX_USE_GWIN TRUE
|
||||
#define GFX_USE_GINPUT TRUE
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
|
||||
/* Features for the GDISP sub-system. */
|
||||
#define GDISP_NEED_AUTOFLUSH FALSE
|
||||
#define GDISP_NEED_TIMERFLUSH FALSE
|
||||
#define GDISP_NEED_VALIDATION TRUE
|
||||
#define GDISP_NEED_CLIP TRUE
|
||||
#define GDISP_NEED_CIRCLE TRUE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_IMAGE TRUE
|
||||
#define GDISP_NEED_ELLIPSE FALSE
|
||||
#define GDISP_NEED_ARC FALSE
|
||||
#define GDISP_NEED_CONVEX_POLYGON TRUE
|
||||
#define GDISP_NEED_SCROLL FALSE
|
||||
#define GDISP_NEED_PIXELREAD FALSE
|
||||
#define GDISP_NEED_CONTROL TRUE
|
||||
#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE
|
||||
|
||||
/* The following are optional depending on your hardware */
|
||||
//#define GDISP_NEED_SCROLL TRUE
|
||||
//#define GWIN_CONSOLE_USE_HISTORY TRUE
|
||||
//#define GWIN_CONSOLE_HISTORY_AVERAGING TRUE
|
||||
//#define GWIN_CONSOLE_HISTORY_ATCREATE TRUE
|
||||
|
||||
/* GDISP fonts to include */
|
||||
#define GDISP_NEED_QUERY FALSE
|
||||
#define GDISP_NEED_MULTITHREAD FALSE
|
||||
#define GDISP_NEED_STREAMING FALSE
|
||||
#define GDISP_NEED_TEXT TRUE
|
||||
#define GDISP_NEED_ANTIALIAS TRUE
|
||||
#define GDISP_NEED_UTF8 TRUE
|
||||
#define GDISP_NEED_TEXT_KERNING TRUE
|
||||
#define GDISP_INCLUDE_FONT_UI1 FALSE
|
||||
#define GDISP_INCLUDE_FONT_UI2 TRUE
|
||||
#define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS10 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS12 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS16 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS24 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS32 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_10X20 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_7X14 FALSE
|
||||
#define GDISP_INCLUDE_FONT_FIXED_5X8 FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA FALSE
|
||||
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA FALSE
|
||||
#define GDISP_INCLUDE_USER_FONTS FALSE
|
||||
|
||||
/* GDISP image decoders */
|
||||
#define GDISP_NEED_IMAGE TRUE
|
||||
#define GDISP_NEED_IMAGE_NATIVE FALSE
|
||||
#define GDISP_NEED_IMAGE_GIF TRUE
|
||||
#define GDISP_NEED_IMAGE_BMP TRUE
|
||||
#define GDISP_NEED_IMAGE_BMP_1 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_4 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_4_RLE FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_8 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_8_RLE FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_16 FALSE
|
||||
#define GDISP_NEED_IMAGE_BMP_24 TRUE
|
||||
#define GDISP_NEED_IMAGE_BMP_32 FALSE
|
||||
#define GDISP_NEED_IMAGE_JPG FALSE
|
||||
#define GDISP_NEED_IMAGE_PNG FALSE
|
||||
#define GDISP_NEED_IMAGE_ACCOUNTING FALSE
|
||||
|
||||
#define GDISP_NEED_STARTUP_LOGO FALSE
|
||||
|
||||
#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE
|
||||
#define GDISP_LINEBUF_SIZE 128
|
||||
|
||||
#define GDISP_TOTAL_DISPLAYS 1
|
||||
#if GDISP_TOTAL_DISPLAYS > 1
|
||||
#define GDISP_HARDWARE_STREAM_WRITE FALSE
|
||||
#define GDISP_HARDWARE_STREAM_READ FALSE
|
||||
#define GDISP_HARDWARE_STREAM_POS FALSE
|
||||
#define GDISP_HARDWARE_DRAWPIXEL FALSE
|
||||
#define GDISP_HARDWARE_CLEARS FALSE
|
||||
#define GDISP_HARDWARE_FILLS FALSE
|
||||
#define GDISP_HARDWARE_BITFILLS FALSE
|
||||
#define GDISP_HARDWARE_SCROLL FALSE
|
||||
#define GDISP_HARDWARE_PIXELREAD FALSE
|
||||
#define GDISP_HARDWARE_CONTROL FALSE
|
||||
#define GDISP_HARDWARE_QUERY FALSE
|
||||
#define GDISP_HARDWARE_CLIP FALSE
|
||||
#endif
|
||||
|
||||
#define GDISP_TOTAL_CONTROLLERS 1
|
||||
#if GDISP_TOTAL_CONTROLLERS > 1
|
||||
#define GDISP_CONTROLLER_LIST GDISPVMT_Win32, GDISPVMT_Win32
|
||||
#define GDISP_CONTROLLER_DISPLAYS 1, 1
|
||||
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB888
|
||||
#endif
|
||||
|
||||
#define GDISP_USE_GFXNET FALSE
|
||||
#define GDISP_GFXNET_PORT 13001
|
||||
#define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE
|
||||
#define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE
|
||||
#define GDISP_GFXNET_UNSAFE_SOCKETS FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GWIN //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GWIN TRUE
|
||||
|
||||
/* Features for the GWIN subsystem. */
|
||||
#define GWIN_NEED_WINDOWMANAGER TRUE
|
||||
|
||||
#define GWIN_NEED_CONSOLE TRUE
|
||||
#define GWIN_CONSOLE_USE_HISTORY FALSE
|
||||
#define GWIN_CONSOLE_HISTORY_AVERAGING FALSE
|
||||
#define GWIN_CONSOLE_HISTORY_ATCREATE FALSE
|
||||
#define GWIN_CONSOLE_ESCSEQ FALSE
|
||||
#define GWIN_CONSOLE_USE_BASESTREAM FALSE
|
||||
#define GWIN_CONSOLE_USE_FLOAT FALSE
|
||||
#define GWIN_NEED_GRAPH TRUE
|
||||
|
||||
#define GWIN_NEED_WIDGET TRUE
|
||||
#define GWIN_NEED_LABEL TRUE
|
||||
#define GWIN_NEED_BUTTON TRUE
|
||||
#define GWIN_BUTTON_LAZY_RELEASE FALSE
|
||||
#define GWIN_NEED_SLIDER TRUE
|
||||
#define GWIN_NEED_CHECKBOX TRUE
|
||||
#define GWIN_NEED_IMAGE TRUE
|
||||
#define GWIN_NEED_IMAGE_ANIMATION TRUE
|
||||
#define GWIN_NEED_RADIO TRUE
|
||||
#define GWIN_NEED_LIST TRUE
|
||||
|
||||
/* Features for the GFILE subsystem. */
|
||||
#define GFX_USE_GFILE TRUE
|
||||
#define GFILE_NEED_ROMFS TRUE
|
||||
//#define GFILE_NEED_NATIVEFS TRUE
|
||||
|
||||
/* Features for the GINPUT subsystem. */
|
||||
#define GINPUT_NEED_MOUSE TRUE
|
||||
|
||||
/* Optional parameters for various subsystems */
|
||||
#define GWIN_NEED_LIST_IMAGES TRUE
|
||||
#define GWIN_NEED_PROGRESSBAR TRUE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GEVENT //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GEVENT TRUE
|
||||
|
||||
#define GEVENT_ASSERT_NO_RESOURCE FALSE
|
||||
#define GEVENT_MAXIMUM_SIZE 32
|
||||
#define GEVENT_MAX_SOURCE_LISTENERS 32
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GTIMER //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GTIMER TRUE
|
||||
|
||||
#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY
|
||||
#define GTIMER_THREAD_WORKAREA_SIZE 2048
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GQUEUE //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GQUEUE TRUE
|
||||
|
||||
#define GQUEUE_NEED_ASYNC TRUE
|
||||
#define GQUEUE_NEED_GSYNC FALSE
|
||||
#define GQUEUE_NEED_FSYNC FALSE
|
||||
#define GQUEUE_NEED_BUFFERS FALSE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GINPUT //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GINPUT TRUE
|
||||
|
||||
#define GINPUT_NEED_MOUSE TRUE
|
||||
#define GINPUT_NEED_KEYBOARD FALSE
|
||||
#define GINPUT_NEED_TOGGLE FALSE
|
||||
#define GINPUT_NEED_DIAL FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GFILE //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GFILE TRUE
|
||||
|
||||
#define GFILE_NEED_PRINTG FALSE
|
||||
#define GFILE_NEED_SCANG FALSE
|
||||
#define GFILE_NEED_STRINGS FALSE
|
||||
#define GFILE_NEED_STDIO FALSE
|
||||
#define GFILE_ALLOW_FLOATS FALSE
|
||||
#define GFILE_ALLOW_DEVICESPECIFIC FALSE
|
||||
#define GFILE_MAX_GFILES 3
|
||||
|
||||
#define GFILE_NEED_MEMFS FALSE
|
||||
#define GFILE_NEED_ROMFS TRUE
|
||||
#define GFILE_NEED_RAMFS FALSE
|
||||
#define GFILE_NEED_FATFS FALSE
|
||||
#define GFILE_NEED_NATIVEFS FALSE
|
||||
#define GFILE_NEED_CHBIOSFS FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GADC //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GADC FALSE
|
||||
|
||||
#define GADC_MAX_LOWSPEED_DEVICES 4
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GAUDIO //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GAUDIO FALSE
|
||||
#define GAUDIO_NEED_PLAY FALSE
|
||||
#define GAUDIO_NEED_RECORD FALSE
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GMISC //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
#define GFX_USE_GMISC FALSE
|
||||
|
||||
#define GMISC_NEED_ARRAYOPS FALSE
|
||||
#define GMISC_NEED_FASTTRIG FALSE
|
||||
#define GMISC_NEED_FIXEDTRIG FALSE
|
||||
#define GMISC_NEED_INVSQRT FALSE
|
||||
#define GMISC_INVSQRT_MIXED_ENDIAN FALSE
|
||||
#define GMISC_INVSQRT_REAL_SLOW FALSE
|
||||
|
||||
|
||||
#endif /* _GFXCONF_H */
|
||||
|
||||
|
|
|
@ -73,15 +73,16 @@ static const GWidgetStyle YellowWidgetStyle = {
|
|||
/* The variables we need */
|
||||
static GListener gl;
|
||||
static GHandle ghConsole;
|
||||
static GHandle ghTabButtons, ghTabSliders, ghTabCheckboxes, ghTabLabels, ghTabRadios, ghTabLists, ghTabImages;
|
||||
static GHandle ghTabButtons, ghTabSliders, ghTabCheckboxes, ghTabLabels, ghTabRadios, ghTabLists, ghTabImages, ghTabProgressbar;
|
||||
static GHandle ghButton1, ghButton2, ghButton3, ghButton4;
|
||||
static GHandle ghSlider1, ghSlider2, ghSlider3, ghSlider4;
|
||||
static GHandle ghCheckbox1, ghCheckbox2, ghCheckDisableAll;
|
||||
static GHandle ghLabel1;
|
||||
static GHandle ghRadio1, ghRadio2;
|
||||
static GHandle ghRadioBlack, ghRadioWhite, ghRadioYellow;
|
||||
static GHandle ghList1, ghList2, ghList3;
|
||||
static GHandle ghList1, ghList2, ghList3, ghList4;
|
||||
static GHandle ghImage1;
|
||||
static GHandle ghProgressbar1;
|
||||
static gdispImage imgYesNo;
|
||||
|
||||
/* Some useful macros */
|
||||
|
@ -117,85 +118,154 @@ static void createWidgets(void) {
|
|||
// Create the Tabs
|
||||
wi.g.show = TRUE; wi.customDraw = gwinRadioDraw_Tab;
|
||||
wi.g.width = ScrWidth/7; wi.g.height = TAB_HEIGHT; wi.g.y = 0;
|
||||
wi.g.x = 0*wi.g.width; wi.text = "Buttons"; ghTabButtons = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 1*wi.g.width; wi.text = "Sliders"; ghTabSliders = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 2*wi.g.width; wi.text = "Checkbox"; ghTabCheckboxes = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 3*wi.g.width; wi.text = "Radios"; ghTabRadios = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 4*wi.g.width; wi.text = "Lists"; ghTabLists = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 5*wi.g.width; wi.text = "Labels"; ghTabLabels = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 6*wi.g.width; wi.text = "Images"; ghTabImages = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 0*wi.g.width; wi.text = "Buttons";
|
||||
ghTabButtons = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 1*wi.g.width; wi.text = "Sliders";
|
||||
ghTabSliders = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 2*wi.g.width; wi.text = "Checkbox";
|
||||
ghTabCheckboxes = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 3*wi.g.width; wi.text = "Radios";
|
||||
ghTabRadios = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 4*wi.g.width; wi.text = "Lists";
|
||||
ghTabLists = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 5*wi.g.width; wi.text = "Labels";
|
||||
ghTabLabels = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.x = 6*wi.g.width; wi.text = "Images";
|
||||
ghTabImages = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
wi.g.y = TAB_HEIGHT;
|
||||
wi.g.x = 0*wi.g.width; wi.text = "Progressbar";
|
||||
ghTabProgressbar = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||
|
||||
// Buttons
|
||||
wi.g.show = FALSE; wi.customDraw = 0;
|
||||
wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; wi.g.y = TAB_HEIGHT+5;
|
||||
wi.g.x = 0+0*(BUTTON_WIDTH+1); wi.text = "B1"; ghButton1 = gwinButtonCreate(0, &wi);
|
||||
wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2"; ghButton2 = gwinButtonCreate(0, &wi);
|
||||
wi.g.x = 0+2*(BUTTON_WIDTH+1); wi.text = "B3"; ghButton3 = gwinButtonCreate(0, &wi);
|
||||
wi.g.x = 0+3*(BUTTON_WIDTH+1); wi.text = "B4"; ghButton4 = gwinButtonCreate(0, &wi);
|
||||
wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; wi.g.y = 2*TAB_HEIGHT+10;
|
||||
wi.g.x = 0+0*(BUTTON_WIDTH+1); wi.text = "B1";
|
||||
ghButton1 = gwinButtonCreate(0, &wi);
|
||||
wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2";
|
||||
ghButton2 = gwinButtonCreate(0, &wi);
|
||||
wi.g.x = 0+2*(BUTTON_WIDTH+1); wi.text = "B3";
|
||||
ghButton3 = gwinButtonCreate(0, &wi);
|
||||
wi.g.x = 0+3*(BUTTON_WIDTH+1); wi.text = "B4";
|
||||
ghButton4 = gwinButtonCreate(0, &wi);
|
||||
|
||||
// Horizontal Sliders
|
||||
wi.g.width = ScrWidth/2-2; wi.g.height = SLIDER_WIDTH; wi.g.x = ScrWidth/2+1;
|
||||
wi.g.y = ScrHeight/2-2*(SLIDER_WIDTH+1); wi.text = "S1"; ghSlider1 = gwinSliderCreate(0, &wi);
|
||||
wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2"; ghSlider2 = gwinSliderCreate(0, &wi);
|
||||
wi.g.y = ScrHeight/2-2*(SLIDER_WIDTH+1); wi.text = "S1";
|
||||
ghSlider1 = gwinSliderCreate(0, &wi);
|
||||
wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2";
|
||||
ghSlider2 = gwinSliderCreate(0, &wi);
|
||||
|
||||
// Vertical Sliders
|
||||
wi.g.width = SLIDER_WIDTH; wi.g.height = ScrHeight/2-2; wi.g.y = ScrHeight/2+1;
|
||||
wi.g.x = 0+0*(SLIDER_WIDTH+1); wi.text = "S3"; ghSlider3 = gwinSliderCreate(0, &wi);
|
||||
wi.g.x = 0+1*(SLIDER_WIDTH+1); wi.text = "S4"; ghSlider4 = gwinSliderCreate(0, &wi);
|
||||
wi.g.x = 0+0*(SLIDER_WIDTH+1); wi.text = "S3";
|
||||
ghSlider3 = gwinSliderCreate(0, &wi);
|
||||
wi.g.x = 0+1*(SLIDER_WIDTH+1); wi.text = "S4";
|
||||
ghSlider4 = gwinSliderCreate(0, &wi);
|
||||
|
||||
// Checkboxes - for the 2nd checkbox we apply special drawing before making it visible
|
||||
wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 0;
|
||||
wi.g.y = TAB_HEIGHT+5+0*(CHECKBOX_HEIGHT+1); wi.text = "C1"; ghCheckbox1 = gwinCheckboxCreate(0, &wi);
|
||||
wi.g.y = 2*TAB_HEIGHT+10+0*(CHECKBOX_HEIGHT+1); wi.text = "C1";
|
||||
ghCheckbox1 = gwinCheckboxCreate(0, &wi);
|
||||
wi.customDraw = gwinCheckboxDraw_CheckOnRight;
|
||||
wi.g.y = TAB_HEIGHT+5+1*(CHECKBOX_HEIGHT+1); wi.text = "C2"; ghCheckbox2 = gwinCheckboxCreate(0, &wi);
|
||||
wi.g.y = 2*TAB_HEIGHT+10+1*(CHECKBOX_HEIGHT+1); wi.text = "C2";
|
||||
ghCheckbox2 = gwinCheckboxCreate(0, &wi);
|
||||
wi.customDraw = 0; wi.g.width = DISABLEALL_WIDTH;
|
||||
wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "Disable All"; ghCheckDisableAll = gwinCheckboxCreate(0, &wi);
|
||||
wi.g.y = 2*TAB_HEIGHT+10+2*(CHECKBOX_HEIGHT+1); wi.text = "Disable All";
|
||||
ghCheckDisableAll = gwinCheckboxCreate(0, &wi);
|
||||
|
||||
// Labels
|
||||
wi.g.width = 0; wi.g.height = LABEL_HEIGHT; // dynamic width, fixed height
|
||||
wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "Label"; ghLabel1 = gwinLabelCreate(0, &wi);
|
||||
wi.g.y = 2*TAB_HEIGHT+10+2*(CHECKBOX_HEIGHT+1); wi.text = "Label";
|
||||
ghLabel1 = gwinLabelCreate(0, &wi);
|
||||
|
||||
// Radio Buttons
|
||||
wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = TAB_HEIGHT+5;
|
||||
wi.g.x = 0*wi.g.width; wi.text = "Yes"; ghRadio1 = gwinRadioCreate(0, &wi, GROUP_YESNO);
|
||||
wi.g.x = 1*wi.g.width; wi.text = "No"; ghRadio2 = gwinRadioCreate(0, &wi, GROUP_YESNO);
|
||||
wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = 2*TAB_HEIGHT+10;
|
||||
wi.g.x = 0*wi.g.width; wi.text = "Yes";
|
||||
ghRadio1 = gwinRadioCreate(0, &wi, GROUP_YESNO);
|
||||
wi.g.x = 1*wi.g.width; wi.text = "No";
|
||||
ghRadio2 = gwinRadioCreate(0, &wi, GROUP_YESNO);
|
||||
wi.g.width = COLOR_WIDTH; wi.g.y += RADIO_HEIGHT+5;
|
||||
wi.g.x = 0*wi.g.width; wi.text = "Black"; ghRadioBlack = gwinRadioCreate(0, &wi, GROUP_COLORS);
|
||||
wi.g.x = 1*wi.g.width; wi.text = "White"; ghRadioWhite = gwinRadioCreate(0, &wi, GROUP_COLORS);
|
||||
wi.g.x = 2*wi.g.width; wi.text = "Yellow"; ghRadioYellow = gwinRadioCreate(0, &wi, GROUP_COLORS);
|
||||
wi.g.x = 0*wi.g.width; wi.text = "Black";
|
||||
ghRadioBlack = gwinRadioCreate(0, &wi, GROUP_COLORS);
|
||||
wi.g.x = 1*wi.g.width; wi.text = "White";
|
||||
ghRadioWhite = gwinRadioCreate(0, &wi, GROUP_COLORS);
|
||||
wi.g.x = 2*wi.g.width; wi.text = "Yellow";
|
||||
ghRadioYellow = gwinRadioCreate(0, &wi, GROUP_COLORS);
|
||||
gwinRadioPress(ghRadioWhite);
|
||||
|
||||
// Lists
|
||||
wi.g.show = FALSE; wi.customDraw = 0;
|
||||
wi.g.width = LIST_WIDTH; wi.g.height = LIST_HEIGHT; wi.g.y = TAB_HEIGHT+5;
|
||||
wi.g.x = 0+0*(LIST_WIDTH+1); wi.text = "L1"; ghList1 = gwinListCreate(0, &wi, FALSE);
|
||||
gwinListAddItem(ghList1, "Item 0", FALSE); gwinListAddItem(ghList1, "Item 1", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 2", FALSE); gwinListAddItem(ghList1, "Item 3", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 4", FALSE); gwinListAddItem(ghList1, "Item 5", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 6", FALSE); gwinListAddItem(ghList1, "Item 7", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 8", FALSE); gwinListAddItem(ghList1, "Item 9", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 10", FALSE); gwinListAddItem(ghList1, "Item 11", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 12", FALSE); gwinListAddItem(ghList1, "Item 13", FALSE);
|
||||
wi.g.x = 0+1*(LIST_WIDTH+1); wi.text = "L2"; ghList2 = gwinListCreate(0, &wi, TRUE);
|
||||
gwinListAddItem(ghList2, "Item 0", FALSE); gwinListAddItem(ghList2, "Item 1", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 2", FALSE); gwinListAddItem(ghList2, "Item 3", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 4", FALSE); gwinListAddItem(ghList2, "Item 5", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 6", FALSE); gwinListAddItem(ghList2, "Item 7", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 8", FALSE); gwinListAddItem(ghList2, "Item 9", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 10", FALSE); gwinListAddItem(ghList2, "Item 11", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 12", FALSE); gwinListAddItem(ghList2, "Item 13", FALSE);
|
||||
wi.g.x = 0+2*(LIST_WIDTH+1); wi.text = "L3"; ghList3 = gwinListCreate(0, &wi, TRUE);
|
||||
gwinListAddItem(ghList3, "Item 0", FALSE); gwinListAddItem(ghList3, "Item 1", FALSE);
|
||||
gwinListAddItem(ghList3, "Item 2", FALSE); gwinListAddItem(ghList3, "Item 3", FALSE);
|
||||
wi.g.width = LIST_WIDTH; wi.g.height = LIST_HEIGHT; wi.g.y = 2*TAB_HEIGHT+10;
|
||||
wi.g.x = 0+0*(LIST_WIDTH+5); wi.text = "L1";
|
||||
ghList1 = gwinListCreate(0, &wi, FALSE);
|
||||
gwinListAddItem(ghList1, "Item 0", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 1", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 2", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 3", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 4", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 5", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 6", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 7", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 8", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 9", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 10", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 11", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 12", FALSE);
|
||||
gwinListAddItem(ghList1, "Item 13", FALSE);
|
||||
wi.g.x = 0+1*(LIST_WIDTH+5); wi.text = "L2";
|
||||
ghList2 = gwinListCreate(0, &wi, TRUE);
|
||||
gwinListAddItem(ghList2, "Item 0", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 1", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 2", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 3", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 4", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 5", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 6", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 7", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 8", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 9", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 10", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 11", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 12", FALSE);
|
||||
gwinListAddItem(ghList2, "Item 13", FALSE);
|
||||
wi.g.x = 0+2*(LIST_WIDTH+5); wi.text = "L3";
|
||||
ghList3 = gwinListCreate(0, &wi, TRUE);
|
||||
gwinListAddItem(ghList3, "Item 0", FALSE);
|
||||
gwinListAddItem(ghList3, "Item 1", FALSE);
|
||||
gwinListAddItem(ghList3, "Item 2", FALSE);
|
||||
gwinListAddItem(ghList3, "Item 3", FALSE);
|
||||
gdispImageOpenFile(&imgYesNo, "image_yesno.gif");
|
||||
gwinListItemSetImage(ghList3, 1, &imgYesNo);
|
||||
gwinListItemSetImage(ghList3, 3, &imgYesNo);
|
||||
wi.g.x = 0+3*(LIST_WIDTH+5); wi.text = "L2";
|
||||
ghList4 = gwinListCreate(0, &wi, TRUE);
|
||||
gwinListAddItem(ghList4, "Item 0", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 1", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 2", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 3", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 4", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 5", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 6", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 7", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 8", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 9", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 10", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 11", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 12", FALSE);
|
||||
gwinListAddItem(ghList4, "Item 13", FALSE);
|
||||
gwinListSetScroll(ghList4, scrollSmooth);
|
||||
|
||||
// Image
|
||||
wi.g.x = ScrWidth-210; wi.g.y = TAB_HEIGHT + 10; wi.g.width = 200; wi.g.height = 200;
|
||||
wi.g.x = 20; wi.g.y = 2*TAB_HEIGHT+20; wi.g.width = 200; wi.g.height = 100;
|
||||
ghImage1 = gwinImageCreate(0, &wi.g);
|
||||
gwinImageOpenFile(ghImage1, "chibios.bmp");
|
||||
gwinImageCache(ghImage1);
|
||||
gwinImageOpenFile(ghImage1, "romfs_img_ugfx.bmp");
|
||||
|
||||
// Progressbar
|
||||
wi.g.show = FALSE; wi.customDraw = 0;
|
||||
wi.g.width = 200; wi.g.height = 20; wi.g.y = 2*TAB_HEIGHT+10;
|
||||
wi.g.x = 20; wi.text = "Progressbar 1";
|
||||
ghProgressbar1 = gwinProgressbarCreate(0, &wi);
|
||||
gwinProgressbarSetResolution(ghProgressbar1, 10);
|
||||
|
||||
// Console - we apply some special colors before making it visible
|
||||
wi.g.width = ScrWidth/2-1; wi.g.height = ScrHeight/2-1;
|
||||
|
@ -210,35 +280,69 @@ static void createWidgets(void) {
|
|||
*/
|
||||
static void setTab(GHandle tab) {
|
||||
/* Make sure everything is invisible first */
|
||||
gwinSetVisible(ghButton1, FALSE); gwinSetVisible(ghButton2, FALSE);
|
||||
gwinSetVisible(ghButton3, FALSE); gwinSetVisible(ghButton4, FALSE);
|
||||
gwinSetVisible(ghSlider1, FALSE); gwinSetVisible(ghSlider2, FALSE);
|
||||
gwinSetVisible(ghSlider3, FALSE); gwinSetVisible(ghSlider4, FALSE);
|
||||
gwinSetVisible(ghCheckbox1, FALSE); gwinSetVisible(ghCheckbox2, FALSE); gwinSetVisible(ghCheckDisableAll, FALSE);
|
||||
gwinSetVisible(ghButton1, FALSE);
|
||||
gwinSetVisible(ghButton2, FALSE);
|
||||
gwinSetVisible(ghButton3, FALSE);
|
||||
gwinSetVisible(ghButton4, FALSE);
|
||||
gwinSetVisible(ghSlider1, FALSE);
|
||||
gwinSetVisible(ghSlider2, FALSE);
|
||||
gwinSetVisible(ghSlider3, FALSE);
|
||||
gwinSetVisible(ghSlider4, FALSE);
|
||||
gwinSetVisible(ghCheckbox1, FALSE);
|
||||
gwinSetVisible(ghCheckbox2, FALSE);
|
||||
gwinSetVisible(ghCheckDisableAll, FALSE);
|
||||
gwinSetVisible(ghLabel1, FALSE);
|
||||
gwinSetVisible(ghRadio1, FALSE); gwinSetVisible(ghRadio2, FALSE);
|
||||
gwinSetVisible(ghRadioWhite, FALSE);gwinSetVisible(ghRadioBlack, FALSE);gwinSetVisible(ghRadioYellow, FALSE);
|
||||
gwinSetVisible(ghList1, FALSE); gwinSetVisible(ghList2, FALSE); gwinSetVisible(ghList3, FALSE);
|
||||
gwinSetVisible(ghRadio1, FALSE);
|
||||
gwinSetVisible(ghRadio2, FALSE);
|
||||
gwinSetVisible(ghRadioWhite, FALSE);
|
||||
gwinSetVisible(ghRadioBlack, FALSE);
|
||||
gwinSetVisible(ghRadioYellow, FALSE);
|
||||
gwinSetVisible(ghList1, FALSE);
|
||||
gwinSetVisible(ghList2, FALSE);
|
||||
gwinSetVisible(ghList3, FALSE);
|
||||
gwinSetVisible(ghList4, FALSE);
|
||||
gwinSetVisible(ghImage1, FALSE);
|
||||
gwinSetVisible(ghProgressbar1, FALSE);
|
||||
|
||||
// Stop the progress bar
|
||||
gwinProgressbarStop(ghProgressbar1);
|
||||
gwinProgressbarReset(ghProgressbar1);
|
||||
|
||||
/* Turn on widgets depending on the tab selected */
|
||||
if (tab == ghTabButtons) {
|
||||
gwinSetVisible(ghButton1, TRUE); gwinSetVisible(ghButton2, TRUE);
|
||||
gwinSetVisible(ghButton3, TRUE); gwinSetVisible(ghButton4, TRUE);
|
||||
gwinSetVisible(ghButton1, TRUE);
|
||||
gwinSetVisible(ghButton2, TRUE);
|
||||
gwinSetVisible(ghButton3, TRUE);
|
||||
gwinSetVisible(ghButton4, TRUE);
|
||||
} else if (tab == ghTabSliders) {
|
||||
gwinSetVisible(ghSlider1, TRUE); gwinSetVisible(ghSlider2, TRUE);
|
||||
gwinSetVisible(ghSlider3, TRUE); gwinSetVisible(ghSlider4, TRUE);
|
||||
gwinSetVisible(ghSlider1, TRUE);
|
||||
gwinSetVisible(ghSlider2, TRUE);
|
||||
gwinSetVisible(ghSlider3, TRUE);
|
||||
gwinSetVisible(ghSlider4, TRUE);
|
||||
} else if (tab == ghTabCheckboxes) {
|
||||
gwinSetVisible(ghCheckbox1, TRUE); gwinSetVisible(ghCheckbox2, TRUE); gwinSetVisible(ghCheckDisableAll, TRUE);
|
||||
gwinSetVisible(ghCheckbox1, TRUE);
|
||||
gwinSetVisible(ghCheckbox2, TRUE);
|
||||
gwinSetVisible(ghCheckDisableAll, TRUE);
|
||||
} else if (tab == ghTabLabels) {
|
||||
gwinSetVisible(ghLabel1, TRUE);
|
||||
} else if (tab == ghTabRadios) {
|
||||
gwinSetVisible(ghRadio1, TRUE); gwinSetVisible(ghRadio2, TRUE);
|
||||
gwinSetVisible(ghRadioWhite, TRUE); gwinSetVisible(ghRadioBlack, TRUE); gwinSetVisible(ghRadioYellow, TRUE);
|
||||
gwinSetVisible(ghRadio1, TRUE);
|
||||
gwinSetVisible(ghRadio2, TRUE);
|
||||
gwinSetVisible(ghRadioWhite, TRUE);
|
||||
gwinSetVisible(ghRadioBlack, TRUE);
|
||||
gwinSetVisible(ghRadioYellow, TRUE);
|
||||
} else if (tab == ghTabLists) {
|
||||
gwinSetVisible(ghList1, TRUE); gwinSetVisible(ghList2, TRUE); gwinSetVisible(ghList3, TRUE);
|
||||
gwinSetVisible(ghList1, TRUE);
|
||||
gwinSetVisible(ghList2, TRUE);
|
||||
gwinSetVisible(ghList3, TRUE);
|
||||
gwinSetVisible(ghList4, TRUE);
|
||||
} else if (tab == ghTabImages) {
|
||||
gwinSetVisible(ghImage1, TRUE);
|
||||
} else if (tab == ghTabProgressbar) {
|
||||
gwinSetVisible(ghProgressbar1, TRUE);
|
||||
|
||||
// Start the progress bar
|
||||
gwinProgressbarStart(ghProgressbar1, 500);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -246,16 +350,29 @@ static void setTab(GHandle tab) {
|
|||
* Set the enabled state of every widget (except the tabs etc)
|
||||
*/
|
||||
static void setEnabled(bool_t ena) {
|
||||
gwinSetEnabled(ghButton1, ena); gwinSetEnabled(ghButton2, ena);
|
||||
gwinSetEnabled(ghButton3, ena); gwinSetEnabled(ghButton4, ena);
|
||||
gwinSetEnabled(ghSlider1, ena); gwinSetEnabled(ghSlider2, ena);
|
||||
gwinSetEnabled(ghSlider3, ena); gwinSetEnabled(ghSlider4, ena);
|
||||
gwinSetEnabled(ghCheckbox1, ena); gwinSetEnabled(ghCheckbox2, ena); //gwinSetEnabled(ghCheckDisableAll, TRUE);
|
||||
gwinSetEnabled(ghButton1, ena);
|
||||
gwinSetEnabled(ghButton2, ena);
|
||||
gwinSetEnabled(ghButton3, ena);
|
||||
gwinSetEnabled(ghButton4, ena);
|
||||
gwinSetEnabled(ghSlider1, ena);
|
||||
gwinSetEnabled(ghSlider2, ena);
|
||||
gwinSetEnabled(ghSlider3, ena);
|
||||
gwinSetEnabled(ghSlider4, ena);
|
||||
gwinSetEnabled(ghCheckbox1, ena);
|
||||
gwinSetEnabled(ghCheckbox2, ena);
|
||||
//gwinSetEnabled(ghCheckDisableAll, TRUE);
|
||||
gwinSetEnabled(ghLabel1, ena);
|
||||
gwinSetEnabled(ghRadio1, ena); gwinSetEnabled(ghRadio2, ena);
|
||||
gwinSetEnabled(ghList1, ena); gwinSetEnabled(ghList2, ena); gwinSetEnabled(ghList3, ena);
|
||||
gwinSetEnabled(ghRadioWhite, ena); gwinSetEnabled(ghRadioBlack, ena); gwinSetEnabled(ghRadioYellow, ena);
|
||||
gwinSetEnabled(ghRadio1, ena);
|
||||
gwinSetEnabled(ghRadio2, ena);
|
||||
gwinSetEnabled(ghList1, ena);
|
||||
gwinSetEnabled(ghList2, ena);
|
||||
gwinSetEnabled(ghList3, ena);
|
||||
gwinSetEnabled(ghList4, ena);
|
||||
gwinSetEnabled(ghRadioWhite, ena);
|
||||
gwinSetEnabled(ghRadioBlack, ena);
|
||||
gwinSetEnabled(ghRadioYellow, ena);
|
||||
gwinSetEnabled(ghImage1, ena);
|
||||
gwinSetEnabled(ghProgressbar1, ena);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
* The files have been converted using...
|
||||
* file2c -dbcs infile outfile
|
||||
*/
|
||||
#include "romfs_img_chibios.h"
|
||||
#include "romfs_img_ugfx.h"
|
||||
#include "romfs_img_yesno.h"
|
||||
|
|
|
@ -1,643 +0,0 @@
|
|||
static const char image_chibios[] = {
|
||||
0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x74, 0x00, 0x74, 0x00, 0xE7, 0xFE, 0x00, 0x08, 0x07, 0x02,
|
||||
0x00, 0x0A, 0x03, 0x08, 0x07, 0x0E, 0x05, 0x0D, 0x00, 0x00, 0x11, 0x02, 0x03, 0x16, 0x01, 0x09,
|
||||
0x15, 0x00, 0x00, 0x19, 0x03, 0x14, 0x16, 0x06, 0x00, 0x1D, 0x02, 0x07, 0x1C, 0x01, 0x0F, 0x1A,
|
||||
0x01, 0x2D, 0x12, 0x0F, 0x09, 0x1F, 0x00, 0x1F, 0x18, 0x10, 0x03, 0x22, 0x02, 0x10, 0x1F, 0x00,
|
||||
0x19, 0x1B, 0x1E, 0x01, 0x26, 0x00, 0x1C, 0x1D, 0x0B, 0x18, 0x21, 0x04, 0x17, 0x20, 0x13, 0x12,
|
||||
0x24, 0x00, 0x0B, 0x26, 0x01, 0x0A, 0x22, 0x2F, 0x17, 0x22, 0x0E, 0x02, 0x2C, 0x00, 0x0A, 0x2B,
|
||||
0x00, 0x3B, 0x1A, 0x1A, 0x14, 0x27, 0x0D, 0x11, 0x2A, 0x00, 0x17, 0x2A, 0x06, 0x00, 0x33, 0x00,
|
||||
0x08, 0x31, 0x00, 0x12, 0x30, 0x00, 0x21, 0x2A, 0x11, 0x23, 0x27, 0x2C, 0x0E, 0x32, 0x0A, 0x1D,
|
||||
0x2F, 0x01, 0x0D, 0x35, 0x05, 0x07, 0x38, 0x00, 0x18, 0x32, 0x0C, 0x24, 0x2D, 0x1B, 0x2D, 0x2A,
|
||||
0x21, 0x10, 0x36, 0x00, 0x1F, 0x31, 0x12, 0x18, 0x35, 0x00, 0x16, 0x35, 0x06, 0x20, 0x33, 0x0D,
|
||||
0x20, 0x32, 0x19, 0x0D, 0x3D, 0x06, 0x15, 0x3B, 0x05, 0x10, 0x3D, 0x00, 0x06, 0x40, 0x00, 0x23,
|
||||
0x34, 0x3B, 0x1F, 0x3B, 0x0E, 0x2C, 0x36, 0x1A, 0x49, 0x2D, 0x22, 0x3F, 0x31, 0x1F, 0x1F, 0x3D,
|
||||
0x08, 0x1B, 0x3F, 0x01, 0x15, 0x41, 0x03, 0x21, 0x3E, 0x02, 0x12, 0x43, 0x00, 0x1A, 0x40, 0x0B,
|
||||
0x28, 0x3B, 0x16, 0x29, 0x3C, 0x10, 0x2F, 0x38, 0x2C, 0x22, 0x3E, 0x17, 0x2F, 0x39, 0x25, 0x29,
|
||||
0x3C, 0x1F, 0x38, 0x37, 0x3A, 0x11, 0x48, 0x08, 0x14, 0x48, 0x00, 0x0C, 0x4B, 0x03, 0x1A, 0x47,
|
||||
0x09, 0x1D, 0x47, 0x01, 0x23, 0x46, 0x12, 0x12, 0x4E, 0x00, 0x1B, 0x4C, 0x00, 0x25, 0x48, 0x0B,
|
||||
0x1A, 0x4D, 0x05, 0x1F, 0x4C, 0x0E, 0x22, 0x4C, 0x06, 0x33, 0x46, 0x1A, 0x2E, 0x47, 0x21, 0x0D,
|
||||
0x54, 0x02, 0x37, 0x43, 0x2F, 0x2A, 0x4C, 0x06, 0x39, 0x44, 0x2A, 0x18, 0x52, 0x01, 0x17, 0x53,
|
||||
0x0B, 0x31, 0x4A, 0x1D, 0x20, 0x52, 0x0B, 0x38, 0x48, 0x28, 0x34, 0x49, 0x2E, 0x1B, 0x55, 0x04,
|
||||
0x16, 0x58, 0x00, 0x25, 0x52, 0x14, 0x25, 0x54, 0x04, 0x14, 0x59, 0x07, 0x1F, 0x57, 0x00, 0x29,
|
||||
0x53, 0x0E, 0x2F, 0x51, 0x15, 0x3C, 0x49, 0x41, 0x1F, 0x58, 0x07, 0x2F, 0x51, 0x1E, 0x25, 0x57,
|
||||
0x10, 0x1C, 0x5C, 0x01, 0x13, 0x60, 0x03, 0x44, 0x4C, 0x3A, 0x1B, 0x5D, 0x0D, 0x47, 0x4A, 0x4D,
|
||||
0x5A, 0x47, 0x3C, 0x24, 0x5C, 0x0D, 0x27, 0x5D, 0x03, 0x20, 0x60, 0x05, 0x1B, 0x64, 0x00, 0x1A,
|
||||
0x64, 0x09, 0x3E, 0x51, 0x5D, 0x25, 0x62, 0x00, 0x2F, 0x5D, 0x18, 0x41, 0x55, 0x36, 0x42, 0x52,
|
||||
0x52, 0x31, 0x5E, 0x10, 0x32, 0x5C, 0x21, 0x24, 0x63, 0x0A, 0x40, 0x5B, 0x19, 0x2C, 0x63, 0x15,
|
||||
0x3C, 0x5E, 0x1A, 0x4C, 0x56, 0x3C, 0x19, 0x6B, 0x05, 0x4D, 0x56, 0x43, 0x1F, 0x69, 0x0F, 0x24,
|
||||
0x6A, 0x05, 0x7D, 0x49, 0x47, 0x51, 0x59, 0x33, 0x4C, 0x58, 0x4F, 0x2D, 0x6A, 0x06, 0x5B, 0x55,
|
||||
0x52, 0x2C, 0x6A, 0x12, 0x44, 0x61, 0x2C, 0x23, 0x70, 0x00, 0x20, 0x71, 0x0D, 0x34, 0x6A, 0x18,
|
||||
0x3B, 0x68, 0x19, 0x2A, 0x6F, 0x0D, 0x3D, 0x69, 0x25, 0x44, 0x68, 0x2B, 0x20, 0x79, 0x0A, 0x2A,
|
||||
0x77, 0x09, 0x30, 0x75, 0x14, 0x58, 0x64, 0x48, 0x4F, 0x68, 0x42, 0x34, 0x77, 0x0A, 0x55, 0x64,
|
||||
0x67, 0x3B, 0x73, 0x1F, 0x3A, 0x75, 0x15, 0x53, 0x68, 0x4D, 0x5C, 0x65, 0x5C, 0x61, 0x66, 0x54,
|
||||
0x49, 0x72, 0x30, 0x2D, 0x7F, 0x05, 0x2D, 0x7E, 0x12, 0x4A, 0x77, 0x29, 0x58, 0x72, 0x4A, 0x3D,
|
||||
0x81, 0x22, 0x48, 0x80, 0x2A, 0x62, 0x74, 0x5A, 0x61, 0x75, 0x6D, 0x6C, 0x73, 0x62, 0x5F, 0x75,
|
||||
0x76, 0x55, 0x7F, 0x3C, 0x6E, 0x73, 0x6D, 0x72, 0x75, 0x7C, 0x56, 0x8D, 0x2F, 0x46, 0x92, 0x30,
|
||||
0x54, 0x8D, 0x3B, 0x62, 0x89, 0x3F, 0x7A, 0x81, 0x73, 0x7B, 0x82, 0x6C, 0x6F, 0x89, 0x5D, 0x76,
|
||||
0x86, 0x6B, 0x76, 0x85, 0x89, 0x69, 0x8F, 0x50, 0x7C, 0x87, 0x82, 0x6E, 0x95, 0x4C, 0x82, 0x93,
|
||||
0x8D, 0x7B, 0x96, 0x84, 0x8C, 0x92, 0x7C, 0x67, 0xA2, 0x4F, 0x8B, 0x93, 0x84, 0x81, 0x96, 0x9B,
|
||||
0x87, 0x98, 0x79, 0x8D, 0x93, 0x99, 0x91, 0xA5, 0x84, 0x90, 0xA3, 0x9C, 0xA1, 0x9F, 0x95, 0x89,
|
||||
0xAB, 0x6D, 0x9B, 0xA4, 0x96, 0x91, 0xA7, 0xA6, 0x8F, 0xA8, 0xB0, 0xA2, 0xA7, 0x91, 0xA0, 0xA6,
|
||||
0xB1, 0xAA, 0xB1, 0xA1, 0x9F, 0xB7, 0xA7, 0xA6, 0xB4, 0xBB, 0xA2, 0xB8, 0xB0, 0x9C, 0xB9, 0xBE,
|
||||
0xA8, 0xB9, 0x9B, 0xB2, 0xB7, 0x9D, 0xBC, 0xB7, 0xB5, 0xC2, 0xC0, 0xA5, 0xAD, 0xC7, 0xC4, 0xA4,
|
||||
0xC9, 0xD5, 0xC1, 0xC4, 0xB7, 0xBD, 0xC7, 0xB3, 0xAB, 0xCA, 0xCD, 0xB7, 0xCC, 0xB2, 0xBD, 0xCB,
|
||||
0xD5, 0xC9, 0xCD, 0xCB, 0xC8, 0xD3, 0xAD, 0xBB, 0xD6, 0xD2, 0xAF, 0xDC, 0xE4, 0xBE, 0xD9, 0xE2,
|
||||
0xC7, 0xDA, 0xC1, 0xD3, 0xD6, 0xC8, 0xD0, 0xDA, 0xC5, 0xCA, 0xD9, 0xE6, 0xDE, 0xDD, 0xC0, 0xD6,
|
||||
0xE5, 0xDF, 0xD9, 0xE5, 0xF2, 0xDF, 0xEA, 0xD3, 0xC5, 0xEF, 0xF4, 0xDC, 0xEA, 0xEA, 0xE7, 0xE9,
|
||||
0xD9, 0xD3, 0xED, 0xF5, 0xEA, 0xE8, 0xEC, 0xEB, 0xEC, 0xE9, 0xE6, 0xF2, 0xFC, 0xF6, 0xF4, 0xEB,
|
||||
0xF0, 0xFA, 0xDA, 0xEC, 0xFB, 0xFB, 0xFA, 0xF7, 0xFC, 0xF2, 0xFC, 0xE3, 0xF7, 0xF9, 0xF5, 0xF3,
|
||||
0xFE, 0xEB, 0xFF, 0xFB, 0xFA, 0xFA, 0xFE, 0xEC, 0xFB, 0xFD, 0xF9, 0xF5, 0xFF, 0xFA, 0xF8, 0xFF,
|
||||
0xF4, 0xF9, 0xFE, 0xFF, 0xFF, 0xFE, 0xF5, 0xFF, 0xFD, 0xFF, 0xFD, 0xFF, 0xFC, 0x2C, 0x00, 0x00,
|
||||
0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x08, 0xFE, 0x00, 0xFF, 0xFD, 0xF3, 0xE7, 0x4F, 0xA0,
|
||||
0x40, 0x82, 0xFE, 0xF8, 0xC9, 0x93, 0xF7, 0xEF, 0x5E, 0xC1, 0x7C, 0xFC, 0xFE, 0xE9, 0x3B, 0x88,
|
||||
0xB0, 0x5F, 0xBF, 0x81, 0x06, 0x33, 0x6A, 0xDC, 0x48, 0x11, 0x21, 0xC7, 0x8C, 0x08, 0x43, 0x8A,
|
||||
0x2C, 0xD8, 0x51, 0xE4, 0xC7, 0x93, 0x1C, 0x23, 0x7A, 0xA4, 0xF8, 0x8F, 0x9F, 0xCB, 0x86, 0x04,
|
||||
0xF9, 0x4D, 0xFC, 0x57, 0x6F, 0xE0, 0x4A, 0x94, 0x38, 0x73, 0x6A, 0x2C, 0x48, 0xD2, 0x60, 0x48,
|
||||
0x90, 0x23, 0x7B, 0xEA, 0x44, 0xF9, 0x53, 0x60, 0x3E, 0x81, 0xFC, 0xF2, 0xDD, 0x73, 0xE8, 0xEF,
|
||||
0xDE, 0x3F, 0x8B, 0x30, 0x85, 0x0E, 0xD5, 0x18, 0x91, 0xE3, 0xC8, 0xA9, 0x58, 0xB3, 0x66, 0x9C,
|
||||
0x68, 0xF2, 0x68, 0xD4, 0xA5, 0x4E, 0x9F, 0xDA, 0xB3, 0xD7, 0x8F, 0x69, 0x55, 0xAD, 0x27, 0x83,
|
||||
0x4A, 0x35, 0xE8, 0xF2, 0x2C, 0xDA, 0xB7, 0x25, 0x0D, 0x2E, 0x6D, 0x9A, 0x11, 0xDF, 0xB8, 0x6E,
|
||||
0xE8, 0x2E, 0xC6, 0x3C, 0x08, 0xF7, 0x23, 0xC9, 0x97, 0x7D, 0xAD, 0xAE, 0xD5, 0x4A, 0xD0, 0x60,
|
||||
0xCD, 0x7C, 0x47, 0xBD, 0x62, 0x33, 0x02, 0xC1, 0xC3, 0x0D, 0x6D, 0x17, 0x5B, 0xFA, 0x1C, 0x9C,
|
||||
0xF6, 0x66, 0x60, 0xAC, 0x85, 0x2F, 0x03, 0x7E, 0x6A, 0x71, 0x9F, 0xBE, 0xCF, 0x05, 0x44, 0xF4,
|
||||
0xE8, 0x21, 0xC2, 0xC2, 0x38, 0xB6, 0x72, 0x29, 0x6F, 0xBC, 0xBA, 0xDA, 0xB2, 0xE0, 0xAB, 0xAA,
|
||||
0xFB, 0x66, 0x6E, 0x59, 0xB5, 0x9F, 0x8A, 0x01, 0x04, 0x3A, 0x64, 0xD9, 0x37, 0xAB, 0xC1, 0x24,
|
||||
0x48, 0x63, 0xCC, 0x5C, 0xC0, 0xC1, 0x57, 0xE0, 0xDC, 0xA1, 0x57, 0x37, 0xDB, 0x9C, 0x8D, 0xF4,
|
||||
0xAC, 0xDA, 0xA2, 0x97, 0x81, 0xB2, 0xAD, 0xEA, 0xA6, 0xC1, 0x0E, 0x1E, 0x40, 0x0E, 0x60, 0xFA,
|
||||
0x95, 0x22, 0xD4, 0x2B, 0x48, 0x7C, 0x76, 0xFE, 0x28, 0xD8, 0x67, 0xD3, 0x28, 0x73, 0x83, 0x89,
|
||||
0x77, 0x86, 0x8C, 0xE8, 0x36, 0xE3, 0x3E, 0x7C, 0xFB, 0x3C, 0xD3, 0x6E, 0x5B, 0xF5, 0x28, 0x41,
|
||||
0xA6, 0x09, 0x41, 0x1E, 0xAD, 0xF9, 0x76, 0x76, 0x55, 0x7C, 0x10, 0x9C, 0xD1, 0x85, 0x16, 0x5D,
|
||||
0xB0, 0xF0, 0x81, 0x36, 0x05, 0xC8, 0x72, 0xCA, 0x2B, 0x7C, 0xB8, 0xD0, 0xC0, 0x45, 0x4E, 0x79,
|
||||
0xE5, 0xD5, 0x49, 0x12, 0x7A, 0x55, 0x9F, 0x40, 0x13, 0xF5, 0x13, 0xDF, 0x38, 0xCC, 0xD8, 0x12,
|
||||
0x04, 0x11, 0x29, 0x5C, 0x90, 0x80, 0x02, 0x31, 0x5C, 0x81, 0xC6, 0x27, 0xC7, 0x88, 0xB3, 0x8F,
|
||||
0x86, 0x91, 0xFD, 0xB3, 0x9F, 0x57, 0xCC, 0x4D, 0x98, 0x95, 0x54, 0x05, 0x81, 0xD2, 0x00, 0x29,
|
||||
0x8A, 0x28, 0x52, 0x46, 0x1E, 0x1E, 0xE0, 0x33, 0x82, 0x0F, 0xA4, 0x8C, 0x31, 0xC5, 0x0D, 0x0B,
|
||||
0x90, 0x07, 0x15, 0x44, 0xED, 0x65, 0x74, 0x18, 0x47, 0xFA, 0x68, 0x68, 0xCF, 0x38, 0x98, 0xE0,
|
||||
0x10, 0x44, 0x03, 0x0F, 0xA4, 0x20, 0xC2, 0x03, 0x12, 0x84, 0xC0, 0xC2, 0x0C, 0x40, 0x9C, 0x70,
|
||||
0xC2, 0x0B, 0x25, 0x5C, 0x70, 0x40, 0x01, 0x0D, 0xE8, 0x86, 0x09, 0x36, 0x1A, 0xBA, 0xB8, 0x51,
|
||||
0x4D, 0xF5, 0xC8, 0x08, 0x97, 0x47, 0x6E, 0x08, 0x41, 0xCA, 0x2B, 0x92, 0x94, 0x81, 0x85, 0x09,
|
||||
0xF1, 0xD0, 0x53, 0x80, 0x0F, 0x53, 0xF0, 0xF0, 0xC1, 0x02, 0xFD, 0xCC, 0x92, 0x41, 0x00, 0x6E,
|
||||
0xF4, 0x03, 0x51, 0x4E, 0x32, 0x6A, 0xB8, 0x8F, 0x36, 0x99, 0xDC, 0x70, 0xC1, 0x05, 0x21, 0xF0,
|
||||
0x20, 0x85, 0x18, 0x94, 0x4A, 0x11, 0x45, 0x17, 0x98, 0x66, 0xBA, 0x44, 0x0F, 0x34, 0x60, 0xF7,
|
||||
0xC2, 0x06, 0x0F, 0x8C, 0xA8, 0x40, 0x06, 0xBF, 0xC4, 0x17, 0x19, 0x7F, 0xD1, 0xF1, 0x55, 0x18,
|
||||
0x28, 0x10, 0xE0, 0xC2, 0x09, 0x24, 0xFE, 0x69, 0x60, 0x01, 0x01, 0x35, 0xF1, 0x50, 0x21, 0x81,
|
||||
0x0C, 0x33, 0x18, 0xA0, 0xCC, 0x35, 0x03, 0x64, 0xA2, 0x06, 0x01, 0x57, 0x60, 0x44, 0x21, 0x7F,
|
||||
0x47, 0x59, 0xE4, 0xE1, 0x05, 0x2C, 0x4C, 0x31, 0x06, 0x24, 0x7E, 0x34, 0x0B, 0x06, 0x18, 0x98,
|
||||
0x3A, 0xE1, 0x84, 0x16, 0x69, 0xC8, 0x01, 0x86, 0x16, 0x5A, 0x3C, 0x31, 0x46, 0x14, 0x49, 0x6C,
|
||||
0x8A, 0x02, 0x0B, 0x1B, 0x5C, 0xD0, 0x40, 0x01, 0x0A, 0x5C, 0x81, 0x66, 0x8B, 0x46, 0xA5, 0x8A,
|
||||
0x51, 0x3F, 0x0B, 0x78, 0x70, 0x86, 0x18, 0x4B, 0xF8, 0x60, 0x01, 0x0E, 0xF1, 0xA4, 0xF0, 0xC0,
|
||||
0x0C, 0x23, 0xD2, 0x23, 0x08, 0x0C, 0x8D, 0x50, 0xF2, 0xEB, 0x31, 0x0E, 0x71, 0xE4, 0xE6, 0x3F,
|
||||
0xFB, 0xEC, 0x7B, 0xC1, 0x0C, 0x81, 0x00, 0x32, 0x87, 0x1F, 0x75, 0x18, 0xC2, 0x46, 0x18, 0x74,
|
||||
0xA4, 0x21, 0xED, 0xB4, 0x60, 0xB0, 0x41, 0x07, 0x1B, 0x5A, 0x28, 0x31, 0x6D, 0x1A, 0x69, 0x60,
|
||||
0x1A, 0x05, 0x0D, 0x34, 0xB0, 0xC0, 0xC2, 0x0B, 0x0D, 0x10, 0x40, 0xC0, 0x02, 0xC7, 0x5C, 0x84,
|
||||
0xEA, 0xC0, 0xC8, 0xAD, 0xE5, 0x4E, 0xA0, 0x7A, 0x28, 0xE0, 0xC1, 0x0B, 0x2F, 0x28, 0x60, 0x41,
|
||||
0x01, 0x25, 0x6C, 0x70, 0x40, 0x38, 0xF4, 0x58, 0x27, 0x8B, 0x2C, 0xAC, 0x98, 0x60, 0x80, 0x6A,
|
||||
0x4B, 0xFE, 0xD3, 0x8A, 0x02, 0x33, 0xAC, 0x11, 0x0B, 0x20, 0xD8, 0xA6, 0xC1, 0xC6, 0xD3, 0x61,
|
||||
0x58, 0x11, 0x46, 0xB5, 0x5A, 0x80, 0x51, 0x6D, 0x1A, 0x56, 0x6F, 0xB1, 0x85, 0x12, 0x4A, 0x68,
|
||||
0xCD, 0xF1, 0xB3, 0x49, 0x24, 0xD1, 0xC3, 0x0C, 0x22, 0xA4, 0x00, 0x81, 0x01, 0x03, 0x0C, 0x31,
|
||||
0xCD, 0x64, 0xFD, 0xE5, 0xD7, 0xA4, 0x45, 0x91, 0x69, 0xD8, 0xC1, 0x05, 0x37, 0xB8, 0x10, 0x02,
|
||||
0x97, 0x27, 0x48, 0xE0, 0x41, 0xFE, 0x13, 0x09, 0x48, 0x61, 0x46, 0x24, 0x66, 0x88, 0xD0, 0x41,
|
||||
0x4E, 0xFD, 0x60, 0xD3, 0x01, 0x04, 0xB5, 0x70, 0xC2, 0x48, 0x18, 0x61, 0xB0, 0x41, 0x06, 0x19,
|
||||
0x6F, 0x00, 0x42, 0x86, 0xB5, 0x69, 0xBC, 0x51, 0xB5, 0x16, 0xDC, 0x86, 0x5D, 0xC3, 0xE6, 0x9C,
|
||||
0xFF, 0xE0, 0x84, 0xD5, 0xD8, 0x42, 0x2B, 0xC5, 0x12, 0x3B, 0x78, 0xF0, 0x41, 0x0B, 0x01, 0x0C,
|
||||
0xF0, 0x8B, 0x71, 0x85, 0xF1, 0x34, 0x55, 0x53, 0x49, 0x11, 0x4C, 0x8F, 0x1E, 0x2D, 0x74, 0x40,
|
||||
0x88, 0x86, 0xF8, 0x3C, 0xC0, 0xC2, 0x12, 0x97, 0x76, 0x21, 0xB6, 0x06, 0x1A, 0xD0, 0x30, 0x45,
|
||||
0x14, 0x79, 0x48, 0x11, 0xC2, 0x03, 0x2B, 0x22, 0x25, 0x10, 0xAA, 0xFB, 0xD8, 0x72, 0xC0, 0x12,
|
||||
0xC6, 0x30, 0xCB, 0xC6, 0xB5, 0x56, 0x58, 0x41, 0x86, 0x1F, 0x6F, 0xC8, 0x81, 0x75, 0xD6, 0x3F,
|
||||
0x2C, 0x21, 0x03, 0xF0, 0x21, 0xD0, 0x90, 0x04, 0xD7, 0x35, 0xA0, 0x60, 0x7E, 0x12, 0x72, 0x68,
|
||||
0x9F, 0x7E, 0x1A, 0x51, 0xF4, 0xC0, 0x42, 0x08, 0x1B, 0xA4, 0xD0, 0xC0, 0x00, 0xB3, 0xD8, 0xC7,
|
||||
0x5A, 0x6B, 0x1F, 0xF5, 0x43, 0x4F, 0x10, 0x0F, 0xC0, 0x5F, 0x40, 0x01, 0xA0, 0xF0, 0xC4, 0x03,
|
||||
0x7A, 0x10, 0x05, 0x6C, 0x59, 0xE1, 0x59, 0x9B, 0xE2, 0xC1, 0x0C, 0x78, 0xA0, 0xC0, 0x0B, 0xB4,
|
||||
0x80, 0x2C, 0x18, 0x39, 0x4B, 0xE1, 0x3E, 0xF0, 0x82, 0x3C, 0x70, 0x42, 0x11, 0x86, 0xA0, 0x43,
|
||||
0x18, 0xA8, 0x95, 0x86, 0xC7, 0x91, 0xE1, 0x59, 0x63, 0x18, 0x83, 0xEF, 0x6A, 0x40, 0x03, 0x0D,
|
||||
0x68, 0x69, 0x06, 0x3D, 0xE0, 0xDD, 0xB3, 0xB6, 0x10, 0x05, 0x26, 0xD0, 0xA0, 0x06, 0x5A, 0x20,
|
||||
0x03, 0xE3, 0xB4, 0x20, 0x2D, 0x6E, 0xF5, 0x00, 0x04, 0x33, 0x08, 0x17, 0xA1, 0xA2, 0x12, 0x92,
|
||||
0x7B, 0x0C, 0x8C, 0x39, 0xFE, 0x24, 0x89, 0x8F, 0x11, 0x24, 0xD0, 0x83, 0x1A, 0x20, 0x61, 0x06,
|
||||
0x12, 0x38, 0x40, 0xFF, 0x92, 0xC0, 0x31, 0x3A, 0xD0, 0x81, 0x0C, 0x5A, 0x58, 0xC2, 0x0C, 0x52,
|
||||
0xF0, 0x01, 0x0B, 0x10, 0x60, 0x00, 0x45, 0x10, 0x87, 0x45, 0xEA, 0x11, 0x93, 0x26, 0xE1, 0xA3,
|
||||
0x05, 0x0A, 0x08, 0x41, 0x2C, 0x3A, 0xE1, 0x07, 0x46, 0x3C, 0xAC, 0x0C, 0x73, 0x80, 0xDA, 0x01,
|
||||
0xD3, 0x30, 0x06, 0x26, 0xF0, 0xC0, 0x6E, 0x28, 0x48, 0x02, 0x12, 0x96, 0x40, 0xC7, 0x24, 0x44,
|
||||
0x01, 0x0C, 0x8F, 0x4B, 0xC3, 0x16, 0x7C, 0xE7, 0x39, 0x32, 0x3C, 0xED, 0x83, 0xD8, 0xE2, 0x16,
|
||||
0xC8, 0x58, 0x70, 0x03, 0x18, 0x10, 0x60, 0x02, 0xEB, 0x18, 0x08, 0x7E, 0x06, 0x03, 0xC4, 0xA4,
|
||||
0xEC, 0xC3, 0x1E, 0x1E, 0x98, 0x41, 0x17, 0xAE, 0x25, 0x36, 0x20, 0xB0, 0xA0, 0x07, 0x5D, 0x90,
|
||||
0x83, 0xC5, 0xDA, 0x40, 0x06, 0x25, 0x2C, 0x41, 0x04, 0x05, 0x58, 0x80, 0x0A, 0x7E, 0x21, 0x8E,
|
||||
0x74, 0x09, 0x6B, 0x1F, 0xE8, 0xA8, 0xC2, 0x05, 0xCC, 0x70, 0x41, 0x3C, 0x64, 0xD0, 0x8F, 0x69,
|
||||
0x0C, 0xC3, 0xB3, 0xA8, 0x56, 0x03, 0xF8, 0x89, 0x80, 0x07, 0x49, 0xD0, 0xDA, 0x1E, 0xB7, 0x70,
|
||||
0x35, 0x0E, 0x66, 0x6C, 0x0B, 0x4E, 0xB0, 0xC2, 0x1B, 0xDA, 0xD0, 0x06, 0xEC, 0x5D, 0x2B, 0x0A,
|
||||
0x51, 0xF8, 0x41, 0x0D, 0xC4, 0x30, 0x83, 0x17, 0x98, 0x20, 0x94, 0xA5, 0x64, 0x5D, 0xC0, 0xD4,
|
||||
0x03, 0x92, 0x79, 0x10, 0x2C, 0x1A, 0x0D, 0x90, 0x82, 0x1C, 0xEC, 0xD0, 0x06, 0x40, 0x44, 0x01,
|
||||
0x05, 0x52, 0xC8, 0x24, 0x23, 0xCC, 0x38, 0xB5, 0x28, 0x00, 0xE1, 0x02, 0x46, 0x18, 0x07, 0x79,
|
||||
0x5C, 0x72, 0x9F, 0x84, 0xF0, 0xA3, 0x1F, 0xA8, 0xB8, 0xC0, 0x12, 0xE4, 0xC0, 0x88, 0x39, 0xD0,
|
||||
0xC1, 0x0F, 0xC4, 0xFE, 0x2C, 0x44, 0x18, 0x3C, 0xA8, 0x47, 0x24, 0xD4, 0x00, 0x04, 0xE2, 0x0B,
|
||||
0xDB, 0xE7, 0xC8, 0x60, 0x05, 0x2D, 0x58, 0xEF, 0x0D, 0x6F, 0x48, 0x03, 0x07, 0xA5, 0x55, 0xBD,
|
||||
0x30, 0x10, 0x73, 0x83, 0xD9, 0x7A, 0xC2, 0x13, 0xC0, 0x30, 0xAD, 0x1F, 0xAC, 0x61, 0x09, 0x21,
|
||||
0xF0, 0x80, 0x02, 0x46, 0x90, 0x3C, 0xD6, 0xE1, 0x8F, 0x6D, 0xEF, 0x69, 0xC0, 0x19, 0x00, 0xC1,
|
||||
0x88, 0x4B, 0x90, 0x22, 0x0F, 0x7D, 0x98, 0x41, 0x08, 0xCC, 0x20, 0x07, 0x4E, 0xD0, 0x81, 0x86,
|
||||
0x4B, 0x78, 0x41, 0x02, 0xC8, 0x43, 0x9B, 0x96, 0x78, 0x64, 0x1F, 0x59, 0x28, 0x80, 0x19, 0x00,
|
||||
0xF1, 0x30, 0x30, 0xDC, 0xB3, 0x0D, 0x86, 0x68, 0xC3, 0x1A, 0xBB, 0xF0, 0x03, 0xF3, 0xA1, 0xE0,
|
||||
0x52, 0x55, 0xAB, 0x5C, 0xC6, 0x18, 0xC7, 0xD4, 0xA7, 0x5D, 0xEC, 0x61, 0x8C, 0x6B, 0x43, 0xC3,
|
||||
0xDA, 0xB0, 0x41, 0x27, 0x84, 0xED, 0x09, 0xE9, 0xA3, 0x43, 0x41, 0x93, 0x10, 0xB2, 0x0B, 0x40,
|
||||
0x60, 0x00, 0x2B, 0x8A, 0xCC, 0x5A, 0x80, 0x58, 0x90, 0x7E, 0xAC, 0xA3, 0x03, 0x2F, 0x60, 0x05,
|
||||
0x29, 0x9E, 0x10, 0x0A, 0x11, 0x10, 0xA0, 0x00, 0x30, 0xB8, 0x00, 0x08, 0x18, 0x41, 0xD1, 0x24,
|
||||
0x00, 0x61, 0x03, 0x1D, 0xA0, 0x29, 0x7F, 0xE8, 0xD3, 0x0F, 0x2F, 0x5C, 0x80, 0x0F, 0xE4, 0x7C,
|
||||
0x9C, 0x26, 0xFD, 0x60, 0x07, 0x3B, 0xF8, 0xA1, 0x0B, 0x3D, 0x08, 0x81, 0x06, 0x60, 0x38, 0x4E,
|
||||
0x0D, 0xCA, 0x12, 0x0C, 0x5B, 0xC0, 0x16, 0xC4, 0xEC, 0x50, 0x87, 0x3A, 0x38, 0xE2, 0xB2, 0x8E,
|
||||
0x30, 0x84, 0x21, 0x1A, 0x76, 0xD9, 0xCA, 0xDA, 0x21, 0x0C, 0x13, 0x4B, 0x03, 0xE3, 0x5E, 0xDA,
|
||||
0xAD, 0x26, 0x88, 0x20, 0x08, 0x0B, 0x18, 0x00, 0x3E, 0x54, 0x36, 0x15, 0xA7, 0xF4, 0x63, 0x1C,
|
||||
0x05, 0x70, 0xFE, 0x17, 0x14, 0xC8, 0x04, 0x1F, 0x7C, 0x0C, 0x43, 0x02, 0x90, 0x78, 0x02, 0x57,
|
||||
0x6B, 0x96, 0xD7, 0x8C, 0x58, 0xE8, 0x1F, 0x59, 0xB8, 0x40, 0x24, 0x3A, 0x51, 0x59, 0xC6, 0x59,
|
||||
0xCF, 0x89, 0xF7, 0x5C, 0x43, 0x0F, 0x36, 0xA0, 0x01, 0x26, 0xA4, 0x01, 0x9F, 0x75, 0x68, 0x83,
|
||||
0xC5, 0xA6, 0x57, 0x35, 0xE4, 0xFA, 0xC1, 0x10, 0x96, 0x10, 0x85, 0x76, 0x45, 0x61, 0x89, 0xEE,
|
||||
0x5A, 0x62, 0x14, 0xDD, 0x7D, 0x84, 0x24, 0xA8, 0xCA, 0x54, 0x3F, 0xB0, 0xC1, 0x09, 0xEC, 0x93,
|
||||
0x01, 0x0F, 0x9A, 0x40, 0x04, 0x0B, 0x28, 0xA0, 0x48, 0xE8, 0x42, 0xC9, 0x4C, 0x0C, 0x52, 0xB0,
|
||||
0x50, 0x6A, 0x23, 0x79, 0xC7, 0x30, 0x00, 0x14, 0x10, 0xDB, 0xCC, 0x71, 0x11, 0x22, 0xAC, 0x70,
|
||||
0xD3, 0x10, 0x33, 0x16, 0x30, 0x83, 0xE1, 0x4A, 0x42, 0x12, 0x41, 0x15, 0xEA, 0xC5, 0x38, 0xD6,
|
||||
0x05, 0x20, 0x48, 0x00, 0x05, 0x6B, 0x90, 0xC3, 0x1B, 0x20, 0xC6, 0x86, 0xCA, 0xD6, 0xC1, 0x89,
|
||||
0x5A, 0x58, 0x58, 0x19, 0x4B, 0x7A, 0x89, 0x51, 0x6C, 0xD7, 0xBB, 0x1F, 0x1E, 0xC5, 0x23, 0x1E,
|
||||
0xB1, 0x59, 0x0B, 0x6B, 0x10, 0x73, 0x53, 0x90, 0x82, 0x1A, 0x5E, 0x70, 0x03, 0x0F, 0x14, 0x20,
|
||||
0x03, 0x34, 0x45, 0xCA, 0x43, 0x36, 0xF2, 0x19, 0xF4, 0x10, 0x0C, 0x1F, 0x38, 0xDE, 0x07, 0x33,
|
||||
0x06, 0x60, 0x80, 0x20, 0x84, 0x93, 0x74, 0x1F, 0x30, 0x40, 0x0C, 0xC2, 0xF1, 0x1E, 0x66, 0x08,
|
||||
0x42, 0x05, 0x06, 0x48, 0xB2, 0x02, 0x24, 0xD0, 0x05, 0x4E, 0x48, 0xA2, 0x61, 0x78, 0xA0, 0xAC,
|
||||
0xC3, 0x36, 0xF8, 0x4D, 0x09, 0x2C, 0x61, 0x0D, 0x6F, 0x90, 0xA1, 0x1F, 0xE9, 0x50, 0x08, 0xA7,
|
||||
0xA6, 0x61, 0x0E, 0x72, 0x80, 0x04, 0x20, 0xD6, 0xC0, 0x84, 0x3B, 0xF2, 0xB4, 0x10, 0x8A, 0x83,
|
||||
0x44, 0xFE, 0x27, 0xB0, 0xFB, 0xDD, 0x4B, 0x74, 0x17, 0xBC, 0x8E, 0x20, 0x71, 0x06, 0x15, 0x6A,
|
||||
0x43, 0x28, 0x8C, 0xCC, 0xC5, 0xAA, 0xB8, 0xC8, 0xA1, 0x92, 0xB4, 0x91, 0x79, 0x04, 0x11, 0x1D,
|
||||
0xB3, 0x2B, 0x00, 0x10, 0xFA, 0x10, 0x0A, 0x39, 0x68, 0x01, 0x5C, 0x1F, 0xF8, 0x9F, 0x02, 0x08,
|
||||
0xA0, 0x80, 0x07, 0x3C, 0xE0, 0x02, 0x55, 0xAC, 0x42, 0x08, 0xBA, 0x50, 0x61, 0xCD, 0x4A, 0xB7,
|
||||
0x59, 0x8A, 0xC0, 0xC3, 0xD4, 0xDE, 0x57, 0x03, 0x46, 0xF8, 0x61, 0x9F, 0x08, 0x8D, 0x61, 0xE8,
|
||||
0xB4, 0xE6, 0xCD, 0xEC, 0x0C, 0x40, 0x37, 0x10, 0x50, 0x80, 0x98, 0xFE, 0x77, 0x01, 0x11, 0xEC,
|
||||
0xB4, 0x9E, 0xD7, 0x75, 0x84, 0x28, 0x2A, 0x41, 0x6B, 0x47, 0x0C, 0xA2, 0x10, 0x6F, 0xB8, 0x96,
|
||||
0x16, 0xB6, 0xC0, 0xD5, 0xFE, 0x16, 0x20, 0xC6, 0x44, 0xE9, 0xA1, 0x41, 0xEC, 0x11, 0x0D, 0x02,
|
||||
0x2C, 0x81, 0x13, 0x12, 0x66, 0x83, 0x12, 0x6A, 0xD0, 0x83, 0x1D, 0x38, 0x5B, 0x04, 0x33, 0x88,
|
||||
0xF6, 0x09, 0x44, 0x40, 0xED, 0x10, 0x44, 0x21, 0x0C, 0x9A, 0xAD, 0x03, 0x1B, 0x84, 0xD9, 0xAC,
|
||||
0xA7, 0xC9, 0x21, 0x09, 0x12, 0xA0, 0x81, 0x1F, 0x24, 0x81, 0xB1, 0xAA, 0x69, 0x0F, 0x5A, 0x4A,
|
||||
0x08, 0x1B, 0x12, 0x68, 0xF0, 0x80, 0x0F, 0x94, 0x0A, 0x26, 0x06, 0xB9, 0x46, 0x31, 0x7E, 0x81,
|
||||
0x03, 0x02, 0x3C, 0x40, 0x0A, 0xA1, 0x70, 0x1A, 0x1B, 0x1C, 0x51, 0x09, 0xED, 0x56, 0xC2, 0x12,
|
||||
0xAF, 0xAC, 0x1E, 0xB6, 0x40, 0xF6, 0x82, 0x14, 0x14, 0x20, 0xCF, 0xE9, 0xF9, 0x08, 0x53, 0xAC,
|
||||
0xA9, 0xA6, 0x7F, 0xA0, 0x23, 0x08, 0x2C, 0x80, 0x84, 0x24, 0x46, 0xFC, 0x08, 0xA1, 0x42, 0x0B,
|
||||
0x53, 0x6B, 0x68, 0xDF, 0x68, 0x36, 0xD5, 0x83, 0x24, 0x58, 0xC1, 0x10, 0x92, 0xF8, 0xB4, 0xF5,
|
||||
0xFE, 0xA6, 0x4B, 0x06, 0x27, 0x44, 0x41, 0x03, 0x3F, 0xE8, 0x02, 0x24, 0x9C, 0x50, 0x83, 0xB0,
|
||||
0x21, 0xD3, 0x77, 0x9A, 0x03, 0x41, 0x13, 0x1A, 0xC0, 0x51, 0x08, 0x9D, 0xE7, 0x29, 0xF8, 0xB0,
|
||||
0xC5, 0x05, 0x4E, 0x00, 0xE1, 0x37, 0x60, 0xF7, 0xC3, 0x0E, 0x9B, 0x18, 0x0D, 0x9D, 0xE0, 0xBE,
|
||||
0x0B, 0x28, 0xC0, 0x00, 0xF1, 0x65, 0x8F, 0x46, 0xEE, 0xE1, 0xE7, 0x8C, 0xDC, 0x63, 0x1F, 0x41,
|
||||
0x98, 0x01, 0x27, 0x0C, 0x31, 0x88, 0xE8, 0xB6, 0xC1, 0x72, 0x5A, 0x48, 0x9F, 0xC6, 0xEC, 0x68,
|
||||
0xC7, 0x2E, 0x38, 0x21, 0x0C, 0x8F, 0x00, 0xB8, 0xE3, 0xDE, 0xF0, 0xE9, 0x87, 0x75, 0x0C, 0x04,
|
||||
0x28, 0x00, 0x04, 0x20, 0xBA, 0x80, 0xF6, 0x1A, 0xFC, 0x20, 0x99, 0xA3, 0xE1, 0x94, 0xFB, 0x52,
|
||||
0xB0, 0x80, 0x68, 0x22, 0x24, 0x2C, 0x34, 0x69, 0xBA, 0x3E, 0x1E, 0x39, 0x0C, 0x22, 0x48, 0x40,
|
||||
0x0C, 0x80, 0x50, 0x44, 0x77, 0xB9, 0xEB, 0x88, 0x3A, 0x58, 0x41, 0x63, 0x55, 0xB3, 0x6A, 0x08,
|
||||
0x44, 0x00, 0x83, 0x01, 0xE4, 0xD9, 0x27, 0x1C, 0x81, 0x07, 0x5B, 0x6A, 0x4C, 0x10, 0x71, 0xF8,
|
||||
0x26, 0x16, 0x5A, 0x35, 0x45, 0x2C, 0x94, 0x00, 0xBA, 0xC6, 0xED, 0x93, 0x5A, 0x60, 0xB0, 0x02,
|
||||
0x1B, 0xA4, 0x3A, 0x08, 0xF1, 0x4A, 0xF7, 0x69, 0x68, 0xD4, 0x2D, 0x0A, 0xE8, 0xF9, 0x06, 0x1C,
|
||||
0x2E, 0x21, 0x09, 0x9C, 0x1B, 0x0D, 0x0D, 0x50, 0x70, 0x02, 0xA3, 0x1B, 0x00, 0x1F, 0x92, 0xF7,
|
||||
0xCB, 0x5E, 0x70, 0x1E, 0x83, 0x04, 0xCC, 0x60, 0x12, 0x8C, 0xD0, 0x44, 0x76, 0xB9, 0x5B, 0x07,
|
||||
0xD0, 0x2A, 0x01, 0x8A, 0x95, 0xF4, 0x40, 0x0C, 0x0C, 0x70, 0x8D, 0x86, 0x4B, 0x26, 0x23, 0x91,
|
||||
0x01, 0x4C, 0x3E, 0x0A, 0x83, 0x03, 0x35, 0x4C, 0x62, 0x0C, 0x5A, 0x60, 0x43, 0x2C, 0xC0, 0xFE,
|
||||
0x90, 0x04, 0x30, 0xCC, 0x81, 0xC2, 0x0A, 0x8D, 0x61, 0x85, 0x07, 0xE1, 0x08, 0x4B, 0x3C, 0xA2,
|
||||
0x61, 0xDA, 0x6E, 0xDC, 0x1C, 0x9E, 0x00, 0x82, 0x30, 0x7F, 0x9B, 0x05, 0x50, 0x00, 0xD9, 0xE6,
|
||||
0x40, 0x66, 0xBE, 0xDA, 0x8F, 0xCB, 0x00, 0xE4, 0x91, 0x90, 0xD3, 0x3D, 0x22, 0x41, 0x69, 0x18,
|
||||
0x40, 0x04, 0xA1, 0x50, 0x06, 0x92, 0xD0, 0x5D, 0x99, 0x85, 0x31, 0xC1, 0x44, 0x06, 0x95, 0x44,
|
||||
0x04, 0xA8, 0x45, 0x08, 0xA6, 0xD4, 0x32, 0x04, 0x73, 0x01, 0x8D, 0x30, 0x09, 0x65, 0x30, 0x7A,
|
||||
0x52, 0x63, 0x31, 0xC5, 0xE7, 0x04, 0x4C, 0x30, 0x3C, 0xCF, 0xC5, 0x66, 0x96, 0x30, 0x08, 0x9B,
|
||||
0xA5, 0x69, 0xA0, 0x17, 0x47, 0x90, 0x20, 0x07, 0xEF, 0x23, 0x7B, 0x32, 0x60, 0x3E, 0x20, 0x03,
|
||||
0x02, 0xB5, 0x37, 0x2A, 0x06, 0x00, 0x00, 0xCA, 0xE3, 0x5B, 0x1E, 0x71, 0x77, 0x47, 0xE1, 0x5A,
|
||||
0x10, 0xF0, 0x00, 0x81, 0x20, 0x07, 0x20, 0x67, 0x08, 0xDD, 0x66, 0x05, 0xD3, 0x62, 0x55, 0xB8,
|
||||
0xF2, 0x02, 0x8D, 0x77, 0x0C, 0x88, 0x61, 0x10, 0xF1, 0x35, 0x56, 0x24, 0xA1, 0x0D, 0x04, 0x40,
|
||||
0x09, 0x91, 0x00, 0x72, 0x7E, 0x40, 0x07, 0xAE, 0x64, 0x08, 0xA0, 0x35, 0x09, 0x79, 0xD0, 0x05,
|
||||
0x65, 0x50, 0x07, 0xA6, 0x60, 0x09, 0x99, 0x55, 0x08, 0x94, 0x55, 0x07, 0x73, 0x20, 0x24, 0x37,
|
||||
0x14, 0x09, 0x63, 0x90, 0x04, 0x1A, 0x00, 0x6D, 0x3D, 0xF0, 0x2D, 0x21, 0x10, 0x02, 0xDF, 0x32,
|
||||
0x03, 0x1E, 0xD0, 0x00, 0x14, 0x90, 0x01, 0x08, 0x00, 0x00, 0xDC, 0xC0, 0x1C, 0x5C, 0xE4, 0x0F,
|
||||
0x0C, 0xC7, 0x43, 0x4C, 0x91, 0x0F, 0xEC, 0x22, 0x01, 0x11, 0x86, 0x7A, 0x8E, 0x35, 0x43, 0x4E,
|
||||
0xB0, 0x6E, 0x33, 0x60, 0x02, 0x10, 0x30, 0x04, 0xFA, 0xC0, 0x45, 0x02, 0x81, 0x2E, 0xFE, 0x37,
|
||||
0x77, 0x53, 0x7A, 0xE0, 0x01, 0xC7, 0x76, 0x09, 0x9E, 0x56, 0x62, 0xC5, 0x87, 0x2D, 0xD9, 0x67,
|
||||
0x08, 0xE5, 0xA7, 0x6D, 0x17, 0xD3, 0x06, 0x76, 0x00, 0x08, 0x66, 0xE0, 0x02, 0x16, 0x80, 0x05,
|
||||
0xB2, 0xB0, 0x04, 0x1A, 0xF0, 0x00, 0x5E, 0x22, 0x32, 0xF0, 0x23, 0x01, 0x8F, 0x52, 0x00, 0x16,
|
||||
0x00, 0x01, 0x23, 0x30, 0x02, 0x13, 0x00, 0x00, 0x8B, 0x80, 0x10, 0xF5, 0x90, 0x14, 0x31, 0x51,
|
||||
0x15, 0x5C, 0xD1, 0x3A, 0x65, 0x85, 0x0E, 0x0A, 0x20, 0x02, 0x4C, 0xA0, 0x05, 0x65, 0x40, 0x43,
|
||||
0x6C, 0xC0, 0x30, 0xDA, 0xC6, 0x83, 0x49, 0xC0, 0x03, 0x22, 0x80, 0x3A, 0xCF, 0xE0, 0x67, 0xE7,
|
||||
0x31, 0x18, 0xC7, 0xF1, 0x48, 0x7A, 0x70, 0x03, 0x93, 0xA0, 0x76, 0x73, 0xC0, 0x08, 0x4F, 0xC5,
|
||||
0x38, 0x0F, 0xD3, 0x06, 0x97, 0x50, 0x75, 0x52, 0x93, 0x65, 0x10, 0x23, 0x07, 0x52, 0xF0, 0x01,
|
||||
0x1F, 0xA0, 0x0B, 0x66, 0xF0, 0x02, 0x90, 0x02, 0x3F, 0x1B, 0x40, 0x6D, 0xA0, 0x92, 0x6A, 0x38,
|
||||
0x40, 0x01, 0x06, 0xB0, 0x00, 0x06, 0x80, 0x00, 0x0E, 0x70, 0x04, 0x33, 0x58, 0x53, 0x32, 0x11,
|
||||
0x1F, 0x7B, 0xE7, 0x22, 0x24, 0xD1, 0x13, 0xFB, 0x10, 0x0D, 0x10, 0xE0, 0x6A, 0x86, 0xF6, 0x75,
|
||||
0x76, 0x30, 0x71, 0x19, 0xB4, 0x41, 0x4C, 0xC0, 0x02, 0x06, 0x37, 0x04, 0xFC, 0x40, 0x87, 0x40,
|
||||
0x24, 0x2C, 0xFB, 0x17, 0x44, 0xF1, 0xF4, 0x77, 0x94, 0x90, 0x39, 0xD7, 0xE2, 0x54, 0xCD, 0xA2,
|
||||
0x55, 0xD3, 0x32, 0x07, 0x0A, 0x05, 0x06, 0x1F, 0xF3, 0x00, 0x50, 0x30, 0x09, 0x53, 0x00, 0x01,
|
||||
0x16, 0x60, 0x8E, 0x17, 0xB0, 0x01, 0x1B, 0x20, 0x01, 0x0D, 0x30, 0x01, 0x13, 0xB0, 0x00, 0xEA,
|
||||
0xB8, 0x00, 0x05, 0x60, 0x00, 0x2B, 0x00, 0x00, 0xC7, 0x40, 0x1E, 0x3D, 0x71, 0xFE, 0x0C, 0x10,
|
||||
0x40, 0x00, 0x82, 0x60, 0x2A, 0xF3, 0x61, 0x4A, 0xFD, 0xC0, 0x0C, 0x06, 0xE0, 0x02, 0x53, 0x30,
|
||||
0x61, 0x6C, 0x30, 0x80, 0x95, 0x90, 0x59, 0xDA, 0xB6, 0x5B, 0x1F, 0x10, 0x00, 0x2A, 0x41, 0x56,
|
||||
0x1B, 0xA1, 0x14, 0x2B, 0xB1, 0x0F, 0xE1, 0xC0, 0x3F, 0x8E, 0x76, 0x02, 0x33, 0x20, 0x3E, 0xA2,
|
||||
0x67, 0x31, 0x7E, 0xA0, 0x05, 0x9E, 0xE3, 0x7D, 0x10, 0x95, 0x58, 0x21, 0x10, 0x08, 0x6B, 0x30,
|
||||
0x03, 0x16, 0x00, 0x03, 0x76, 0x33, 0x92, 0x22, 0x69, 0x7B, 0x13, 0x40, 0x01, 0xEC, 0x48, 0x00,
|
||||
0x06, 0x50, 0x00, 0x13, 0x30, 0x00, 0x2A, 0x10, 0x63, 0xFB, 0x50, 0x04, 0x05, 0x50, 0x05, 0x55,
|
||||
0x00, 0x01, 0x31, 0x40, 0x1E, 0x9F, 0x11, 0x11, 0xFC, 0xC1, 0x45, 0xF7, 0xD0, 0x0F, 0xB4, 0x60,
|
||||
0x00, 0x3C, 0xE0, 0x04, 0x66, 0xE4, 0x66, 0xFF, 0x96, 0x59, 0x74, 0x40, 0x74, 0x2C, 0xE0, 0x01,
|
||||
0x03, 0x40, 0x0C, 0x47, 0xD1, 0x74, 0x6C, 0xB3, 0x74, 0x0B, 0x97, 0x19, 0xFD, 0x80, 0x0F, 0xA8,
|
||||
0x10, 0x03, 0x1D, 0x50, 0x00, 0x44, 0x40, 0x03, 0xD9, 0x67, 0x4C, 0x49, 0xF0, 0x03, 0x60, 0x10,
|
||||
0x06, 0x94, 0x35, 0x3D, 0x3C, 0xB0, 0x01, 0x81, 0x10, 0x0A, 0x50, 0xB0, 0x01, 0x2F, 0x70, 0x4B,
|
||||
0xA5, 0x68, 0x8A, 0x0F, 0x30, 0x2E, 0x2B, 0x99, 0x96, 0x1F, 0x00, 0x03, 0x47, 0x87, 0x96, 0x06,
|
||||
0x30, 0x04, 0xAD, 0x50, 0x0C, 0x01, 0x70, 0x01, 0x4D, 0xD0, 0x04, 0x6A, 0x20, 0x04, 0x5E, 0x80,
|
||||
0x00, 0xBE, 0x95, 0x1A, 0x04, 0xD1, 0x0F, 0x38, 0xE0, 0x01, 0x03, 0x52, 0x08, 0x40, 0x89, 0x85,
|
||||
0x41, 0xE7, 0x3E, 0x2E, 0x56, 0x01, 0x72, 0xB1, 0x1A, 0x3B, 0xE1, 0x10, 0x8B, 0x54, 0x56, 0xF1,
|
||||
0xB1, 0x0F, 0x57, 0xA0, 0x00, 0x40, 0x40, 0x69, 0x4D, 0xF8, 0x6D, 0xD9, 0xFE, 0x47, 0x07, 0x52,
|
||||
0x46, 0x07, 0xCB, 0x25, 0x0B, 0x9B, 0xD8, 0x00, 0x28, 0x84, 0x86, 0x1A, 0x20, 0x01, 0xAB, 0xD9,
|
||||
0x00, 0x0D, 0x90, 0x00, 0x63, 0xD2, 0x02, 0x41, 0xD0, 0x01, 0x1D, 0x10, 0x03, 0x89, 0x86, 0x9E,
|
||||
0xFF, 0x63, 0x00, 0x01, 0x40, 0x04, 0xA0, 0xA4, 0x00, 0x0A, 0x80, 0x0A, 0x15, 0xD0, 0x0A, 0xAF,
|
||||
0xD1, 0x14, 0xEB, 0x10, 0x04, 0x1B, 0x10, 0x05, 0x6C, 0x70, 0x85, 0x58, 0x48, 0x62, 0x61, 0xB0,
|
||||
0x6C, 0x23, 0x73, 0x74, 0xEB, 0x10, 0x5F, 0x90, 0x07, 0x79, 0x42, 0xF1, 0x13, 0x46, 0x82, 0x0F,
|
||||
0x05, 0xD0, 0x04, 0x60, 0x60, 0x07, 0x96, 0xE6, 0x79, 0xDC, 0x09, 0x54, 0x7E, 0x00, 0x32, 0x9C,
|
||||
0x30, 0x06, 0x16, 0xF0, 0x01, 0x3B, 0x30, 0x7B, 0x1A, 0x00, 0x2A, 0x0A, 0x10, 0x4A, 0x10, 0xA0,
|
||||
0x44, 0x5C, 0xD0, 0x78, 0xA9, 0xB3, 0x00, 0x29, 0x20, 0x01, 0x5E, 0x22, 0x02, 0x25, 0xE0, 0x01,
|
||||
0x10, 0x10, 0x00, 0x4F, 0x11, 0x1F, 0xB9, 0x41, 0x00, 0x1D, 0x65, 0x1E, 0x21, 0xF1, 0x5A, 0x05,
|
||||
0xC0, 0x03, 0x72, 0x70, 0x60, 0xE5, 0x37, 0x65, 0x2C, 0xA7, 0x01, 0x2F, 0x10, 0x64, 0xCC, 0x10,
|
||||
0x56, 0x56, 0x01, 0x12, 0x1F, 0x45, 0x5F, 0x05, 0x00, 0x05, 0x69, 0x60, 0x59, 0x8F, 0x50, 0x75,
|
||||
0x96, 0x08, 0x5D, 0x74, 0x70, 0x54, 0x7E, 0xF0, 0x04, 0x10, 0x40, 0x41, 0x2C, 0x50, 0x9E, 0x09,
|
||||
0x90, 0x00, 0x05, 0x80, 0x64, 0x0B, 0x90, 0x00, 0x5C, 0x90, 0x02, 0x38, 0xFA, 0x14, 0x06, 0x90,
|
||||
0x02, 0x28, 0x24, 0x36, 0x28, 0xA0, 0x01, 0x29, 0x00, 0x00, 0xFE, 0x20, 0x00, 0x11, 0xF0, 0x0F,
|
||||
0x01, 0xB0, 0x00, 0x1D, 0x50, 0x73, 0x34, 0x21, 0x63, 0x99, 0x81, 0x0F, 0x46, 0x70, 0x01, 0x6B,
|
||||
0xE0, 0x07, 0xAF, 0xA0, 0x09, 0x4F, 0x16, 0x4C, 0x2C, 0x17, 0x02, 0xFE, 0x61, 0x52, 0x00, 0x57,
|
||||
0xF0, 0x1E, 0x0C, 0x8A, 0x11, 0xB1, 0xF1, 0x7C, 0x4F, 0x31, 0x0E, 0x09, 0x20, 0x06, 0x74, 0x40,
|
||||
0x89, 0x83, 0x69, 0x08, 0x78, 0x30, 0x5D, 0xB2, 0xA4, 0x01, 0x6B, 0xA0, 0x05, 0xE0, 0xE6, 0x01,
|
||||
0x22, 0x00, 0x2A, 0x5E, 0x9A, 0x3A, 0x03, 0x00, 0x00, 0x00, 0x90, 0x9B, 0x01, 0xE0, 0x0E, 0xA2,
|
||||
0x0A, 0x00, 0xFD, 0xF0, 0x01, 0x4D, 0x10, 0x05, 0x9F, 0x23, 0x36, 0x2F, 0x30, 0x00, 0xF9, 0x20,
|
||||
0x00, 0xB2, 0xFA, 0x0F, 0xB9, 0xB1, 0x00, 0x79, 0xE1, 0x7C, 0x47, 0xF1, 0x12, 0xFD, 0x80, 0x0E,
|
||||
0x0D, 0xC0, 0x03, 0x63, 0xA0, 0x08, 0x9A, 0xA0, 0x09, 0x86, 0xC0, 0x83, 0xDC, 0x47, 0xA8, 0xF2,
|
||||
0x03, 0x63, 0x50, 0xD1, 0xA0, 0xCA, 0xFA, 0x11, 0x0C, 0xB7, 0x0F, 0x46, 0xB0, 0x01, 0x5D, 0x70,
|
||||
0x5D, 0x96, 0x50, 0x09, 0xE0, 0xB5, 0x59, 0x6C, 0x90, 0x65, 0x60, 0xF0, 0x03, 0x20, 0x30, 0x85,
|
||||
0x62, 0x38, 0x96, 0x25, 0x3A, 0x00, 0x08, 0x00, 0x37, 0x06, 0xD0, 0x08, 0x03, 0xF0, 0x0F, 0x02,
|
||||
0x70, 0xAA, 0xFD, 0xA0, 0x00, 0x62, 0x20, 0x07, 0x7E, 0x70, 0x40, 0x51, 0xB0, 0x01, 0x1F, 0x10,
|
||||
0xAA, 0xE7, 0xFA, 0x0F, 0x15, 0xD0, 0x01, 0x0D, 0xA0, 0x07, 0x89, 0xFA, 0x12, 0x78, 0x88, 0x09,
|
||||
0xAB, 0x34, 0x07, 0x9D, 0x20, 0xAC, 0xA0, 0xA5, 0xA9, 0x20, 0xB0, 0x78, 0x37, 0x23, 0x1F, 0x95,
|
||||
0x71, 0x73, 0x77, 0x4A, 0x17, 0xE3, 0x80, 0x34, 0xD1, 0x3A, 0x80, 0xDE, 0x55, 0x62, 0x1C, 0xB3,
|
||||
0x06, 0x20, 0x50, 0x03, 0x6B, 0xC7, 0x04, 0x8B, 0x17, 0x2E, 0x07, 0x40, 0x00, 0x00, 0x80, 0x87,
|
||||
0xFB, 0x30, 0x00, 0x5E, 0x00, 0x56, 0x00, 0x10, 0xB2, 0xD3, 0x00, 0x00, 0xFB, 0xF0, 0x00, 0x63,
|
||||
0x70, 0x5D, 0xD2, 0xD5, 0x05, 0x1A, 0xD0, 0x08, 0x01, 0x00, 0xFE, 0x00, 0x23, 0x0B, 0x00, 0xE2,
|
||||
0x60, 0x00, 0x1E, 0x90, 0x02, 0xFD, 0x40, 0x12, 0x43, 0x78, 0x93, 0x91, 0xF9, 0x01, 0x1B, 0xC0,
|
||||
0xAE, 0x78, 0x20, 0x09, 0x2F, 0xC5, 0x3E, 0x89, 0xF5, 0x02, 0x41, 0x30, 0x1E, 0x0A, 0xF9, 0x1A,
|
||||
0x1F, 0x31, 0x7D, 0xFE, 0xD0, 0x0F, 0x59, 0xB0, 0x01, 0x4B, 0xB0, 0x81, 0xE5, 0xD7, 0x5D, 0x9B,
|
||||
0x65, 0x07, 0x69, 0xB0, 0x06, 0x62, 0xA0, 0x01, 0x4E, 0xE0, 0x07, 0x60, 0x30, 0x05, 0xEF, 0x83,
|
||||
0xB1, 0x04, 0x70, 0x14, 0xFB, 0xD0, 0x7B, 0x7A, 0x40, 0xA3, 0xB2, 0x0A, 0x00, 0x03, 0x50, 0xB6,
|
||||
0xBE, 0x8A, 0x4F, 0x4F, 0x03, 0x06, 0x28, 0x00, 0x05, 0x09, 0x10, 0xAA, 0x21, 0x0B, 0x0F, 0x67,
|
||||
0x7A, 0x01, 0x71, 0x48, 0x23, 0xEE, 0xC1, 0x0C, 0x0D, 0x10, 0x05, 0x17, 0x33, 0x4E, 0x9F, 0x97,
|
||||
0x04, 0x2C, 0xB0, 0x03, 0x41, 0x00, 0x01, 0xC7, 0xB0, 0x11, 0xCA, 0xB1, 0x1C, 0x3C, 0xB1, 0x12,
|
||||
0x4E, 0x81, 0x0F, 0x16, 0x30, 0x03, 0x15, 0x53, 0x59, 0x4F, 0x7B, 0x09, 0x51, 0x3B, 0x3D, 0x52,
|
||||
0x00, 0x02, 0x56, 0x60, 0x07, 0x11, 0x53, 0x3E, 0x1A, 0x70, 0x01, 0x05, 0x00, 0xAB, 0xFF, 0x60,
|
||||
0x04, 0x0F, 0xB0, 0x04, 0x2C, 0xFB, 0xA6, 0xE7, 0x6A, 0x6F, 0x28, 0x40, 0x0A, 0x49, 0xF5, 0x47,
|
||||
0xDC, 0x77, 0x02, 0x0F, 0x90, 0x3A, 0x00, 0x00, 0xB7, 0x33, 0xB9, 0x09, 0xDB, 0xE0, 0x0F, 0xC4,
|
||||
0x62, 0x19, 0xFD, 0xD0, 0x01, 0x28, 0xF0, 0x06, 0x52, 0xA3, 0x59, 0x09, 0xF5, 0x04, 0x4C, 0xE0,
|
||||
0x02, 0x37, 0xD0, 0x02, 0x6E, 0x50, 0xB4, 0x83, 0xFB, 0x1C, 0x7C, 0x81, 0x0D, 0x0D, 0x30, 0x05,
|
||||
0xD9, 0x37, 0x7A, 0x86, 0x30, 0x62, 0x4F, 0x16, 0x5D, 0x8E, 0x03, 0x7B, 0x93, 0xEB, 0x07, 0x73,
|
||||
0x90, 0x04, 0x6B, 0x9A, 0x44, 0x04, 0x40, 0x30, 0x09, 0xFE, 0xC0, 0x0A, 0xED, 0x03, 0xB2, 0x03,
|
||||
0x10, 0x5B, 0xDA, 0x74, 0x6E, 0xD5, 0x62, 0x05, 0x74, 0xF0, 0x06, 0x51, 0x20, 0x05, 0x6A, 0x78,
|
||||
0x45, 0xF4, 0x90, 0x1B, 0x0A, 0x00, 0x00, 0xAE, 0xB0, 0x90, 0x24, 0x31, 0x13, 0xA0, 0xA0, 0x01,
|
||||
0x4A, 0x30, 0xB9, 0x08, 0x46, 0x07, 0x60, 0xA0, 0xBB, 0xEB, 0x05, 0x03, 0x14, 0x50, 0xB4, 0xAF,
|
||||
0x73, 0x1F, 0xFF, 0xF0, 0x05, 0x56, 0x46, 0x51, 0x4A, 0x10, 0x06, 0x85, 0x90, 0x6D, 0x75, 0x50,
|
||||
0x58, 0x16, 0xA3, 0x05, 0x35, 0xA0, 0x04, 0xF7, 0xC4, 0x06, 0x61, 0xC3, 0x02, 0x17, 0x40, 0x00,
|
||||
0x6D, 0x39, 0x00, 0xCF, 0x15, 0x0B, 0x1A, 0xB0, 0x04, 0x63, 0x62, 0x6D, 0x4B, 0x73, 0xAD, 0x55,
|
||||
0xE9, 0x04, 0x1E, 0x54, 0x95, 0x5D, 0xC0, 0x04, 0x52, 0xB0, 0xA5, 0x8D, 0xD0, 0x62, 0x1F, 0x70,
|
||||
0x74, 0x5A, 0xC4, 0x43, 0x3B, 0xB1, 0x0F, 0x09, 0x10, 0xAD, 0xC9, 0x4B, 0x62, 0x69, 0x10, 0x36,
|
||||
0x63, 0x23, 0x04, 0x80, 0xB2, 0xA8, 0xBA, 0xE7, 0x0F, 0xF9, 0xB0, 0x0F, 0xC8, 0x72, 0x47, 0x4E,
|
||||
0xC0, 0x79, 0xD7, 0x65, 0x89, 0x8C, 0x60, 0xC0, 0x69, 0xB0, 0x6C, 0x80, 0x60, 0x5E, 0x9A, 0x1A,
|
||||
0x02, 0x98, 0xBB, 0x0F, 0x01, 0xA0, 0x06, 0x6D, 0x00, 0x0B, 0x97, 0x40, 0x07, 0xE3, 0xC4, 0x06,
|
||||
0xBE, 0x20, 0x09, 0xE0, 0xDB, 0x84, 0x0A, 0xC5, 0xC1, 0x6F, 0xE0, 0x6D, 0x21, 0x14, 0x05, 0x48,
|
||||
0x80, 0x02, 0x4B, 0x80, 0x02, 0x65, 0xD3, 0x02, 0x03, 0xC0, 0x0C, 0x7A, 0xE1, 0x1A, 0xFE, 0x50,
|
||||
0xB2, 0x51, 0xE0, 0x07, 0x61, 0x97, 0x59, 0x34, 0x24, 0x36, 0xCD, 0xC4, 0x7C, 0x78, 0x37, 0x23,
|
||||
0x4F, 0x11, 0x0E, 0x0F, 0xC0, 0x03, 0x3A, 0xAC, 0x04, 0x69, 0xC0, 0x08, 0x41, 0x25, 0x7A, 0xDC,
|
||||
0x54, 0x08, 0x07, 0xF4, 0x04, 0x98, 0xBA, 0x38, 0xFE, 0x87, 0x07, 0x04, 0x1E, 0x80, 0xA3, 0x04,
|
||||
0x20, 0x06, 0xA6, 0x50, 0x09, 0x75, 0xF0, 0x08, 0x1E, 0x06, 0x0B, 0x52, 0x55, 0x59, 0x78, 0x30,
|
||||
0x07, 0x16, 0xA9, 0x3D, 0x4E, 0x03, 0xBD, 0xD7, 0xB2, 0x05, 0xEB, 0x26, 0x03, 0x40, 0x40, 0xB0,
|
||||
0x05, 0xF0, 0x0B, 0x36, 0x97, 0x8C, 0x2A, 0xDC, 0x03, 0x68, 0xDC, 0x5D, 0x52, 0x8C, 0x39, 0x63,
|
||||
0x63, 0x02, 0x0A, 0x30, 0x0B, 0x34, 0x8C, 0x12, 0xFB, 0x80, 0x0A, 0x56, 0x16, 0x05, 0x12, 0xF3,
|
||||
0x75, 0x9A, 0x75, 0x5E, 0x61, 0x50, 0x59, 0x7C, 0x8C, 0x91, 0x21, 0xB0, 0x04, 0xCC, 0x12, 0xC8,
|
||||
0x25, 0x50, 0x24, 0x03, 0xB0, 0x04, 0x61, 0x00, 0x0B, 0x4E, 0xF0, 0x08, 0xFF, 0xD6, 0x06, 0xA6,
|
||||
0xE0, 0x0B, 0x8A, 0xB3, 0x7E, 0x66, 0xD0, 0x03, 0x52, 0x00, 0x05, 0x3D, 0xB0, 0x06, 0x99, 0xA2,
|
||||
0xC5, 0x40, 0xD0, 0x04, 0x5E, 0xB2, 0x01, 0xA6, 0x53, 0x00, 0xB3, 0x60, 0x28, 0xF8, 0x91, 0xC2,
|
||||
0x29, 0x80, 0x02, 0x7E, 0x70, 0x59, 0x96, 0x70, 0x09, 0xA0, 0x15, 0x05, 0x35, 0x20, 0x03, 0x82,
|
||||
0x98, 0x08, 0x7D, 0xA1, 0x0F, 0xF6, 0x20, 0x69, 0x03, 0x22, 0x31, 0x93, 0x38, 0x08, 0x07, 0xAA,
|
||||
0x05, 0xB4, 0x9C, 0x50, 0x63, 0x40, 0x03, 0x21, 0x30, 0xC4, 0x56, 0xC0, 0x42, 0x2C, 0xD0, 0x00,
|
||||
0x57, 0x50, 0x9F, 0xB1, 0x20, 0x01, 0x64, 0xE0, 0xB8, 0x78, 0x20, 0x07, 0x62, 0x80, 0x02, 0x8A,
|
||||
0x85, 0x25, 0x23, 0x32, 0x00, 0x14, 0x40, 0x01, 0x23, 0xF0, 0x01, 0x26, 0x30, 0x33, 0xEC, 0x25,
|
||||
0x97, 0x06, 0xD7, 0x02, 0x46, 0x3A, 0xC6, 0x9E, 0x5C, 0x05, 0xDC, 0x8C, 0x85, 0xDF, 0xBC, 0x41,
|
||||
0x5B, 0xF0, 0x03, 0x87, 0x09, 0x01, 0xBF, 0x0B, 0x17, 0xE8, 0xCC, 0x05, 0x3D, 0x20, 0x31, 0x58,
|
||||
0x23, 0x07, 0x89, 0x6C, 0x09, 0x6D, 0xA0, 0xFE, 0x04, 0xF0, 0x5C, 0xC0, 0xD0, 0x2B, 0x24, 0x1A,
|
||||
0xD0, 0x05, 0xBA, 0x10, 0x7E, 0x9F, 0x54, 0x00, 0x01, 0x50, 0x05, 0xBA, 0x60, 0x9E, 0x49, 0x30,
|
||||
0xCF, 0x1B, 0x30, 0x00, 0x17, 0xF0, 0x05, 0x8F, 0x66, 0x04, 0x09, 0x50, 0x01, 0x00, 0xA0, 0x03,
|
||||
0x3A, 0x90, 0x03, 0x44, 0xAD, 0x92, 0x05, 0xF0, 0x56, 0x26, 0xE3, 0x09, 0x03, 0x10, 0x03, 0xAA,
|
||||
0x45, 0xD1, 0x1C, 0xD1, 0x0F, 0x41, 0x10, 0x02, 0x6C, 0xE0, 0x5D, 0xE0, 0xBC, 0x55, 0xE0, 0xA2,
|
||||
0x00, 0x1F, 0xFD, 0x16, 0xFD, 0x60, 0x0F, 0x4D, 0xC0, 0x99, 0x1C, 0x24, 0xAD, 0xA3, 0x30, 0x08,
|
||||
0x05, 0x85, 0x7E, 0x8A, 0x20, 0x8D, 0x69, 0xE0, 0x3E, 0x81, 0x40, 0x0A, 0x73, 0xF0, 0x39, 0x52,
|
||||
0x70, 0x03, 0x06, 0x40, 0x00, 0xAC, 0xE0, 0x0B, 0x60, 0x30, 0x86, 0x30, 0x70, 0x26, 0xE3, 0xE0,
|
||||
0x0D, 0xDE, 0x60, 0x0E, 0xEB, 0x60, 0x0F, 0xEB, 0xB0, 0x08, 0x0E, 0x90, 0x03, 0x87, 0x70, 0x08,
|
||||
0x71, 0x30, 0x01, 0x45, 0xC0, 0x0C, 0xC7, 0xD0, 0x0C, 0x8A, 0x7D, 0x0D, 0xC7, 0x50, 0x01, 0x6D,
|
||||
0xD9, 0x0F, 0x73, 0x38, 0x18, 0xFD, 0x20, 0x08, 0x12, 0x90, 0x06, 0x94, 0x68, 0x09, 0xE4, 0x86,
|
||||
0x2D, 0xE5, 0xB3, 0x01, 0x0D, 0x40, 0x88, 0x70, 0xF1, 0x48, 0x5C, 0x40, 0x03, 0xDE, 0xC7, 0x8B,
|
||||
0x7E, 0x40, 0x7E, 0xA3, 0xE0, 0x08, 0x8C, 0xE3, 0xC8, 0x3D, 0xFB, 0x69, 0x60, 0x70, 0x37, 0xA4,
|
||||
0x10, 0x09, 0x4F, 0x13, 0x1C, 0x3B, 0xD0, 0x00, 0x7D, 0xC0, 0x07, 0x80, 0x80, 0x0B, 0xC1, 0x70,
|
||||
0x0D, 0xD7, 0xC0, 0x0D, 0xD9, 0x00, 0x0E, 0xEC, 0x40, 0x0E, 0xEA, 0x60, 0x0E, 0xEE, 0x00, 0x0F,
|
||||
0x81, 0x3D, 0xD8, 0x71, 0xB0, 0x02, 0x2B, 0x60, 0x0E, 0xDE, 0x50, 0x0D, 0xCC, 0x5D, 0x0D, 0xC4,
|
||||
0x30, 0x00, 0xEB, 0x40, 0x53, 0x4C, 0xFE, 0xF1, 0x11, 0xC7, 0x70, 0x01, 0x63, 0xD0, 0x30, 0x24,
|
||||
0x56, 0x6E, 0xE5, 0x23, 0x02, 0x0D, 0x50, 0x04, 0x81, 0xB1, 0x0F, 0x55, 0x20, 0x03, 0x03, 0xF2,
|
||||
0x34, 0xAE, 0x34, 0xAD, 0x00, 0x87, 0x7E, 0x78, 0x10, 0x65, 0xDC, 0x54, 0x06, 0x3D, 0xF0, 0x00,
|
||||
0x9E, 0x08, 0x09, 0xEA, 0x97, 0x07, 0x28, 0x40, 0x03, 0x93, 0xC0, 0x07, 0xC6, 0x70, 0x0C, 0xD3,
|
||||
0x40, 0x0E, 0xD0, 0x00, 0x0E, 0xE9, 0x20, 0x0F, 0xEA, 0x90, 0x0F, 0xC3, 0x0D, 0x0F, 0x2B, 0xC0,
|
||||
0x00, 0xC6, 0xED, 0x00, 0x2B, 0x20, 0x0F, 0xCB, 0x0D, 0x0E, 0xD9, 0x90, 0x0D, 0x9B, 0x80, 0x06,
|
||||
0xC0, 0x86, 0xB0, 0x04, 0x63, 0x01, 0x6B, 0xC0, 0x38, 0x07, 0x06, 0x51, 0xDB, 0xDD, 0x00, 0x19,
|
||||
0x90, 0xA8, 0x53, 0xB1, 0xCA, 0x01, 0xAA, 0x6F, 0x9C, 0x65, 0xDE, 0x71, 0x36, 0xA5, 0x52, 0xC5,
|
||||
0x06, 0x51, 0xC0, 0x03, 0x12, 0x10, 0x0A, 0x90, 0xF0, 0x54, 0x6C, 0x20, 0x07, 0x21, 0x10, 0x0A,
|
||||
0x91, 0x80, 0x0B, 0xC7, 0xE0, 0x0C, 0xCE, 0xC0, 0x0E, 0xDF, 0xF0, 0x0D, 0xEC, 0xF0, 0x0E, 0xEA,
|
||||
0x50, 0x0F, 0xEE, 0x50, 0x0F, 0xC5, 0x00, 0x00, 0x0C, 0xC0, 0x01, 0x0E, 0x00, 0x00, 0xCE, 0x60,
|
||||
0x0E, 0xEC, 0x90, 0x0E, 0xE0, 0x60, 0x0D, 0xE0, 0x60, 0x03, 0xC4, 0xF0, 0x9C, 0xF9, 0xD3, 0x01,
|
||||
0x66, 0xA0, 0x05, 0xD8, 0xA6, 0x4F, 0x94, 0x24, 0x03, 0x9C, 0x5D, 0x97, 0x6F, 0x11, 0x11, 0xFD,
|
||||
0x70, 0x0C, 0x09, 0xD0, 0xB4, 0xD1, 0x55, 0x59, 0x97, 0x3D, 0x0A, 0xE0, 0x55, 0x7C, 0x8F, 0xD3,
|
||||
0x38, 0x74, 0xB0, 0x76, 0x67, 0xC8, 0x0A, 0x90, 0x60, 0x61, 0x7E, 0x00, 0x7F, 0xB2, 0x40, 0x09,
|
||||
0x89, 0x40, 0x0E, 0xDB, 0x60, 0x0D, 0xE9, 0x60, 0xE3, 0xEC, 0xA0, 0x0E, 0x0B, 0x21, 0x0F, 0xFA,
|
||||
0xB0, 0x0B, 0x41, 0x0E, 0x00, 0xFE, 0xC8, 0x20, 0x0F, 0xDF, 0x90, 0x0E, 0xE9, 0x60, 0x0D, 0xD6,
|
||||
0x90, 0x0C, 0x36, 0x70, 0x16, 0x2C, 0xA3, 0x11, 0x1D, 0x20, 0x05, 0x50, 0x6E, 0x08, 0xFA, 0x24,
|
||||
0x31, 0x35, 0x40, 0x36, 0x0A, 0xA0, 0x02, 0x1A, 0x9E, 0x13, 0x55, 0x71, 0x0D, 0x10, 0x30, 0x03,
|
||||
0x69, 0x30, 0xE2, 0x6C, 0x80, 0x07, 0x0D, 0x93, 0x5D, 0x63, 0xCD, 0x49, 0x15, 0x78, 0x4F, 0x5A,
|
||||
0x20, 0x06, 0x21, 0xC0, 0x04, 0xB1, 0x30, 0x71, 0x75, 0xC0, 0x08, 0x5D, 0x20, 0x01, 0x91, 0x60,
|
||||
0x0C, 0xA8, 0x70, 0x0B, 0x71, 0x5E, 0xE3, 0x45, 0xCE, 0x0E, 0xF2, 0x40, 0xEB, 0x39, 0xFE, 0x0F,
|
||||
0xDC, 0xB0, 0x10, 0x80, 0x3E, 0xE7, 0x48, 0x7E, 0x07, 0xB7, 0x10, 0x11, 0xFA, 0x87, 0x12, 0x1D,
|
||||
0x20, 0x06, 0x5A, 0x00, 0x54, 0x50, 0x28, 0x31, 0x34, 0x30, 0x45, 0x05, 0xB0, 0xD5, 0x6F, 0xB1,
|
||||
0x97, 0x05, 0xF0, 0x02, 0x5A, 0xE0, 0x44, 0x61, 0x50, 0x06, 0x4E, 0xD4, 0x06, 0x83, 0x00, 0xE6,
|
||||
0x96, 0x50, 0x7C, 0xD5, 0xF3, 0x34, 0x8E, 0x33, 0xBE, 0x2C, 0xF0, 0x03, 0x25, 0xD5, 0x09, 0x90,
|
||||
0x10, 0x09, 0x28, 0xE0, 0x04, 0x7C, 0x10, 0x0D, 0x82, 0x90, 0x0A, 0xE0, 0x00, 0x0D, 0x35, 0x9E,
|
||||
0x0E, 0xEC, 0x70, 0xE3, 0xED, 0xE0, 0x0F, 0x3B, 0xEE, 0x0E, 0xEE, 0xA0, 0x0E, 0x80, 0x5E, 0xE3,
|
||||
0x35, 0x8E, 0x01, 0xE4, 0xC0, 0x98, 0x3A, 0x01, 0x01, 0x66, 0x30, 0xCB, 0xD9, 0x7D, 0x5E, 0x52,
|
||||
0x74, 0x01, 0x06, 0xB0, 0x3A, 0x70, 0x31, 0x7D, 0xB3, 0xBB, 0x01, 0x49, 0xF0, 0x38, 0x07, 0xA4,
|
||||
0x49, 0x56, 0xD0, 0x06, 0xDE, 0x55, 0x78, 0x15, 0x18, 0x35, 0x11, 0xD3, 0x3E, 0x20, 0xF0, 0x03,
|
||||
0x5A, 0x70, 0x0A, 0x7C, 0x90, 0x07, 0xB0, 0x07, 0x09, 0x81, 0x30, 0x0C, 0x99, 0xC0, 0x0B, 0xDE,
|
||||
0x90, 0x0D, 0x73, 0x7E, 0xFE, 0xE3, 0xEF, 0xD0, 0x0E, 0xED, 0x70, 0x0F, 0xF3, 0x5E, 0xEB, 0xDF,
|
||||
0x00, 0x0D, 0x81, 0x0E, 0x0C, 0x85, 0xEE, 0x11, 0x87, 0x4E, 0x84, 0x0A, 0x70, 0xDD, 0x41, 0x7A,
|
||||
0x31, 0x44, 0xE7, 0x02, 0xF1, 0x7A, 0x0D, 0x33, 0xAF, 0x13, 0x37, 0xDC, 0x01, 0x1B, 0x50, 0xEE,
|
||||
0xD8, 0xC2, 0x4B, 0x04, 0x35, 0xCB, 0xC3, 0x57, 0x78, 0xC4, 0x54, 0x4C, 0xF7, 0x34, 0x07, 0xDC,
|
||||
0x62, 0xB9, 0x2C, 0x20, 0x01, 0xC0, 0x53, 0xDF, 0x54, 0x5B, 0x02, 0xCD, 0x50, 0x0D, 0xE0, 0x40,
|
||||
0x0E, 0xE4, 0xF0, 0x0E, 0xEF, 0x70, 0x0E, 0xFC, 0x20, 0x0C, 0xD3, 0x50, 0x0F, 0x0B, 0xC1, 0x0E,
|
||||
0xD0, 0x90, 0x0C, 0x47, 0x6E, 0x03, 0xC2, 0x40, 0x10, 0xC8, 0xD8, 0xF3, 0x04, 0xF3, 0x00, 0x3F,
|
||||
0x4A, 0xAD, 0x1E, 0x78, 0x5E, 0x34, 0x50, 0xA4, 0x01, 0x10, 0x4D, 0x6F, 0xE1, 0x15, 0x19, 0x80,
|
||||
0x2C, 0x35, 0x70, 0x47, 0x1D, 0x24, 0x70, 0xD8, 0x36, 0x7C, 0x09, 0x66, 0x58, 0x65, 0xD4, 0xD6,
|
||||
0xDC, 0x22, 0x45, 0x2E, 0xB0, 0x03, 0x94, 0xB0, 0x01, 0x4C, 0xC0, 0x09, 0x9C, 0x30, 0x09, 0x6A,
|
||||
0x50, 0x00, 0xDC, 0xF0, 0x0C, 0xE7, 0x70, 0x0E, 0xE4, 0x70, 0x0E, 0xFE, 0x6D, 0xE7, 0xEA, 0xA0,
|
||||
0x0E, 0xE4, 0xF0, 0xEE, 0xDB, 0xB0, 0xF9, 0x02, 0x10, 0xEF, 0x08, 0x01, 0xEC, 0x28, 0xC1, 0xAB,
|
||||
0x6D, 0x8F, 0xC8, 0xE6, 0x45, 0x74, 0x27, 0x30, 0x3F, 0xA8, 0x42, 0xE9, 0x1A, 0x61, 0x1F, 0xFF,
|
||||
0x30, 0x04, 0x0B, 0xF0, 0x02, 0x71, 0x64, 0x50, 0x51, 0xD3, 0x49, 0x57, 0x3B, 0x80, 0x0E, 0x63,
|
||||
0xA9, 0x18, 0x63, 0x2D, 0xC8, 0xA4, 0x01, 0x09, 0x60, 0x02, 0x26, 0x20, 0x22, 0x58, 0x40, 0x27,
|
||||
0x74, 0xB0, 0x06, 0x1E, 0x70, 0x0C, 0xDE, 0x00, 0x0E, 0x92, 0xBF, 0xF5, 0xFC, 0xD0, 0x0E, 0x76,
|
||||
0xBE, 0xF5, 0xE0, 0xFE, 0xF0, 0xFC, 0xDB, 0x70, 0x0B, 0x24, 0x50, 0x1E, 0x40, 0x51, 0x18, 0xD2,
|
||||
0x07, 0x0A, 0xD6, 0x4D, 0x75, 0x98, 0xCD, 0x06, 0x2F, 0x5C, 0x03, 0x0E, 0x5C, 0x00, 0xF0, 0x86,
|
||||
0x12, 0xEC, 0x21, 0x13, 0x9C, 0x91, 0x11, 0xEB, 0xD0, 0x2E, 0x2C, 0xE0, 0xCA, 0xC6, 0x45, 0x06,
|
||||
0x5B, 0x03, 0xCF, 0x08, 0x86, 0xBC, 0x9B, 0xC5, 0x83, 0x4E, 0x90, 0x3E, 0xDF, 0xB2, 0x03, 0x35,
|
||||
0xE8, 0x20, 0x58, 0xB0, 0x66, 0x6C, 0xC0, 0x07, 0x2F, 0x10, 0x0C, 0x23, 0x1F, 0xF9, 0x00, 0x41,
|
||||
0xAE, 0xDD, 0x3C, 0x6E, 0xF2, 0xC8, 0x91, 0x03, 0x47, 0xCE, 0x9A, 0x35, 0x72, 0x24, 0x84, 0xFD,
|
||||
0xF3, 0xF7, 0x4F, 0x22, 0x3F, 0x89, 0xFE, 0x2C, 0xFA, 0xE3, 0x97, 0x91, 0xDF, 0xBD, 0x7E, 0x82,
|
||||
0x3C, 0x8C, 0x09, 0x53, 0x67, 0x90, 0x1D, 0x30, 0x4F, 0xA2, 0x20, 0x61, 0xF1, 0xA0, 0x40, 0x45,
|
||||
0x89, 0x2D, 0x5D, 0x5E, 0x6C, 0xB9, 0x0F, 0x5B, 0x91, 0x11, 0x6E, 0xC6, 0xED, 0xB3, 0x47, 0xAF,
|
||||
0x85, 0x97, 0x0D, 0x20, 0x94, 0xC8, 0x61, 0x63, 0x85, 0x8C, 0x16, 0x2D, 0x4E, 0xEA, 0x48, 0x72,
|
||||
0x24, 0xD2, 0x91, 0xA5, 0x41, 0x6D, 0xC2, 0xB0, 0xA1, 0xC3, 0x28, 0x49, 0x97, 0x0D, 0x3E, 0xFA,
|
||||
0x98, 0xF1, 0x80, 0x85, 0x51, 0x9D, 0x30, 0x6B, 0x76, 0xA0, 0xD2, 0x56, 0xED, 0xE0, 0xB9, 0x79,
|
||||
0xDB, 0xD4, 0x79, 0x33, 0x07, 0xCE, 0x1A, 0x34, 0x68, 0xDB, 0x36, 0x91, 0xE0, 0x67, 0xB1, 0x25,
|
||||
0xC5, 0x97, 0xFF, 0x34, 0xFE, 0xEB, 0xD7, 0xC2, 0x05, 0x18, 0x2B, 0x83, 0x1E, 0x31, 0x9A, 0xA3,
|
||||
0xA5, 0x0B, 0x8D, 0x10, 0x07, 0x7E, 0x41, 0x74, 0x99, 0x18, 0xE2, 0xC5, 0x7A, 0xFB, 0x54, 0x0D,
|
||||
0x50, 0xF0, 0xE1, 0x02, 0x81, 0x0B, 0xA5, 0xE2, 0x65, 0x1A, 0x40, 0xA4, 0x89, 0x14, 0x30, 0x69,
|
||||
0xCA, 0xCC, 0xFE, 0x01, 0x03, 0x26, 0x24, 0xD2, 0xA5, 0xA2, 0x4C, 0x3B, 0x32, 0x24, 0x49, 0xD3,
|
||||
0x25, 0x3F, 0x20, 0xCC, 0x04, 0xCA, 0x83, 0x82, 0x07, 0x29, 0x46, 0x4E, 0xBB, 0x34, 0xA9, 0x12,
|
||||
0x76, 0xDB, 0x32, 0x57, 0xDB, 0xB8, 0xA9, 0x7B, 0x56, 0x8D, 0x6D, 0xB2, 0x64, 0xC0, 0x04, 0x6C,
|
||||
0xAB, 0x18, 0xD1, 0x6E, 0xE2, 0x7C, 0x76, 0xE9, 0xF6, 0x5B, 0xC0, 0x43, 0x4E, 0x98, 0x41, 0x83,
|
||||
0xFC, 0xA4, 0x49, 0x93, 0x04, 0x85, 0x88, 0x02, 0xFB, 0x9A, 0x2B, 0x7E, 0x69, 0xF1, 0xDE, 0xBF,
|
||||
0x7D, 0x04, 0x82, 0xEC, 0xE0, 0xB1, 0x64, 0x89, 0x8B, 0x0B, 0x1E, 0x54, 0x5A, 0xB8, 0x31, 0x23,
|
||||
0x4A, 0x9A, 0x31, 0x60, 0xCA, 0xB0, 0xF1, 0x63, 0x48, 0x93, 0xA3, 0x47, 0x96, 0x4C, 0x9F, 0x1E,
|
||||
0x25, 0x40, 0x49, 0x6A, 0xF0, 0x03, 0x90, 0x48, 0x7A, 0x48, 0x63, 0x0E, 0x36, 0xD8, 0xD0, 0x62,
|
||||
0x0B, 0x29, 0x36, 0xD0, 0xE6, 0x19, 0x67, 0x84, 0x71, 0x66, 0x1B, 0x61, 0xD0, 0x78, 0x86, 0x98,
|
||||
0x55, 0x90, 0x01, 0xC6, 0xB8, 0x65, 0x32, 0xF2, 0xE7, 0x1E, 0xE5, 0x96, 0x73, 0x29, 0xA3, 0x96,
|
||||
0xF0, 0x69, 0x40, 0x8C, 0xAD, 0x50, 0xA3, 0x43, 0x8B, 0x93, 0x66, 0x78, 0x60, 0x81, 0x7E, 0x14,
|
||||
0x1B, 0xB1, 0x25, 0x8B, 0xF2, 0xE9, 0xA7, 0x97, 0x06, 0x76, 0x30, 0x63, 0x0C, 0x39, 0xE4, 0x30,
|
||||
0x03, 0x0A, 0x20, 0x80, 0x78, 0x41, 0x84, 0x0B, 0x24, 0xA0, 0x21, 0x8A, 0x27, 0xC0, 0x80, 0xCA,
|
||||
0x8E, 0xD4, 0x24, 0xB1, 0xC3, 0x49, 0x4B, 0x96, 0x1A, 0xC5, 0x11, 0x51, 0x2C, 0x91, 0xE4, 0x12,
|
||||
0x3B, 0xC2, 0xE0, 0x23, 0x89, 0x32, 0xAC, 0xF0, 0x83, 0x28, 0x07, 0x35, 0x68, 0x86, 0x98, 0x64,
|
||||
0x9C, 0x59, 0xC6, 0x99, 0x6A, 0x76, 0x69, 0x26, 0x95, 0x3D, 0x76, 0xB9, 0x45, 0x00, 0x57, 0x28,
|
||||
0xCA, 0xFE, 0x07, 0xA6, 0x89, 0x14, 0xA3, 0x2B, 0x1F, 0x65, 0x36, 0xE0, 0x43, 0x92, 0x47, 0x58,
|
||||
0x74, 0xB1, 0x87, 0x17, 0x08, 0x98, 0xE5, 0xBB, 0xF0, 0xEE, 0x5C, 0x2C, 0x1F, 0x7C, 0x5A, 0xB8,
|
||||
0xA0, 0x0B, 0x2D, 0x18, 0x64, 0x44, 0x8B, 0x34, 0xA2, 0x88, 0x02, 0x90, 0x2D, 0x06, 0x63, 0x21,
|
||||
0x84, 0x1F, 0xC8, 0xF0, 0x03, 0x8F, 0x3A, 0x9C, 0xF4, 0xC3, 0x0A, 0x27, 0xAC, 0x60, 0x43, 0x11,
|
||||
0x45, 0x0C, 0x31, 0xC4, 0x12, 0x4B, 0xEA, 0x30, 0x84, 0x2B, 0x36, 0xCA, 0xE0, 0xEB, 0x0D, 0x30,
|
||||
0xB4, 0x58, 0x63, 0x89, 0x12, 0xCA, 0x3C, 0xD3, 0x99, 0x64, 0x90, 0x79, 0x66, 0x17, 0x62, 0x76,
|
||||
0xD9, 0x65, 0x8F, 0x23, 0xE8, 0xFA, 0x67, 0xBC, 0x11, 0x89, 0x75, 0x69, 0xBC, 0x7E, 0xB2, 0x08,
|
||||
0x41, 0x0E, 0x49, 0xA6, 0xE4, 0x0A, 0x8C, 0x2E, 0x42, 0x48, 0xC1, 0x80, 0x7D, 0x16, 0x3B, 0xD4,
|
||||
0x39, 0x6C, 0xF1, 0x09, 0x42, 0x03, 0xA0, 0x5A, 0x0D, 0xA3, 0x0D, 0x36, 0xDE, 0x20, 0xC3, 0x89,
|
||||
0xA2, 0xA2, 0x80, 0x82, 0x05, 0x14, 0x94, 0xA0, 0x83, 0x8E, 0x05, 0x17, 0xD4, 0x22, 0x89, 0x24,
|
||||
0x94, 0x30, 0x17, 0xBF, 0x3A, 0x8E, 0xAA, 0xA3, 0x8D, 0x36, 0xAC, 0x48, 0xE3, 0x8D, 0x37, 0x44,
|
||||
0x7D, 0xA2, 0x0B, 0x19, 0x6E, 0x7D, 0x86, 0xB8, 0x33, 0x91, 0x41, 0x66, 0x97, 0x5C, 0x76, 0xD9,
|
||||
0x24, 0x02, 0x13, 0xFF, 0x69, 0xAE, 0xCE, 0x1A, 0xC3, 0xF3, 0x07, 0x47, 0x05, 0x7A, 0xF0, 0xE3,
|
||||
0x12, 0x4B, 0x0C, 0xD9, 0x77, 0xB0, 0x19, 0x5A, 0x90, 0x11, 0x3C, 0xB9, 0xEE, 0xBC, 0x11, 0x1F,
|
||||
0x18, 0x50, 0x00, 0xA4, 0xBF, 0x3A, 0xD8, 0x90, 0xA4, 0x55, 0x3C, 0xCA, 0x20, 0xEA, 0x89, 0x24,
|
||||
0xA2, 0x48, 0xA2, 0x06, 0x25, 0xB4, 0x20, 0xE3, 0x29, 0x36, 0x66, 0x8D, 0xF7, 0x07, 0x39, 0xD2,
|
||||
0xFE, 0x70, 0x82, 0x8D, 0x7B, 0x57, 0x0E, 0x83, 0x0C, 0x32, 0xD2, 0xE0, 0x39, 0x8A, 0x25, 0x24,
|
||||
0xF0, 0xA4, 0x19, 0x64, 0xA0, 0x39, 0x33, 0x19, 0x61, 0x7E, 0x6D, 0xA5, 0x15, 0x01, 0xB8, 0x41,
|
||||
0xD4, 0x50, 0xF0, 0xB0, 0xC5, 0xAB, 0x80, 0x35, 0x0A, 0xB9, 0x44, 0x13, 0xAE, 0xAC, 0x88, 0x62,
|
||||
0x86, 0x41, 0x8F, 0xB1, 0x31, 0x5B, 0x12, 0x2B, 0xC6, 0xE7, 0x81, 0x25, 0xD8, 0x58, 0xCA, 0x94,
|
||||
0x4B, 0x0C, 0x79, 0x84, 0x63, 0x45, 0xE6, 0x80, 0x59, 0x52, 0x30, 0x9C, 0x30, 0x17, 0xE7, 0x76,
|
||||
0xE7, 0xF8, 0x59, 0x8B, 0x9B, 0xF9, 0x0E, 0xC3, 0x8F, 0x28, 0xF3, 0xBE, 0x34, 0x0A, 0x27, 0x92,
|
||||
0xA0, 0x01, 0x8A, 0x02, 0x8E, 0x21, 0x06, 0x18, 0x64, 0x92, 0xB9, 0x03, 0x98, 0x5B, 0x6E, 0xF9,
|
||||
0xE5, 0x13, 0x00, 0xA6, 0x81, 0x88, 0xA2, 0x7A, 0x24, 0xD2, 0x3A, 0x31, 0x8B, 0xE6, 0x81, 0xF8,
|
||||
0x9A, 0x0B, 0xD2, 0x38, 0x0A, 0x5C, 0x2D, 0x90, 0x78, 0x01, 0x86, 0x01, 0xFA, 0xC9, 0x27, 0xAE,
|
||||
0x1A, 0x47, 0x5E, 0xFB, 0x1F, 0x7B, 0x88, 0x90, 0x42, 0x0E, 0x55, 0x15, 0xF1, 0xA3, 0x90, 0x56,
|
||||
0x97, 0xDA, 0xD8, 0xDD, 0x37, 0xD6, 0xD8, 0x82, 0x28, 0x26, 0xDB, 0x85, 0xCA, 0x5D, 0x36, 0xC2,
|
||||
0x10, 0x6A, 0x41, 0x3F, 0xE8, 0x28, 0xE9, 0x24, 0x24, 0x6A, 0xE8, 0xA1, 0x07, 0x1A, 0x44, 0x80,
|
||||
0xE0, 0x18, 0x61, 0x6E, 0xE9, 0x70, 0x93, 0xCB, 0x73, 0xF9, 0x64, 0x00, 0x07, 0x16, 0x89, 0x58,
|
||||
0x64, 0x1A, 0xE5, 0xEA, 0x07, 0x95, 0x17, 0x50, 0x37, 0x44, 0x11, 0x3A, 0xC2, 0xD8, 0x02, 0x08,
|
||||
0x0F, 0x5A, 0x50, 0x61, 0x39, 0xDA, 0xB9, 0x4E, 0x96, 0x3C, 0x2F, 0xA0, 0x70, 0xD6, 0x12, 0x36,
|
||||
0x08, 0x0C, 0xD7, 0x20, 0x02, 0x14, 0x3C, 0x32, 0x6C, 0x61, 0x0B, 0xA1, 0xD1, 0x82, 0xCE, 0xFE,
|
||||
0x74, 0xF6, 0xAE, 0x05, 0x15, 0xED, 0x0D, 0x93, 0x4A, 0x42, 0xF5, 0x68, 0x30, 0xC1, 0x19, 0xC8,
|
||||
0x4F, 0x15, 0xB9, 0xD8, 0xDE, 0x2A, 0x56, 0x71, 0x8B, 0x4D, 0x80, 0x6F, 0x00, 0x43, 0x58, 0x01,
|
||||
0x00, 0x3E, 0xB1, 0x35, 0xFC, 0x25, 0x27, 0x22, 0xE8, 0xF8, 0xC0, 0x0C, 0xC8, 0x50, 0x07, 0x53,
|
||||
0xB1, 0x81, 0x0C, 0x65, 0x0B, 0xC2, 0x00, 0x98, 0xE1, 0x9C, 0x10, 0xA9, 0xCD, 0x46, 0x8D, 0x49,
|
||||
0x61, 0x1E, 0xFC, 0x60, 0x0A, 0x3A, 0x24, 0xE1, 0x01, 0x6B, 0x00, 0x43, 0x21, 0x54, 0xA3, 0x09,
|
||||
0x43, 0x30, 0x48, 0x09, 0x51, 0x00, 0x43, 0x60, 0xC2, 0x90, 0x86, 0xA2, 0x91, 0xE1, 0x5D, 0xEE,
|
||||
0x0A, 0x83, 0x98, 0xBA, 0xB0, 0x84, 0x1E, 0xC8, 0x00, 0x05, 0x2C, 0x60, 0xC1, 0x0C, 0x4E, 0x50,
|
||||
0x82, 0x18, 0xFC, 0xA2, 0x15, 0xAE, 0x70, 0xC5, 0x26, 0x56, 0xB1, 0x89, 0x54, 0x84, 0x2F, 0x0B,
|
||||
0x23, 0xC0, 0x81, 0x0A, 0x00, 0x70, 0x8D, 0x6B, 0x85, 0xCE, 0x4E, 0x8B, 0x89, 0xC8, 0x3E, 0x7A,
|
||||
0x71, 0x81, 0xB7, 0xB1, 0x0A, 0x0F, 0x51, 0x44, 0xC2, 0x09, 0x0A, 0xA0, 0x02, 0xD8, 0xD1, 0x49,
|
||||
0x74, 0xE6, 0xDB, 0xC7, 0x02, 0x84, 0x60, 0x06, 0x48, 0x9C, 0x62, 0x0E, 0x4F, 0x08, 0x81, 0x04,
|
||||
0xD6, 0x90, 0x86, 0x4E, 0xB4, 0x0C, 0x0F, 0x43, 0x51, 0x82, 0x12, 0x3A, 0xD3, 0x19, 0xEC, 0x54,
|
||||
0x32, 0x0D, 0x81, 0x13, 0x0C, 0xA5, 0x90, 0x50, 0x45, 0x2B, 0xB2, 0xE0, 0x05, 0x5B, 0x24, 0x82,
|
||||
0x27, 0x52, 0xE1, 0x0A, 0x38, 0xC0, 0x61, 0x13, 0x9B, 0xF8, 0x44, 0x2A, 0x02, 0xA0, 0x07, 0x18,
|
||||
0x58, 0x00, 0x02, 0x10, 0x50, 0x63, 0x3F, 0x66, 0x74, 0x3E, 0xE5, 0xC0, 0x04, 0x1D, 0x5E, 0x10,
|
||||
0x41, 0x17, 0xF2, 0x83, 0x07, 0x3A, 0x58, 0x61, 0x0B, 0x32, 0x10, 0x01, 0x01, 0xD0, 0xFE, 0xD6,
|
||||
0x92, 0xCF, 0xD5, 0x45, 0x74, 0x11, 0xC9, 0x51, 0x03, 0xCE, 0x20, 0x0B, 0x33, 0x44, 0x62, 0x12,
|
||||
0x62, 0x90, 0x00, 0x08, 0xA2, 0x20, 0x87, 0xE7, 0xED, 0xAC, 0x28, 0x44, 0x11, 0xD3, 0x16, 0x28,
|
||||
0x45, 0xB3, 0x93, 0xD4, 0x80, 0x7A, 0xD5, 0xAB, 0x9E, 0x0C, 0xAC, 0x88, 0x82, 0x10, 0xBC, 0xC0,
|
||||
0x3D, 0x31, 0xF8, 0xC4, 0x1E, 0x36, 0x71, 0x84, 0x23, 0x6C, 0x22, 0x11, 0x89, 0x18, 0x80, 0x11,
|
||||
0xAA, 0x70, 0x03, 0x13, 0x28, 0xC0, 0x02, 0x31, 0x30, 0x00, 0x02, 0xAE, 0xF5, 0x8F, 0x79, 0x8C,
|
||||
0xC8, 0x4E, 0x35, 0xEC, 0x07, 0x36, 0x2C, 0xC0, 0x83, 0x31, 0xF8, 0xE1, 0x5E, 0x0C, 0x2A, 0x5B,
|
||||
0x03, 0xB2, 0x80, 0x8F, 0x96, 0x90, 0x8E, 0x84, 0x36, 0xAA, 0x18, 0x79, 0x6C, 0x51, 0x00, 0x13,
|
||||
0xFC, 0x21, 0x10, 0xA1, 0x58, 0x42, 0x14, 0x34, 0x40, 0x03, 0x33, 0x50, 0x6A, 0x71, 0x49, 0x58,
|
||||
0x02, 0x13, 0x98, 0xB0, 0x04, 0x19, 0xCC, 0x40, 0x5D, 0x28, 0x20, 0x27, 0x0B, 0x4E, 0x20, 0x82,
|
||||
0x17, 0xBC, 0x20, 0x04, 0x21, 0xC8, 0x94, 0x16, 0x43, 0xB0, 0x81, 0x0D, 0x5C, 0xA0, 0x01, 0x05,
|
||||
0x70, 0x43, 0x22, 0x4A, 0x59, 0xCA, 0x3D, 0xA0, 0x01, 0x00, 0x59, 0xC8, 0xC4, 0x0E, 0x66, 0x00,
|
||||
0xD3, 0x9A, 0x76, 0x60, 0x01, 0x6E, 0x98, 0xD1, 0xC8, 0x2E, 0xA2, 0x9C, 0xF1, 0xFC, 0x03, 0x1F,
|
||||
0xC3, 0x28, 0x80, 0x19, 0xE6, 0xD0, 0x2E, 0x77, 0x6D, 0x61, 0x09, 0x1B, 0x18, 0x00, 0x36, 0x66,
|
||||
0xF4, 0xB0, 0x87, 0x2A, 0x46, 0x96, 0xE3, 0xC8, 0x82, 0x02, 0x78, 0x90, 0x87, 0x2E, 0x4C, 0x51,
|
||||
0x02, 0x22, 0x68, 0xC2, 0x0E, 0x5A, 0x2A, 0x02, 0x21, 0x40, 0xE0, 0x03, 0x0A, 0x20, 0x00, 0x01,
|
||||
0x3A, 0x90, 0x02, 0x2E, 0xCC, 0xA0, 0x09, 0x25, 0x50, 0x80, 0x01, 0xF4, 0x5A, 0xFE, 0x80, 0x06,
|
||||
0x7C, 0xC0, 0x02, 0xEE, 0x91, 0xC0, 0x03, 0x1A, 0xA0, 0x80, 0x3D, 0x26, 0x02, 0x0D, 0xA5, 0x3C,
|
||||
0x02, 0x1C, 0x48, 0x00, 0x80, 0x21, 0xA0, 0x42, 0x0D, 0x4B, 0xE8, 0x42, 0x04, 0x97, 0x30, 0x83,
|
||||
0x1B, 0x5C, 0xC0, 0x00, 0xB3, 0x48, 0xEA, 0x45, 0x9A, 0x0A, 0x91, 0xF1, 0xC0, 0x03, 0x1F, 0x62,
|
||||
0x05, 0x84, 0xBB, 0xAC, 0x60, 0x05, 0x2D, 0xF4, 0xE0, 0x06, 0x04, 0x00, 0x05, 0xC4, 0xBA, 0xBA,
|
||||
0x5A, 0x88, 0xED, 0xA3, 0x00, 0x3D, 0xC8, 0x43, 0x14, 0x6A, 0xE5, 0x82, 0x04, 0x0C, 0xB6, 0x01,
|
||||
0x06, 0x98, 0x40, 0x2F, 0x40, 0x21, 0x0D, 0x71, 0xAC, 0x03, 0x1D, 0x30, 0x78, 0xC0, 0x03, 0x36,
|
||||
0x10, 0x8F, 0x75, 0xF4, 0xE3, 0x1A, 0xBF, 0x40, 0x03, 0x01, 0x06, 0x60, 0x00, 0x05, 0x0C, 0x96,
|
||||
0xB0, 0x03, 0xA8, 0x40, 0x22, 0xF6, 0xB0, 0x88, 0x23, 0x90, 0x40, 0x00, 0x72, 0x6A, 0x05, 0x00,
|
||||
0x0A, 0x20, 0x04, 0x31, 0x00, 0x71, 0x66, 0x9B, 0x04, 0x42, 0x0A, 0x02, 0x30, 0x82, 0x7D, 0xC0,
|
||||
0xAE, 0x58, 0xE3, 0xF9, 0x9C, 0x3B, 0x24, 0xB2, 0x0F, 0x2F, 0x68, 0x20, 0x0F, 0xF7, 0x99, 0xD5,
|
||||
0x16, 0x7E, 0x30, 0x83, 0x0B, 0x4C, 0xC0, 0x39, 0xFC, 0x28, 0x26, 0x6B, 0x15, 0xF3, 0xB9, 0x7D,
|
||||
0xEC, 0x43, 0x01, 0x21, 0x20, 0x6B, 0xBC, 0x7A, 0xB0, 0x01, 0x18, 0x18, 0x40, 0x19, 0xF8, 0x58,
|
||||
0x07, 0x3C, 0xF6, 0x81, 0x0F, 0x7A, 0x34, 0xD7, 0xA4, 0x0F, 0x50, 0xC0, 0x35, 0x66, 0xA9, 0x0F,
|
||||
0x7D, 0xFC, 0xE2, 0x0A, 0x06, 0x18, 0x40, 0x00, 0x32, 0x3C, 0x00, 0x00, 0x44, 0x00, 0x00, 0x1D,
|
||||
0x86, 0x83, 0x30, 0xE4, 0xB2, 0x8F, 0x2B, 0x0C, 0x00, 0x06, 0x6A, 0x98, 0x04, 0x18, 0xC8, 0x00,
|
||||
0x06, 0x25, 0x6C, 0xB2, 0x09, 0x0F, 0x20, 0x40, 0x16, 0xFA, 0x2B, 0x91, 0xFE, 0xCD, 0xE2, 0x05,
|
||||
0x1B, 0x05, 0xE8, 0x82, 0x13, 0x8B, 0xD2, 0x05, 0x14, 0xD0, 0x77, 0x00, 0xE2, 0xE0, 0x5A, 0x88,
|
||||
0xEE, 0xD7, 0xD5, 0xFC, 0xFE, 0x83, 0xC2, 0x1D, 0x90, 0x40, 0x1E, 0xFC, 0x55, 0x03, 0x4F, 0x52,
|
||||
0x00, 0x01, 0xF8, 0x80, 0xC7, 0x3F, 0xD6, 0xB1, 0x0E, 0x44, 0x34, 0x60, 0x33, 0x62, 0x68, 0x02,
|
||||
0x0C, 0x10, 0xA0, 0xDE, 0x7F, 0xD4, 0x43, 0x1F, 0xFD, 0xDD, 0x87, 0x38, 0x98, 0x71, 0x0C, 0x20,
|
||||
0x73, 0x63, 0x1A, 0x22, 0xF2, 0x47, 0x3F, 0x47, 0x8C, 0x8F, 0x7E, 0xA8, 0x80, 0x00, 0x4D, 0x90,
|
||||
0xC3, 0xA8, 0x9C, 0x90, 0x86, 0x35, 0x74, 0xA1, 0x07, 0x30, 0x52, 0x80, 0x11, 0x8A, 0xDB, 0xE5,
|
||||
0x7F, 0xB8, 0xA3, 0x1F, 0xEB, 0xB0, 0xF2, 0x16, 0x00, 0x61, 0xAE, 0x28, 0xF4, 0x60, 0xA6, 0x04,
|
||||
0xE8, 0x85, 0x2C, 0x55, 0x5B, 0xAC, 0xA5, 0xAE, 0xF6, 0x3B, 0xE5, 0x6B, 0x6D, 0x0B, 0x92, 0x1C,
|
||||
0x1A, 0x26, 0x6C, 0xC0, 0x95, 0x0B, 0xB0, 0xC7, 0x82, 0xCB, 0x81, 0x00, 0x0F, 0x40, 0xA1, 0x0B,
|
||||
0x51, 0xA0, 0xC1, 0x06, 0x20, 0x80, 0x8F, 0x7B, 0xDC, 0xA3, 0x1E, 0x8F, 0x6E, 0x89, 0x88, 0xD0,
|
||||
0xBC, 0xD4, 0x88, 0xE0, 0xE8, 0x5A, 0xFD, 0x60, 0x86, 0x02, 0x92, 0x9C, 0x40, 0xD2, 0x4E, 0x45,
|
||||
0x0C, 0x3C, 0xA0, 0x2D, 0x01, 0x04, 0x01, 0xE4, 0xE6, 0xE0, 0xC3, 0x0B, 0x3F, 0x5C, 0xA4, 0x80,
|
||||
0x8D, 0x04, 0x01, 0x23, 0xA0, 0xE3, 0x1A, 0xE2, 0x28, 0x6F, 0x3F, 0x9A, 0xFA, 0xC6, 0x87, 0x86,
|
||||
0x6E, 0x1E, 0xA4, 0xC3, 0x47, 0x0A, 0x42, 0x30, 0x09, 0x17, 0x49, 0x81, 0x05, 0x17, 0x38, 0x40,
|
||||
0x73, 0x41, 0x46, 0x01, 0xF4, 0xD8, 0xF5, 0x06, 0x09, 0x10, 0xC4, 0x3A, 0xEA, 0xB4, 0x9C, 0xE6,
|
||||
0x08, 0x79, 0x74, 0xAC, 0x8E, 0x28, 0x73, 0xC6, 0xF1, 0x01, 0x3E, 0xFE, 0x5D, 0x33, 0x0D, 0x5D,
|
||||
0x60, 0x42, 0x14, 0x98, 0x00, 0x85, 0x1D, 0x34, 0x20, 0x00, 0x2A, 0xF8, 0xC5, 0x3E, 0x04, 0x91,
|
||||
0x00, 0x20, 0x20, 0x41, 0x0C, 0x91, 0x9D, 0x6F, 0x3D, 0x0D, 0x60, 0x04, 0x03, 0x2C, 0xC0, 0x00,
|
||||
0x1D, 0x40, 0x85, 0xA2, 0xE1, 0xC8, 0xDA, 0x62, 0x16, 0xB3, 0x39, 0x1C, 0xB1, 0x47, 0x15, 0x36,
|
||||
0x30, 0x89, 0x31, 0x78, 0xB3, 0x07, 0x3D, 0x3E, 0xC1, 0x06, 0x58, 0x20, 0x02, 0x11, 0x78, 0x20,
|
||||
0xAF, 0x03, 0x70, 0x03, 0xA3, 0xF9, 0x99, 0x6A, 0xD9, 0xB1, 0x1A, 0x74, 0x10, 0xAB, 0x07, 0xB2,
|
||||
0x38, 0xB2, 0x0E, 0x05, 0x88, 0x20, 0x0F, 0xD7, 0x34, 0x17, 0x76, 0x64, 0xD6, 0x04, 0x22, 0x2C,
|
||||
0x60, 0x00, 0xCB, 0x85, 0xC1, 0x0B, 0x66, 0x40, 0x45, 0x1A, 0x6C, 0x47, 0x01, 0x0B, 0xA0, 0x00,
|
||||
0x65, 0x3C, 0x70, 0x83, 0x06, 0x40, 0x00, 0x1B, 0x0C, 0x65, 0x89, 0x7E, 0xCD, 0xF7, 0x0F, 0x74,
|
||||
0x54, 0xC1, 0xE5, 0x83, 0x76, 0xC2, 0x16, 0x6A, 0x20, 0x85, 0x25, 0x6C, 0x72, 0x03, 0x05, 0x10,
|
||||
0x04, 0x36, 0xC4, 0x21, 0x4B, 0xF5, 0x96, 0xDB, 0x50, 0x14, 0xC1, 0xC8, 0xC4, 0x52, 0x9E, 0xB5,
|
||||
0x88, 0xC0, 0x43, 0x1C, 0x06, 0x68, 0x42, 0x1E, 0x90, 0xE6, 0x07, 0x3F, 0x30, 0x48, 0xC0, 0x40,
|
||||
0xB8, 0x01, 0x0C, 0x3E, 0xD0, 0x00, 0x0F, 0x6C, 0xE0, 0x06, 0x27, 0xC0, 0xFB, 0x06, 0xE0, 0x8A,
|
||||
0x83, 0x05, 0x78, 0xE0, 0x05, 0x4D, 0x98, 0xC1, 0x0E, 0x12, 0x40, 0x8B, 0x59, 0x2A, 0x9D, 0x84,
|
||||
0x4D, 0xC5, 0x89, 0x08, 0x98, 0x10, 0x0B, 0x46, 0xB8, 0x0B, 0x0C, 0x63, 0xA0, 0x94, 0x14, 0x24,
|
||||
0x50, 0x0B, 0x7A, 0xD0, 0x23, 0x18, 0x10, 0xB0, 0xA7, 0x02, 0x8E, 0xD1, 0x8F, 0xFC, 0x22, 0x0B,
|
||||
0x3C, 0x1A, 0x01, 0x51, 0xBA, 0xFB, 0xF1, 0x0B, 0x05, 0x9C, 0xFE, 0x41, 0x0B, 0xF9, 0x69, 0x43,
|
||||
0x8B, 0x9C, 0xB0, 0x4D, 0x26, 0x58, 0x6F, 0x03, 0x0F, 0x48, 0x41, 0x02, 0x52, 0xE0, 0xD7, 0x01,
|
||||
0x8C, 0xA0, 0x1C, 0x14, 0x68, 0xC1, 0x06, 0x64, 0x20, 0x05, 0x29, 0x34, 0xE1, 0x02, 0x09, 0x47,
|
||||
0x94, 0xE1, 0x5B, 0xF2, 0x1D, 0x8C, 0x90, 0x27, 0x1A, 0x09, 0x98, 0xC4, 0x29, 0x24, 0x51, 0x87,
|
||||
0x97, 0x69, 0x41, 0x5A, 0x17, 0xA8, 0x42, 0x34, 0x2C, 0x50, 0x00, 0x9D, 0xB3, 0x00, 0x06, 0x14,
|
||||
0x90, 0xF0, 0x77, 0x3C, 0xFF, 0x50, 0x35, 0x27, 0xE6, 0x0A, 0x17, 0xC0, 0x05, 0x1D, 0x52, 0xB3,
|
||||
0xB2, 0xA2, 0xF4, 0xCD, 0x09, 0x3F, 0x00, 0x42, 0x02, 0x0A, 0xD0, 0x02, 0x08, 0x50, 0x60, 0x00,
|
||||
0x98, 0x3D, 0x06, 0x00, 0x5A, 0x10, 0x02, 0x19, 0xD4, 0x40, 0x0C, 0x6A, 0x68, 0x00, 0x36, 0xA2,
|
||||
0xBC, 0x7D, 0xE1, 0xE7, 0x43, 0x44, 0x31, 0x81, 0x80, 0x26, 0x90, 0x85, 0x67, 0xB1, 0x0E, 0x36,
|
||||
0x90, 0x83, 0x24, 0x00, 0x02, 0x0B, 0x50, 0x00, 0x13, 0x00, 0x02, 0x31, 0xD8, 0x02, 0x24, 0xD8,
|
||||
0x01, 0x02, 0xD0, 0xAA, 0x87, 0x42, 0x37, 0x98, 0xA8, 0x98, 0x88, 0xC9, 0x88, 0x7D, 0xF8, 0x00,
|
||||
0x35, 0x08, 0x04, 0x48, 0x68, 0xA4, 0xE5, 0x0B, 0x83, 0x32, 0x80, 0x19, 0x90, 0xA2, 0x96, 0xB8,
|
||||
0x9A, 0x80, 0x01, 0x28, 0x82, 0x04, 0x7B, 0x8C, 0x0F, 0x08, 0x01, 0x20, 0x58, 0x82, 0x26, 0x90,
|
||||
0x80, 0x0E, 0x50, 0x36, 0xBB, 0xE8, 0x27, 0xE1, 0x73, 0x09, 0xF5, 0x12, 0x11, 0xBA, 0x90, 0x86,
|
||||
0x06, 0xC0, 0x05, 0x46, 0xF0, 0x93, 0xE5, 0x71, 0x02, 0x26, 0x70, 0x01, 0x0F, 0xF8, 0x80, 0x1D,
|
||||
0xE8, 0x02, 0x30, 0x60, 0x84, 0x34, 0xE0, 0x01, 0x0B, 0xB0, 0x05, 0xCE, 0x23, 0xA1, 0x0A, 0x94,
|
||||
0x8B, 0xAF, 0x33, 0x91, 0x7D, 0x80, 0x80, 0x07, 0x30, 0xFE, 0x03, 0x4E, 0xE8, 0x84, 0x4B, 0xD0,
|
||||
0xC2, 0x4E, 0xB8, 0x1B, 0x3B, 0xB3, 0xAB, 0x0F, 0xB8, 0xB9, 0x75, 0xE8, 0xAF, 0x75, 0x20, 0x84,
|
||||
0x0E, 0xB0, 0x80, 0x97, 0x92, 0x80, 0x0B, 0xC8, 0x84, 0x6B, 0x59, 0xB5, 0x89, 0xB1, 0xC1, 0x52,
|
||||
0xAB, 0xA1, 0x5F, 0x20, 0x80, 0x46, 0xD0, 0xA5, 0xF7, 0x89, 0x17, 0x20, 0xF8, 0x00, 0x13, 0x70,
|
||||
0x81, 0x1E, 0x80, 0x04, 0x49, 0x50, 0x04, 0x48, 0xC0, 0x02, 0x08, 0x48, 0x34, 0x13, 0x81, 0x42,
|
||||
0x28, 0x7C, 0x34, 0x3B, 0xE9, 0x07, 0x7C, 0x08, 0x86, 0x04, 0xD0, 0x80, 0x1A, 0xE0, 0x03, 0x0F,
|
||||
0xEC, 0x84, 0x58, 0x20, 0x05, 0x3E, 0x98, 0x82, 0x1F, 0xE8, 0x01, 0x11, 0x88, 0xA1, 0x5F, 0x50,
|
||||
0xB0, 0x70, 0x80, 0x0C, 0xBF, 0x93, 0x80, 0x14, 0xC8, 0x34, 0x36, 0x4C, 0xB3, 0x21, 0xB3, 0xC1,
|
||||
0x96, 0xF8, 0xB3, 0x05, 0xB0, 0x00, 0x2E, 0x80, 0x02, 0x26, 0x98, 0x97, 0x1A, 0x08, 0x81, 0xDB,
|
||||
0x82, 0x00, 0x13, 0x10, 0x83, 0x34, 0x30, 0x85, 0x57, 0x20, 0x05, 0x28, 0x80, 0x00, 0x74, 0x88,
|
||||
0x1D, 0x13, 0x8A, 0x88, 0x5E, 0x84, 0x28, 0xF1, 0x80, 0x98, 0xEF, 0x40, 0xAF, 0x7E, 0x90, 0x09,
|
||||
0x2F, 0x48, 0x00, 0x14, 0x78, 0x02, 0x0D, 0x40, 0x81, 0x1A, 0x00, 0x84, 0x49, 0xC0, 0x05, 0x5C,
|
||||
0x98, 0x84, 0x99, 0xE9, 0x81, 0x1D, 0xB0, 0x80, 0x01, 0x50, 0x05, 0x6D, 0xB8, 0x80, 0x07, 0x68,
|
||||
0x82, 0x17, 0x08, 0xAC, 0x4C, 0xEB, 0x07, 0x7D, 0x28, 0x45, 0x1A, 0x19, 0x8F, 0x5D, 0xDC, 0x07,
|
||||
0x5B, 0x80, 0x80, 0x04, 0xD8, 0x01, 0x13, 0x30, 0x81, 0xBF, 0x32, 0xA9, 0x04, 0xF8, 0x02, 0x7A,
|
||||
0x10, 0x84, 0x00, 0xD8, 0x81, 0x48, 0xE0, 0x04, 0x52, 0xC8, 0x03, 0x05, 0xB0, 0x85, 0x6B, 0x61,
|
||||
0xB6, 0xAE, 0xF2, 0x3C, 0x59, 0xEA, 0x87, 0x62, 0xFE, 0x20, 0x84, 0x0F, 0x10, 0x01, 0x3E, 0x4C,
|
||||
0x03, 0x52, 0x60, 0x82, 0x44, 0x7A, 0x80, 0x0B, 0xD8, 0x81, 0x33, 0x30, 0x83, 0x24, 0x90, 0x19,
|
||||
0x28, 0x70, 0x81, 0xE6, 0x0A, 0x81, 0x25, 0xA0, 0x01, 0x19, 0x78, 0x81, 0x06, 0x60, 0x33, 0x53,
|
||||
0x94, 0xA5, 0xD0, 0x51, 0xBA, 0x56, 0x5B, 0x2F, 0x4F, 0xF8, 0x2F, 0x29, 0xE0, 0x81, 0x0B, 0x80,
|
||||
0x00, 0x03, 0xB0, 0x80, 0x17, 0xB8, 0xBA, 0x60, 0xC0, 0x07, 0x7C, 0xD8, 0xC1, 0x19, 0xE0, 0x81,
|
||||
0x1D, 0x50, 0x00, 0x54, 0xD8, 0x07, 0x7D, 0x90, 0x18, 0x37, 0x7C, 0xA8, 0x62, 0x5A, 0x30, 0x6D,
|
||||
0xC8, 0x02, 0xE6, 0x4A, 0x81, 0x46, 0xE8, 0x83, 0x35, 0xD0, 0x82, 0x31, 0x60, 0x02, 0x1E, 0xA0,
|
||||
0xB9, 0x0F, 0xD0, 0x2B, 0x08, 0xF0, 0x80, 0x33, 0x98, 0x8F, 0x99, 0xA1, 0xBA, 0x28, 0x50, 0x82,
|
||||
0x29, 0x9A, 0x01, 0x85, 0xFA, 0x85, 0x22, 0x38, 0x80, 0x05, 0x80, 0x80, 0x02, 0x58, 0x80, 0xF2,
|
||||
0x0A, 0x47, 0x46, 0xEB, 0x07, 0x5A, 0x28, 0x00, 0x3E, 0xF0, 0x03, 0x30, 0xE8, 0x01, 0x05, 0x40,
|
||||
0xB0, 0x01, 0x28, 0x92, 0x10, 0x80, 0xBE, 0x70, 0xB0, 0x07, 0x7C, 0xC0, 0x86, 0x59, 0xC0, 0x86,
|
||||
0xF2, 0x02, 0x47, 0xD9, 0x61, 0x8E, 0x60, 0x94, 0x88, 0x7A, 0x90, 0xA5, 0xFE, 0x32, 0xAE, 0x59,
|
||||
0x70, 0x83, 0x14, 0xB8, 0x00, 0x0D, 0x08, 0x01, 0x31, 0xC8, 0x83, 0x3A, 0xFB, 0x34, 0x4B, 0x04,
|
||||
0x02, 0x11, 0x50, 0x89, 0x21, 0x28, 0x06, 0x89, 0x00, 0x85, 0x01, 0x80, 0x82, 0x35, 0x48, 0x02,
|
||||
0x2D, 0x90, 0x03, 0xA3, 0x19, 0x8A, 0x93, 0x38, 0x01, 0x0B, 0x68, 0x80, 0x89, 0xAC, 0xB3, 0x3C,
|
||||
0xD0, 0xBB, 0x75, 0xD8, 0x4A, 0x88, 0x61, 0x06, 0x02, 0xA0, 0x04, 0x4E, 0xB8, 0x04, 0x36, 0x48,
|
||||
0x82, 0x0F, 0xC0, 0x07, 0x71, 0x20, 0x80, 0xFE, 0x17, 0xE0, 0x81, 0xA1, 0x4C, 0x80, 0x20, 0xC8,
|
||||
0xC8, 0x52, 0x5B, 0xB4, 0xC5, 0xB8, 0x87, 0xD0, 0xC9, 0x07, 0x71, 0xB8, 0x86, 0xDB, 0x54, 0x06,
|
||||
0x54, 0x30, 0x82, 0x06, 0x58, 0x2E, 0x08, 0xB8, 0x80, 0x19, 0x90, 0x82, 0x35, 0x20, 0x1E, 0x30,
|
||||
0xD0, 0x26, 0xF5, 0xD8, 0x38, 0xF5, 0xCB, 0x02, 0x74, 0xE8, 0x07, 0xCD, 0xF2, 0x4A, 0x29, 0x48,
|
||||
0x83, 0x05, 0x29, 0x04, 0x3A, 0x58, 0xB1, 0x08, 0x32, 0x9B, 0x81, 0x94, 0x03, 0x4E, 0x80, 0x04,
|
||||
0x39, 0xE8, 0x83, 0x05, 0xB8, 0x86, 0xCE, 0xEC, 0x87, 0x22, 0x68, 0x84, 0x49, 0x88, 0x85, 0x4E,
|
||||
0x48, 0x83, 0x10, 0x68, 0x81, 0x7E, 0x50, 0x86, 0x02, 0xE8, 0x83, 0x77, 0x9B, 0x46, 0x0B, 0x40,
|
||||
0x07, 0x7D, 0xF4, 0x07, 0x87, 0xAB, 0xC9, 0x1B, 0xF9, 0x07, 0x71, 0x18, 0x02, 0x04, 0xD8, 0x2B,
|
||||
0xBE, 0x92, 0x00, 0x0D, 0x60, 0x81, 0x33, 0x80, 0x82, 0x33, 0x10, 0x03, 0x31, 0x98, 0x02, 0x26,
|
||||
0x98, 0xA0, 0x97, 0x34, 0xCC, 0xC8, 0xF8, 0x00, 0x41, 0xC0, 0x87, 0x19, 0x43, 0x33, 0xA7, 0xBA,
|
||||
0x00, 0x16, 0x50, 0x9C, 0x34, 0x20, 0x8A, 0xD5, 0x93, 0x82, 0x0B, 0xB0, 0x27, 0x13, 0xA0, 0x84,
|
||||
0x2E, 0x88, 0x84, 0x48, 0xE0, 0x03, 0x4A, 0x80, 0x00, 0x20, 0xDB, 0xCA, 0x7E, 0x20, 0x80, 0x61,
|
||||
0x98, 0x04, 0x4E, 0x98, 0x83, 0x35, 0xD8, 0x00, 0x37, 0xD0, 0xB7, 0x0B, 0x00, 0x84, 0x53, 0x88,
|
||||
0x04, 0x33, 0xF0, 0x01, 0x05, 0x08, 0x06, 0xEF, 0x20, 0xC5, 0x46, 0xFB, 0x87, 0xF0, 0x31, 0x80,
|
||||
0x0C, 0xE8, 0x80, 0x16, 0x20, 0x82, 0x1B, 0x00, 0x82, 0xDD, 0xEB, 0x81, 0x2E, 0x30, 0x83, 0xD6,
|
||||
0xE3, 0x01, 0x1F, 0xD8, 0x81, 0x1B, 0xF8, 0xB9, 0x05, 0x18, 0x81, 0x59, 0x58, 0x50, 0x30, 0x03,
|
||||
0xC7, 0xEF, 0x48, 0xC4, 0x14, 0x10, 0xFE, 0x01, 0x2A, 0xFA, 0xB4, 0x24, 0x98, 0x82, 0x1E, 0x90,
|
||||
0x00, 0x08, 0x90, 0x06, 0x69, 0x28, 0x00, 0x09, 0xA0, 0x04, 0x5D, 0x90, 0x05, 0x56, 0x50, 0x03,
|
||||
0x0B, 0x40, 0xBA, 0x37, 0xC4, 0x8B, 0x0E, 0x28, 0x85, 0x33, 0x60, 0x82, 0x29, 0x70, 0x81, 0x0F,
|
||||
0xED, 0x87, 0x18, 0xB8, 0x01, 0x0F, 0xB4, 0xC7, 0x33, 0x48, 0x00, 0x99, 0x64, 0x89, 0x7C, 0x40,
|
||||
0x35, 0x3B, 0xD1, 0x07, 0x71, 0x50, 0x81, 0x0C, 0xD8, 0xAB, 0x04, 0x48, 0x80, 0x07, 0xD0, 0x80,
|
||||
0x41, 0xCD, 0xA2, 0x6C, 0xB4, 0x00, 0x25, 0x2D, 0x02, 0x09, 0x33, 0xAF, 0xB9, 0x34, 0xB2, 0x7D,
|
||||
0x08, 0x87, 0x23, 0xA9, 0x20, 0x11, 0x00, 0x82, 0x3B, 0x5B, 0xC7, 0x5E, 0x58, 0xC9, 0x45, 0x59,
|
||||
0x40, 0x17, 0xB8, 0x81, 0x0F, 0x18, 0x87, 0xC2, 0x13, 0x3E, 0xE5, 0x98, 0x05, 0x02, 0x30, 0x81,
|
||||
0x6D, 0x5C, 0x00, 0x42, 0x90, 0xA5, 0x00, 0xA8, 0x85, 0x28, 0xE0, 0x04, 0x5D, 0x08, 0x84, 0x26,
|
||||
0x28, 0x80, 0x68, 0x80, 0x9D, 0x34, 0x73, 0x09, 0x61, 0x74, 0xC3, 0xBB, 0xC4, 0x86, 0x60, 0xF0,
|
||||
0x84, 0x2F, 0x20, 0x82, 0x79, 0x22, 0x82, 0x14, 0x08, 0x02, 0x5B, 0xB8, 0x89, 0x19, 0xC1, 0xD3,
|
||||
0x73, 0x4B, 0xB7, 0x88, 0xF8, 0xB2, 0x70, 0x08, 0x82, 0x0B, 0x20, 0x12, 0x7B, 0x6A, 0x80, 0x22,
|
||||
0xF9, 0x00, 0x37, 0x25, 0x8F, 0x05, 0x8B, 0x86, 0x61, 0x08, 0x06, 0x7B, 0x58, 0xD4, 0x37, 0xAC,
|
||||
0x18, 0x7D, 0x60, 0x86, 0x11, 0x78, 0x25, 0x65, 0x98, 0xA5, 0x6B, 0x98, 0x43, 0x5C, 0xA0, 0x04,
|
||||
0x28, 0xC8, 0xB3, 0x8C, 0xB4, 0x93, 0x43, 0x44, 0x35, 0x34, 0x2B, 0xB5, 0xCD, 0xDA, 0x07, 0x31,
|
||||
0x4C, 0x36, 0x3E, 0x2B, 0x37, 0xC5, 0xA8, 0x93, 0x1A, 0xDC, 0x07, 0x54, 0xB8, 0x00, 0x11, 0xE0,
|
||||
0x81, 0x6B, 0x73, 0xCD, 0x0C, 0xFE, 0x68, 0x80, 0x1B, 0x48, 0x01, 0x08, 0x40, 0x2A, 0x48, 0xD3,
|
||||
0x4A, 0xC4, 0x28, 0xC5, 0x1A, 0x92, 0x08, 0x59, 0x82, 0xB2, 0x62, 0xAA, 0xB0, 0x02, 0xC8, 0x43,
|
||||
0x08, 0xF0, 0x82, 0x05, 0x65, 0xB4, 0xFB, 0xE1, 0x48, 0x38, 0xAA, 0xC0, 0x36, 0x24, 0xD8, 0x3B,
|
||||
0xF1, 0x23, 0xCE, 0x3A, 0x53, 0x13, 0x08, 0x05, 0x33, 0x98, 0xA2, 0x06, 0x08, 0x86, 0x7E, 0x98,
|
||||
0x05, 0x0B, 0x10, 0x81, 0x1D, 0x10, 0x01, 0x05, 0x90, 0x06, 0xF3, 0x82, 0x09, 0xB9, 0x2C, 0x58,
|
||||
0x93, 0x9B, 0xA5, 0x91, 0x59, 0x07, 0x65, 0x50, 0x86, 0x71, 0xB0, 0x56, 0x88, 0xB1, 0xD1, 0xAE,
|
||||
0x42, 0xB7, 0x5F, 0x1C, 0x19, 0xD0, 0x83, 0xA8, 0xE1, 0xEB, 0x07, 0x0A, 0x10, 0x02, 0x63, 0xD0,
|
||||
0x05, 0x3E, 0x18, 0x83, 0x25, 0x28, 0x00, 0x69, 0xC8, 0x87, 0x6B, 0x38, 0x80, 0x55, 0x1C, 0xCA,
|
||||
0x0B, 0xA0, 0x05, 0x8A, 0x4D, 0x9B, 0x96, 0x5D, 0x2A, 0xD8, 0xFC, 0x9C, 0xE2, 0xFB, 0x07, 0x78,
|
||||
0xF0, 0xC7, 0xE4, 0x68, 0xD0, 0x8E, 0x3C, 0x26, 0x9B, 0xFC, 0x45, 0x12, 0xB9, 0x06, 0x0A, 0x30,
|
||||
0x86, 0x2F, 0xE5, 0x03, 0x33, 0xE0, 0x01, 0x08, 0xB0, 0x07, 0xF2, 0xB8, 0x00, 0x2C, 0xE0, 0x03,
|
||||
0x3E, 0xD0, 0x02, 0x29, 0x30, 0x80, 0x6B, 0xB8, 0xD9, 0xAD, 0xF4, 0x45, 0xFE, 0xD3, 0x2C, 0x88,
|
||||
0x81, 0x43, 0x93, 0x0B, 0x47, 0xBA, 0xE0, 0x3F, 0x5E, 0x2C, 0xBE, 0x80, 0xB2, 0x80, 0x5A, 0xA0,
|
||||
0x04, 0x56, 0x08, 0x12, 0x13, 0x90, 0x41, 0xF2, 0xD8, 0x80, 0x40, 0xD0, 0x85, 0x48, 0x88, 0x94,
|
||||
0x06, 0x48, 0x2D, 0x52, 0x2C, 0x58, 0x6D, 0x21, 0xA6, 0x89, 0x28, 0x44, 0xBD, 0xDD, 0x5B, 0xAE,
|
||||
0xA2, 0x25, 0xB9, 0xB0, 0xCB, 0x45, 0x49, 0xCA, 0x3F, 0x68, 0x82, 0x1B, 0x80, 0x80, 0x60, 0x75,
|
||||
0x83, 0x06, 0xF8, 0x52, 0xB1, 0x59, 0x60, 0x84, 0x2E, 0x30, 0x81, 0x59, 0xB8, 0xD8, 0xCE, 0x5C,
|
||||
0xDD, 0x9E, 0xA5, 0x93, 0xF9, 0x9C, 0x5B, 0xD6, 0xEA, 0x45, 0x93, 0xC3, 0xDC, 0x9E, 0x2D, 0x91,
|
||||
0xF5, 0xC2, 0x87, 0x79, 0xB2, 0x80, 0x0F, 0x58, 0x80, 0x5F, 0x98, 0xA5, 0x7D, 0xE8, 0x80, 0x5A,
|
||||
0x30, 0x06, 0x5C, 0x60, 0x85, 0x1D, 0x18, 0x80, 0xEE, 0x64, 0x5D, 0x1B, 0x4A, 0x0E, 0xCF, 0xDB,
|
||||
0xDA, 0xBE, 0xDD, 0x9A, 0xFB, 0x89, 0x5D, 0x8A, 0xB5, 0xC9, 0xEF, 0x58, 0xB0, 0xB5, 0xAC, 0x59,
|
||||
0xEA, 0x05, 0x85, 0x05, 0x08, 0x82, 0x1B, 0xF0, 0x80, 0x20, 0xF0, 0x56, 0x12, 0x49, 0x5E, 0xE8,
|
||||
0x3D, 0x57, 0xE6, 0x88, 0x9D, 0xDA, 0x7D, 0x5E, 0xAF, 0x9D, 0x98, 0x9C, 0x4D, 0x0C, 0x70, 0x94,
|
||||
0x4D, 0x0A, 0x03, 0x9D, 0xB8, 0x70, 0x28, 0x58, 0xEB, 0x85, 0xF9, 0x45, 0x07, 0x71, 0x88, 0xB2,
|
||||
0xE4, 0xB5, 0x5D, 0xE9, 0xAD, 0x31, 0x3C, 0x31, 0xDF, 0xF3, 0xD1, 0x2F, 0xF5, 0x15, 0x99, 0x1A,
|
||||
0x5C, 0x8E, 0x92, 0x1B, 0x11, 0x7F, 0x54, 0xB8, 0x63, 0xC2, 0xDF, 0x85, 0x4B, 0xE0, 0x05, 0x46,
|
||||
0xE0, 0x3F, 0x62, 0xE0, 0x07, 0x86, 0xE0, 0x08, 0x96, 0xE0, 0x09, 0xA6, 0xE0, 0x0A, 0xB6, 0xE0,
|
||||
0x0B, 0xC6, 0x60, 0xF0, 0x08, 0x08, 0x00, 0x3B,
|
||||
};
|
||||
|
||||
#ifdef ROMFS_DIRENTRY_HEAD
|
||||
static const ROMFS_DIRENTRY image_chibios_dir = { 0, 0, ROMFS_DIRENTRY_HEAD, "chibios.bmp", 634*16+8, image_chibios };
|
||||
#undef ROMFS_DIRENTRY_HEAD
|
||||
#define ROMFS_DIRENTRY_HEAD &image_chibios_dir
|
||||
#endif
|
1660
demos/modules/gwin/widgets/romfs_img_ugfx.h
Normal file
1660
demos/modules/gwin/widgets/romfs_img_ugfx.h
Normal file
File diff suppressed because it is too large
Load diff
Before Width: | Height: | Size: 202 B After Width: | Height: | Size: 202 B |
BIN
demos/modules/gwin/widgets/rsc/romfs_img_ugfx.bmp
Normal file
BIN
demos/modules/gwin/widgets/rsc/romfs_img_ugfx.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
|
@ -10,7 +10,7 @@ FEATURE: Added gdispGDrawThickLine() by user jpa-
|
|||
DEPRECATE: TDISP module removed
|
||||
FIX: Console does not execute gwinPrintf() anymore if not visible
|
||||
FEATURE: Added gwinGetColor() and gwinGetBgColor()
|
||||
FEATURE: Console does now have an optional buffer (GWIN_CONSOLE_USE_HISTORY)
|
||||
FEATURE: Console now has an optional backing store buffer (GWIN_CONSOLE_USE_HISTORY)
|
||||
FEATURE: Added smooth scrolling to list widget
|
||||
FEATURE: Increased performance of gwinListAddItem()
|
||||
FEATURE: Added FreeRTOS port
|
||||
|
@ -20,6 +20,19 @@ FEATURE: New GFILE module to abstract File IO.
|
|||
FEATURE: Image file handling changed to use new GFILE module.
|
||||
DEPRECTATE: Old image opening functions deprecated.
|
||||
FEATURE: Restructure and simplify the include path for GFX
|
||||
FEATURE: Added LGDP4532 driver by user shilow
|
||||
FIX: Updated board files to support api changes in ChibiOS/RT 2.6.4
|
||||
FEATURE: Support for ChibiOS/RT 3.x
|
||||
FEATURE: Added gwinProgressbarStop() and gwinProgressbarReset()
|
||||
FEATURE: Added generic ILI93xx driver by xlh1460
|
||||
FEATURE: Added gwinListEnableRender()
|
||||
FEATURE: Added gwinLabelSetAttribute()
|
||||
FEATURE: Complete restructure of the GAUDIN and GAUDOUT into a common GAUDIO module
|
||||
FEATURE: Added a PWM audio play driver
|
||||
FEATURE: Update GADC audio recording driver to new GAUDIO format
|
||||
FEATURE: Added vs1053 audio play driver
|
||||
FEATURE: Added GAUDIO wave-play demo
|
||||
FEATURE: Added many GWIN simple demo's and updated the combined widget demo
|
||||
|
||||
|
||||
*** changes after 1.9 ***
|
15
docs/roadmap.txt
Normal file
15
docs/roadmap.txt
Normal file
|
@ -0,0 +1,15 @@
|
|||
Things to include in 2.1 (Q2 2014)
|
||||
- VS1053 audio driver
|
||||
- FreeRTOS port (finalize)
|
||||
- GWIN children support (finalize)
|
||||
- Rreplace the console printf with the one from GFILE
|
||||
|
||||
|
||||
Things to include in 2.2 (unknown)
|
||||
- Support Mikromedia STM32+ board
|
||||
- Virtual keyboard widget
|
||||
- LineEdit widget
|
||||
- RAM file system for GFILE
|
||||
- FatFS file system for GFILE
|
||||
- Improve visual aspects of widgets (use gfxBlend())
|
||||
- Linux frame buffer support
|
BIN
docs/rsc/ugfx_logo_doxygen.png
Normal file
BIN
docs/rsc/ugfx_logo_doxygen.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
|
@ -8,10 +8,6 @@
|
|||
/**
|
||||
* @file drivers/gadc/AT91SAM7/gadc_lld.c
|
||||
* @brief GADC - Periodic ADC driver source file for the AT91SAM7 cpu.
|
||||
*
|
||||
* @defgroup Driver Driver
|
||||
* @ingroup GADC
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
@ -20,69 +16,73 @@
|
|||
|
||||
#include "src/gadc/driver.h"
|
||||
|
||||
static uint32_t nextfreq;
|
||||
|
||||
// Forward references to ISR routines
|
||||
static void ISR_CompleteI(ADCDriver *adcp, adcsample_t *buffer, size_t n);
|
||||
static void ISR_ErrorI(ADCDriver *adcp, adcerror_t err);
|
||||
|
||||
static ADCConversionGroup acg = {
|
||||
FALSE, // circular
|
||||
1, // num_channels
|
||||
GADC_ISR_CompleteI, // end_cb
|
||||
GADC_ISR_ErrorI, // error_cb
|
||||
ISR_CompleteI, // end_cb
|
||||
ISR_ErrorI, // error_cb
|
||||
0, // channelselects
|
||||
0, // trigger
|
||||
0, // frequency
|
||||
};
|
||||
|
||||
static void ISR_CompleteI(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
|
||||
(void) adcp;
|
||||
(void) buffer;
|
||||
|
||||
gadcGotDataI(n);
|
||||
}
|
||||
|
||||
static void ISR_ErrorI(ADCDriver *adcp, adcerror_t err) {
|
||||
(void) adcp;
|
||||
(void) err;
|
||||
|
||||
gadcGotDataI(0);
|
||||
}
|
||||
|
||||
void gadc_lld_init(void) {
|
||||
adcStart(&ADCD1, 0);
|
||||
}
|
||||
|
||||
size_t gadc_lld_samples_per_conversion(uint32_t physdev) {
|
||||
size_t cnt;
|
||||
int i;
|
||||
size_t gadc_lld_samplesperconversion(uint32_t physdev) {
|
||||
size_t samples;
|
||||
|
||||
/* The AT91SAM7 has AD0..7 - physdev is a bitmap of those channels */
|
||||
for(cnt = 0, i = 0; i < 8; i++, physdev >>= 1)
|
||||
for(samples = 0; physdev; physdev >>= 1)
|
||||
if (physdev & 0x01)
|
||||
cnt++;
|
||||
return cnt;
|
||||
samples++;
|
||||
return samples;
|
||||
}
|
||||
|
||||
void gadc_lld_start_timer(uint32_t physdev, uint32_t frequency) {
|
||||
(void) physdev;
|
||||
/**
|
||||
* The AT91SAM7 ADC driver supports triggering the ADC using a timer without having to implement
|
||||
* an interrupt handler for the timer. The driver also initialises the timer correctly for us.
|
||||
* Because we aren't trapping the interrupt ourselves we can't increment GADC_Timer_Missed if an
|
||||
* interrupt is missed.
|
||||
*/
|
||||
acg.frequency = frequency;
|
||||
void gadc_lld_start_timerI(uint32_t frequency) {
|
||||
// Nothing to do here - the AT91SAM7 adc driver uses an internal timer
|
||||
// which is set up when the job is started. We save this here just to
|
||||
// indicate the timer should be re-initialised on the next timer job
|
||||
nextfreq = frequency;
|
||||
}
|
||||
|
||||
void gadc_lld_stop_timer(uint32_t physdev) {
|
||||
(void) physdev;
|
||||
if ((acg.trigger & ~ADC_TRIGGER_SOFTWARE) == ADC_TRIGGER_TIMER)
|
||||
adcStop(&ADCD1);
|
||||
void gadc_lld_stop_timerI(void) {
|
||||
// Nothing to do here. The AT91SAM7 adc driver automatically turns off timer interrupts
|
||||
// on completion of the job
|
||||
}
|
||||
|
||||
void gadc_lld_adc_timerI(GadcLldTimerData *pgtd) {
|
||||
/**
|
||||
* We don't need to calculate num_channels because the AT91SAM7 ADC does this for us.
|
||||
*/
|
||||
acg.channelselects = pgtd->physdev;
|
||||
acg.trigger = pgtd->now ? (ADC_TRIGGER_TIMER|ADC_TRIGGER_SOFTWARE) : ADC_TRIGGER_TIMER;
|
||||
|
||||
adcStartConversionI(&ADCD1, &acg, pgtd->buffer, pgtd->count);
|
||||
|
||||
/* Next time assume the same (still running) timer */
|
||||
acg.frequency = 0;
|
||||
void gadc_lld_timerjobI(GadcTimerJob *pj) {
|
||||
acg.channelselects = pj->physdev;
|
||||
acg.trigger = ADC_TRIGGER_TIMER;
|
||||
acg.frequency = nextfreq;
|
||||
nextfreq = 0; // Next job use the same timer
|
||||
adcStartConversionI(&ADCD1, &acg, pj->buffer, pj->todo);
|
||||
}
|
||||
|
||||
void gadc_lld_adc_nontimerI(GadcLldNonTimerData *pgntd) {
|
||||
/**
|
||||
* We don't need to calculate num_channels because the AT91SAM7 ADC does this for us.
|
||||
*/
|
||||
acg.channelselects = pgntd->physdev;
|
||||
void gadc_lld_nontimerjobI(GadcNonTimerJob *pj) {
|
||||
acg.channelselects = pj->physdev;
|
||||
acg.trigger = ADC_TRIGGER_SOFTWARE;
|
||||
adcStartConversionI(&ADCD1, &acg, pgntd->buffer, 1);
|
||||
adcStartConversionI(&ADCD1, &acg, pj->buffer, 1);
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GADC */
|
||||
/** @} */
|
||||
|
|
|
@ -35,18 +35,13 @@
|
|||
* @note For the AT91SAM7 ADC driver, it post-dates the finding of the bug so we safely
|
||||
* say that the bug doesn't exist for this driver.
|
||||
*/
|
||||
#define ADC_ISR_FULL_CODE_BUG FALSE
|
||||
#define CHIBIOS_ADC_ISR_FULL_CODE_BUG FALSE
|
||||
|
||||
/**
|
||||
* @brief The maximum sample frequency supported by this CPU
|
||||
*/
|
||||
#define GADC_MAX_SAMPLE_FREQUENCY 132000
|
||||
|
||||
/**
|
||||
* @brief The number of bits in a sample
|
||||
*/
|
||||
#define GADC_BITS_PER_SAMPLE AT91_ADC1_RESOLUTION
|
||||
|
||||
/**
|
||||
* @brief The sample format
|
||||
*/
|
||||
|
|
|
@ -5,14 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gaudio/Win32/gaudio_play_config.h
|
||||
* @brief GAUDIO Play Driver config file.
|
||||
*
|
||||
* @addtogroup GAUDIO
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GAUDIO_PLAY_CONFIG_H
|
||||
#define GAUDIO_PLAY_CONFIG_H
|
||||
|
||||
|
@ -22,42 +14,16 @@
|
|||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief The maximum sample frequency supported by this audio device
|
||||
*/
|
||||
#define GAUDIO_PLAY_MAX_SAMPLE_FREQUENCY 44100
|
||||
|
||||
/**
|
||||
* @brief The number of audio formats supported by this driver
|
||||
*/
|
||||
#define GAUDIO_PLAY_NUM_FORMATS 2
|
||||
|
||||
/**
|
||||
* @brief The available audio sample formats in order of preference
|
||||
*/
|
||||
#define GAUDIO_PLAY_FORMAT1 ARRAY_DATA_16BITSIGNED
|
||||
#define GAUDIO_PLAY_FORMAT2 ARRAY_DATA_8BITUNSIGNED
|
||||
|
||||
/**
|
||||
* @brief The number of audio channels supported by this driver
|
||||
*/
|
||||
#define GAUDIO_PLAY_NUM_CHANNELS 2
|
||||
|
||||
/**
|
||||
* @brief Whether each channel is mono or stereo
|
||||
*/
|
||||
#define GAUDIO_PLAY_CHANNEL0_IS_STEREO FALSE
|
||||
#define GAUDIO_PLAY_CHANNEL1_IS_STEREO TRUE
|
||||
|
||||
/**
|
||||
* @brief The list of audio channel names and their uses
|
||||
* @{
|
||||
*/
|
||||
#define GAUDIO_PLAY_MONO 0
|
||||
#define GAUDIO_PLAY_STEREO 1
|
||||
/** @} */
|
||||
|
||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_PLAY */
|
||||
|
||||
#endif /* GAUDIO_PLAY_CONFIG_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,11 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gaudio/Win32/gaudio_play_lld.c
|
||||
* @brief GAUDIO - Play Driver file for Win32.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_PLAY
|
||||
|
@ -47,7 +42,7 @@ static DWORD threadID;
|
|||
*************************************************************************/
|
||||
|
||||
static bool_t senddata(WAVEHDR *pwh) {
|
||||
GAudioData *paud;
|
||||
GDataBuffer *paud;
|
||||
|
||||
// Get the next data block to send
|
||||
gfxSystemLock();
|
||||
|
@ -94,7 +89,7 @@ static DWORD WINAPI waveProc(LPVOID arg) {
|
|||
|
||||
// Give the buffer back to the Audio Free List
|
||||
gfxSystemLock();
|
||||
gaudioPlayReleaseDataBlockI((GAudioData *)pwh->dwUser);
|
||||
gaudioPlayReleaseDataBlockI((GDataBuffer *)pwh->dwUser);
|
||||
gfxSystemUnlock();
|
||||
pwh->lpData = 0;
|
||||
nQueuedBuffers--;
|
||||
|
|
|
@ -5,14 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gaudio/Win32/gaudio_record_config.h
|
||||
* @brief GAUDIO Record Driver config file.
|
||||
*
|
||||
* @addtogroup GAUDIO
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GAUDIO_RECORD_CONFIG_H
|
||||
#define GAUDIO_RECORD_CONFIG_H
|
||||
|
||||
|
@ -22,42 +14,16 @@
|
|||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief The maximum sample frequency supported by this audio device
|
||||
*/
|
||||
#define GAUDIO_RECORD_MAX_SAMPLE_FREQUENCY 44100
|
||||
|
||||
/**
|
||||
* @brief The number of audio formats supported by this driver
|
||||
*/
|
||||
#define GAUDIO_RECORD_NUM_FORMATS 2
|
||||
|
||||
/**
|
||||
* @brief The available audio sample formats in order of preference
|
||||
*/
|
||||
#define GAUDIO_RECORD_FORMAT1 ARRAY_DATA_16BITSIGNED
|
||||
#define GAUDIO_RECORD_FORMAT2 ARRAY_DATA_8BITUNSIGNED
|
||||
|
||||
/**
|
||||
* @brief The number of audio channels supported by this driver
|
||||
*/
|
||||
#define GAUDIO_RECORD_NUM_CHANNELS 2
|
||||
|
||||
/**
|
||||
* @brief Whether each channel is mono or stereo
|
||||
*/
|
||||
#define GAUDIO_RECORD_CHANNEL0_IS_STEREO FALSE
|
||||
#define GAUDIO_RECORD_CHANNEL1_IS_STEREO TRUE
|
||||
|
||||
/**
|
||||
* @brief The list of audio channels and their uses
|
||||
* @{
|
||||
*/
|
||||
#define GAUDIO_RECORD_MONO 0
|
||||
#define GAUDIO_RECORD_STEREO 1
|
||||
/** @} */
|
||||
|
||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */
|
||||
|
||||
#endif /* GAUDIO_RECORD_CONFIG_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,11 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gaudio/Win32/gaudio_record_lld.c
|
||||
* @brief GAUDIO - Record Driver file for Win32.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_RECORD
|
||||
|
@ -47,7 +42,7 @@ static DWORD threadID;
|
|||
*************************************************************************/
|
||||
|
||||
static bool_t getbuffer(WAVEHDR *pwh) {
|
||||
GAudioData *paud;
|
||||
GDataBuffer *paud;
|
||||
|
||||
// Get the next data block to send
|
||||
gfxSystemLock();
|
||||
|
@ -81,7 +76,7 @@ static bool_t getbuffer(WAVEHDR *pwh) {
|
|||
static DWORD WINAPI waveProc(LPVOID arg) {
|
||||
MSG msg;
|
||||
WAVEHDR *pwh;
|
||||
GAudioData *paud;
|
||||
GDataBuffer *paud;
|
||||
(void) arg;
|
||||
|
||||
while (GetMessage(&msg, 0, 0, 0)) {
|
||||
|
@ -93,7 +88,7 @@ static DWORD WINAPI waveProc(LPVOID arg) {
|
|||
waveInUnprepareHeader(ah, pwh, sizeof(WAVEHDR));
|
||||
|
||||
// Save the buffer in the audio record list
|
||||
paud = (GAudioData *)pwh->dwUser;
|
||||
paud = (GDataBuffer *)pwh->dwUser;
|
||||
paud->len = pwh->dwBytesRecorded;
|
||||
gfxSystemLock();
|
||||
gaudioRecordSaveDataBlockI(paud);
|
||||
|
|
|
@ -3,3 +3,7 @@ GFXSRC += $(GFXLIB)/drivers/gaudio/gadc/gaudio_record_lld.c
|
|||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/gaudio/gadc
|
||||
|
||||
# Make sure the GADC sub-system is turned on
|
||||
GFXDEFS += -DGFX_USE_GADC=GAUDIO_NEED_RECORD
|
||||
|
||||
|
|
|
@ -5,14 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gaudio/gadc/gaudio_record_board_template.h
|
||||
* @brief GAUDIO Record Driver board config board file
|
||||
*
|
||||
* @addtogroup GAUDIO
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GAUDIO_RECORD_BOARD_H
|
||||
#define _GAUDIO_RECORD_BOARD_H
|
||||
|
||||
|
@ -20,31 +12,16 @@
|
|||
/* Audio inputs on this board */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief The number of audio channels supported by this driver
|
||||
* @note This is an example
|
||||
*/
|
||||
#define GAUDIO_RECORD_NUM_CHANNELS 1
|
||||
|
||||
/**
|
||||
* @brief The list of audio channels and their uses
|
||||
* @note This is an example
|
||||
* @{
|
||||
*/
|
||||
#define GAUDIO_RECORD_MICROPHONE 0
|
||||
/** @} */
|
||||
#define GAUDIO_RECORD_CHANNEL0_IS_STEREO FALSE
|
||||
|
||||
#define GAUDIO_RECORD_MICROPHONE 0
|
||||
|
||||
/**
|
||||
* @brief The audio channel to GADC physical device assignment
|
||||
* @note This is an example
|
||||
* @{
|
||||
*/
|
||||
#ifdef GAUDIO_RECORD_LLD_IMPLEMENTATION
|
||||
static uint32_t gaudin_lld_physdevs[GAUDIO_RECORD_NUM_CHANNELS] = {
|
||||
static uint32_t gaudio_gadc_physdevs[GAUDIO_RECORD_NUM_CHANNELS] = {
|
||||
GADC_PHYSDEV_MICROPHONE,
|
||||
};
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#endif /* _GAUDIO_RECORD_BOARD_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,14 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gaudio/gadc/gaudio_record_config.h
|
||||
* @brief GAUDIN Record Driver config file.
|
||||
*
|
||||
* @addtogroup GAUDIO
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GAUDIO_RECORD_CONFIG_H
|
||||
#define GAUDIO_RECORD_CONFIG_H
|
||||
|
||||
|
@ -22,38 +14,13 @@
|
|||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief The audio record sample type
|
||||
* @details For this driver it matches the cpu sample type
|
||||
*/
|
||||
typedef adcsample_t audio_record_sample_t;
|
||||
|
||||
/**
|
||||
* @brief The maximum sample frequency supported by this audio device
|
||||
* @details For this driver it matches the GADC maximum high speed sample rate
|
||||
*/
|
||||
#define GAUDIO_RECORD_MAX_SAMPLE_FREQUENCY GADC_MAX_HIGH_SPEED_SAMPLERATE
|
||||
#define GAUDIO_RECORD_NUM_FORMATS 1
|
||||
#define GAUDIO_RECORD_FORMAT1 GADC_SAMPLE_FORMAT
|
||||
|
||||
/**
|
||||
* @brief The number of bits in a sample
|
||||
* @details For this driver it matches the cpu sample bits
|
||||
*/
|
||||
#define GAUDIO_RECORD_BITS_PER_SAMPLE GADC_BITS_PER_SAMPLE
|
||||
|
||||
/**
|
||||
* @brief The format of an audio sample
|
||||
* @details For this driver it matches the cpu sample format
|
||||
*/
|
||||
#define GAUDIO_RECORD_SAMPLE_FORMAT GADC_SAMPLE_FORMAT
|
||||
|
||||
/**
|
||||
* For the GAUDIO driver that uses GADC - all the remaining config definitions are specific
|
||||
* to the board.
|
||||
*/
|
||||
/* Include the user supplied board definitions */
|
||||
#include "gaudio_record_board.h"
|
||||
|
||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */
|
||||
|
||||
#endif /* GAUDIO_RECORD_CONFIG_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,22 +5,7 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gaudio/gadc/gaudio_record_lld.c
|
||||
* @brief GAUDIO - Record Driver file for using the cpu ADC (via GADC).
|
||||
*
|
||||
* @addtogroup GAUDIO
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* We are now implementing the driver - pull in our channel table
|
||||
* from the board definitions.
|
||||
*/
|
||||
#define GAUDIO_RECORD_IMPLEMENTATION
|
||||
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_RECORD
|
||||
|
@ -33,30 +18,38 @@
|
|||
/* Include the driver defines */
|
||||
#include "src/gaudio/driver_record.h"
|
||||
|
||||
static void gadcCallbackI(void) {
|
||||
GDataBuffer *pd;
|
||||
|
||||
pd = gadcHighSpeedGetDataI();
|
||||
if (pd)
|
||||
gaudioRecordSaveDataBlockI(pd);
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
void gaudin_lld_init(const gaudin_params *paud) {
|
||||
bool_t gaudio_record_lld_init(uint16_t channel, uint32_t frequency, ArrayDataFormat format) {
|
||||
/* Check the parameters */
|
||||
if (channel >= GAUDIO_RECORD_NUM_CHANNELS || frequency > GAUDIO_RECORD_MAX_SAMPLE_FREQUENCY || format != GAUDIO_RECORD_FORMAT1)
|
||||
return FALSE;
|
||||
|
||||
/* Setup the high speed GADC */
|
||||
gadcHighSpeedInit(gaudin_lld_physdevs[paud->channel], paud->frequency, paud->buffer, paud->bufcount, paud->samplesPerEvent);
|
||||
gadcHighSpeedInit(gaudio_gadc_physdevs[channel], frequency);
|
||||
|
||||
/* Register ourselves for ISR callbacks */
|
||||
gadcHighSpeedSetISRCallback(GAUDIN_ISR_CompleteI);
|
||||
gadcHighSpeedSetISRCallback(gadcCallbackI);
|
||||
|
||||
/**
|
||||
* The gadc driver handles any errors for us by restarting the transaction so there is
|
||||
* no need for us to setup anything for GAUDIN_ISR_ErrorI()
|
||||
*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void gaudin_lld_start(void) {
|
||||
void gaudio_record_lld_start(void) {
|
||||
gadcHighSpeedStart();
|
||||
}
|
||||
|
||||
void gaudin_lld_stop(void) {
|
||||
void gaudio_record_lld_stop(void) {
|
||||
gadcHighSpeedStop();
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */
|
||||
/** @} */
|
||||
|
|
5
drivers/gaudio/pwm/driver.mk
Normal file
5
drivers/gaudio/pwm/driver.mk
Normal file
|
@ -0,0 +1,5 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/gaudio/pwm/gaudio_play_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/gaudio/pwm
|
38
drivers/gaudio/pwm/gaudio_play_board_template.h
Normal file
38
drivers/gaudio/pwm/gaudio_play_board_template.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* 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 GAUDIO_PLAY_BOARD_H
|
||||
#define GAUDIO_PLAY_BOARD_H
|
||||
|
||||
/*
|
||||
* This routine is defined in the driver - the timer interrupt should call this routine.
|
||||
*
|
||||
* static void gaudio_play_pwm_timer_callbackI(void);
|
||||
*
|
||||
*/
|
||||
|
||||
static bool gaudio_play_pwm_setup(uint32_t frequency, ArrayDataFormat format) {
|
||||
/* Initialise the PWM - use a midpoint value for the initial PWM value */
|
||||
/* Initialise the timer interrupt @ frequency */
|
||||
/* Return FALSE if any parameter invalid */
|
||||
}
|
||||
|
||||
static void gaudio_play_pwm_start(void) {
|
||||
/* Start the PWM */
|
||||
/* Start the timer interrupt */
|
||||
}
|
||||
|
||||
static void gaudio_play_pwm_stop(void) {
|
||||
/* Stop the timer interrupt */
|
||||
/* Stop the PWM */
|
||||
}
|
||||
|
||||
static void gaudio_play_pwm_setI(uint16_t value) {
|
||||
/* Set the PWM value */
|
||||
}
|
||||
|
||||
#endif /* GAUDIO_PLAY_BOARD_H */
|
34
drivers/gaudio/pwm/gaudio_play_config.h
Normal file
34
drivers/gaudio/pwm/gaudio_play_config.h
Normal file
|
@ -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 GAUDIO_PLAY_CONFIG_H
|
||||
#define GAUDIO_PLAY_CONFIG_H
|
||||
|
||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_PLAY
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* These may need to change for your hardware. If so copy this file to your
|
||||
* project directory and then alter it.
|
||||
* The maximum sample frequency should be less than
|
||||
* Max PWM Clock / (2 ^ Bits per sample)
|
||||
* eg. For the AT91SAM7 max PWM clock = 48MHz / 2
|
||||
* For 10 bit PWM accuracy that means GAUDIO_PLAY_MAX_SAMPLE_FREQUENCY = 23,437 Hz
|
||||
*/
|
||||
#define GAUDIO_PLAY_MAX_SAMPLE_FREQUENCY 22000
|
||||
#define GAUDIO_PLAY_NUM_FORMATS 2
|
||||
#define GAUDIO_PLAY_FORMAT1 ARRAY_DATA_10BITUNSIGNED
|
||||
#define GAUDIO_PLAY_FORMAT2 ARRAY_DATA_8BITUNSIGNED
|
||||
#define GAUDIO_PLAY_NUM_CHANNELS 1
|
||||
#define GAUDIO_PLAY_CHANNEL0_IS_STEREO FALSE
|
||||
#define GAUDIO_PLAY_MONO 0
|
||||
|
||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_PLAY */
|
||||
|
||||
#endif /* GAUDIO_PLAY_CONFIG_H */
|
117
drivers/gaudio/pwm/gaudio_play_lld.c
Normal file
117
drivers/gaudio/pwm/gaudio_play_lld.c
Normal file
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_PLAY
|
||||
|
||||
/* Include the driver defines */
|
||||
#include "src/gaudio/driver_play.h"
|
||||
|
||||
/* Forward definition */
|
||||
static void gaudio_play_pwm_timer_callbackI(void);
|
||||
|
||||
/* Include the board interface */
|
||||
#include "gaudio_play_board.h"
|
||||
|
||||
static GDataBuffer *pplay;
|
||||
static ArrayDataFormat playfmt;
|
||||
static size_t playlen;
|
||||
static uint8_t *pdata;
|
||||
|
||||
static void gaudio_play_pwm_timer_callbackI(void) {
|
||||
if (pplay) {
|
||||
|
||||
// Get the next value from the current data buffer
|
||||
if (gfxSampleFormatBits(playfmt) > 8) {
|
||||
gaudio_play_pwm_setI(*(uint16_t *)pdata);
|
||||
pdata += 2;
|
||||
} else {
|
||||
gaudio_play_pwm_setI(*pdata);
|
||||
pdata++;
|
||||
}
|
||||
|
||||
// Are we done yet
|
||||
if (--playlen)
|
||||
return;
|
||||
gaudioPlayReleaseDataBlockI(pplay);
|
||||
|
||||
// Get a new data buffer
|
||||
if (!(pplay = gaudioPlayGetDataBlockI())) {
|
||||
// All is done
|
||||
gaudioPlayDoneI();
|
||||
return;
|
||||
}
|
||||
|
||||
} else {
|
||||
// Get a new data buffer
|
||||
if (!(pplay = gaudioPlayGetDataBlockI()))
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up ready for the new buffer
|
||||
playlen = pplay->len;
|
||||
if (gfxSampleFormatBits(playfmt) > 8)
|
||||
playlen >>= 1;
|
||||
pdata = (uint8_t *)(pplay+1);
|
||||
}
|
||||
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
bool_t gaudio_play_lld_init(uint16_t channel, uint32_t frequency, ArrayDataFormat format) {
|
||||
(void) channel;
|
||||
|
||||
if (format != ARRAY_DATA_8BITUNSIGNED && format != ARRAY_DATA_10BITUNSIGNED)
|
||||
return FALSE;
|
||||
|
||||
playfmt = format;
|
||||
return gaudio_play_pwm_setup(frequency, format);
|
||||
}
|
||||
|
||||
bool_t gaudio_play_lld_set_volume(uint8_t vol) {
|
||||
(void) vol;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void gaudio_play_lld_start(void) {
|
||||
|
||||
gfxSystemLock();
|
||||
// Get a new data buffer
|
||||
if (pplay || !(pplay = gaudioPlayGetDataBlockI())) {
|
||||
gfxSystemUnlock(); // Nothing to do
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up ready for the new buffer
|
||||
playlen = pplay->len;
|
||||
if (gfxSampleFormatBits(playfmt) > 8)
|
||||
playlen >>= 1;
|
||||
pdata = (uint8_t *)(pplay+1);
|
||||
gfxSystemUnlock();
|
||||
|
||||
// Start the playing
|
||||
gaudio_play_pwm_start();
|
||||
}
|
||||
|
||||
void gaudio_play_lld_stop(void) {
|
||||
// Stop everything
|
||||
gaudio_play_pwm_stop();
|
||||
|
||||
// We may need to clean up the remaining buffer.
|
||||
gfxSystemLock();
|
||||
if (pplay) {
|
||||
gaudioPlayReleaseDataBlockI(pplay);
|
||||
pplay = 0;
|
||||
gaudioPlayDoneI();
|
||||
}
|
||||
gfxSystemUnlock();
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_PLAY */
|
12
drivers/gaudio/pwm/readme.txt
Normal file
12
drivers/gaudio/pwm/readme.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
This driver uses a PWM output and a timer to implement an audio play channel.
|
||||
|
||||
Whilst the default config settings will probably work for your hardware, you may need to change them.
|
||||
If so copy gaudio_play_config.h to your project directory and then alter it.
|
||||
|
||||
The maximum sample frequency is governed primarily by the number of bits of resolution and the
|
||||
maximum PWM clock rate. The maximum sample frequency should be less than...
|
||||
|
||||
Max PWM Clock / (2 ^ Bits per sample)
|
||||
|
||||
eg. For the AT91SAM7 max PWM clock = 48MHz / 2
|
||||
For 10 bit PWM accuracy that means GAUDIO_PLAY_MAX_SAMPLE_FREQUENCY = 23,437 Hz
|
7
drivers/gaudio/vs1053/driver.mk
Normal file
7
drivers/gaudio/vs1053/driver.mk
Normal file
|
@ -0,0 +1,7 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/gaudio/vs1053/gaudio_play_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/gaudio/vs1053
|
||||
|
||||
GFXDEFS += -DGFX_USE_GTIMER=TRUE
|
71
drivers/gaudio/vs1053/gaudio_play_board_template.h
Normal file
71
drivers/gaudio/vs1053/gaudio_play_board_template.h
Normal file
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* 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 GAUDIO_PLAY_BOARD_H
|
||||
#define GAUDIO_PLAY_BOARD_H
|
||||
|
||||
// Initialise the board
|
||||
static void board_init(void) {
|
||||
|
||||
}
|
||||
|
||||
// Chip is initialised enough so we can talk fast to it
|
||||
static void board_init_end(void) {
|
||||
|
||||
}
|
||||
|
||||
// Reset the board
|
||||
static void board_reset(void) {
|
||||
|
||||
}
|
||||
|
||||
// Returns the state of the dreq pin
|
||||
static bool board_dreq(void) {
|
||||
|
||||
}
|
||||
|
||||
// Start a command write
|
||||
static void board_startcmdwrite(void) {
|
||||
|
||||
}
|
||||
|
||||
// End a command write
|
||||
static void board_endcmdwrite(void) {
|
||||
|
||||
}
|
||||
|
||||
// Start a command read
|
||||
static void board_startcmdread(void) {
|
||||
|
||||
}
|
||||
|
||||
// End a command read
|
||||
static void board_endcmdread(void) {
|
||||
|
||||
}
|
||||
|
||||
// Start a data write
|
||||
static void board_startdatawrite(void) {
|
||||
|
||||
}
|
||||
|
||||
// End a data write
|
||||
static void board_enddatawrite(void) {
|
||||
|
||||
}
|
||||
|
||||
// Write data to the SPI port
|
||||
static void board_spiwrite(const uint8_t *buf, unsigned len) {
|
||||
|
||||
}
|
||||
|
||||
// Read data from the SPI port
|
||||
static void board_spiread(uint8_t *buf, unsigned len) {
|
||||
|
||||
}
|
||||
|
||||
#endif /* GAUDIO_PLAY_BOARD_H */
|
29
drivers/gaudio/vs1053/gaudio_play_config.h
Normal file
29
drivers/gaudio/vs1053/gaudio_play_config.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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 GAUDIO_PLAY_CONFIG_H
|
||||
#define GAUDIO_PLAY_CONFIG_H
|
||||
|
||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_PLAY
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#define GAUDIO_PLAY_MAX_SAMPLE_FREQUENCY 48000
|
||||
#define GAUDIO_PLAY_NUM_FORMATS 2
|
||||
#define GAUDIO_PLAY_FORMAT1 ARRAY_DATA_16BITSIGNED
|
||||
#define GAUDIO_PLAY_FORMAT2 ARRAY_DATA_8BITUNSIGNED
|
||||
#define GAUDIO_PLAY_NUM_CHANNELS 2
|
||||
#define GAUDIO_PLAY_CHANNEL0_IS_STEREO FALSE
|
||||
#define GAUDIO_PLAY_CHANNEL1_IS_STEREO TRUE
|
||||
#define GAUDIO_PLAY_MONO 0
|
||||
#define GAUDIO_PLAY_STEREO 1
|
||||
|
||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_PLAY */
|
||||
|
||||
#endif /* GAUDIO_PLAY_CONFIG_H */
|
348
drivers/gaudio/vs1053/gaudio_play_lld.c
Normal file
348
drivers/gaudio/vs1053/gaudio_play_lld.c
Normal file
|
@ -0,0 +1,348 @@
|
|||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_PLAY
|
||||
|
||||
/* Include the driver defines */
|
||||
#include "src/gaudio/driver_play.h"
|
||||
|
||||
/* Include the vs1053 registers */
|
||||
#include "drivers/gaudio/vs1053/vs1053.h"
|
||||
|
||||
/* Include the board interface */
|
||||
#include "gaudio_play_board.h"
|
||||
|
||||
// Override-able parameters
|
||||
#ifndef VS1053_CLK
|
||||
#define VS1053_CLK 12288000
|
||||
#endif
|
||||
#ifndef VS1053_FIRMWARE_PATCH
|
||||
#define VS1053_FIRMWARE_PATCH FALSE
|
||||
#endif
|
||||
|
||||
// Load the patch file if desired. New format patches only.
|
||||
#if VS1053_FIRMWARE_PATCH
|
||||
#define SKIP_PLUGIN_VARNAME
|
||||
static const uint16_t plugin[] = { /* Compressed plugin */
|
||||
#include "vs1053_patch.plg"
|
||||
};
|
||||
#endif
|
||||
|
||||
// Set various stuff based on the clock
|
||||
#if VS1053_CLK >= 16192000
|
||||
#define SCI_MODE_STARTUP (SCI_MODE_DEFAULTS|SM_CLK_RANGE)
|
||||
#define VS1053_CLKI (VS1053_CLK/2)
|
||||
#else
|
||||
#define SCI_MODE_STARTUP (SCI_MODE_DEFAULTS)
|
||||
#define VS1053_CLKI (VS1053_CLK)
|
||||
#endif
|
||||
#if VS1053_CLKI > 13000000 || VS1053_CLKI < 12000000
|
||||
#error "GAUDIO(vs1053): VS1053_CLK is out of range"
|
||||
#endif
|
||||
#if VS1053_CLKI == 12288000
|
||||
#define SC_FREQ_ADJUST 0x0000
|
||||
#else
|
||||
#define SC_FREQ_ADJUST ((VS1053_CLKI-8000000)/4000)
|
||||
#endif
|
||||
#define VS1053_MAX_SAMPLE_RATE (VS1053_CLKI/256)
|
||||
#if VS1053_CLKI > 1228800
|
||||
#define SC_CLOCK_MODE (SC_MULT_3|SC_ADD_1|SC_FREQ_ADJUST)
|
||||
#else
|
||||
#define SC_CLOCK_MODE (SC_MULT_3_5|SC_ADD_1|SC_FREQ_ADJUST)
|
||||
#endif
|
||||
|
||||
// Our static variables
|
||||
static bool_t vs1053_isinit;
|
||||
static GTimer playTimer;
|
||||
|
||||
// Some common macro's
|
||||
#define waitforready() while(!board_dreq()) gfxSleepMilliseconds(5)
|
||||
|
||||
static void cmd_write(uint16_t addr, uint16_t data) {
|
||||
char buf[4];
|
||||
buf[0] = 2;
|
||||
buf[1] = (char)addr;
|
||||
buf[2] = (char)(data >> 8);
|
||||
buf[3] = (char)data;
|
||||
|
||||
waitforready();
|
||||
board_startcmdwrite();
|
||||
board_spiwrite(buf, 4);
|
||||
board_endcmdwrite();
|
||||
}
|
||||
|
||||
#if VS1053_CLK > 12288000
|
||||
static inline void cmd_writenodreq(uint16_t addr, uint16_t data) {
|
||||
uint8_t buf[4];
|
||||
|
||||
// This is the same as cmd_write() except for it doesn't wait for dreq first
|
||||
buf[0] = 2;
|
||||
buf[1] = (uint8_t)addr;
|
||||
buf[2] = (uint8_t)(data >> 8);
|
||||
buf[3] = (uint8_t)data;
|
||||
|
||||
board_startcmdwrite();
|
||||
board_spiwrite(buf, 4);
|
||||
board_endcmdwrite();
|
||||
}
|
||||
#endif
|
||||
|
||||
static uint16_t cmd_read(uint16_t addr) {
|
||||
uint8_t buf[2];
|
||||
|
||||
buf[0] = 3;
|
||||
buf[1] = (char)addr;
|
||||
|
||||
board_startcmdread();
|
||||
board_spiwrite(buf, 2);
|
||||
board_spiread(buf, 2);
|
||||
board_endcmdread();
|
||||
return (((uint16_t)buf[0])<<8)|buf[1];
|
||||
}
|
||||
|
||||
static void data_write(const uint8_t *data, unsigned len) {
|
||||
board_startdatawrite();
|
||||
board_spiwrite(data, len);
|
||||
board_enddatawrite();
|
||||
}
|
||||
|
||||
#if VS1053_FIRMWARE_PATCH
|
||||
static void LoadUserCode(void) {
|
||||
int i;
|
||||
uint16_t addr, n, val;
|
||||
|
||||
for(i=0; i<sizeof(plugin)/sizeof(plugin[0]);) {
|
||||
addr = plugin[i++];
|
||||
n = plugin[i++];
|
||||
if (n & 0x8000U) { /* RLE run, replicate n samples */
|
||||
n &= 0x7FFF;
|
||||
val = plugin[i++];
|
||||
while (n--)
|
||||
cmd_write(addr, val);
|
||||
} else { /* Copy run, copy n samples */
|
||||
while (n--)
|
||||
cmd_write(addr, plugin[i++]);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void vs1053_hard_reset(void) {
|
||||
gtimerInit(&playTimer);
|
||||
|
||||
board_init();
|
||||
board_reset();
|
||||
|
||||
#if VS1053_CLK > 12288000
|
||||
cmd_writenodreq(SCI_MODE, SCI_MODE_STARTUP); // Set super-clock before dreq
|
||||
#endif
|
||||
|
||||
// Set up registers
|
||||
cmd_write(SCI_MODE, SCI_MODE_STARTUP); // Set mode
|
||||
cmd_write(SCI_CLOCKF, SC_CLOCK_MODE); // Set clocks
|
||||
board_init_end(); // Clocks are now set up
|
||||
cmd_write(SCI_BASS, 0x0000); // No treble or bass boost
|
||||
cmd_write(SCI_VOL, VOL_MAX); // Maximum volume
|
||||
|
||||
// Load any firmware
|
||||
#if VS1053_FIRMWARE_PATCH
|
||||
LoadUserCode();
|
||||
|
||||
// Reset mode just in case
|
||||
cmd_write(SCI_MODE, SCI_MODE_STARTUP);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void vs1053_soft_reset(void) {
|
||||
cmd_write(SCI_MODE, cmd_read(SCI_MODE)|SM_RESET);
|
||||
gfxSleepMilliseconds(1); // Wait for at least 2uS
|
||||
waitforready();
|
||||
|
||||
// Reload any firmware
|
||||
#if VS1053_FIRMWARE_PATCH
|
||||
LoadUserCode();
|
||||
|
||||
// Reset mode just in case
|
||||
cmd_write(SCI_MODE, SCI_MODE_STARTUP);
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint16_t vs1053_getendbyte(void) {
|
||||
cmd_write(SCI_WRAMADDR, WRAMADDR_EXTRAPARAMS+4);
|
||||
return cmd_read(SCI_WRAM);
|
||||
}
|
||||
|
||||
static GTimer playTimer;
|
||||
static GDataBuffer *pplay;
|
||||
static size_t playlen;
|
||||
static uint8_t *pdata;
|
||||
|
||||
static void FeedData(void *param) {
|
||||
unsigned len;
|
||||
(void) param;
|
||||
|
||||
// While there is data space
|
||||
while (!board_dreq()) {
|
||||
|
||||
// Send up to 32 bytes
|
||||
len = playlen;
|
||||
if (len > 32) len = 32;
|
||||
data_write(pdata, len);
|
||||
pdata += len;
|
||||
playlen -= len;
|
||||
|
||||
// Have we finished the buffer
|
||||
while (!playlen) {
|
||||
gfxSystemLock();
|
||||
gaudioPlayReleaseDataBlockI(pplay);
|
||||
|
||||
// Get a new data buffer
|
||||
if (!(pplay = gaudioPlayGetDataBlockI())) {
|
||||
// We should really only do the play-done when the audio
|
||||
// has really finished playing. Unfortunately there seems
|
||||
// to be no documented way of determining this.
|
||||
gaudioPlayDoneI();
|
||||
gfxSystemUnlock();
|
||||
gtimerStop(&playTimer);
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up ready for the new buffer
|
||||
playlen = pplay->len;
|
||||
pdata = (uint8_t *)(pplay+1);
|
||||
gfxSystemUnlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
bool_t gaudio_play_lld_init(uint16_t channel, uint32_t frequency, ArrayDataFormat format) {
|
||||
uint32_t brate;
|
||||
uint32_t bps;
|
||||
uint8_t buf[4];
|
||||
static const uint8_t hdr1[] = {
|
||||
'R', 'I', 'F', 'F',
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
'W', 'A', 'V', 'E',
|
||||
'f', 'm', 't', ' ',
|
||||
16, 0, 0, 0,
|
||||
0x01, 0x00,
|
||||
};
|
||||
static const uint8_t hdr2[] = {
|
||||
'd', 'a', 't', 'a',
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
};
|
||||
|
||||
if (format != ARRAY_DATA_8BITUNSIGNED && format != ARRAY_DATA_16BITSIGNED)
|
||||
return FALSE;
|
||||
if (frequency > VS1053_MAX_SAMPLE_RATE)
|
||||
return FALSE;
|
||||
|
||||
// Reset the chip if needed
|
||||
if (!vs1053_isinit) {
|
||||
vs1053_hard_reset();
|
||||
vs1053_isinit = TRUE;
|
||||
}
|
||||
|
||||
// Setup
|
||||
bps = (gfxSampleFormatBits(format)+7)/8;
|
||||
if (channel == GAUDIO_PLAY_STEREO)
|
||||
bps *= 2;
|
||||
brate = frequency * bps;
|
||||
|
||||
// Write the RIFF header
|
||||
waitforready();
|
||||
data_write(hdr1, sizeof(hdr1));
|
||||
buf[0] = channel == GAUDIO_PLAY_STEREO ? 2 : 1; buf[1] = 0; data_write(buf, 2);
|
||||
buf[0] = frequency; buf[1] = frequency>>8; buf[2] = frequency>>16; buf[3] = frequency>>24; data_write(buf, 4);
|
||||
buf[0] = brate; buf[1] = brate>>8; buf[2] = brate>>16; buf[3] = brate>>24; data_write(buf, 4);
|
||||
waitforready(); // 32 bytes max before checking
|
||||
buf[0] = bps; buf[1] = 0; data_write(buf, 2);
|
||||
buf[0] = gfxSampleFormatBits(format); buf[1] = 0; data_write(buf, 2);
|
||||
data_write(hdr2, sizeof(hdr2));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool_t gaudio_play_lld_set_volume(uint8_t vol) {
|
||||
// Volume is 0xFE -> 0x00. Adjust vol to match
|
||||
vol = ~vol;
|
||||
if (vol == 0xFF) vol = 0xFE;
|
||||
|
||||
cmd_write(SCI_VOL, ((uint16_t)vol) << 8 | vol);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void gaudio_play_lld_start(void) {
|
||||
|
||||
gfxSystemLock();
|
||||
// Get a new data buffer
|
||||
if (pplay || !(pplay = gaudioPlayGetDataBlockI())) {
|
||||
gfxSystemUnlock(); // Nothing to do
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up ready for the new buffer
|
||||
playlen = pplay->len;
|
||||
pdata = (uint8_t *)(pplay+1);
|
||||
gfxSystemUnlock();
|
||||
|
||||
// Start the playing by starting the timer and executing FeedData immediately just to get things started
|
||||
// We really should set the timer to be equivalent to half the available data but that is just too hard to calculate.
|
||||
gtimerStart(&playTimer, FeedData, 0, TRUE, 5);
|
||||
FeedData(0);
|
||||
}
|
||||
|
||||
void gaudio_play_lld_stop(void) {
|
||||
uint8_t ch;
|
||||
unsigned i;
|
||||
|
||||
// Stop the timer interrupt
|
||||
gtimerStop(&playTimer);
|
||||
|
||||
// We may need to clean up the remaining buffer.
|
||||
gfxSystemLock();
|
||||
if (pplay) {
|
||||
gaudioPlayReleaseDataBlockI(pplay);
|
||||
pplay = 0;
|
||||
gaudioPlayDoneI();
|
||||
}
|
||||
gfxSystemUnlock();
|
||||
|
||||
// Set CANCEL
|
||||
cmd_write(SCI_MODE, cmd_read(SCI_MODE)|SM_CANCEL);
|
||||
|
||||
// Write up to 2048 bytes of data
|
||||
ch = 0;
|
||||
for(i = 0; i < 2048; i++) {
|
||||
if (!(i & 0x1F)) {
|
||||
waitforready();
|
||||
if (!(cmd_read(SCI_MODE) & SM_CANCEL))
|
||||
break;
|
||||
}
|
||||
data_write(&ch, 1);
|
||||
}
|
||||
|
||||
// Make sure the cancel worked
|
||||
waitforready();
|
||||
if ((cmd_read(SCI_MODE) & SM_CANCEL))
|
||||
vs1053_soft_reset();
|
||||
|
||||
// Send the terminating data
|
||||
ch = vs1053_getendbyte();
|
||||
for(i = 0; i < 2052; i++) {
|
||||
if (!(i & 0x1F))
|
||||
waitforready();
|
||||
data_write(&ch, 1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_PLAY */
|
4
drivers/gaudio/vs1053/readme.txt
Normal file
4
drivers/gaudio/vs1053/readme.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
This chip supports playing in many formats including MP3 etc.
|
||||
For this driver however we only support PCM in 8 bit unisgned and 16 bit signed formats.
|
||||
|
||||
Requires GFX_USE_GTIMER
|
101
drivers/gaudio/vs1053/vs1053.h
Normal file
101
drivers/gaudio/vs1053/vs1053.h
Normal file
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* 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 _VS1053_H
|
||||
#define _VS1053_H
|
||||
|
||||
// Registers
|
||||
#define SCI_MODE 0x00
|
||||
#define SM_DIFF 0x0001
|
||||
#define SM_LAYER12 0x0002
|
||||
#define SM_RESET 0x0004
|
||||
#define SM_CANCEL 0x0008
|
||||
#define SM_EARSPEAKER_LO 0x0010
|
||||
#define SM_TESTS 0x0020
|
||||
#define SM_STREAM 0x0040
|
||||
#define SM_EARSPEAKER_HI 0x0080
|
||||
#define SM_DACT 0x0100
|
||||
#define SM_SDIORD 0x0200
|
||||
#define SM_SDISHARE 0x0400
|
||||
#define SM_SDINEW 0x0800
|
||||
#define SM_ADPCM 0x1000
|
||||
#define SM_LINE1 0x4000
|
||||
#define SM_CLK_RANGE 0x8000
|
||||
#define SCI_MODE_DEFAULTS (SM_LINE1|SM_SDINEW)
|
||||
#define SCI_STATUS 0x01
|
||||
#define SS_DO_NOT_JUMP 0x8000
|
||||
#define SS_SWING_MASK 0x7000
|
||||
#define SS_SWING_SHIFT 12
|
||||
#define SS_VCM_OVERLOAD 0x0800
|
||||
#define SS_VCM_DISABLE 0x0400
|
||||
#define SS_VER_MASK 0x00F0
|
||||
#define SS_VER_SHIFT 4
|
||||
#define SS_APDOWN2 0x0008
|
||||
#define SS_APDOWN1 0x0004
|
||||
#define SS_SS_AD_CLOCK 0x0002
|
||||
#define SS_REFERENCE_SEL 0x0001
|
||||
#define SCI_BASS 0x02
|
||||
#define ST_AMPLITUDE_MASK 0xF000
|
||||
#define ST_AMPLITUDE_SHIFT 12
|
||||
#define ST_FREQLIMIT_MASK 0x0F00
|
||||
#define ST_FREQLIMIT_SHIFT 8
|
||||
#define SB_AMPLITUDE_MASK 0x00F0
|
||||
#define SB_AMPLITUDE_SHIFT 4
|
||||
#define SB_FREQLIMIT_MASK 0x000F
|
||||
#define SB_FREQLIMIT_SHIFT 0
|
||||
#define SCI_CLOCKF 0x03
|
||||
#define SC_MULT_1 0x0000
|
||||
#define SC_MULT_2 0x2000
|
||||
#define SC_MULT_2_5 0x4000
|
||||
#define SC_MULT_3 0x6000
|
||||
#define SC_MULT_3_5 0x8000
|
||||
#define SC_MULT_4 0xa000
|
||||
#define SC_MULT_4_5 0xc000
|
||||
#define SC_MULT_5 0xe000
|
||||
#define SC_ADD_NONE 0x0000
|
||||
#define SC_ADD_1 0x0800
|
||||
#define SC_ADD_1_5 0x1000
|
||||
#define SC_ADD_2 0x1800
|
||||
#define SC_FREQ_MASK 0x07FF
|
||||
#define SCI_DECODE_TIME 0x04
|
||||
#define SCI_AUDATA 0x05
|
||||
#define SR_RATE_MASK 0xFFFE
|
||||
#define SR_IS_STEREO 0x0001
|
||||
#define SCI_WRAM 0x06
|
||||
#define SCI_WRAMADDR 0x07
|
||||
#define WRAMADDR_XDATA 0x1800
|
||||
#define WRAMADDR_YDATA 0x5800
|
||||
#define WRAMADDR_INSTR 0x8040
|
||||
#define WRAMADDR_IO 0xC000
|
||||
#define WRAMADDR_EXTRAPARAMS 0x1E02
|
||||
#define SCI_HDAT0 0x08
|
||||
#define SCI_HDAT1 0x09
|
||||
#define HD_FMT_NONE 0x0000
|
||||
#define HD_FMT_WAV 0x7665
|
||||
#define HD_FMT_AAC_ADTS 0x4154
|
||||
#define HD_FMT_AAC_ADIF 0x4144
|
||||
#define HD_FMT_AAC_M4A 0x4D34
|
||||
#define HD_FMT_WMA 0x574D
|
||||
#define HD_FMT_MIDI 0x4D54
|
||||
#define HD_FMT_OGG 0x4F67
|
||||
#define HD_FMT_MP3_MIN 0xFFE0
|
||||
#define HD_FMT_MP3_MAX 0xFFFF
|
||||
#define SCI_AIADDR 0x0A
|
||||
#define SCI_VOL 0x0B
|
||||
#define VOL_LEFT_MASK 0xFF00
|
||||
#define VOL_LEFT_SHIFT 8
|
||||
#define VOL_RIGHT_MASK 0x00FF
|
||||
#define VOL_RIGHT_SHIFT 0
|
||||
#define VOL_POWERDOWN 0xFFFF
|
||||
#define VOL_MAX 0x0000
|
||||
#define VOL_MIN 0xFEFE
|
||||
#define SCI_AICTRL0 0x0C
|
||||
#define SCI_AICTRL1 0x0D
|
||||
#define SCI_AICTRL2 0x0E
|
||||
#define SCI_AICTRL3 0x0F
|
||||
|
||||
#endif /* _VS1053_H */
|
|
@ -5,18 +5,10 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ST7565/board_ST7565_template.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ST7565 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
#define _GDISP_LLD_BOARD_H
|
||||
|
||||
/**
|
||||
/*
|
||||
* @brief Optional parameters that can be put in this file.
|
||||
* @note The values listed below are the defaults.
|
||||
*
|
||||
|
@ -54,149 +46,67 @@
|
|||
* #define EINK_WRITECOUNT 4
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note Set the g->board member to whatever is appropriate. For multiple
|
||||
* displays this might be a pointer to the appropriate register set.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Delay for display waveforms. Should be an accurate microsecond delay.
|
||||
*
|
||||
* @param[in] us The number of microseconds
|
||||
*/
|
||||
static void eink_delay(int us) {
|
||||
(void) us;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Turn the E-ink panel Vdd supply (+3.3V) on or off.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpower_vdd(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Turn the E-ink panel negative supplies (-15V, -20V) on or off.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpower_vneg(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Turn the E-ink panel positive supplies (-15V, -20V) on or off.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpower_vpos(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the state of the LE (source driver Latch Enable) pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpin_le(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the state of the OE (source driver Output Enable) pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpin_oe(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the state of the CL (source driver Clock) pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpin_cl(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the state of the SPH (source driver Start Pulse Horizontal) pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpin_sph(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the state of the D0-D7 (source driver Data) pins.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] value The byte to write
|
||||
*/
|
||||
static inline void setpins_data(GDisplay *g, uint8_t value) {
|
||||
(void) g;
|
||||
(void) value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the state of the CKV (gate driver Clock Vertical) pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpin_ckv(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the state of the GMODE (gate driver Gate Mode) pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpin_gmode(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the state of the SPV (gate driver Start Pulse Vertical) pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] on On or off
|
||||
*/
|
||||
static inline void setpin_spv(GDisplay *g, bool_t on) {
|
||||
(void) g;
|
||||
(void) on;
|
||||
}
|
||||
|
||||
#endif /* _GDISP_LLD_BOARD_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,11 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ED060SC4/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver for the E-ink panel ED060SC4.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP
|
||||
|
@ -83,7 +78,7 @@
|
|||
|
||||
#define PRIV(g) ((drvPriv *)g->priv)
|
||||
|
||||
/** Delay between signal changes, to give time for IO pins to change state. */
|
||||
/* Delay between signal changes, to give time for IO pins to change state. */
|
||||
static inline void clockdelay(void)
|
||||
{
|
||||
#if EINK_CLOCKDELAY & 1
|
||||
|
@ -111,7 +106,7 @@ static inline void clockdelay(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
/** Fast vertical clock pulse for gate driver, used during initializations */
|
||||
/* Fast vertical clock pulse for gate driver, used during initializations */
|
||||
static void vclock_quick(GDisplay *g)
|
||||
{
|
||||
setpin_ckv(g, TRUE);
|
||||
|
@ -120,7 +115,7 @@ static void vclock_quick(GDisplay *g)
|
|||
eink_delay(4);
|
||||
}
|
||||
|
||||
/** Horizontal clock pulse for clocking data into source driver */
|
||||
/* Horizontal clock pulse for clocking data into source driver */
|
||||
static void hclock(GDisplay *g)
|
||||
{
|
||||
clockdelay();
|
||||
|
@ -129,7 +124,7 @@ static void hclock(GDisplay *g)
|
|||
setpin_cl(g, FALSE);
|
||||
}
|
||||
|
||||
/** Start a new vertical gate driver scan from top.
|
||||
/* Start a new vertical gate driver scan from top.
|
||||
* Note: Does not clear any previous bits in the shift register,
|
||||
* so you should always scan through the whole display before
|
||||
* starting a new scan.
|
||||
|
@ -144,7 +139,7 @@ static void vscan_start(GDisplay *g)
|
|||
vclock_quick(g);
|
||||
}
|
||||
|
||||
/** Waveform for strobing a row of data onto the display.
|
||||
/* Waveform for strobing a row of data onto the display.
|
||||
* Attempts to minimize the leaking of color to other rows by having
|
||||
* a long idle period after a medium-length strobe period.
|
||||
*/
|
||||
|
@ -158,7 +153,7 @@ static void vscan_write(GDisplay *g)
|
|||
eink_delay(200);
|
||||
}
|
||||
|
||||
/** Waveform used when clearing the display. Strobes a row of data to the
|
||||
/* Waveform used when clearing the display. Strobes a row of data to the
|
||||
* screen, but does not mind some of it leaking to other rows.
|
||||
*/
|
||||
static void vscan_bulkwrite(GDisplay *g)
|
||||
|
@ -169,7 +164,7 @@ static void vscan_bulkwrite(GDisplay *g)
|
|||
eink_delay(200);
|
||||
}
|
||||
|
||||
/** Waveform for skipping a vertical row without writing anything.
|
||||
/* Waveform for skipping a vertical row without writing anything.
|
||||
* Attempts to minimize the amount of change in any row.
|
||||
*/
|
||||
static void vscan_skip(GDisplay *g)
|
||||
|
@ -180,7 +175,7 @@ static void vscan_skip(GDisplay *g)
|
|||
eink_delay(100);
|
||||
}
|
||||
|
||||
/** Stop the vertical scan. The significance of this escapes me, but it seems
|
||||
/* Stop the vertical scan. The significance of this escapes me, but it seems
|
||||
* necessary or the next vertical scan may be corrupted.
|
||||
*/
|
||||
static void vscan_stop(GDisplay *g)
|
||||
|
@ -193,7 +188,7 @@ static void vscan_stop(GDisplay *g)
|
|||
vclock_quick(g);
|
||||
}
|
||||
|
||||
/** Start updating the source driver data (from left to right). */
|
||||
/* Start updating the source driver data (from left to right). */
|
||||
static void hscan_start(GDisplay *g)
|
||||
{
|
||||
/* Disable latching and output enable while we are modifying the row. */
|
||||
|
@ -204,7 +199,7 @@ static void hscan_start(GDisplay *g)
|
|||
setpin_sph(g, FALSE);
|
||||
}
|
||||
|
||||
/** Write data to the horizontal row. */
|
||||
/* Write data to the horizontal row. */
|
||||
static void hscan_write(GDisplay *g, const uint8_t *data, int count)
|
||||
{
|
||||
while (count--)
|
||||
|
@ -217,7 +212,7 @@ static void hscan_write(GDisplay *g, const uint8_t *data, int count)
|
|||
}
|
||||
}
|
||||
|
||||
/** Finish and transfer the row to the source drivers.
|
||||
/* Finish and transfer the row to the source drivers.
|
||||
* Does not set the output enable, so the drivers are not yet active. */
|
||||
static void hscan_stop(GDisplay *g)
|
||||
{
|
||||
|
@ -231,7 +226,7 @@ static void hscan_stop(GDisplay *g)
|
|||
setpin_le(g, FALSE);
|
||||
}
|
||||
|
||||
/** Turn on the power to the E-Ink panel, observing proper power sequencing. */
|
||||
/* Turn on the power to the E-Ink panel, observing proper power sequencing. */
|
||||
static void power_on(GDisplay *g)
|
||||
{
|
||||
unsigned i;
|
||||
|
@ -264,7 +259,7 @@ static void power_on(GDisplay *g)
|
|||
vscan_stop(g);
|
||||
}
|
||||
|
||||
/** Turn off the power, observing proper power sequencing. */
|
||||
/* Turn off the power, observing proper power sequencing. */
|
||||
static void power_off(GDisplay *g)
|
||||
{
|
||||
/* First the high voltages */
|
||||
|
@ -336,7 +331,7 @@ typedef struct drvPriv {
|
|||
uint8_t g_blockmap[BLOCKS_Y][BLOCKS_X];
|
||||
} drvPriv;
|
||||
|
||||
/** Check if the row contains any allocated blocks. */
|
||||
/* Check if the row contains any allocated blocks. */
|
||||
static bool_t blocks_on_row(GDisplay *g, unsigned by)
|
||||
{
|
||||
unsigned bx;
|
||||
|
@ -350,7 +345,7 @@ static bool_t blocks_on_row(GDisplay *g, unsigned by)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/** Write out a block row. */
|
||||
/* Write out a block row. */
|
||||
static void write_block_row(GDisplay *g, unsigned by)
|
||||
{
|
||||
unsigned bx, dy, dx;
|
||||
|
@ -379,7 +374,7 @@ static void write_block_row(GDisplay *g, unsigned by)
|
|||
}
|
||||
}
|
||||
|
||||
/** Clear the block map, i.e. deallocate all blocks */
|
||||
/* Clear the block map, i.e. deallocate all blocks */
|
||||
static void clear_block_map(GDisplay *g)
|
||||
{
|
||||
unsigned bx, by;
|
||||
|
@ -394,7 +389,7 @@ static void clear_block_map(GDisplay *g)
|
|||
PRIV(g)->g_next_block = 0;
|
||||
}
|
||||
|
||||
/** Initialize a newly allocated block. */
|
||||
/* Initialize a newly allocated block. */
|
||||
static void zero_block(block_t *block)
|
||||
{
|
||||
unsigned dx, dy;
|
||||
|
@ -407,7 +402,7 @@ static void zero_block(block_t *block)
|
|||
}
|
||||
}
|
||||
|
||||
/** Allocate a buffer
|
||||
/* Allocate a buffer
|
||||
* Automatically flushes if all buffers are full. */
|
||||
static block_t *alloc_buffer(GDisplay *g, unsigned bx, unsigned by)
|
||||
{
|
||||
|
|
|
@ -5,14 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/HX8347D/HX8347D.h
|
||||
* @brief GDISP Graphic Driver support header for the HX8347D display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _HX8347D_H
|
||||
#define _HX8347D_H
|
||||
|
||||
|
@ -140,4 +132,3 @@
|
|||
#define HX8347D_REG_PGSEL 0xff /* Page select */
|
||||
|
||||
#endif /* _HX8347D_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,152 +5,56 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/HX8347D/board_HX8347D_template.h
|
||||
* @brief GDISP Graphic Driver subsystem board SPI interface for the HX8347D display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
#define _GDISP_LLD_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note Set the g->board member to whatever is appropriate. For multiple
|
||||
* displays this might be a pointer to the appropriate register set.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief After the initialisation.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void post_init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||
(void) g;
|
||||
(void) state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||
(void) g;
|
||||
(void) percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void acquire_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void release_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus in 16 bit mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void busmode16(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus in 8 bit mode (the default)
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void busmode8(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the index register.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] index The index register to set
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_index(GDisplay *g, uint8_t index) {
|
||||
(void) g;
|
||||
(void) index;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send 8 bits of data to the lcd.
|
||||
* @pre The bus is in 8 bit mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_data(GDisplay *g, uint8_t data) {
|
||||
(void) g;
|
||||
(void) data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send 16 bits of data to the lcd.
|
||||
* @pre The bus is in 16 bit mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_ram16(GDisplay *g, uint16_t data) {
|
||||
(void) g;
|
||||
(void) data;
|
||||
}
|
||||
|
||||
#endif /* _GDISP_LLD_BOARD_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,11 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/HX8347D/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the HX8347D display.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP
|
||||
|
|
|
@ -5,14 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/HX8347D/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for the HX8347D display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_CONFIG_H
|
||||
#define _GDISP_LLD_CONFIG_H
|
||||
|
||||
|
@ -30,4 +22,3 @@
|
|||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,153 +5,56 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9320/board_ILI9320_template.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9320 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GDISP_LLD_BOARD_H
|
||||
#define GDISP_LLD_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note Set the g->board member to whatever is appropriate. For multiple
|
||||
* displays this might be a pointer to the appropriate register set.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief After the initialisation.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void post_init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||
(void) g;
|
||||
(void) state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||
(void) g;
|
||||
(void) percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void acquire_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void release_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the index register.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] index The index register to set
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||
(void) g;
|
||||
(void) index;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the lcd.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||
(void) g;
|
||||
(void) data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus in read mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setreadmode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus back into write mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setwritemode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read data from the lcd.
|
||||
* @return The data from the lcd
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note The chip select may need to be asserted/de-asserted
|
||||
* around the actual spi read
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline uint16_t read_data(GDisplay *g) {
|
||||
(void) g;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* GDISP_LLD_BOARD_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,11 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9320/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the ILI9320 display.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP
|
||||
|
@ -330,7 +325,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
|||
|
||||
case GDISP_ROTATE_90:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x01, 0x0100);
|
||||
write_reg(g, 0x01, 0x0000);
|
||||
write_reg(g, 0x03, 0x1030);
|
||||
write_reg(g, 0x60, 0x2700);
|
||||
release_bus(g);
|
||||
|
@ -352,7 +347,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
|||
|
||||
case GDISP_ROTATE_270:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x01, 0x0000);
|
||||
write_reg(g, 0x01, 0x0100);
|
||||
write_reg(g, 0x03, 0x1038);
|
||||
write_reg(g, 0x60, 0xA700);
|
||||
release_bus(g);
|
||||
|
|
|
@ -5,14 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9320/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for the ILI9320 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GDISP_LLD_CONFIG_H
|
||||
#define GDISP_LLD_CONFIG_H
|
||||
|
||||
|
@ -32,5 +24,3 @@
|
|||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -5,151 +5,56 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9325/board_ILI9325_template.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9325 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GDISP_LLD_BOARD_H
|
||||
#define GDISP_LLD_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note Set the g->board member to whatever is appropriate. For multiple
|
||||
* displays this might be a pointer to the appropriate register set.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief After the initialisation.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void post_init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||
(void) g;
|
||||
(void) state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||
(void) g;
|
||||
(void) percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void acquire_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void release_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the index register.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] index The index register to set
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||
(void) g;
|
||||
(void) index;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the lcd.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||
(void) g;
|
||||
(void) data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus in read mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setreadmode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus back into write mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setwritemode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read data from the lcd.
|
||||
* @return The data from the lcd
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline uint16_t read_data(GDisplay *g) {
|
||||
(void) g;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* GDISP_LLD_BOARD_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -5,11 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9325/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the ILI9325 display.
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
|
|
@ -5,14 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9325/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for the ILI9325 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GDISP_LLD_CONFIG_H
|
||||
#define GDISP_LLD_CONFIG_H
|
||||
|
||||
|
@ -32,5 +24,3 @@
|
|||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -5,150 +5,56 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9341/board_ILI9341_template.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9341 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
#define _GDISP_LLD_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note Set the g->board member to whatever is appropriate. For multiple
|
||||
* displays this might be a pointer to the appropriate register set.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief After the initialisation.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void post_init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||
(void) g;
|
||||
(void) state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||
(void) g;
|
||||
(void) percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void acquire_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void release_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the index register.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] index The index register to set
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||
(void) g;
|
||||
(void) index;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the lcd.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||
(void) g;
|
||||
(void) data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus in read mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setreadmode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus back into write mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setwritemode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read data from the lcd.
|
||||
* @return The data from the lcd
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline uint16_t read_data(GDisplay *g) {
|
||||
(void) g;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _GDISP_LLD_BOARD_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,12 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9341/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for
|
||||
* the ILI9341 and compatible HVGA display
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP
|
||||
|
|
|
@ -5,15 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9481/gdisp_lld_config.h
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for
|
||||
* the ILI9481 and compatible HVGA display
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_CONFIG_H
|
||||
#define _GDISP_LLD_CONFIG_H
|
||||
|
||||
|
@ -32,4 +23,3 @@
|
|||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
|
72
drivers/gdisp/ILI93xx/board_ILI93xx_template.h
Normal file
72
drivers/gdisp/ILI93xx/board_ILI93xx_template.h
Normal file
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* 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
|
||||
|
||||
static inline void init_board(GDisplay *g)
|
||||
{
|
||||
(void) g;
|
||||
}
|
||||
|
||||
static inline void post_init_board(GDisplay *g)
|
||||
{
|
||||
(void) g;
|
||||
}
|
||||
|
||||
static inline void setpin_reset(GDisplay *g, bool_t state)
|
||||
{
|
||||
(void) g;
|
||||
(void) state;
|
||||
}
|
||||
|
||||
static inline void set_backlight(GDisplay *g, uint8_t percent)
|
||||
{
|
||||
(void) g;
|
||||
(void) percent;
|
||||
}
|
||||
|
||||
static inline void acquire_bus(GDisplay *g)
|
||||
{
|
||||
(void) g;
|
||||
}
|
||||
|
||||
static inline void release_bus(GDisplay *g)
|
||||
{
|
||||
(void) g;
|
||||
}
|
||||
|
||||
static inline void write_index(GDisplay *g, uint16_t index)
|
||||
{
|
||||
(void) g;
|
||||
(void) index;
|
||||
}
|
||||
|
||||
static inline void write_data(GDisplay *g, uint16_t data)
|
||||
{
|
||||
(void) g;
|
||||
(void) data;
|
||||
}
|
||||
|
||||
static inline void setreadmode(GDisplay *g)
|
||||
{
|
||||
(void) g
|
||||
}
|
||||
|
||||
static inline void setwritemode(GDisplay *g)
|
||||
{
|
||||
(void) g;
|
||||
}
|
||||
|
||||
static inline uint16_t read_data(GDisplay *g)
|
||||
{
|
||||
(void) g;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* GDISP_LLD_BOARD_H */
|
3
drivers/gdisp/ILI93xx/gdisp_lld.mk
Normal file
3
drivers/gdisp/ILI93xx/gdisp_lld.mk
Normal file
|
@ -0,0 +1,3 @@
|
|||
GFXINC += $(GFXLIB)
|
||||
GFXINC += $(GFXLIB)/drivers/gdisp/ILI93xx
|
||||
GFXSRC += $(GFXLIB)/drivers/gdisp/ILI93xx/gdisp_lld_ILI93xx.c
|
438
drivers/gdisp/ILI93xx/gdisp_lld_ILI93xx.c
Normal file
438
drivers/gdisp/ILI93xx/gdisp_lld_ILI93xx.c
Normal file
|
@ -0,0 +1,438 @@
|
|||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* This controller is only ever used with a 240 x 320 display */
|
||||
#if defined(GDISP_SCREEN_HEIGHT)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_HEIGHT
|
||||
#endif
|
||||
#if defined(GDISP_SCREEN_WIDTH)
|
||||
#warning "GDISP: This low level driver does not support setting a screen size. It is being ignored."
|
||||
#undef GDISP_SCREEN_WIDTH
|
||||
#endif
|
||||
|
||||
#define GDISP_DRIVER_VMT GDISPVMT_ILI93xx
|
||||
#include "drivers/gdisp/ILI93xx/gdisp_lld_config.h"
|
||||
#include "src/gdisp/driver.h"
|
||||
|
||||
#include "board_ILI93xx.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifndef GDISP_SCREEN_HEIGHT
|
||||
#define GDISP_SCREEN_HEIGHT 320
|
||||
#endif
|
||||
#ifndef GDISP_SCREEN_WIDTH
|
||||
#define GDISP_SCREEN_WIDTH 240
|
||||
#endif
|
||||
#ifndef GDISP_INITIAL_CONTRAST
|
||||
#define GDISP_INITIAL_CONTRAST 50
|
||||
#endif
|
||||
#ifndef GDISP_INITIAL_BACKLIGHT
|
||||
#define GDISP_INITIAL_BACKLIGHT 100
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
// Some common routines and macros
|
||||
#define dummy_read(g) { volatile uint16_t dummy; dummy = read_data(g); (void) dummy; }
|
||||
#define write_reg(g, reg, data) { write_index(g, reg); write_data(g, data); }
|
||||
|
||||
static inline uint16_t read_reg(GDisplay *g, uint32_t reg) {
|
||||
write_index(g, reg);
|
||||
return read_data(g);
|
||||
}
|
||||
|
||||
static void set_cursor(GDisplay *g) {
|
||||
switch(g->g.Orientation) {
|
||||
default:
|
||||
case GDISP_ROTATE_0:
|
||||
case GDISP_ROTATE_180:
|
||||
write_reg(g, 0x20, g->p.x);
|
||||
write_reg(g, 0x21, g->p.y);
|
||||
break;
|
||||
|
||||
case GDISP_ROTATE_90:
|
||||
case GDISP_ROTATE_270:
|
||||
write_reg(g, 0x20, g->p.y);
|
||||
write_reg(g, 0x21, g->p.x);
|
||||
break;
|
||||
}
|
||||
write_index(g, 0x22);
|
||||
}
|
||||
|
||||
static void set_viewport(GDisplay* g) {
|
||||
switch(g->g.Orientation) {
|
||||
default:
|
||||
case GDISP_ROTATE_0:
|
||||
case GDISP_ROTATE_180:
|
||||
write_reg(g, 0x50, g->p.x);
|
||||
write_reg(g, 0x51, g->p.x + g->p.cx - 1);
|
||||
write_reg(g, 0x52, g->p.y);
|
||||
write_reg(g, 0x53, g->p.y + g->p.cy - 1);
|
||||
break;
|
||||
|
||||
case GDISP_ROTATE_90:
|
||||
case GDISP_ROTATE_270:
|
||||
write_reg(g, 0x50, g->p.y);
|
||||
write_reg(g, 0x51, g->p.y + g->p.cy - 1);
|
||||
write_reg(g, 0x52, g->p.x);
|
||||
write_reg(g, 0x53, g->p.x + g->p.cx - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
||||
|
||||
unsigned short DeviceCode;
|
||||
|
||||
// No private area for this controller
|
||||
g->priv = 0;
|
||||
|
||||
// Initialise the board interface
|
||||
init_board(g);
|
||||
|
||||
/* Hardware reset */
|
||||
setpin_reset(g, TRUE);
|
||||
gfxSleepMilliseconds(1);
|
||||
setpin_reset(g, FALSE);
|
||||
gfxSleepMilliseconds(10);
|
||||
setpin_reset(g, TRUE);
|
||||
gfxSleepMilliseconds(50);
|
||||
|
||||
acquire_bus(g);
|
||||
setreadmode(g);
|
||||
DeviceCode = read_reg(g, 0x00);
|
||||
setwritemode(g);
|
||||
|
||||
if( DeviceCode == 0x9320 || DeviceCode == 0x9300 )
|
||||
{
|
||||
write_reg(g, 0x00, 0x0000);
|
||||
write_reg(g, 0x01, 0x0100); /* Driver Output Contral */
|
||||
write_reg(g, 0x02, 0x0700); /* LCD Driver Waveform Contral */
|
||||
write_reg(g, 0x03, 0x1038); /* Set the scan mode */
|
||||
write_reg(g, 0x04, 0x0000); /* Scalling Contral */
|
||||
write_reg(g, 0x08, 0x0202); /* Display Contral 2 */
|
||||
write_reg(g, 0x09, 0x0000); /* Display Contral 3 */
|
||||
write_reg(g, 0x0a, 0x0000); /* Frame Cycle Contal */
|
||||
write_reg(g, 0x0c, (1<<0)); /* Extern Display Interface Contral 1 */
|
||||
write_reg(g, 0x0d, 0x0000); /* Frame Maker Position */
|
||||
write_reg(g, 0x0f, 0x0000); /* Extern Display Interface Contral 2 */
|
||||
gfxSleepMilliseconds(50);
|
||||
write_reg(g, 0x07, 0x0101); /* Display Contral */
|
||||
gfxSleepMilliseconds(50);
|
||||
write_reg(g, 0x10, (1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4)); /* Power Control 1 */
|
||||
write_reg(g, 0x11, 0x0007); /* Power Control 2 */
|
||||
write_reg(g, 0x12, (1<<8)|(1<<4)|(0<<0)); /* Power Control 3 */
|
||||
write_reg(g, 0x13, 0x0b00); /* Power Control 4 */
|
||||
write_reg(g, 0x29, 0x0000); /* Power Control 7 */
|
||||
write_reg(g, 0x2b, (1<<14)|(1<<4));
|
||||
write_reg(g, 0x50, 0); /* Set X Start */
|
||||
write_reg(g, 0x51, 239); /* Set X End */
|
||||
write_reg(g, 0x52, 0); /* Set Y Start */
|
||||
write_reg(g, 0x53, 319); /* Set Y End */
|
||||
gfxSleepMilliseconds(50);
|
||||
|
||||
write_reg(g, 0x60, 0x2700); /* Driver Output Control */
|
||||
write_reg(g, 0x61, 0x0001); /* Driver Output Control */
|
||||
write_reg(g, 0x6a, 0x0000); /* Vertical Srcoll Control */
|
||||
|
||||
write_reg(g, 0x80, 0x0000); /* Display Position? Partial Display 1 */
|
||||
write_reg(g, 0x81, 0x0000); /* RAM Address Start? Partial Display 1 */
|
||||
write_reg(g, 0x82, 0x0000); /* RAM Address End-Partial Display 1 */
|
||||
write_reg(g, 0x83, 0x0000); /* Displsy Position? Partial Display 2 */
|
||||
write_reg(g, 0x84, 0x0000); /* RAM Address Start? Partial Display 2 */
|
||||
write_reg(g, 0x85, 0x0000); /* RAM Address End? Partial Display 2 */
|
||||
|
||||
write_reg(g, 0x90, (0<<7)|(16<<0)); /* Frame Cycle Contral */
|
||||
write_reg(g, 0x92, 0x0000); /* Panel Interface Contral 2 */
|
||||
write_reg(g, 0x93, 0x0001); /* Panel Interface Contral 3 */
|
||||
write_reg(g, 0x95, 0x0110); /* Frame Cycle Contral */
|
||||
write_reg(g, 0x97, (0<<8));
|
||||
write_reg(g, 0x98, 0x0000); /* Frame Cycle Contral */
|
||||
write_reg(g, 0x07, 0x0133);
|
||||
}
|
||||
else if( DeviceCode == 0x9325 || DeviceCode == 0x9328)
|
||||
{
|
||||
|
||||
write_reg(g, 0x00e7, 0x0010);
|
||||
write_reg(g, 0x0000, 0x0001); /* start internal osc */
|
||||
write_reg(g, 0x0001, 0x0100);
|
||||
write_reg(g, 0x0002, 0x0700); /* power on sequence */
|
||||
write_reg(g, 0x0003, (1<<12)|(1<<5)|(1<<4)|(0<<3) ); /* importance */
|
||||
write_reg(g, 0x0004, 0x0000);
|
||||
write_reg(g, 0x0008, 0x0207);
|
||||
write_reg(g, 0x0009, 0x0000);
|
||||
write_reg(g, 0x000a, 0x0000); /* display setting */
|
||||
write_reg(g, 0x000c, 0x0001); /* display setting */
|
||||
write_reg(g, 0x000d, 0x0000);
|
||||
write_reg(g, 0x000f, 0x0000);
|
||||
/* Power On sequence */
|
||||
write_reg(g, 0x0010, 0x0000);
|
||||
write_reg(g, 0x0011, 0x0007);
|
||||
write_reg(g, 0x0012, 0x0000);
|
||||
write_reg(g, 0x0013, 0x0000);
|
||||
gfxSleepMilliseconds(50); /* delay 50 ms */
|
||||
write_reg(g, 0x0010, 0x1590);
|
||||
write_reg(g, 0x0011, 0x0227);
|
||||
gfxSleepMilliseconds(50); /* delay 50 ms */
|
||||
write_reg(g, 0x0012, 0x009c);
|
||||
gfxSleepMilliseconds(50); /* delay 50 ms */
|
||||
write_reg(g, 0x0013, 0x1900);
|
||||
write_reg(g, 0x0029, 0x0023);
|
||||
write_reg(g, 0x002b, 0x000e);
|
||||
gfxSleepMilliseconds(50); /* delay 50 ms */
|
||||
write_reg(g, 0x0020, 0x0000);
|
||||
write_reg(g, 0x0021, 0x0000);
|
||||
gfxSleepMilliseconds(50); /* delay 50 ms */
|
||||
write_reg(g, 0x0030, 0x0007);
|
||||
write_reg(g, 0x0031, 0x0707);
|
||||
write_reg(g, 0x0032, 0x0006);
|
||||
write_reg(g, 0x0035, 0x0704);
|
||||
write_reg(g, 0x0036, 0x1f04);
|
||||
write_reg(g, 0x0037, 0x0004);
|
||||
write_reg(g, 0x0038, 0x0000);
|
||||
write_reg(g, 0x0039, 0x0706);
|
||||
write_reg(g, 0x003c, 0x0701);
|
||||
write_reg(g, 0x003d, 0x000f);
|
||||
gfxSleepMilliseconds(50); /* delay 50 ms */
|
||||
write_reg(g, 0x0050, 0x0000);
|
||||
write_reg(g, 0x0051, 0x00ef);
|
||||
write_reg(g, 0x0052, 0x0000);
|
||||
write_reg(g, 0x0053, 0x013f);
|
||||
write_reg(g, 0x0060, 0xa700);
|
||||
write_reg(g, 0x0061, 0x0001);
|
||||
write_reg(g, 0x006a, 0x0000);
|
||||
write_reg(g, 0x0080, 0x0000);
|
||||
write_reg(g, 0x0081, 0x0000);
|
||||
write_reg(g, 0x0082, 0x0000);
|
||||
write_reg(g, 0x0083, 0x0000);
|
||||
write_reg(g, 0x0084, 0x0000);
|
||||
write_reg(g, 0x0085, 0x0000);
|
||||
|
||||
write_reg(g, 0x0090, 0x0010);
|
||||
write_reg(g, 0x0092, 0x0000);
|
||||
write_reg(g, 0x0093, 0x0003);
|
||||
write_reg(g, 0x0095, 0x0110);
|
||||
write_reg(g, 0x0097, 0x0000);
|
||||
write_reg(g, 0x0098, 0x0000);
|
||||
/* display on sequence */
|
||||
write_reg(g, 0x0007, 0x0133);
|
||||
|
||||
write_reg(g, 0x0020, 0x0000);
|
||||
write_reg(g, 0x0021, 0x0000);
|
||||
}
|
||||
|
||||
gfxSleepMilliseconds(100); /* delay 50 ms */
|
||||
|
||||
|
||||
// Finish Init
|
||||
post_init_board(g);
|
||||
|
||||
// Release the bus
|
||||
release_bus(g);
|
||||
|
||||
// Turn on the backlight
|
||||
set_backlight(g, GDISP_INITIAL_BACKLIGHT);
|
||||
|
||||
/* Initialise the GDISP structure */
|
||||
g->g.Width = GDISP_SCREEN_WIDTH;
|
||||
g->g.Height = GDISP_SCREEN_HEIGHT;
|
||||
g->g.Orientation = GDISP_ROTATE_0;
|
||||
g->g.Powermode = powerOn;
|
||||
g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
|
||||
g->g.Contrast = GDISP_INITIAL_CONTRAST;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#if GDISP_HARDWARE_STREAM_WRITE
|
||||
LLDSPEC void gdisp_lld_write_start(GDisplay *g) {
|
||||
acquire_bus(g);
|
||||
set_viewport(g);
|
||||
}
|
||||
LLDSPEC void gdisp_lld_write_color(GDisplay *g) {
|
||||
write_data(g, gdispColor2Native(g->p.color));
|
||||
//write_data(g, COLOR2NATIVE(g->p.color));
|
||||
}
|
||||
LLDSPEC void gdisp_lld_write_stop(GDisplay *g) {
|
||||
release_bus(g);
|
||||
}
|
||||
LLDSPEC void gdisp_lld_write_pos(GDisplay *g) {
|
||||
set_cursor(g);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_HARDWARE_STREAM_READ
|
||||
LLDSPEC void gdisp_lld_read_start(GDisplay *g) {
|
||||
acquire_bus(g);
|
||||
set_viewport(g);
|
||||
set_cursor(g);
|
||||
setreadmode(g);
|
||||
dummy_read(g);
|
||||
}
|
||||
LLDSPEC color_t gdisp_lld_read_color(GDisplay *g) {
|
||||
uint16_t data;
|
||||
|
||||
data = read_data(g);
|
||||
return gdispNative2Color(data);
|
||||
}
|
||||
LLDSPEC void gdisp_lld_read_stop(GDisplay *g) {
|
||||
setwritemode(g);
|
||||
release_bus(g);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL
|
||||
LLDSPEC void gdisp_lld_control(GDisplay *g) {
|
||||
switch(g->p.x) {
|
||||
case GDISP_CONTROL_POWER:
|
||||
if (g->g.Powermode == (powermode_t)g->p.ptr)
|
||||
return;
|
||||
switch((powermode_t)g->p.ptr) {
|
||||
case powerOff:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x07, 0x0000);
|
||||
write_reg(g, 0x10, 0x0000);
|
||||
write_reg(g, 0x11, 0x0000);
|
||||
write_reg(g, 0x12, 0x0000);
|
||||
write_reg(g, 0x13, 0x0000);
|
||||
release_bus(g);
|
||||
set_backlight(g, 0);
|
||||
break;
|
||||
|
||||
case powerOn:
|
||||
//*************Power On sequence ******************//
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x10, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
|
||||
write_reg(g, 0x11, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
|
||||
write_reg(g, 0x12, 0x0000); /* VREG1OUT voltage */
|
||||
write_reg(g, 0x13, 0x0000); /* VDV[4:0] for VCOM amplitude */
|
||||
gfxSleepMilliseconds(200); /* Dis-charge capacitor power voltage */
|
||||
write_reg(g, 0x10, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
|
||||
write_reg(g, 0x11, 0x0147); /* DC1[2:0], DC0[2:0], VC[2:0] */
|
||||
gfxSleepMilliseconds(50);
|
||||
write_reg(g, 0x12, 0x013C); /* VREG1OUT voltage */
|
||||
gfxSleepMilliseconds(50);
|
||||
write_reg(g, 0x13, 0x0E00); /* VDV[4:0] for VCOM amplitude */
|
||||
write_reg(g, 0x29, 0x0009); /* VCM[4:0] for VCOMH */
|
||||
gfxSleepMilliseconds(50);
|
||||
write_reg(g, 0x07, 0x0173); /* 262K color and display ON */
|
||||
release_bus(g);
|
||||
set_backlight(g, g->g.Backlight);
|
||||
break;
|
||||
|
||||
case powerSleep:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x07, 0x0000); /* display OFF */
|
||||
write_reg(g, 0x10, 0x0000); /* SAP, BT[3:0], APE, AP, DSTB, SLP */
|
||||
write_reg(g, 0x11, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
|
||||
write_reg(g, 0x12, 0x0000); /* VREG1OUT voltage */
|
||||
write_reg(g, 0x13, 0x0000); /* VDV[4:0] for VCOM amplitude */
|
||||
gfxSleepMilliseconds(200); /* Dis-charge capacitor power voltage */
|
||||
write_reg(g, 0x10, 0x0002); /* SAP, BT[3:0], APE, AP, DSTB, SLP */
|
||||
release_bus(g);
|
||||
set_backlight(g, g->g.Backlight);
|
||||
break;
|
||||
|
||||
case powerDeepSleep:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x07, 0x0000); /* display OFF */
|
||||
write_reg(g, 0x10, 0x0000); /* SAP, BT[3:0], APE, AP, DSTB, SLP */
|
||||
write_reg(g, 0x11, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
|
||||
write_reg(g, 0x12, 0x0000); /* VREG1OUT voltage */
|
||||
write_reg(g, 0x13, 0x0000); /* VDV[4:0] for VCOM amplitude */
|
||||
gfxSleepMilliseconds(200); /* Dis-charge capacitor power voltage */
|
||||
write_reg(g, 0x10, 0x0004); /* SAP, BT[3:0], APE, AP, DSTB, SLP */
|
||||
release_bus(g);
|
||||
set_backlight(g, g->g.Backlight);
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
g->g.Powermode = (powermode_t)g->p.ptr;
|
||||
return;
|
||||
|
||||
case GDISP_CONTROL_ORIENTATION:
|
||||
if (g->g.Orientation == (orientation_t)g->p.ptr)
|
||||
return;
|
||||
switch((orientation_t)g->p.ptr) {
|
||||
case GDISP_ROTATE_0:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x01, 0x0100);
|
||||
write_reg(g, 0x03, 0x1030);
|
||||
write_reg(g, 0x60, 0xa700);
|
||||
release_bus(g);
|
||||
g->g.Height = GDISP_SCREEN_HEIGHT;
|
||||
g->g.Width = GDISP_SCREEN_WIDTH;
|
||||
break;
|
||||
|
||||
case GDISP_ROTATE_90:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x01, 0x0100);
|
||||
write_reg(g, 0x03, 0x1038);
|
||||
write_reg(g, 0x60, 0x2700);
|
||||
release_bus(g);
|
||||
g->g.Height = GDISP_SCREEN_WIDTH;
|
||||
g->g.Width = GDISP_SCREEN_HEIGHT;
|
||||
break;
|
||||
|
||||
case GDISP_ROTATE_180:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x01, 0x0000);
|
||||
write_reg(g, 0x03, 0x1030);
|
||||
write_reg(g, 0x60, 0x2700);
|
||||
release_bus(g);
|
||||
g->g.Height = GDISP_SCREEN_HEIGHT;
|
||||
g->g.Width = GDISP_SCREEN_WIDTH;
|
||||
break;
|
||||
|
||||
case GDISP_ROTATE_270:
|
||||
acquire_bus(g);
|
||||
write_reg(g, 0x01, 0x0000);
|
||||
write_reg(g, 0x03, 0x1038);
|
||||
write_reg(g, 0x60, 0xa700);
|
||||
release_bus(g);
|
||||
g->g.Height = GDISP_SCREEN_WIDTH;
|
||||
g->g.Width = GDISP_SCREEN_HEIGHT;
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
g->g.Orientation = (orientation_t)g->p.ptr;
|
||||
return;
|
||||
|
||||
case GDISP_CONTROL_BACKLIGHT:
|
||||
if ((unsigned)g->p.ptr > 100)
|
||||
g->p.ptr = (void *)100;
|
||||
set_backlight(g, (unsigned)g->p.ptr);
|
||||
g->g.Backlight = (unsigned)g->p.ptr;
|
||||
return;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
22
drivers/gdisp/ILI93xx/gdisp_lld_config.h
Normal file
22
drivers/gdisp/ILI93xx/gdisp_lld_config.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* 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_CONFIG_H
|
||||
#define GDISP_LLD_CONFIG_H
|
||||
|
||||
#if GFX_USE_GDISP
|
||||
|
||||
#define GDISP_HARDWARE_STREAM_WRITE TRUE
|
||||
#define GDISP_HARDWARE_STREAM_READ TRUE
|
||||
#define GDISP_HARDWARE_STREAM_POS TRUE
|
||||
#define GDISP_HARDWARE_CONTROL TRUE
|
||||
|
||||
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_RGB565
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
|
@ -5,151 +5,56 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9481/board_ILI9481_template.h
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for
|
||||
* the ILI9481 and compatible HVGA display
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_BOARD_H
|
||||
#define _GDISP_LLD_BOARD_H
|
||||
|
||||
/**
|
||||
* @brief Initialise the board for the display.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @note Set the g->board member to whatever is appropriate. For multiple
|
||||
* displays this might be a pointer to the appropriate register set.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief After the initialisation.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void post_init_board(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set or clear the lcd reset pin.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] state TRUE = lcd in reset, FALSE = normal operation
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||
(void) g;
|
||||
(void) state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the lcd back-light level.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] percent 0 to 100%
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||
(void) g;
|
||||
(void) percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void acquire_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Release exclusive control of the bus
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void release_bus(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the index register.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] index The index register to set
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||
(void) g;
|
||||
(void) index;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send data to the lcd.
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
* @param[in] data The data to send
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||
(void) g;
|
||||
(void) data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus in read mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setreadmode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the bus back into write mode
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline void setwritemode(GDisplay *g) {
|
||||
(void) g;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read data from the lcd.
|
||||
* @return The data from the lcd
|
||||
*
|
||||
* @param[in] g The GDisplay structure
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static inline uint16_t read_data(GDisplay *g) {
|
||||
(void) g;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _GDISP_LLD_BOARD_H */
|
||||
/** @} */
|
||||
|
|
|
@ -5,12 +5,6 @@
|
|||
* http://ugfx.org/license.html
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file drivers/gdisp/ILI9481/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for
|
||||
* the ILI9481 and compatible HVGA display
|
||||
*/
|
||||
|
||||
#include "gfx.h"
|
||||
|
||||
#if GFX_USE_GDISP
|
||||
|
@ -325,4 +319,3 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
|||
#endif
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue