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
|
*.lst
|
||||||
*.o
|
*.o
|
||||||
*.map
|
*.map
|
||||||
|
*.sublime-*
|
||||||
src/gdisp/fonts/*.dat
|
src/gdisp/fonts/*.dat
|
||||||
|
|
2327
Doxygenfile
2327
Doxygenfile
File diff suppressed because it is too large
Load diff
|
@ -5,7 +5,9 @@
|
||||||
* http://ugfx.org/license.html
|
* 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,
|
* This file corresponds to the connections shown in example_schematics.png,
|
||||||
* and is designed to interface with ChibiOS/RT.
|
* 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.
|
* @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
|
#ifndef _GDISP_LLD_BOARD_H
|
||||||
|
|
|
@ -6,8 +6,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file drivers/gdisp/ILI9320/board_ILI9320_olimex_pic32mx_lcd.h
|
* @file boards/addons/gdisp/board_ILI9320_olimex_pic32mx_lcd.h
|
||||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9325 display.
|
* @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
|
#ifndef GDISP_LLD_BOARD_H
|
||||||
|
|
|
@ -19,8 +19,11 @@
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file drivers/gdisp/ILI9325/board_ILI9325_hy_stm32_100p.h
|
* @file boards/addons/gdisp/board_ILI9325_hy_stm32_100p.h
|
||||||
* @brief GDISP Graphic Driver subsystem board interface for the ILI9325 display.
|
* @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
|
#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
|
* @file boards/addons/gdisp/board_ILI9481_firebullstm32f103.h
|
||||||
* @brief GDISP Graphics Driver subsystem low level driver source for
|
* @brief GDISP Graphics Driver subsystem low level driver source for the ILI9481 and compatible HVGA display
|
||||||
* 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
|
#ifndef _GDISP_LLD_BOARD_H
|
||||||
|
|
|
@ -6,8 +6,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file drivers/gdisp/S6D1121/board_S6D1121_olimex_e407.h
|
* @file boards/addons/gdisp/board_S6D1121_olimex_e407.h
|
||||||
* @brief GDISP Graphic Driver subsystem board interface for the S6D1121 display
|
* @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
|
#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.
|
* @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
|
#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.
|
* @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
|
#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.
|
* @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
|
#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.
|
* @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
|
#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.
|
* @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
|
#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.
|
* @brief GINPUT Touch low level driver source for the ADS7843 on an Olimex STM32E407.
|
||||||
*
|
*
|
||||||
* @defgroup Mouse Mouse
|
* @note This file contains a mix of hardware specific and operating system specific
|
||||||
* @ingroup GINPUT
|
* code. You will need to change it for your CPU and/or operating system.
|
||||||
* @{
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
#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 */
|
#endif /* _GINPUT_LLD_MOUSE_BOARD_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,6 +5,14 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||||
#define _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.
|
* @brief GINPUT Touch low level driver source for the MCU on the example board.
|
||||||
*
|
*
|
||||||
* @defgroup Mouse Mouse
|
* @note This file contains a mix of hardware specific and operating system specific
|
||||||
* @ingroup GINPUT
|
* code. You will need to change it for your CPU and/or operating system.
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
#ifndef _GINPUT_LLD_MOUSE_BOARD_H
|
||||||
|
|
|
@ -3,3 +3,4 @@ GFXSRC +=
|
||||||
GFXDEFS += -DGFX_USE_OS_CHIBIOS=TRUE
|
GFXDEFS += -DGFX_USE_OS_CHIBIOS=TRUE
|
||||||
include $(GFXLIB)/drivers/gdisp/ILI9341/gdisp_lld.mk
|
include $(GFXLIB)/drivers/gdisp/ILI9341/gdisp_lld.mk
|
||||||
include $(GFXLIB)/drivers/ginput/touch/MCU/ginput_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
|
CP = $(TRGT)objcopy
|
||||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||||
OD = $(TRGT)objdump
|
OD = $(TRGT)objdump
|
||||||
|
SZ = $(TRGT)size
|
||||||
HEX = $(CP) -O ihex
|
HEX = $(CP) -O ihex
|
||||||
BIN = $(CP) -O binary
|
BIN = $(CP) -O binary
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define STM32F4xx_MCUCONF
|
#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.
|
* HAL driver system settings.
|
||||||
|
@ -57,7 +61,6 @@
|
||||||
#define STM32_I2SSRC STM32_I2SSRC_CKIN
|
#define STM32_I2SSRC STM32_I2SSRC_CKIN
|
||||||
#define STM32_PLLI2SN_VALUE 192
|
#define STM32_PLLI2SN_VALUE 192
|
||||||
#define STM32_PLLI2SR_VALUE 5
|
#define STM32_PLLI2SR_VALUE 5
|
||||||
#define STM32_VOS STM32_VOS_HIGH
|
|
||||||
#define STM32_PVD_ENABLE FALSE
|
#define STM32_PVD_ENABLE FALSE
|
||||||
#define STM32_PLS STM32_PLS_LEV0
|
#define STM32_PLS STM32_PLS_LEV0
|
||||||
#define STM32_BKPRAM_ENABLE FALSE
|
#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:
|
On this board uGFX currently supports:
|
||||||
- GDISP via the ILI9341 display
|
- GDISP via the ILI9341 display
|
||||||
- GINPUT-touch via the MCU driver
|
- 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
|
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.
|
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/dial/GADC/ginput_lld.mk
|
||||||
include $(GFXLIB)/drivers/ginput/toggle/Pal/ginput_lld.mk
|
include $(GFXLIB)/drivers/ginput/toggle/Pal/ginput_lld.mk
|
||||||
include $(GFXLIB)/drivers/gaudio/gadc/driver.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
|
CP = $(TRGT)objcopy
|
||||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||||
OD = $(TRGT)objdump
|
OD = $(TRGT)objdump
|
||||||
|
SZ = $(TRGT)size
|
||||||
HEX = $(CP) -O ihex
|
HEX = $(CP) -O ihex
|
||||||
BIN = $(CP) -O binary
|
BIN = $(CP) -O binary
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
* @brief Enables the GPT subsystem.
|
* @brief Enables the GPT subsystem.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_GPT FALSE
|
#define HAL_USE_GPT TRUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -116,10 +116,6 @@
|
||||||
*/
|
*/
|
||||||
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
|
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
|
||||||
#define HAL_USE_PWM TRUE
|
#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
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -52,6 +52,10 @@
|
||||||
/*
|
/*
|
||||||
* PWM driver system settings.
|
* 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.
|
* SERIAL driver system settings.
|
||||||
|
@ -69,3 +73,10 @@
|
||||||
#define AT91SAM7_SPI_USE_SPI1 FALSE
|
#define AT91SAM7_SPI_USE_SPI1 FALSE
|
||||||
#define AT91SAM7_SPI0_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 1)
|
#define AT91SAM7_SPI0_PRIORITY (AT91C_AIC_PRIOR_HIGHEST - 1)
|
||||||
#define AT91SAM7_SPI1_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
|
#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
|
* The list of audio channels and their uses
|
||||||
*/
|
*/
|
||||||
#define GAUDIO_RECORD_MICROPHONE 0
|
#define GAUDIO_RECORD_MICROPHONE 0
|
||||||
|
|
||||||
#ifdef GAUDIO_RECORD_IMPLEMENTATION
|
#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,
|
GADC_PHYSDEV_MICROPHONE,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -51,7 +51,6 @@
|
||||||
#define GDISP_NEED_VALIDATION TRUE
|
#define GDISP_NEED_VALIDATION TRUE
|
||||||
#define GDISP_NEED_CLIP TRUE
|
#define GDISP_NEED_CLIP TRUE
|
||||||
#define GDISP_NEED_TEXT TRUE
|
#define GDISP_NEED_TEXT TRUE
|
||||||
#define GDISP_NEED_CONTROL TRUE
|
|
||||||
#define GDISP_NEED_MULTITHREAD TRUE
|
#define GDISP_NEED_MULTITHREAD TRUE
|
||||||
|
|
||||||
/* GDISP - builtin fonts */
|
/* GDISP - builtin fonts */
|
||||||
|
|
|
@ -38,9 +38,6 @@
|
||||||
/* Include internal GWIN routines so we can build our own superset class */
|
/* Include internal GWIN routines so we can build our own superset class */
|
||||||
#include "src/gwin/class_gwin.h"
|
#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 */
|
/* How many flat-line sample before we trigger */
|
||||||
#define FLATLINE_SAMPLES 8
|
#define FLATLINE_SAMPLES 8
|
||||||
|
|
||||||
|
@ -50,10 +47,6 @@ static void _destroy(GHandle gh) {
|
||||||
gfxFree(((GScopeObject *)gh)->lastscopetrace);
|
gfxFree(((GScopeObject *)gh)->lastscopetrace);
|
||||||
((GScopeObject *)gh)->lastscopetrace = 0;
|
((GScopeObject *)gh)->lastscopetrace = 0;
|
||||||
}
|
}
|
||||||
if (((GScopeObject *)gh)->audiobuf) {
|
|
||||||
gfxFree(((GScopeObject *)gh)->audiobuf);
|
|
||||||
((GScopeObject *)gh)->audiobuf = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gwinVMT scopeVMT = {
|
static const gwinVMT scopeVMT = {
|
||||||
|
@ -68,12 +61,9 @@ GHandle gwinGScopeCreate(GDisplay *g, GScopeObject *gs, GWindowInit *pInit, uint
|
||||||
/* Initialise the base class GWIN */
|
/* Initialise the base class GWIN */
|
||||||
if (!(gs = (GScopeObject *)_gwindowCreate(g, &gs->g, pInit, &scopeVMT, 0)))
|
if (!(gs = (GScopeObject *)_gwindowCreate(g, &gs->g, pInit, &scopeVMT, 0)))
|
||||||
return 0;
|
return 0;
|
||||||
gfxSemInit(&gs->bsem, 0, 1);
|
|
||||||
gs->nextx = 0;
|
gs->nextx = 0;
|
||||||
if (!(gs->lastscopetrace = gfxAlloc(gs->g.width * sizeof(coord_t))))
|
if (!(gs->lastscopetrace = gfxAlloc(gs->g.width * sizeof(coord_t))))
|
||||||
return 0;
|
return 0;
|
||||||
if (!(gs->audiobuf = gfxAlloc(AUDIOBUFSZ * sizeof(adcsample_t))))
|
|
||||||
return 0;
|
|
||||||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
||||||
gs->lasty = gs->g.height/2;
|
gs->lasty = gs->g.height/2;
|
||||||
#elif TRIGGER_METHOD == TRIGGER_MINVALUE
|
#elif TRIGGER_METHOD == TRIGGER_MINVALUE
|
||||||
|
@ -82,8 +72,7 @@ GHandle gwinGScopeCreate(GDisplay *g, GScopeObject *gs, GWindowInit *pInit, uint
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Start the GADC high speed converter */
|
/* Start the GADC high speed converter */
|
||||||
gadcHighSpeedInit(physdev, frequency, gs->audiobuf, AUDIOBUFSZ, AUDIOBUFSZ/2);
|
gadcHighSpeedInit(physdev, frequency);
|
||||||
gadcHighSpeedSetBSem(&gs->bsem, &gs->myEvent);
|
|
||||||
gadcHighSpeedStart();
|
gadcHighSpeedStart();
|
||||||
|
|
||||||
gwinSetVisible((GHandle)gs, pInit->show);
|
gwinSetVisible((GHandle)gs, pInit->show);
|
||||||
|
@ -97,6 +86,8 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
||||||
coord_t yoffset;
|
coord_t yoffset;
|
||||||
adcsample_t *pa;
|
adcsample_t *pa;
|
||||||
coord_t *pc;
|
coord_t *pc;
|
||||||
|
GDataBuffer *pd;
|
||||||
|
uint8_t shr;
|
||||||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
||||||
bool_t rdytrigger;
|
bool_t rdytrigger;
|
||||||
int flsamples;
|
int flsamples;
|
||||||
|
@ -109,20 +100,21 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
||||||
if (gh->vmt != &scopeVMT)
|
if (gh->vmt != &scopeVMT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Wait for a set of audio conversions */
|
/* Wait for a set of conversions */
|
||||||
gfxSemWait(&gs->bsem, TIME_INFINITE);
|
pd = gadcHighSpeedGetData(TIME_INFINITE);
|
||||||
|
|
||||||
/* Ensure we are drawing in the right area */
|
/* Ensure we are drawing in the right area */
|
||||||
#if GDISP_NEED_CLIP
|
#if GDISP_NEED_CLIP
|
||||||
gdispGSetClip(gh->display, gh->x, gh->y, gh->width, gh->height);
|
gdispGSetClip(gh->display, gh->x, gh->y, gh->width, gh->height);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
shr = 16 - gfxSampleFormatBits(GADC_SAMPLE_FORMAT);
|
||||||
yoffset = gh->height/2;
|
yoffset = gh->height/2;
|
||||||
if (!(GADC_SAMPLE_FORMAT & 1))
|
if (!gfxSampleFormatIsSigned(GADC_SAMPLE_FORMAT))
|
||||||
yoffset += (1<<SCOPE_Y_BITS)/2;
|
yoffset += (1<<SCOPE_Y_BITS)/2;
|
||||||
x = gs->nextx;
|
x = gs->nextx;
|
||||||
pc = gs->lastscopetrace+x;
|
pc = gs->lastscopetrace+x;
|
||||||
pa = gs->myEvent.buffer;
|
pa = (adcsample_t *)(pd+1);
|
||||||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
||||||
rdytrigger = FALSE;
|
rdytrigger = FALSE;
|
||||||
flsamples = 0;
|
flsamples = 0;
|
||||||
|
@ -132,14 +124,10 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
||||||
scopemin = 0;
|
scopemin = 0;
|
||||||
#endif
|
#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 */
|
/* 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 - (((coord_t)(*pa++) << shr) >> (16-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
|
|
||||||
|
|
||||||
#if TRIGGER_METHOD == TRIGGER_MINVALUE
|
#if TRIGGER_METHOD == TRIGGER_MINVALUE
|
||||||
/* Calculate the scopemin ready for the next trace */
|
/* Calculate the scopemin ready for the next trace */
|
||||||
|
@ -205,5 +193,7 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
||||||
gs->scopemin = scopemin;
|
gs->scopemin = scopemin;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
gfxBufferRelease(pd);
|
||||||
|
|
||||||
#undef gs
|
#undef gs
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
|
|
||||||
/* The extent of scaling for our audio data - fixed scale at the moment */
|
/* The extent of scaling for our audio data - fixed scale at the moment */
|
||||||
#ifndef SCOPE_Y_BITS
|
#ifndef SCOPE_Y_BITS
|
||||||
#define SCOPE_Y_BITS 7 // 7 bits = 0..128
|
#define SCOPE_Y_BITS 7 // 7 bits = 0..128
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Trigger methods */
|
/* Trigger methods */
|
||||||
|
@ -64,9 +64,6 @@ typedef struct GScopeObject_t {
|
||||||
GWindowObject g; // Base Class
|
GWindowObject g; // Base Class
|
||||||
|
|
||||||
coord_t *lastscopetrace; // To store last scope trace
|
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
|
coord_t nextx; // Where we are up to
|
||||||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP
|
||||||
coord_t lasty; // The last y value - used for trigger slope detection
|
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);
|
gtimerStart(&lsTimer, LowSpeedTimer, ghText, TRUE, MY_LS_DELAY);
|
||||||
#endif
|
#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 */
|
/* Set up the scope window in the top right on the screen */
|
||||||
{
|
{
|
||||||
GWindowInit wi;
|
GWindowInit wi;
|
||||||
|
|
|
@ -45,7 +45,6 @@
|
||||||
#define GFX_USE_GDISP TRUE
|
#define GFX_USE_GDISP TRUE
|
||||||
#define GFX_USE_GWIN TRUE
|
#define GFX_USE_GWIN TRUE
|
||||||
#define GFX_USE_GTIMER TRUE
|
#define GFX_USE_GTIMER TRUE
|
||||||
//#define GFX_USE_GADC TRUE
|
|
||||||
#define GFX_USE_GAUDIO TRUE
|
#define GFX_USE_GAUDIO TRUE
|
||||||
|
|
||||||
/* Features for the GDISP sub-system. */
|
/* Features for the GDISP sub-system. */
|
||||||
|
|
|
@ -96,7 +96,7 @@ GHandle gwinGScopeCreate(GDisplay *g, GScopeObject *gs, GWindowInit *pInit, uint
|
||||||
|
|
||||||
void gwinScopeWaitForTrace(GHandle gh) {
|
void gwinScopeWaitForTrace(GHandle gh) {
|
||||||
#define gs ((GScopeObject *)(gh))
|
#define gs ((GScopeObject *)(gh))
|
||||||
GAudioData *paud;
|
GDataBuffer *paud;
|
||||||
int i;
|
int i;
|
||||||
coord_t x, y;
|
coord_t x, y;
|
||||||
coord_t yoffset;
|
coord_t yoffset;
|
||||||
|
@ -144,10 +144,10 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
||||||
scopemin = 0;
|
scopemin = 0;
|
||||||
#endif
|
#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 */
|
/* 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));
|
y = yoffset - (((coord_t)(*pa8++ ) << shr) >> (16-SCOPE_Y_BITS));
|
||||||
else
|
else
|
||||||
y = yoffset - (((coord_t)(*pa16++) << shr) >> (16-SCOPE_Y_BITS));
|
y = yoffset - (((coord_t)(*pa16++) << shr) >> (16-SCOPE_Y_BITS));
|
||||||
|
@ -216,6 +216,6 @@ void gwinScopeWaitForTrace(GHandle gh) {
|
||||||
gs->scopemin = scopemin;
|
gs->scopemin = scopemin;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gaudioReleaseBuffer(paud);
|
gfxBufferRelease(paud);
|
||||||
#undef gs
|
#undef gs
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,10 +55,15 @@ int main(void) {
|
||||||
|
|
||||||
gfxInit();
|
gfxInit();
|
||||||
|
|
||||||
// Allocate audio buffers - 4 x 128 byte buffers.
|
/**
|
||||||
// You may need to increase this for slower cpu's.
|
* Allocate audio buffers - eg. 4 x 128 byte buffers.
|
||||||
// You may be able to decrease this for low latency operating systems.
|
* You may need to increase this for slower cpu's.
|
||||||
gaudioAllocBuffers(4, 128);
|
* 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 */
|
/* Get the screen dimensions */
|
||||||
swidth = gdispGetWidth();
|
swidth = gdispGetWidth();
|
||||||
|
|
|
@ -52,7 +52,7 @@ int main(void) {
|
||||||
uint32_t frequency;
|
uint32_t frequency;
|
||||||
ArrayDataFormat datafmt;
|
ArrayDataFormat datafmt;
|
||||||
uint32_t len;
|
uint32_t len;
|
||||||
GAudioData *paud;
|
GDataBuffer *pd;
|
||||||
|
|
||||||
// Initialise everything
|
// Initialise everything
|
||||||
gfxInit();
|
gfxInit();
|
||||||
|
@ -64,11 +64,12 @@ int main(void) {
|
||||||
// Allocate audio buffers - 4 x 512 byte buffers.
|
// Allocate audio buffers - 4 x 512 byte buffers.
|
||||||
// You may need to increase this for slower cpu's.
|
// You may need to increase this for slower cpu's.
|
||||||
// You may be able to decrease this for low latency operating systems.
|
// You may be able to decrease this for low latency operating systems.
|
||||||
if (!gaudioAllocBuffers(4, 512)) {
|
if (!gfxBufferAlloc(4, 512)) {
|
||||||
errmsg = "Err: No Memory";
|
errmsg = "Err: No Memory";
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
repeatplay:
|
||||||
// Open the wave file
|
// Open the wave file
|
||||||
if (!(f = gfileOpen("allwrong.wav", "r"))) {
|
if (!(f = gfileOpen("allwrong.wav", "r"))) {
|
||||||
errmsg = "Err: Open WAV";
|
errmsg = "Err: Open WAV";
|
||||||
|
@ -164,20 +165,20 @@ int main(void) {
|
||||||
gdispDrawString(0, gdispGetHeight()/2, "Playing...", font, Yellow);
|
gdispDrawString(0, gdispGetHeight()/2, "Playing...", font, Yellow);
|
||||||
while(toplay) {
|
while(toplay) {
|
||||||
// Get a buffer to put the data into
|
// 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
|
// How much data can we put in
|
||||||
len = toplay > paud->size ? paud->size : toplay;
|
len = toplay > pd->size ? pd->size : toplay;
|
||||||
paud->len = len;
|
pd->len = len;
|
||||||
toplay -= len;
|
toplay -= len;
|
||||||
|
|
||||||
// Read the data
|
// Read the data
|
||||||
if (gfileRead(f, paud+1, len) != len) {
|
if (gfileRead(f, pd+1, len) != len) {
|
||||||
errmsg = "Err: Read fail";
|
errmsg = "Err: Read fail";
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
|
|
||||||
gaudioPlay(paud);
|
gaudioPlay(pd);
|
||||||
}
|
}
|
||||||
gfileClose(f);
|
gfileClose(f);
|
||||||
|
|
||||||
|
@ -185,6 +186,11 @@ int main(void) {
|
||||||
gaudioPlayWait(TIME_INFINITE);
|
gaudioPlayWait(TIME_INFINITE);
|
||||||
gdispDrawString(0, gdispGetHeight()/2+10, "Done", font, Green);
|
gdispDrawString(0, gdispGetHeight()/2+10, "Done", font, Green);
|
||||||
|
|
||||||
|
// Repeat the whole thing
|
||||||
|
gfxSleepMilliseconds(1500);
|
||||||
|
gdispClear(Black);
|
||||||
|
goto repeatplay;
|
||||||
|
|
||||||
// The end
|
// The end
|
||||||
theend:
|
theend:
|
||||||
if (errmsg)
|
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_WIDGET TRUE
|
||||||
#define GWIN_NEED_LABEL TRUE
|
#define GWIN_NEED_LABEL TRUE
|
||||||
#define GWIN_NEED_LIST 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
|
#define GFX_USE_GMISC FALSE
|
||||||
|
|
||||||
#endif /* _GFXCONF_H */
|
#endif /* _GFXCONF_H */
|
||||||
|
|
||||||
|
|
|
@ -52,10 +52,6 @@ static void createWidgets(void) {
|
||||||
wi.text = "List 2: Smooth scrolling";
|
wi.text = "List 2: Smooth scrolling";
|
||||||
ghLabel1 = gwinLabelCreate(NULL, &wi);
|
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
|
// The first list widget
|
||||||
wi.g.width = 150;
|
wi.g.width = 150;
|
||||||
wi.g.height = 100;
|
wi.g.height = 100;
|
||||||
|
@ -112,6 +108,9 @@ int main(void) {
|
||||||
gwinListAddItem(ghList1, "Item 13", FALSE);
|
gwinListAddItem(ghList1, "Item 13", FALSE);
|
||||||
|
|
||||||
// Add some items to the second list widget
|
// 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 0", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 1", FALSE);
|
gwinListAddItem(ghList2, "Item 1", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 2", FALSE);
|
gwinListAddItem(ghList2, "Item 2", FALSE);
|
||||||
|
@ -126,10 +125,7 @@ int main(void) {
|
||||||
gwinListAddItem(ghList2, "Item 11", FALSE);
|
gwinListAddItem(ghList2, "Item 11", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 12", FALSE);
|
gwinListAddItem(ghList2, "Item 12", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 13", FALSE);
|
gwinListAddItem(ghList2, "Item 13", FALSE);
|
||||||
|
gwinListEnableRender(ghList2, TRUE);
|
||||||
// Make all the lists visible
|
|
||||||
gwinSetVisible(ghList1, TRUE);
|
|
||||||
gwinSetVisible(ghList2, TRUE);
|
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
// Get an Event
|
// Get an Event
|
||||||
|
|
|
@ -23,12 +23,20 @@ int main(void) {
|
||||||
|
|
||||||
_createWidget();
|
_createWidget();
|
||||||
|
|
||||||
|
#if 1
|
||||||
gwinProgressbarSetResolution(ghProgressbar, 10);
|
gwinProgressbarSetResolution(ghProgressbar, 10);
|
||||||
gwinProgressbarStart(ghProgressbar, 500);
|
gwinProgressbarStart(ghProgressbar, 500);
|
||||||
|
|
||||||
//gwinProgressbarSetPosition(ghProgressbar, 42);
|
gfxSleepMilliseconds(3000);
|
||||||
//gwinProgressbarIncrement(ghProgressbar);
|
gwinProgressbarReset(ghProgressbar);
|
||||||
//gwinProgressbarDecrement(ghProgressbar);
|
|
||||||
|
gfxSleepMilliseconds(3000);
|
||||||
|
gwinDestroy(ghProgressbar);
|
||||||
|
#else
|
||||||
|
gwinProgressbarSetPosition(ghProgressbar, 42);
|
||||||
|
gwinProgressbarIncrement(ghProgressbar);
|
||||||
|
gwinProgressbarDecrement(ghProgressbar);
|
||||||
|
#endif
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
gfxSleepMilliseconds(500);
|
gfxSleepMilliseconds(500);
|
||||||
|
|
|
@ -1,94 +1,241 @@
|
||||||
/*
|
/**
|
||||||
* Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu <joel@unormal.org>
|
* This file has a different license to the rest of the uGFX system.
|
||||||
* Copyright (c) 2012, 2013, Andrew Hannam aka inmarket
|
* 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.
|
* Please use spaces instead of tabs in this file.
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
* * Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* * Neither the name of the <organization> nor the
|
|
||||||
* names of its contributors may be used to endorse or promote products
|
|
||||||
* derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _GFXCONF_H
|
#ifndef _GFXCONF_H
|
||||||
#define _GFXCONF_H
|
#define _GFXCONF_H
|
||||||
|
|
||||||
/* The operating system to use. One of these must be defined - preferably in your Makefile */
|
/* 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_CHIBIOS TRUE
|
||||||
//#define GFX_USE_OS_WIN32 FALSE
|
//#define GFX_USE_OS_WIN32 TRUE
|
||||||
//#define GFX_USE_OS_LINUX FALSE
|
//#define GFX_USE_OS_LINUX TRUE
|
||||||
//#define GFX_USE_OS_OSX FALSE
|
//#define GFX_USE_OS_OSX TRUE
|
||||||
|
|
||||||
/* GFX sub-systems to turn on */
|
|
||||||
#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_VALIDATION TRUE
|
// GDISP //
|
||||||
#define GDISP_NEED_CLIP TRUE
|
///////////////////////////////////////////////////////////////////////////
|
||||||
#define GDISP_NEED_CIRCLE TRUE
|
#define GFX_USE_GDISP TRUE
|
||||||
#define GDISP_NEED_TEXT TRUE
|
|
||||||
#define GDISP_NEED_IMAGE TRUE
|
|
||||||
#define GDISP_NEED_CONVEX_POLYGON TRUE
|
|
||||||
#define GDISP_NEED_CONTROL TRUE
|
|
||||||
#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE
|
|
||||||
|
|
||||||
/* The following are optional depending on your hardware */
|
#define GDISP_NEED_AUTOFLUSH FALSE
|
||||||
//#define GDISP_NEED_SCROLL TRUE
|
#define GDISP_NEED_TIMERFLUSH FALSE
|
||||||
//#define GWIN_CONSOLE_USE_HISTORY TRUE
|
#define GDISP_NEED_VALIDATION TRUE
|
||||||
//#define GWIN_CONSOLE_HISTORY_AVERAGING TRUE
|
#define GDISP_NEED_CLIP TRUE
|
||||||
//#define GWIN_CONSOLE_HISTORY_ATCREATE TRUE
|
#define GDISP_NEED_CIRCLE 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_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 fonts to include */
|
#define GDISP_NEED_IMAGE TRUE
|
||||||
#define GDISP_INCLUDE_FONT_UI2 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
|
||||||
|
|
||||||
/* GDISP image decoders */
|
#define GDISP_NEED_STARTUP_LOGO FALSE
|
||||||
#define GDISP_NEED_IMAGE_GIF TRUE
|
|
||||||
#define GDISP_NEED_IMAGE_BMP TRUE
|
|
||||||
|
|
||||||
/* Features for the GWIN subsystem. */
|
#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE
|
||||||
#define GWIN_NEED_WINDOWMANAGER TRUE
|
#define GDISP_LINEBUF_SIZE 128
|
||||||
#define GWIN_NEED_CONSOLE TRUE
|
|
||||||
#define GWIN_NEED_GRAPH TRUE
|
|
||||||
#define GWIN_NEED_WIDGET TRUE
|
|
||||||
#define GWIN_NEED_LABEL TRUE
|
|
||||||
#define GWIN_NEED_BUTTON TRUE
|
|
||||||
#define GWIN_NEED_SLIDER TRUE
|
|
||||||
#define GWIN_NEED_CHECKBOX TRUE
|
|
||||||
#define GWIN_NEED_IMAGE TRUE
|
|
||||||
#define GWIN_NEED_RADIO TRUE
|
|
||||||
#define GWIN_NEED_LIST TRUE
|
|
||||||
|
|
||||||
/* Features for the GFILE subsystem. */
|
#define GDISP_TOTAL_DISPLAYS 1
|
||||||
#define GFX_USE_GFILE TRUE
|
#if GDISP_TOTAL_DISPLAYS > 1
|
||||||
#define GFILE_NEED_ROMFS TRUE
|
#define GDISP_HARDWARE_STREAM_WRITE FALSE
|
||||||
//#define GFILE_NEED_NATIVEFS TRUE
|
#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
|
||||||
|
|
||||||
/* Features for the GINPUT subsystem. */
|
#define GDISP_TOTAL_CONTROLLERS 1
|
||||||
#define GINPUT_NEED_MOUSE TRUE
|
#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 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
|
||||||
|
#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
|
||||||
|
|
||||||
/* Optional parameters for various subsystems */
|
|
||||||
#define GWIN_NEED_LIST_IMAGES TRUE
|
|
||||||
|
|
||||||
#endif /* _GFXCONF_H */
|
#endif /* _GFXCONF_H */
|
||||||
|
|
||||||
|
|
|
@ -73,15 +73,16 @@ static const GWidgetStyle YellowWidgetStyle = {
|
||||||
/* The variables we need */
|
/* The variables we need */
|
||||||
static GListener gl;
|
static GListener gl;
|
||||||
static GHandle ghConsole;
|
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 ghButton1, ghButton2, ghButton3, ghButton4;
|
||||||
static GHandle ghSlider1, ghSlider2, ghSlider3, ghSlider4;
|
static GHandle ghSlider1, ghSlider2, ghSlider3, ghSlider4;
|
||||||
static GHandle ghCheckbox1, ghCheckbox2, ghCheckDisableAll;
|
static GHandle ghCheckbox1, ghCheckbox2, ghCheckDisableAll;
|
||||||
static GHandle ghLabel1;
|
static GHandle ghLabel1;
|
||||||
static GHandle ghRadio1, ghRadio2;
|
static GHandle ghRadio1, ghRadio2;
|
||||||
static GHandle ghRadioBlack, ghRadioWhite, ghRadioYellow;
|
static GHandle ghRadioBlack, ghRadioWhite, ghRadioYellow;
|
||||||
static GHandle ghList1, ghList2, ghList3;
|
static GHandle ghList1, ghList2, ghList3, ghList4;
|
||||||
static GHandle ghImage1;
|
static GHandle ghImage1;
|
||||||
|
static GHandle ghProgressbar1;
|
||||||
static gdispImage imgYesNo;
|
static gdispImage imgYesNo;
|
||||||
|
|
||||||
/* Some useful macros */
|
/* Some useful macros */
|
||||||
|
@ -117,85 +118,154 @@ static void createWidgets(void) {
|
||||||
// Create the Tabs
|
// Create the Tabs
|
||||||
wi.g.show = TRUE; wi.customDraw = gwinRadioDraw_Tab;
|
wi.g.show = TRUE; wi.customDraw = gwinRadioDraw_Tab;
|
||||||
wi.g.width = ScrWidth/7; wi.g.height = TAB_HEIGHT; wi.g.y = 0;
|
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 = 0*wi.g.width; wi.text = "Buttons";
|
||||||
wi.g.x = 1*wi.g.width; wi.text = "Sliders"; ghTabSliders = gwinRadioCreate(0, &wi, GROUP_TABS);
|
ghTabButtons = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||||
wi.g.x = 2*wi.g.width; wi.text = "Checkbox"; ghTabCheckboxes = gwinRadioCreate(0, &wi, GROUP_TABS);
|
wi.g.x = 1*wi.g.width; wi.text = "Sliders";
|
||||||
wi.g.x = 3*wi.g.width; wi.text = "Radios"; ghTabRadios = gwinRadioCreate(0, &wi, GROUP_TABS);
|
ghTabSliders = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||||
wi.g.x = 4*wi.g.width; wi.text = "Lists"; ghTabLists = gwinRadioCreate(0, &wi, GROUP_TABS);
|
wi.g.x = 2*wi.g.width; wi.text = "Checkbox";
|
||||||
wi.g.x = 5*wi.g.width; wi.text = "Labels"; ghTabLabels = gwinRadioCreate(0, &wi, GROUP_TABS);
|
ghTabCheckboxes = gwinRadioCreate(0, &wi, GROUP_TABS);
|
||||||
wi.g.x = 6*wi.g.width; wi.text = "Images"; ghTabImages = 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
|
// Buttons
|
||||||
wi.g.show = FALSE; wi.customDraw = 0;
|
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.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+0*(BUTTON_WIDTH+1); wi.text = "B1";
|
||||||
wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2"; ghButton2 = gwinButtonCreate(0, &wi);
|
ghButton1 = gwinButtonCreate(0, &wi);
|
||||||
wi.g.x = 0+2*(BUTTON_WIDTH+1); wi.text = "B3"; ghButton3 = gwinButtonCreate(0, &wi);
|
wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2";
|
||||||
wi.g.x = 0+3*(BUTTON_WIDTH+1); wi.text = "B4"; ghButton4 = gwinButtonCreate(0, &wi);
|
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
|
// Horizontal Sliders
|
||||||
wi.g.width = ScrWidth/2-2; wi.g.height = SLIDER_WIDTH; wi.g.x = ScrWidth/2+1;
|
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-2*(SLIDER_WIDTH+1); wi.text = "S1";
|
||||||
wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2"; ghSlider2 = gwinSliderCreate(0, &wi);
|
ghSlider1 = gwinSliderCreate(0, &wi);
|
||||||
|
wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2";
|
||||||
|
ghSlider2 = gwinSliderCreate(0, &wi);
|
||||||
|
|
||||||
// Vertical Sliders
|
// Vertical Sliders
|
||||||
wi.g.width = SLIDER_WIDTH; wi.g.height = ScrHeight/2-2; wi.g.y = ScrHeight/2+1;
|
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+0*(SLIDER_WIDTH+1); wi.text = "S3";
|
||||||
wi.g.x = 0+1*(SLIDER_WIDTH+1); wi.text = "S4"; ghSlider4 = gwinSliderCreate(0, &wi);
|
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
|
// 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.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.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.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
|
// Labels
|
||||||
wi.g.width = 0; wi.g.height = LABEL_HEIGHT; // dynamic width, fixed height
|
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
|
// Radio Buttons
|
||||||
wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = TAB_HEIGHT+5;
|
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 = 0*wi.g.width; wi.text = "Yes";
|
||||||
wi.g.x = 1*wi.g.width; wi.text = "No"; ghRadio2 = gwinRadioCreate(0, &wi, GROUP_YESNO);
|
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.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 = 0*wi.g.width; wi.text = "Black";
|
||||||
wi.g.x = 1*wi.g.width; wi.text = "White"; ghRadioWhite = gwinRadioCreate(0, &wi, GROUP_COLORS);
|
ghRadioBlack = gwinRadioCreate(0, &wi, GROUP_COLORS);
|
||||||
wi.g.x = 2*wi.g.width; wi.text = "Yellow"; ghRadioYellow = 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);
|
gwinRadioPress(ghRadioWhite);
|
||||||
|
|
||||||
// Lists
|
// Lists
|
||||||
wi.g.show = FALSE; wi.customDraw = 0;
|
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.width = LIST_WIDTH; wi.g.height = LIST_HEIGHT; wi.g.y = 2*TAB_HEIGHT+10;
|
||||||
wi.g.x = 0+0*(LIST_WIDTH+1); wi.text = "L1"; ghList1 = gwinListCreate(0, &wi, FALSE);
|
wi.g.x = 0+0*(LIST_WIDTH+5); wi.text = "L1";
|
||||||
gwinListAddItem(ghList1, "Item 0", FALSE); gwinListAddItem(ghList1, "Item 1", FALSE);
|
ghList1 = gwinListCreate(0, &wi, FALSE);
|
||||||
gwinListAddItem(ghList1, "Item 2", FALSE); gwinListAddItem(ghList1, "Item 3", FALSE);
|
gwinListAddItem(ghList1, "Item 0", FALSE);
|
||||||
gwinListAddItem(ghList1, "Item 4", FALSE); gwinListAddItem(ghList1, "Item 5", FALSE);
|
gwinListAddItem(ghList1, "Item 1", FALSE);
|
||||||
gwinListAddItem(ghList1, "Item 6", FALSE); gwinListAddItem(ghList1, "Item 7", FALSE);
|
gwinListAddItem(ghList1, "Item 2", FALSE);
|
||||||
gwinListAddItem(ghList1, "Item 8", FALSE); gwinListAddItem(ghList1, "Item 9", FALSE);
|
gwinListAddItem(ghList1, "Item 3", FALSE);
|
||||||
gwinListAddItem(ghList1, "Item 10", FALSE); gwinListAddItem(ghList1, "Item 11", FALSE);
|
gwinListAddItem(ghList1, "Item 4", FALSE);
|
||||||
gwinListAddItem(ghList1, "Item 12", FALSE); gwinListAddItem(ghList1, "Item 13", FALSE);
|
gwinListAddItem(ghList1, "Item 5", FALSE);
|
||||||
wi.g.x = 0+1*(LIST_WIDTH+1); wi.text = "L2"; ghList2 = gwinListCreate(0, &wi, TRUE);
|
gwinListAddItem(ghList1, "Item 6", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 0", FALSE); gwinListAddItem(ghList2, "Item 1", FALSE);
|
gwinListAddItem(ghList1, "Item 7", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 2", FALSE); gwinListAddItem(ghList2, "Item 3", FALSE);
|
gwinListAddItem(ghList1, "Item 8", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 4", FALSE); gwinListAddItem(ghList2, "Item 5", FALSE);
|
gwinListAddItem(ghList1, "Item 9", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 6", FALSE); gwinListAddItem(ghList2, "Item 7", FALSE);
|
gwinListAddItem(ghList1, "Item 10", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 8", FALSE); gwinListAddItem(ghList2, "Item 9", FALSE);
|
gwinListAddItem(ghList1, "Item 11", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 10", FALSE); gwinListAddItem(ghList2, "Item 11", FALSE);
|
gwinListAddItem(ghList1, "Item 12", FALSE);
|
||||||
gwinListAddItem(ghList2, "Item 12", FALSE); gwinListAddItem(ghList2, "Item 13", FALSE);
|
gwinListAddItem(ghList1, "Item 13", FALSE);
|
||||||
wi.g.x = 0+2*(LIST_WIDTH+1); wi.text = "L3"; ghList3 = gwinListCreate(0, &wi, TRUE);
|
wi.g.x = 0+1*(LIST_WIDTH+5); wi.text = "L2";
|
||||||
gwinListAddItem(ghList3, "Item 0", FALSE); gwinListAddItem(ghList3, "Item 1", FALSE);
|
ghList2 = gwinListCreate(0, &wi, TRUE);
|
||||||
gwinListAddItem(ghList3, "Item 2", FALSE); gwinListAddItem(ghList3, "Item 3", FALSE);
|
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");
|
gdispImageOpenFile(&imgYesNo, "image_yesno.gif");
|
||||||
gwinListItemSetImage(ghList3, 1, &imgYesNo);
|
gwinListItemSetImage(ghList3, 1, &imgYesNo);
|
||||||
gwinListItemSetImage(ghList3, 3, &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
|
// 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);
|
ghImage1 = gwinImageCreate(0, &wi.g);
|
||||||
gwinImageOpenFile(ghImage1, "chibios.bmp");
|
gwinImageOpenFile(ghImage1, "romfs_img_ugfx.bmp");
|
||||||
gwinImageCache(ghImage1);
|
|
||||||
|
// 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
|
// Console - we apply some special colors before making it visible
|
||||||
wi.g.width = ScrWidth/2-1; wi.g.height = ScrHeight/2-1;
|
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) {
|
static void setTab(GHandle tab) {
|
||||||
/* Make sure everything is invisible first */
|
/* Make sure everything is invisible first */
|
||||||
gwinSetVisible(ghButton1, FALSE); gwinSetVisible(ghButton2, FALSE);
|
gwinSetVisible(ghButton1, FALSE);
|
||||||
gwinSetVisible(ghButton3, FALSE); gwinSetVisible(ghButton4, FALSE);
|
gwinSetVisible(ghButton2, FALSE);
|
||||||
gwinSetVisible(ghSlider1, FALSE); gwinSetVisible(ghSlider2, FALSE);
|
gwinSetVisible(ghButton3, FALSE);
|
||||||
gwinSetVisible(ghSlider3, FALSE); gwinSetVisible(ghSlider4, FALSE);
|
gwinSetVisible(ghButton4, FALSE);
|
||||||
gwinSetVisible(ghCheckbox1, FALSE); gwinSetVisible(ghCheckbox2, FALSE); gwinSetVisible(ghCheckDisableAll, 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(ghLabel1, FALSE);
|
||||||
gwinSetVisible(ghRadio1, FALSE); gwinSetVisible(ghRadio2, FALSE);
|
gwinSetVisible(ghRadio1, FALSE);
|
||||||
gwinSetVisible(ghRadioWhite, FALSE);gwinSetVisible(ghRadioBlack, FALSE);gwinSetVisible(ghRadioYellow, FALSE);
|
gwinSetVisible(ghRadio2, FALSE);
|
||||||
gwinSetVisible(ghList1, FALSE); gwinSetVisible(ghList2, FALSE); gwinSetVisible(ghList3, 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(ghImage1, FALSE);
|
||||||
|
gwinSetVisible(ghProgressbar1, FALSE);
|
||||||
|
|
||||||
|
// Stop the progress bar
|
||||||
|
gwinProgressbarStop(ghProgressbar1);
|
||||||
|
gwinProgressbarReset(ghProgressbar1);
|
||||||
|
|
||||||
/* Turn on widgets depending on the tab selected */
|
/* Turn on widgets depending on the tab selected */
|
||||||
if (tab == ghTabButtons) {
|
if (tab == ghTabButtons) {
|
||||||
gwinSetVisible(ghButton1, TRUE); gwinSetVisible(ghButton2, TRUE);
|
gwinSetVisible(ghButton1, TRUE);
|
||||||
gwinSetVisible(ghButton3, TRUE); gwinSetVisible(ghButton4, TRUE);
|
gwinSetVisible(ghButton2, TRUE);
|
||||||
|
gwinSetVisible(ghButton3, TRUE);
|
||||||
|
gwinSetVisible(ghButton4, TRUE);
|
||||||
} else if (tab == ghTabSliders) {
|
} else if (tab == ghTabSliders) {
|
||||||
gwinSetVisible(ghSlider1, TRUE); gwinSetVisible(ghSlider2, TRUE);
|
gwinSetVisible(ghSlider1, TRUE);
|
||||||
gwinSetVisible(ghSlider3, TRUE); gwinSetVisible(ghSlider4, TRUE);
|
gwinSetVisible(ghSlider2, TRUE);
|
||||||
|
gwinSetVisible(ghSlider3, TRUE);
|
||||||
|
gwinSetVisible(ghSlider4, TRUE);
|
||||||
} else if (tab == ghTabCheckboxes) {
|
} 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) {
|
} else if (tab == ghTabLabels) {
|
||||||
gwinSetVisible(ghLabel1, TRUE);
|
gwinSetVisible(ghLabel1, TRUE);
|
||||||
} else if (tab == ghTabRadios) {
|
} else if (tab == ghTabRadios) {
|
||||||
gwinSetVisible(ghRadio1, TRUE); gwinSetVisible(ghRadio2, TRUE);
|
gwinSetVisible(ghRadio1, TRUE);
|
||||||
gwinSetVisible(ghRadioWhite, TRUE); gwinSetVisible(ghRadioBlack, TRUE); gwinSetVisible(ghRadioYellow, TRUE);
|
gwinSetVisible(ghRadio2, TRUE);
|
||||||
|
gwinSetVisible(ghRadioWhite, TRUE);
|
||||||
|
gwinSetVisible(ghRadioBlack, TRUE);
|
||||||
|
gwinSetVisible(ghRadioYellow, TRUE);
|
||||||
} else if (tab == ghTabLists) {
|
} 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) {
|
} else if (tab == ghTabImages) {
|
||||||
gwinSetVisible(ghImage1, TRUE);
|
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)
|
* Set the enabled state of every widget (except the tabs etc)
|
||||||
*/
|
*/
|
||||||
static void setEnabled(bool_t ena) {
|
static void setEnabled(bool_t ena) {
|
||||||
gwinSetEnabled(ghButton1, ena); gwinSetEnabled(ghButton2, ena);
|
gwinSetEnabled(ghButton1, ena);
|
||||||
gwinSetEnabled(ghButton3, ena); gwinSetEnabled(ghButton4, ena);
|
gwinSetEnabled(ghButton2, ena);
|
||||||
gwinSetEnabled(ghSlider1, ena); gwinSetEnabled(ghSlider2, ena);
|
gwinSetEnabled(ghButton3, ena);
|
||||||
gwinSetEnabled(ghSlider3, ena); gwinSetEnabled(ghSlider4, ena);
|
gwinSetEnabled(ghButton4, ena);
|
||||||
gwinSetEnabled(ghCheckbox1, ena); gwinSetEnabled(ghCheckbox2, ena); //gwinSetEnabled(ghCheckDisableAll, TRUE);
|
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(ghLabel1, ena);
|
||||||
gwinSetEnabled(ghRadio1, ena); gwinSetEnabled(ghRadio2, ena);
|
gwinSetEnabled(ghRadio1, ena);
|
||||||
gwinSetEnabled(ghList1, ena); gwinSetEnabled(ghList2, ena); gwinSetEnabled(ghList3, ena);
|
gwinSetEnabled(ghRadio2, ena);
|
||||||
gwinSetEnabled(ghRadioWhite, ena); gwinSetEnabled(ghRadioBlack, ena); gwinSetEnabled(ghRadioYellow, 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(ghImage1, ena);
|
||||||
|
gwinSetEnabled(ghProgressbar1, ena);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
|
|
@ -4,5 +4,5 @@
|
||||||
* The files have been converted using...
|
* The files have been converted using...
|
||||||
* file2c -dbcs infile outfile
|
* file2c -dbcs infile outfile
|
||||||
*/
|
*/
|
||||||
#include "romfs_img_chibios.h"
|
#include "romfs_img_ugfx.h"
|
||||||
#include "romfs_img_yesno.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
|
DEPRECATE: TDISP module removed
|
||||||
FIX: Console does not execute gwinPrintf() anymore if not visible
|
FIX: Console does not execute gwinPrintf() anymore if not visible
|
||||||
FEATURE: Added gwinGetColor() and gwinGetBgColor()
|
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: Added smooth scrolling to list widget
|
||||||
FEATURE: Increased performance of gwinListAddItem()
|
FEATURE: Increased performance of gwinListAddItem()
|
||||||
FEATURE: Added FreeRTOS port
|
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.
|
FEATURE: Image file handling changed to use new GFILE module.
|
||||||
DEPRECTATE: Old image opening functions deprecated.
|
DEPRECTATE: Old image opening functions deprecated.
|
||||||
FEATURE: Restructure and simplify the include path for GFX
|
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 ***
|
*** 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
|
* @file drivers/gadc/AT91SAM7/gadc_lld.c
|
||||||
* @brief GADC - Periodic ADC driver source file for the AT91SAM7 cpu.
|
* @brief GADC - Periodic ADC driver source file for the AT91SAM7 cpu.
|
||||||
*
|
|
||||||
* @defgroup Driver Driver
|
|
||||||
* @ingroup GADC
|
|
||||||
* @{
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gfx.h"
|
#include "gfx.h"
|
||||||
|
@ -20,69 +16,73 @@
|
||||||
|
|
||||||
#include "src/gadc/driver.h"
|
#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 = {
|
static ADCConversionGroup acg = {
|
||||||
FALSE, // circular
|
FALSE, // circular
|
||||||
1, // num_channels
|
1, // num_channels
|
||||||
GADC_ISR_CompleteI, // end_cb
|
ISR_CompleteI, // end_cb
|
||||||
GADC_ISR_ErrorI, // error_cb
|
ISR_ErrorI, // error_cb
|
||||||
0, // channelselects
|
0, // channelselects
|
||||||
0, // trigger
|
0, // trigger
|
||||||
0, // frequency
|
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) {
|
void gadc_lld_init(void) {
|
||||||
adcStart(&ADCD1, 0);
|
adcStart(&ADCD1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t gadc_lld_samples_per_conversion(uint32_t physdev) {
|
size_t gadc_lld_samplesperconversion(uint32_t physdev) {
|
||||||
size_t cnt;
|
size_t samples;
|
||||||
int i;
|
|
||||||
|
|
||||||
/* The AT91SAM7 has AD0..7 - physdev is a bitmap of those channels */
|
for(samples = 0; physdev; physdev >>= 1)
|
||||||
for(cnt = 0, i = 0; i < 8; i++, physdev >>= 1)
|
|
||||||
if (physdev & 0x01)
|
if (physdev & 0x01)
|
||||||
cnt++;
|
samples++;
|
||||||
return cnt;
|
return samples;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gadc_lld_start_timer(uint32_t physdev, uint32_t frequency) {
|
void gadc_lld_start_timerI(uint32_t frequency) {
|
||||||
(void) physdev;
|
// 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
|
||||||
* The AT91SAM7 ADC driver supports triggering the ADC using a timer without having to implement
|
// indicate the timer should be re-initialised on the next timer job
|
||||||
* an interrupt handler for the timer. The driver also initialises the timer correctly for us.
|
nextfreq = frequency;
|
||||||
* 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_stop_timer(uint32_t physdev) {
|
void gadc_lld_stop_timerI(void) {
|
||||||
(void) physdev;
|
// Nothing to do here. The AT91SAM7 adc driver automatically turns off timer interrupts
|
||||||
if ((acg.trigger & ~ADC_TRIGGER_SOFTWARE) == ADC_TRIGGER_TIMER)
|
// on completion of the job
|
||||||
adcStop(&ADCD1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gadc_lld_adc_timerI(GadcLldTimerData *pgtd) {
|
void gadc_lld_timerjobI(GadcTimerJob *pj) {
|
||||||
/**
|
acg.channelselects = pj->physdev;
|
||||||
* We don't need to calculate num_channels because the AT91SAM7 ADC does this for us.
|
acg.trigger = ADC_TRIGGER_TIMER;
|
||||||
*/
|
acg.frequency = nextfreq;
|
||||||
acg.channelselects = pgtd->physdev;
|
nextfreq = 0; // Next job use the same timer
|
||||||
acg.trigger = pgtd->now ? (ADC_TRIGGER_TIMER|ADC_TRIGGER_SOFTWARE) : ADC_TRIGGER_TIMER;
|
adcStartConversionI(&ADCD1, &acg, pj->buffer, pj->todo);
|
||||||
|
|
||||||
adcStartConversionI(&ADCD1, &acg, pgtd->buffer, pgtd->count);
|
|
||||||
|
|
||||||
/* Next time assume the same (still running) timer */
|
|
||||||
acg.frequency = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gadc_lld_adc_nontimerI(GadcLldNonTimerData *pgntd) {
|
void gadc_lld_nontimerjobI(GadcNonTimerJob *pj) {
|
||||||
/**
|
acg.channelselects = pj->physdev;
|
||||||
* We don't need to calculate num_channels because the AT91SAM7 ADC does this for us.
|
|
||||||
*/
|
|
||||||
acg.channelselects = pgntd->physdev;
|
|
||||||
acg.trigger = ADC_TRIGGER_SOFTWARE;
|
acg.trigger = ADC_TRIGGER_SOFTWARE;
|
||||||
adcStartConversionI(&ADCD1, &acg, pgntd->buffer, 1);
|
adcStartConversionI(&ADCD1, &acg, pj->buffer, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* GFX_USE_GADC */
|
#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
|
* @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.
|
* 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
|
* @brief The maximum sample frequency supported by this CPU
|
||||||
*/
|
*/
|
||||||
#define GADC_MAX_SAMPLE_FREQUENCY 132000
|
#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
|
* @brief The sample format
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef GAUDIO_PLAY_CONFIG_H
|
||||||
#define GAUDIO_PLAY_CONFIG_H
|
#define GAUDIO_PLAY_CONFIG_H
|
||||||
|
|
||||||
|
@ -22,42 +14,16 @@
|
||||||
/* Driver hardware support. */
|
/* Driver hardware support. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The maximum sample frequency supported by this audio device
|
|
||||||
*/
|
|
||||||
#define GAUDIO_PLAY_MAX_SAMPLE_FREQUENCY 44100
|
#define GAUDIO_PLAY_MAX_SAMPLE_FREQUENCY 44100
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The number of audio formats supported by this driver
|
|
||||||
*/
|
|
||||||
#define GAUDIO_PLAY_NUM_FORMATS 2
|
#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_FORMAT1 ARRAY_DATA_16BITSIGNED
|
||||||
#define GAUDIO_PLAY_FORMAT2 ARRAY_DATA_8BITUNSIGNED
|
#define GAUDIO_PLAY_FORMAT2 ARRAY_DATA_8BITUNSIGNED
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The number of audio channels supported by this driver
|
|
||||||
*/
|
|
||||||
#define GAUDIO_PLAY_NUM_CHANNELS 2
|
#define GAUDIO_PLAY_NUM_CHANNELS 2
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Whether each channel is mono or stereo
|
|
||||||
*/
|
|
||||||
#define GAUDIO_PLAY_CHANNEL0_IS_STEREO FALSE
|
#define GAUDIO_PLAY_CHANNEL0_IS_STEREO FALSE
|
||||||
#define GAUDIO_PLAY_CHANNEL1_IS_STEREO TRUE
|
#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_MONO 0
|
||||||
#define GAUDIO_PLAY_STEREO 1
|
#define GAUDIO_PLAY_STEREO 1
|
||||||
/** @} */
|
|
||||||
|
|
||||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_PLAY */
|
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_PLAY */
|
||||||
|
|
||||||
#endif /* GAUDIO_PLAY_CONFIG_H */
|
#endif /* GAUDIO_PLAY_CONFIG_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,11 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* http://ugfx.org/license.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @file drivers/gaudio/Win32/gaudio_play_lld.c
|
|
||||||
* @brief GAUDIO - Play Driver file for Win32.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "gfx.h"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_PLAY
|
#if GFX_USE_GAUDIO && GAUDIO_NEED_PLAY
|
||||||
|
@ -47,7 +42,7 @@ static DWORD threadID;
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
static bool_t senddata(WAVEHDR *pwh) {
|
static bool_t senddata(WAVEHDR *pwh) {
|
||||||
GAudioData *paud;
|
GDataBuffer *paud;
|
||||||
|
|
||||||
// Get the next data block to send
|
// Get the next data block to send
|
||||||
gfxSystemLock();
|
gfxSystemLock();
|
||||||
|
@ -94,7 +89,7 @@ static DWORD WINAPI waveProc(LPVOID arg) {
|
||||||
|
|
||||||
// Give the buffer back to the Audio Free List
|
// Give the buffer back to the Audio Free List
|
||||||
gfxSystemLock();
|
gfxSystemLock();
|
||||||
gaudioPlayReleaseDataBlockI((GAudioData *)pwh->dwUser);
|
gaudioPlayReleaseDataBlockI((GDataBuffer *)pwh->dwUser);
|
||||||
gfxSystemUnlock();
|
gfxSystemUnlock();
|
||||||
pwh->lpData = 0;
|
pwh->lpData = 0;
|
||||||
nQueuedBuffers--;
|
nQueuedBuffers--;
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef GAUDIO_RECORD_CONFIG_H
|
||||||
#define GAUDIO_RECORD_CONFIG_H
|
#define GAUDIO_RECORD_CONFIG_H
|
||||||
|
|
||||||
|
@ -22,42 +14,16 @@
|
||||||
/* Driver hardware support. */
|
/* Driver hardware support. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The maximum sample frequency supported by this audio device
|
|
||||||
*/
|
|
||||||
#define GAUDIO_RECORD_MAX_SAMPLE_FREQUENCY 44100
|
#define GAUDIO_RECORD_MAX_SAMPLE_FREQUENCY 44100
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The number of audio formats supported by this driver
|
|
||||||
*/
|
|
||||||
#define GAUDIO_RECORD_NUM_FORMATS 2
|
#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_FORMAT1 ARRAY_DATA_16BITSIGNED
|
||||||
#define GAUDIO_RECORD_FORMAT2 ARRAY_DATA_8BITUNSIGNED
|
#define GAUDIO_RECORD_FORMAT2 ARRAY_DATA_8BITUNSIGNED
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The number of audio channels supported by this driver
|
|
||||||
*/
|
|
||||||
#define GAUDIO_RECORD_NUM_CHANNELS 2
|
#define GAUDIO_RECORD_NUM_CHANNELS 2
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Whether each channel is mono or stereo
|
|
||||||
*/
|
|
||||||
#define GAUDIO_RECORD_CHANNEL0_IS_STEREO FALSE
|
#define GAUDIO_RECORD_CHANNEL0_IS_STEREO FALSE
|
||||||
#define GAUDIO_RECORD_CHANNEL1_IS_STEREO TRUE
|
#define GAUDIO_RECORD_CHANNEL1_IS_STEREO TRUE
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The list of audio channels and their uses
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define GAUDIO_RECORD_MONO 0
|
#define GAUDIO_RECORD_MONO 0
|
||||||
#define GAUDIO_RECORD_STEREO 1
|
#define GAUDIO_RECORD_STEREO 1
|
||||||
/** @} */
|
|
||||||
|
|
||||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */
|
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */
|
||||||
|
|
||||||
#endif /* GAUDIO_RECORD_CONFIG_H */
|
#endif /* GAUDIO_RECORD_CONFIG_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,11 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* http://ugfx.org/license.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @file drivers/gaudio/Win32/gaudio_record_lld.c
|
|
||||||
* @brief GAUDIO - Record Driver file for Win32.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "gfx.h"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_RECORD
|
#if GFX_USE_GAUDIO && GAUDIO_NEED_RECORD
|
||||||
|
@ -47,7 +42,7 @@ static DWORD threadID;
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
static bool_t getbuffer(WAVEHDR *pwh) {
|
static bool_t getbuffer(WAVEHDR *pwh) {
|
||||||
GAudioData *paud;
|
GDataBuffer *paud;
|
||||||
|
|
||||||
// Get the next data block to send
|
// Get the next data block to send
|
||||||
gfxSystemLock();
|
gfxSystemLock();
|
||||||
|
@ -81,7 +76,7 @@ static bool_t getbuffer(WAVEHDR *pwh) {
|
||||||
static DWORD WINAPI waveProc(LPVOID arg) {
|
static DWORD WINAPI waveProc(LPVOID arg) {
|
||||||
MSG msg;
|
MSG msg;
|
||||||
WAVEHDR *pwh;
|
WAVEHDR *pwh;
|
||||||
GAudioData *paud;
|
GDataBuffer *paud;
|
||||||
(void) arg;
|
(void) arg;
|
||||||
|
|
||||||
while (GetMessage(&msg, 0, 0, 0)) {
|
while (GetMessage(&msg, 0, 0, 0)) {
|
||||||
|
@ -93,7 +88,7 @@ static DWORD WINAPI waveProc(LPVOID arg) {
|
||||||
waveInUnprepareHeader(ah, pwh, sizeof(WAVEHDR));
|
waveInUnprepareHeader(ah, pwh, sizeof(WAVEHDR));
|
||||||
|
|
||||||
// Save the buffer in the audio record list
|
// Save the buffer in the audio record list
|
||||||
paud = (GAudioData *)pwh->dwUser;
|
paud = (GDataBuffer *)pwh->dwUser;
|
||||||
paud->len = pwh->dwBytesRecorded;
|
paud->len = pwh->dwBytesRecorded;
|
||||||
gfxSystemLock();
|
gfxSystemLock();
|
||||||
gaudioRecordSaveDataBlockI(paud);
|
gaudioRecordSaveDataBlockI(paud);
|
||||||
|
|
|
@ -3,3 +3,7 @@ GFXSRC += $(GFXLIB)/drivers/gaudio/gadc/gaudio_record_lld.c
|
||||||
|
|
||||||
# Required include directories
|
# Required include directories
|
||||||
GFXINC += $(GFXLIB)/drivers/gaudio/gadc
|
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
|
* 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
|
#ifndef _GAUDIO_RECORD_BOARD_H
|
||||||
#define _GAUDIO_RECORD_BOARD_H
|
#define _GAUDIO_RECORD_BOARD_H
|
||||||
|
|
||||||
|
@ -20,31 +12,16 @@
|
||||||
/* Audio inputs on this board */
|
/* 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
|
#define GAUDIO_RECORD_NUM_CHANNELS 1
|
||||||
|
|
||||||
/**
|
#define GAUDIO_RECORD_CHANNEL0_IS_STEREO FALSE
|
||||||
* @brief The list of audio channels and their uses
|
|
||||||
* @note This is an example
|
#define GAUDIO_RECORD_MICROPHONE 0
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define GAUDIO_RECORD_MICROPHONE 0
|
|
||||||
/** @} */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The audio channel to GADC physical device assignment
|
|
||||||
* @note This is an example
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#ifdef GAUDIO_RECORD_LLD_IMPLEMENTATION
|
#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,
|
GADC_PHYSDEV_MICROPHONE,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
/** @} */
|
|
||||||
|
|
||||||
#endif /* _GAUDIO_RECORD_BOARD_H */
|
#endif /* _GAUDIO_RECORD_BOARD_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef GAUDIO_RECORD_CONFIG_H
|
||||||
#define GAUDIO_RECORD_CONFIG_H
|
#define GAUDIO_RECORD_CONFIG_H
|
||||||
|
|
||||||
|
@ -22,38 +14,13 @@
|
||||||
/* Driver hardware support. */
|
/* Driver hardware support. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
#define GAUDIO_RECORD_MAX_SAMPLE_FREQUENCY GADC_MAX_HIGH_SPEED_SAMPLERATE
|
||||||
* @brief The audio record sample type
|
#define GAUDIO_RECORD_NUM_FORMATS 1
|
||||||
* @details For this driver it matches the cpu sample type
|
#define GAUDIO_RECORD_FORMAT1 GADC_SAMPLE_FORMAT
|
||||||
*/
|
|
||||||
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
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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 the user supplied board definitions */
|
||||||
#include "gaudio_record_board.h"
|
#include "gaudio_record_board.h"
|
||||||
|
|
||||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */
|
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */
|
||||||
|
|
||||||
#endif /* GAUDIO_RECORD_CONFIG_H */
|
#endif /* GAUDIO_RECORD_CONFIG_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,22 +5,7 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#define GAUDIO_RECORD_IMPLEMENTATION
|
||||||
|
|
||||||
|
|
||||||
#include "gfx.h"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GAUDIO && GAUDIO_NEED_RECORD
|
#if GFX_USE_GAUDIO && GAUDIO_NEED_RECORD
|
||||||
|
@ -33,30 +18,38 @@
|
||||||
/* Include the driver defines */
|
/* Include the driver defines */
|
||||||
#include "src/gaudio/driver_record.h"
|
#include "src/gaudio/driver_record.h"
|
||||||
|
|
||||||
|
static void gadcCallbackI(void) {
|
||||||
|
GDataBuffer *pd;
|
||||||
|
|
||||||
|
pd = gadcHighSpeedGetDataI();
|
||||||
|
if (pd)
|
||||||
|
gaudioRecordSaveDataBlockI(pd);
|
||||||
|
}
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* External declarations. */
|
/* 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 */
|
/* 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 */
|
/* Register ourselves for ISR callbacks */
|
||||||
gadcHighSpeedSetISRCallback(GAUDIN_ISR_CompleteI);
|
gadcHighSpeedSetISRCallback(gadcCallbackI);
|
||||||
|
|
||||||
/**
|
return TRUE;
|
||||||
* 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()
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gaudin_lld_start(void) {
|
void gaudio_record_lld_start(void) {
|
||||||
gadcHighSpeedStart();
|
gadcHighSpeedStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
void gaudin_lld_stop(void) {
|
void gaudio_record_lld_stop(void) {
|
||||||
gadcHighSpeedStop();
|
gadcHighSpeedStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* GFX_USE_GAUDIO && GAUDIO_NEED_RECORD */
|
#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
|
* 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
|
#ifndef _GDISP_LLD_BOARD_H
|
||||||
#define _GDISP_LLD_BOARD_H
|
#define _GDISP_LLD_BOARD_H
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* @brief Optional parameters that can be put in this file.
|
* @brief Optional parameters that can be put in this file.
|
||||||
* @note The values listed below are the defaults.
|
* @note The values listed below are the defaults.
|
||||||
*
|
*
|
||||||
|
@ -54,149 +46,67 @@
|
||||||
* #define EINK_WRITECOUNT 4
|
* #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) {
|
static inline void init_board(GDisplay *g) {
|
||||||
(void) 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) {
|
static void eink_delay(int us) {
|
||||||
(void) 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) {
|
static inline void setpower_vdd(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpower_vneg(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpower_vpos(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpin_le(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpin_oe(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpin_cl(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpin_sph(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpins_data(GDisplay *g, uint8_t value) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) value;
|
(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) {
|
static inline void setpin_ckv(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpin_gmode(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(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) {
|
static inline void setpin_spv(GDisplay *g, bool_t on) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) on;
|
(void) on;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _GDISP_LLD_BOARD_H */
|
#endif /* _GDISP_LLD_BOARD_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,11 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GDISP
|
#if GFX_USE_GDISP
|
||||||
|
@ -83,7 +78,7 @@
|
||||||
|
|
||||||
#define PRIV(g) ((drvPriv *)g->priv)
|
#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)
|
static inline void clockdelay(void)
|
||||||
{
|
{
|
||||||
#if EINK_CLOCKDELAY & 1
|
#if EINK_CLOCKDELAY & 1
|
||||||
|
@ -111,7 +106,7 @@ static inline void clockdelay(void)
|
||||||
#endif
|
#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)
|
static void vclock_quick(GDisplay *g)
|
||||||
{
|
{
|
||||||
setpin_ckv(g, TRUE);
|
setpin_ckv(g, TRUE);
|
||||||
|
@ -120,7 +115,7 @@ static void vclock_quick(GDisplay *g)
|
||||||
eink_delay(4);
|
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)
|
static void hclock(GDisplay *g)
|
||||||
{
|
{
|
||||||
clockdelay();
|
clockdelay();
|
||||||
|
@ -129,7 +124,7 @@ static void hclock(GDisplay *g)
|
||||||
setpin_cl(g, FALSE);
|
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,
|
* Note: Does not clear any previous bits in the shift register,
|
||||||
* so you should always scan through the whole display before
|
* so you should always scan through the whole display before
|
||||||
* starting a new scan.
|
* starting a new scan.
|
||||||
|
@ -144,7 +139,7 @@ static void vscan_start(GDisplay *g)
|
||||||
vclock_quick(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
|
* Attempts to minimize the leaking of color to other rows by having
|
||||||
* a long idle period after a medium-length strobe period.
|
* a long idle period after a medium-length strobe period.
|
||||||
*/
|
*/
|
||||||
|
@ -158,7 +153,7 @@ static void vscan_write(GDisplay *g)
|
||||||
eink_delay(200);
|
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.
|
* screen, but does not mind some of it leaking to other rows.
|
||||||
*/
|
*/
|
||||||
static void vscan_bulkwrite(GDisplay *g)
|
static void vscan_bulkwrite(GDisplay *g)
|
||||||
|
@ -169,7 +164,7 @@ static void vscan_bulkwrite(GDisplay *g)
|
||||||
eink_delay(200);
|
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.
|
* Attempts to minimize the amount of change in any row.
|
||||||
*/
|
*/
|
||||||
static void vscan_skip(GDisplay *g)
|
static void vscan_skip(GDisplay *g)
|
||||||
|
@ -180,7 +175,7 @@ static void vscan_skip(GDisplay *g)
|
||||||
eink_delay(100);
|
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.
|
* necessary or the next vertical scan may be corrupted.
|
||||||
*/
|
*/
|
||||||
static void vscan_stop(GDisplay *g)
|
static void vscan_stop(GDisplay *g)
|
||||||
|
@ -193,7 +188,7 @@ static void vscan_stop(GDisplay *g)
|
||||||
vclock_quick(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)
|
static void hscan_start(GDisplay *g)
|
||||||
{
|
{
|
||||||
/* Disable latching and output enable while we are modifying the row. */
|
/* 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);
|
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)
|
static void hscan_write(GDisplay *g, const uint8_t *data, int count)
|
||||||
{
|
{
|
||||||
while (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. */
|
* Does not set the output enable, so the drivers are not yet active. */
|
||||||
static void hscan_stop(GDisplay *g)
|
static void hscan_stop(GDisplay *g)
|
||||||
{
|
{
|
||||||
|
@ -231,7 +226,7 @@ static void hscan_stop(GDisplay *g)
|
||||||
setpin_le(g, FALSE);
|
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)
|
static void power_on(GDisplay *g)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
@ -264,7 +259,7 @@ static void power_on(GDisplay *g)
|
||||||
vscan_stop(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)
|
static void power_off(GDisplay *g)
|
||||||
{
|
{
|
||||||
/* First the high voltages */
|
/* First the high voltages */
|
||||||
|
@ -336,7 +331,7 @@ typedef struct drvPriv {
|
||||||
uint8_t g_blockmap[BLOCKS_Y][BLOCKS_X];
|
uint8_t g_blockmap[BLOCKS_Y][BLOCKS_X];
|
||||||
} drvPriv;
|
} 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)
|
static bool_t blocks_on_row(GDisplay *g, unsigned by)
|
||||||
{
|
{
|
||||||
unsigned bx;
|
unsigned bx;
|
||||||
|
@ -350,7 +345,7 @@ static bool_t blocks_on_row(GDisplay *g, unsigned by)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Write out a block row. */
|
/* Write out a block row. */
|
||||||
static void write_block_row(GDisplay *g, unsigned by)
|
static void write_block_row(GDisplay *g, unsigned by)
|
||||||
{
|
{
|
||||||
unsigned bx, dy, dx;
|
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)
|
static void clear_block_map(GDisplay *g)
|
||||||
{
|
{
|
||||||
unsigned bx, by;
|
unsigned bx, by;
|
||||||
|
@ -394,7 +389,7 @@ static void clear_block_map(GDisplay *g)
|
||||||
PRIV(g)->g_next_block = 0;
|
PRIV(g)->g_next_block = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Initialize a newly allocated block. */
|
/* Initialize a newly allocated block. */
|
||||||
static void zero_block(block_t *block)
|
static void zero_block(block_t *block)
|
||||||
{
|
{
|
||||||
unsigned dx, dy;
|
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. */
|
* Automatically flushes if all buffers are full. */
|
||||||
static block_t *alloc_buffer(GDisplay *g, unsigned bx, unsigned by)
|
static block_t *alloc_buffer(GDisplay *g, unsigned bx, unsigned by)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef _HX8347D_H
|
||||||
#define _HX8347D_H
|
#define _HX8347D_H
|
||||||
|
|
||||||
|
@ -140,4 +132,3 @@
|
||||||
#define HX8347D_REG_PGSEL 0xff /* Page select */
|
#define HX8347D_REG_PGSEL 0xff /* Page select */
|
||||||
|
|
||||||
#endif /* _HX8347D_H */
|
#endif /* _HX8347D_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,152 +5,56 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef _GDISP_LLD_BOARD_H
|
||||||
#define _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) {
|
static inline void init_board(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief After the initialisation.
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void post_init_board(GDisplay *g) {
|
static inline void post_init_board(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) state;
|
(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) {
|
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) percent;
|
(void) percent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Take exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void acquire_bus(GDisplay *g) {
|
static inline void acquire_bus(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Release exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void release_bus(GDisplay *g) {
|
static inline void release_bus(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus in 16 bit mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void busmode16(GDisplay *g) {
|
static inline void busmode16(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void busmode8(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void write_index(GDisplay *g, uint8_t index) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) index;
|
(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) {
|
static inline void write_data(GDisplay *g, uint8_t data) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) data;
|
(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) {
|
static inline void write_ram16(GDisplay *g, uint16_t data) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) data;
|
(void) data;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _GDISP_LLD_BOARD_H */
|
#endif /* _GDISP_LLD_BOARD_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,11 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GDISP
|
#if GFX_USE_GDISP
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef _GDISP_LLD_CONFIG_H
|
||||||
#define _GDISP_LLD_CONFIG_H
|
#define _GDISP_LLD_CONFIG_H
|
||||||
|
|
||||||
|
@ -30,4 +22,3 @@
|
||||||
#endif /* GFX_USE_GDISP */
|
#endif /* GFX_USE_GDISP */
|
||||||
|
|
||||||
#endif /* _GDISP_LLD_CONFIG_H */
|
#endif /* _GDISP_LLD_CONFIG_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,153 +5,56 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef GDISP_LLD_BOARD_H
|
||||||
#define 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) {
|
static inline void init_board(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief After the initialisation.
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void post_init_board(GDisplay *g) {
|
static inline void post_init_board(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) state;
|
(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) {
|
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) percent;
|
(void) percent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Take exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void acquire_bus(GDisplay *g) {
|
static inline void acquire_bus(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Release exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void release_bus(GDisplay *g) {
|
static inline void release_bus(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) index;
|
(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) {
|
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) data;
|
(void) data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus in read mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void setreadmode(GDisplay *g) {
|
static inline void setreadmode(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus back into write mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void setwritemode(GDisplay *g) {
|
static inline void setwritemode(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline uint16_t read_data(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* GDISP_LLD_BOARD_H */
|
#endif /* GDISP_LLD_BOARD_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,11 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GDISP
|
#if GFX_USE_GDISP
|
||||||
|
@ -330,7 +325,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
||||||
|
|
||||||
case GDISP_ROTATE_90:
|
case GDISP_ROTATE_90:
|
||||||
acquire_bus(g);
|
acquire_bus(g);
|
||||||
write_reg(g, 0x01, 0x0100);
|
write_reg(g, 0x01, 0x0000);
|
||||||
write_reg(g, 0x03, 0x1030);
|
write_reg(g, 0x03, 0x1030);
|
||||||
write_reg(g, 0x60, 0x2700);
|
write_reg(g, 0x60, 0x2700);
|
||||||
release_bus(g);
|
release_bus(g);
|
||||||
|
@ -352,7 +347,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
||||||
|
|
||||||
case GDISP_ROTATE_270:
|
case GDISP_ROTATE_270:
|
||||||
acquire_bus(g);
|
acquire_bus(g);
|
||||||
write_reg(g, 0x01, 0x0000);
|
write_reg(g, 0x01, 0x0100);
|
||||||
write_reg(g, 0x03, 0x1038);
|
write_reg(g, 0x03, 0x1038);
|
||||||
write_reg(g, 0x60, 0xA700);
|
write_reg(g, 0x60, 0xA700);
|
||||||
release_bus(g);
|
release_bus(g);
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef GDISP_LLD_CONFIG_H
|
||||||
#define GDISP_LLD_CONFIG_H
|
#define GDISP_LLD_CONFIG_H
|
||||||
|
|
||||||
|
@ -32,5 +24,3 @@
|
||||||
#endif /* GFX_USE_GDISP */
|
#endif /* GFX_USE_GDISP */
|
||||||
|
|
||||||
#endif /* _GDISP_LLD_CONFIG_H */
|
#endif /* _GDISP_LLD_CONFIG_H */
|
||||||
/** @} */
|
|
||||||
|
|
||||||
|
|
|
@ -5,151 +5,56 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef GDISP_LLD_BOARD_H
|
||||||
#define 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) {
|
static inline void init_board(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief After the initialisation.
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void post_init_board(GDisplay *g) {
|
static inline void post_init_board(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) state;
|
(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) {
|
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) percent;
|
(void) percent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Take exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void acquire_bus(GDisplay *g) {
|
static inline void acquire_bus(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Release exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void release_bus(GDisplay *g) {
|
static inline void release_bus(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) index;
|
(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) {
|
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) data;
|
(void) data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus in read mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void setreadmode(GDisplay *g) {
|
static inline void setreadmode(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus back into write mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void setwritemode(GDisplay *g) {
|
static inline void setwritemode(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline uint16_t read_data(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* GDISP_LLD_BOARD_H */
|
#endif /* GDISP_LLD_BOARD_H */
|
||||||
/** @} */
|
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef GDISP_LLD_CONFIG_H
|
||||||
#define GDISP_LLD_CONFIG_H
|
#define GDISP_LLD_CONFIG_H
|
||||||
|
|
||||||
|
@ -32,5 +24,3 @@
|
||||||
#endif /* GFX_USE_GDISP */
|
#endif /* GFX_USE_GDISP */
|
||||||
|
|
||||||
#endif /* _GDISP_LLD_CONFIG_H */
|
#endif /* _GDISP_LLD_CONFIG_H */
|
||||||
/** @} */
|
|
||||||
|
|
||||||
|
|
|
@ -5,150 +5,56 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef _GDISP_LLD_BOARD_H
|
||||||
#define _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) {
|
static inline void init_board(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief After the initialisation.
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void post_init_board(GDisplay *g) {
|
static inline void post_init_board(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) state;
|
(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) {
|
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) percent;
|
(void) percent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Take exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void acquire_bus(GDisplay *g) {
|
static inline void acquire_bus(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Release exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void release_bus(GDisplay *g) {
|
static inline void release_bus(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) index;
|
(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) {
|
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) data;
|
(void) data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus in read mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void setreadmode(GDisplay *g) {
|
static inline void setreadmode(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus back into write mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void setwritemode(GDisplay *g) {
|
static inline void setwritemode(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline uint16_t read_data(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _GDISP_LLD_BOARD_H */
|
#endif /* _GDISP_LLD_BOARD_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,12 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GDISP
|
#if GFX_USE_GDISP
|
||||||
|
|
|
@ -5,15 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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
|
#ifndef _GDISP_LLD_CONFIG_H
|
||||||
#define _GDISP_LLD_CONFIG_H
|
#define _GDISP_LLD_CONFIG_H
|
||||||
|
|
||||||
|
@ -32,4 +23,3 @@
|
||||||
#endif /* GFX_USE_GDISP */
|
#endif /* GFX_USE_GDISP */
|
||||||
|
|
||||||
#endif /* _GDISP_LLD_CONFIG_H */
|
#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
|
* 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
|
#ifndef _GDISP_LLD_BOARD_H
|
||||||
#define _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) {
|
static inline void init_board(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief After the initialisation.
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void post_init_board(GDisplay *g) {
|
static inline void post_init_board(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void setpin_reset(GDisplay *g, bool_t state) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) state;
|
(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) {
|
static inline void set_backlight(GDisplay *g, uint8_t percent) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) percent;
|
(void) percent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Take exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void acquire_bus(GDisplay *g) {
|
static inline void acquire_bus(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Release exclusive control of the bus
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void release_bus(GDisplay *g) {
|
static inline void release_bus(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline void write_index(GDisplay *g, uint16_t index) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) index;
|
(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) {
|
static inline void write_data(GDisplay *g, uint16_t data) {
|
||||||
(void) g;
|
(void) g;
|
||||||
(void) data;
|
(void) data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus in read mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void setreadmode(GDisplay *g) {
|
static inline void setreadmode(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the bus back into write mode
|
|
||||||
*
|
|
||||||
* @param[in] g The GDisplay structure
|
|
||||||
*
|
|
||||||
* @notapi
|
|
||||||
*/
|
|
||||||
static inline void setwritemode(GDisplay *g) {
|
static inline void setwritemode(GDisplay *g) {
|
||||||
(void) 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) {
|
static inline uint16_t read_data(GDisplay *g) {
|
||||||
(void) g;
|
(void) g;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _GDISP_LLD_BOARD_H */
|
#endif /* _GDISP_LLD_BOARD_H */
|
||||||
/** @} */
|
|
||||||
|
|
|
@ -5,12 +5,6 @@
|
||||||
* http://ugfx.org/license.html
|
* 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"
|
#include "gfx.h"
|
||||||
|
|
||||||
#if GFX_USE_GDISP
|
#if GFX_USE_GDISP
|
||||||
|
@ -325,4 +319,3 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* GFX_USE_GDISP */
|
#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