mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-11 06:05:21 -05:00
Onda VX747:
* Button driver rework * Backlight driver rework * LCD driver rework git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18543 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
3655a32a3e
commit
9407ae838e
7 changed files with 160 additions and 177 deletions
|
|
@ -42,48 +42,6 @@ static void audiotest(void)
|
||||||
__aic_enable_loopback();
|
__aic_enable_loopback();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CP0 hazard avoidance. */
|
|
||||||
#define BARRIER __asm__ __volatile__(".set noreorder\n\t" \
|
|
||||||
"nop; nop; nop; nop; nop; nop;\n\t" \
|
|
||||||
".set reorder\n\t")
|
|
||||||
static void show_tlb(void)
|
|
||||||
{
|
|
||||||
#define ASID_MASK 0xFF
|
|
||||||
|
|
||||||
unsigned int old_ctx;
|
|
||||||
unsigned int entry;
|
|
||||||
unsigned int entrylo0, entrylo1, entryhi;
|
|
||||||
unsigned int pagemask;
|
|
||||||
|
|
||||||
cli();
|
|
||||||
|
|
||||||
/* Save old context */
|
|
||||||
old_ctx = (read_c0_entryhi() & 0xff);
|
|
||||||
|
|
||||||
printf("TLB content:");
|
|
||||||
for(entry = 0; entry < 32; entry++)
|
|
||||||
{
|
|
||||||
write_c0_index(entry);
|
|
||||||
BARRIER;
|
|
||||||
tlb_read();
|
|
||||||
BARRIER;
|
|
||||||
entryhi = read_c0_entryhi();
|
|
||||||
entrylo0 = read_c0_entrylo0();
|
|
||||||
entrylo1 = read_c0_entrylo1();
|
|
||||||
pagemask = read_c0_pagemask();
|
|
||||||
printf("%02d: ASID=%02d%s VA=0x%08x", entry, entryhi & ASID_MASK, (entrylo0 & entrylo1 & 1) ? "(G)" : " ", entryhi & ~ASID_MASK);
|
|
||||||
printf("PA0=0x%08x C0=%x %s%s%s", (entrylo0>>6)<<12, (entrylo0>>3) & 7, (entrylo0 & 4) ? "Dirty " : "", (entrylo0 & 2) ? "Valid " : "Invalid ", (entrylo0 & 1) ? "Global" : "");
|
|
||||||
printf("PA1=0x%08x C1=%x %s%s%s", (entrylo1>>6)<<12, (entrylo1>>3) & 7, (entrylo1 & 4) ? "Dirty " : "", (entrylo1 & 2) ? "Valid " : "Invalid ", (entrylo1 & 1) ? "Global" : "");
|
|
||||||
|
|
||||||
printf("pagemask=0x%08x entryhi=0x%08x", pagemask, entryhi);
|
|
||||||
printf("entrylo0=0x%08x entrylo1=0x%08x", entrylo0, entrylo1);
|
|
||||||
}
|
|
||||||
BARRIER;
|
|
||||||
write_c0_entryhi(old_ctx);
|
|
||||||
|
|
||||||
sti();
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
kernel_init();
|
kernel_init();
|
||||||
|
|
@ -135,12 +93,15 @@ int main(void)
|
||||||
{
|
{
|
||||||
memset(testdata, 0, 4096);
|
memset(testdata, 0, 4096);
|
||||||
reset_screen();
|
reset_screen();
|
||||||
jz_nand_read(2, j, &testdata);
|
jz_nand_read(0, j, &testdata);
|
||||||
printf("Page %d", j);
|
printf("Page %d", j);
|
||||||
int i;
|
int i;
|
||||||
for(i=0; i<256; i+=8)
|
for(i=0; i<768; i+=16)
|
||||||
{
|
{
|
||||||
snprintf(msg, 30, "%02c%02c%02c%02c%02c%02c%02c%02c", testdata[i], testdata[i+1], testdata[i+2], testdata[i+3], testdata[i+4], testdata[i+5], testdata[i+6], testdata[i+7]);
|
snprintf(msg, 30, "%02x%02x%02x%02x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x",
|
||||||
|
testdata[i], testdata[i+1], testdata[i+2], testdata[i+3], testdata[i+4], testdata[i+5], testdata[i+6], testdata[i+7],
|
||||||
|
testdata[i+8], testdata[i+9], testdata[i+10], testdata[i+11], testdata[i+12], testdata[i+13], testdata[i+14], testdata[i+15]
|
||||||
|
);
|
||||||
printf(msg);
|
printf(msg);
|
||||||
}
|
}
|
||||||
while(!((btn = button_read_device(&touch)) & (BUTTON_VOL_UP|BUTTON_VOL_DOWN)));
|
while(!((btn = button_read_device(&touch)) & (BUTTON_VOL_UP|BUTTON_VOL_DOWN)));
|
||||||
|
|
@ -155,8 +116,12 @@ int main(void)
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
#ifdef ONDA_VX747
|
#ifdef ONDA_VX747
|
||||||
|
#if 1
|
||||||
btn = button_get(false);
|
btn = button_get(false);
|
||||||
touch = button_get_data();
|
touch = button_get_data();
|
||||||
|
#else
|
||||||
|
btn = button_read_device(&touch);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
btn = button_read_device();
|
btn = button_read_device();
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -174,11 +139,6 @@ int main(void)
|
||||||
printf("BUTTON_HOLD");
|
printf("BUTTON_HOLD");
|
||||||
asm("break 0x7");
|
asm("break 0x7");
|
||||||
}
|
}
|
||||||
if(btn & BUTTON_VOL_DOWN)
|
|
||||||
{
|
|
||||||
reset_screen();
|
|
||||||
show_tlb();
|
|
||||||
}
|
|
||||||
if(btn & BUTTON_POWER)
|
if(btn & BUTTON_POWER)
|
||||||
{
|
{
|
||||||
power_off();
|
power_off();
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,10 @@
|
||||||
#define HAVE_BACKLIGHT_BRIGHTNESS
|
#define HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
|
||||||
/* Main LCD backlight brightness range and defaults */
|
/* Main LCD backlight brightness range and defaults */
|
||||||
#define MIN_BRIGHTNESS_SETTING 0 /* TODO */
|
#define MIN_BRIGHTNESS_SETTING 100
|
||||||
#define MAX_BRIGHTNESS_SETTING 127
|
#define MAX_BRIGHTNESS_SETTING 300
|
||||||
#define DEFAULT_BRIGHTNESS_SETTING 85
|
#define DEFAULT_BRIGHTNESS_SETTING 300 /* "full brightness" */
|
||||||
#define DEFAULT_DIMNESS_SETTING 22
|
#define DEFAULT_DIMNESS_SETTING 100 /* "most dim" */
|
||||||
|
|
||||||
/* Define this if you have a software controlled poweroff */
|
/* Define this if you have a software controlled poweroff */
|
||||||
//#define HAVE_SW_POWEROFF
|
//#define HAVE_SW_POWEROFF
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
#include "lcd-target.h"
|
#include "lcd-target.h"
|
||||||
#include "system-target.h"
|
#include "system-target.h"
|
||||||
|
#include "kernel.h"
|
||||||
|
|
||||||
static volatile bool _lcd_on = false;
|
static volatile bool _lcd_on = false;
|
||||||
static volatile bool lcd_poweroff = false;
|
static volatile bool lcd_poweroff = false;
|
||||||
|
|
@ -70,11 +71,18 @@ void lcd_update_rect(int x, int y, int width, int height)
|
||||||
|
|
||||||
__dcache_writeback_all(); /* Size of framebuffer is way bigger than cache size */
|
__dcache_writeback_all(); /* Size of framebuffer is way bigger than cache size */
|
||||||
|
|
||||||
|
while(REG_SLCD_STATE & SLCD_STATE_BUSY);
|
||||||
|
REG_SLCD_CTRL = SLCD_CTRL_DMA_EN;
|
||||||
|
|
||||||
REG_DMAC_DMACR = DMAC_DMACR_DMAE;
|
REG_DMAC_DMACR = DMAC_DMACR_DMAE;
|
||||||
|
|
||||||
while( !(REG_DMAC_DCCSR(0) & DMAC_DCCSR_TT) )
|
while( !(REG_DMAC_DCCSR(0) & DMAC_DCCSR_TT) )
|
||||||
asm("nop");
|
yield();
|
||||||
|
|
||||||
|
REG_DMAC_DMACR = 0;
|
||||||
|
|
||||||
|
while(REG_SLCD_STATE & SLCD_STATE_BUSY);
|
||||||
|
REG_SLCD_CTRL = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update the display.
|
/* Update the display.
|
||||||
|
|
|
||||||
|
|
@ -23,58 +23,74 @@
|
||||||
#include "jz4740.h"
|
#include "jz4740.h"
|
||||||
#include "backlight-target.h"
|
#include "backlight-target.h"
|
||||||
|
|
||||||
#define GPIO_PWM 123
|
#define GPIO_PWM (32*3)+31
|
||||||
#define PWM_CHN 7
|
#define PWM_CHN 7
|
||||||
#define PWM_FULL 101
|
#define __gpio_as_PWM_CHN __gpio_as_pwm7
|
||||||
|
|
||||||
static void set_backlight(int unk, int val)
|
static void set_backlight(int val)
|
||||||
{
|
{
|
||||||
if(val == 0)
|
/* Taken from the OF */
|
||||||
__gpio_as_pwm7();
|
int tmp;
|
||||||
else
|
tmp = (val/2 + __cpm_get_rtcclk()) / val;
|
||||||
{
|
if(tmp > 0xFFFF)
|
||||||
REG_TCU_TCSR(7) |= 2;
|
tmp = 0xFFFF;
|
||||||
REG_TCU_TCSR(7) &= ~0x100;
|
|
||||||
int tmp;
|
|
||||||
tmp = (unk/2 + __cpm_get_rtcclk()) / unk;
|
|
||||||
if(tmp > 0xFFFF)
|
|
||||||
tmp = 0xFFFF;
|
|
||||||
|
|
||||||
__tcu_set_half_data(7, (tmp * unk * 1374389535) >> 5);
|
|
||||||
__tcu_set_full_data(7, tmp);
|
|
||||||
|
|
||||||
REG_TCU_TSCR = (1 << 7);
|
|
||||||
REG_TCU_TESR = (1 << 7);
|
|
||||||
|
|
||||||
__tcu_enable_pwm_output(7);
|
__tcu_set_half_data(PWM_CHN, (tmp * val * 1374389535) >> 5);
|
||||||
}
|
__tcu_set_full_data(PWM_CHN, tmp);
|
||||||
__tcu_set_count(7, 0);
|
}
|
||||||
|
|
||||||
|
static void set_backlight_on(void)
|
||||||
|
{
|
||||||
|
__tcu_start_timer_clock(PWM_CHN);
|
||||||
|
|
||||||
|
set_backlight(MAX_BRIGHTNESS_SETTING);
|
||||||
|
|
||||||
|
__tcu_set_count(PWM_CHN, 0);
|
||||||
|
__tcu_start_counter(PWM_CHN);
|
||||||
|
|
||||||
|
__tcu_enable_pwm_output(PWM_CHN);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_backlight_off(void)
|
||||||
|
{
|
||||||
|
__tcu_stop_counter(PWM_CHN);
|
||||||
|
__tcu_disable_pwm_output(PWM_CHN);
|
||||||
|
__tcu_stop_timer_clock(PWM_CHN);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _backlight_init(void)
|
bool _backlight_init(void)
|
||||||
{
|
{
|
||||||
__gpio_as_pwm7();
|
__gpio_as_PWM_CHN();
|
||||||
|
__tcu_start_timer_clock(PWM_CHN);
|
||||||
__tcu_stop_counter(7);
|
|
||||||
__tcu_disable_pwm_output(7);
|
__tcu_stop_counter(PWM_CHN);
|
||||||
|
__tcu_disable_pwm_output(PWM_CHN);
|
||||||
set_backlight(300, 7);
|
|
||||||
|
__tcu_init_pwm_output_low(PWM_CHN);
|
||||||
|
__tcu_select_rtcclk(PWM_CHN);
|
||||||
|
__tcu_select_clk_div1(PWM_CHN);
|
||||||
|
|
||||||
|
__tcu_mask_half_match_irq(PWM_CHN);
|
||||||
|
__tcu_mask_full_match_irq(PWM_CHN);
|
||||||
|
|
||||||
|
set_backlight_on();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _backlight_on(void)
|
void _backlight_on(void)
|
||||||
{
|
{
|
||||||
set_backlight(300, 7);
|
set_backlight_on();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _backlight_off(void)
|
void _backlight_off(void)
|
||||||
{
|
{
|
||||||
set_backlight(300, 0);
|
set_backlight_off();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
void _backlight_set_brightness(int brightness)
|
void _backlight_set_brightness(int brightness)
|
||||||
{
|
{
|
||||||
(void)brightness;
|
set_backlight(brightness);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -194,8 +194,6 @@ static void _set_lcd_bus(void)
|
||||||
REG_SLCD_CFG = (SLCD_CFG_BURST_8_WORD | SLCD_CFG_DWIDTH_16 | SLCD_CFG_CWIDTH_16BIT
|
REG_SLCD_CFG = (SLCD_CFG_BURST_8_WORD | SLCD_CFG_DWIDTH_16 | SLCD_CFG_CWIDTH_16BIT
|
||||||
| SLCD_CFG_CS_ACTIVE_LOW | SLCD_CFG_RS_CMD_LOW | SLCD_CFG_CLK_ACTIVE_FALLING
|
| SLCD_CFG_CS_ACTIVE_LOW | SLCD_CFG_RS_CMD_LOW | SLCD_CFG_CLK_ACTIVE_FALLING
|
||||||
| SLCD_CFG_TYPE_PARALLEL);
|
| SLCD_CFG_TYPE_PARALLEL);
|
||||||
|
|
||||||
REG_SLCD_CTRL = SLCD_CTRL_DMA_EN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _set_lcd_clock(void)
|
static void _set_lcd_clock(void)
|
||||||
|
|
|
||||||
|
|
@ -22,21 +22,22 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "jz4740.h"
|
#include "jz4740.h"
|
||||||
|
#include "button.h"
|
||||||
#include "button-target.h"
|
#include "button-target.h"
|
||||||
|
|
||||||
#define BTN_VOL_DOWN (1 << 27)
|
|
||||||
#define BTN_VOL_UP (1 << 0)
|
|
||||||
#define BTN_MENU (1 << 1)
|
|
||||||
#define BTN_OFF (1 << 29)
|
#define BTN_OFF (1 << 29)
|
||||||
|
#define BTN_VOL_DOWN (1 << 27)
|
||||||
#define BTN_HOLD (1 << 16)
|
#define BTN_HOLD (1 << 16)
|
||||||
#define BTN_MASK (BTN_VOL_DOWN | BTN_VOL_UP \
|
#define BTN_MENU (1 << 1)
|
||||||
| BTN_MENU | BTN_OFF )
|
#define BTN_VOL_UP (1 << 0)
|
||||||
|
#define BTN_MASK (BTN_OFF | BTN_VOL_DOWN | \
|
||||||
|
BTN_MENU | BTN_VOL_UP)
|
||||||
|
|
||||||
|
|
||||||
#define TS_AD_COUNT 5
|
#define TS_AD_COUNT 5
|
||||||
#define M_SADC_CFG_SNUM ((TS_AD_COUNT - 1) << SADC_CFG_SNUM_BIT)
|
#define M_SADC_CFG_SNUM ((TS_AD_COUNT - 1) << SADC_CFG_SNUM_BIT)
|
||||||
|
|
||||||
#define SADC_CFG_INIT ( \
|
#define SADC_CFG_INIT ( \
|
||||||
(2 << SADC_CFG_CLKOUT_NUM_BIT) | \
|
(2 << SADC_CFG_CLKOUT_NUM_BIT) | \
|
||||||
SADC_CFG_XYZ1Z2 | \
|
SADC_CFG_XYZ1Z2 | \
|
||||||
M_SADC_CFG_SNUM | \
|
M_SADC_CFG_SNUM | \
|
||||||
|
|
@ -45,20 +46,23 @@
|
||||||
SADC_CFG_CMD_INT_PEN \
|
SADC_CFG_CMD_INT_PEN \
|
||||||
)
|
)
|
||||||
|
|
||||||
static bool pendown_flag = false;
|
|
||||||
static short x_pos = -1, y_pos = -1, datacount = 0;
|
static short x_pos = -1, y_pos = -1, datacount = 0;
|
||||||
static short stable_x_pos = -1, stable_y_pos = -1;
|
static bool pen_down = false;
|
||||||
|
static int cur_touch = 0;
|
||||||
|
|
||||||
bool button_hold(void)
|
static enum touchscreen_mode current_mode = TOUCHSCREEN_POINT;
|
||||||
|
static int touchscreen_buttons[3][3] =
|
||||||
{
|
{
|
||||||
return (~REG_GPIO_PXPIN(3) & BTN_HOLD ? 1 : 0);
|
{BUTTON_TOPLEFT, BUTTON_TOPMIDDLE, BUTTON_TOPRIGHT},
|
||||||
}
|
{BUTTON_MIDLEFT, BUTTON_CENTER, BUTTON_MIDRIGHT},
|
||||||
|
{BUTTON_BOTTOMLEFT, BUTTON_BOTTOMMIDDLE, BUTTON_BOTTOMRIGHT}
|
||||||
|
};
|
||||||
|
|
||||||
void button_init_device(void)
|
void button_init_device(void)
|
||||||
{
|
{
|
||||||
REG_SADC_ENA = 0;
|
REG_SADC_ENA = 0;
|
||||||
REG_SADC_STATE &= (~REG_SADC_STATE);
|
REG_SADC_STATE &= (~REG_SADC_STATE);
|
||||||
REG_SADC_CTRL = 0x1f;
|
REG_SADC_CTRL = 0x1F;
|
||||||
|
|
||||||
__cpm_start_sadc();
|
__cpm_start_sadc();
|
||||||
REG_SADC_CFG = SADC_CFG_INIT;
|
REG_SADC_CFG = SADC_CFG_INIT;
|
||||||
|
|
@ -71,15 +75,15 @@ void button_init_device(void)
|
||||||
REG_SADC_CTRL &= (~(SADC_CTRL_PENDM | SADC_CTRL_PENUM | SADC_CTRL_TSRDYM));
|
REG_SADC_CTRL &= (~(SADC_CTRL_PENDM | SADC_CTRL_PENUM | SADC_CTRL_TSRDYM));
|
||||||
REG_SADC_ENA = SADC_ENA_TSEN; //| SADC_ENA_PBATEN | SADC_ENA_SADCINEN);
|
REG_SADC_ENA = SADC_ENA_TSEN; //| SADC_ENA_PBATEN | SADC_ENA_SADCINEN);
|
||||||
|
|
||||||
__gpio_port_as_input(3, 29);
|
__gpio_as_input(32*3 + 29);
|
||||||
__gpio_port_as_input(3, 27);
|
__gpio_as_input(32*3 + 27);
|
||||||
__gpio_port_as_input(3, 16);
|
__gpio_as_input(32*3 + 16);
|
||||||
__gpio_port_as_input(3, 1);
|
__gpio_as_input(32*3 + 1);
|
||||||
__gpio_port_as_input(3, 0);
|
__gpio_as_input(32*3 + 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int touch_to_pixels(short x, short y)
|
static int touch_to_pixels(short x, short y)
|
||||||
{
|
{
|
||||||
/* X:300 -> 3800 Y:300->3900 */
|
/* X:300 -> 3800 Y:300->3900 */
|
||||||
x -= 300;
|
x -= 300;
|
||||||
y -= 300;
|
y -= 300;
|
||||||
|
|
@ -102,68 +106,56 @@ static int touch_to_pixels(short x, short y)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool button_hold(void)
|
||||||
|
{
|
||||||
|
return ((~REG_GPIO_PXPIN(3)) & BTN_HOLD ? true : false);
|
||||||
|
}
|
||||||
|
|
||||||
int button_read_device(int *data)
|
int button_read_device(int *data)
|
||||||
{
|
{
|
||||||
if(button_hold())
|
int ret = 0, tmp;
|
||||||
|
|
||||||
|
if((~REG_GPIO_PXPIN(3)) & BTN_HOLD)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unsigned int key = ~(__gpio_get_port(3));
|
tmp = (~REG_GPIO_PXPIN(3)) & BTN_MASK;
|
||||||
int ret = 0;
|
|
||||||
|
if(tmp & BTN_VOL_DOWN)
|
||||||
if(key & BTN_MASK)
|
ret |= BUTTON_VOL_DOWN;
|
||||||
|
if(tmp & BTN_VOL_UP)
|
||||||
|
ret |= BUTTON_VOL_UP;
|
||||||
|
if(tmp & BTN_MENU)
|
||||||
|
ret |= BUTTON_MENU;
|
||||||
|
if(tmp & BTN_OFF)
|
||||||
|
ret |= BUTTON_POWER;
|
||||||
|
|
||||||
|
if(current_mode == TOUCHSCREEN_BUTTON && cur_touch != 0)
|
||||||
{
|
{
|
||||||
if(key & BTN_VOL_DOWN)
|
int px_x = cur_touch >> 16;
|
||||||
ret |= BUTTON_VOL_DOWN;
|
int px_y = cur_touch & 0xFFFF;
|
||||||
if(key & BTN_VOL_UP)
|
ret |= touchscreen_buttons[px_y/(LCD_HEIGHT/3)]
|
||||||
ret |= BUTTON_VOL_UP;
|
[px_x/(LCD_WIDTH/3)];
|
||||||
if(key & BTN_MENU)
|
|
||||||
ret |= BUTTON_MENU;
|
|
||||||
if(key & BTN_OFF)
|
|
||||||
ret |= BUTTON_POWER;
|
|
||||||
}
|
}
|
||||||
|
else if(pen_down)
|
||||||
if(data != NULL)
|
|
||||||
{
|
{
|
||||||
if(pendown_flag)
|
ret |= BUTTON_TOUCH;
|
||||||
{
|
if(data != NULL)
|
||||||
*data = touch_to_pixels(stable_x_pos, stable_y_pos);
|
*data = cur_touch;
|
||||||
ret |= BUTTON_TOUCH;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*data = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void touchscreen_set_mode(enum touchscreen_mode mode)
|
||||||
static enum touchpad_mode current_mode = TOUCHPAD_POINT;
|
|
||||||
|
|
||||||
static bool touch_available = false;
|
|
||||||
|
|
||||||
static int touchpad_buttons[3][3] =
|
|
||||||
{
|
|
||||||
{BUTTON_TOPLEFT, BUTTON_TOPMIDDLE, BUTTON_TOPRIGHT},
|
|
||||||
{BUTTON_MIDLEFT, BUTTON_CENTER, BUTTON_MIDRIGHT},
|
|
||||||
{BUTTON_BOTTOMLEFT, BUTTON_BOTTOMMIDDLE, BUTTON_BOTTOMRIGHT}
|
|
||||||
};
|
|
||||||
|
|
||||||
void touchpad_set_mode(enum touchpad_mode mode)
|
|
||||||
{
|
{
|
||||||
current_mode = mode;
|
current_mode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum touchpad_mode touchpad_get_mode(void)
|
enum touchscreen_mode touchscreen_get_mode(void)
|
||||||
{
|
{
|
||||||
return current_mode;
|
return current_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void button_set_touch_available(void)
|
|
||||||
{
|
|
||||||
touch_available = true;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Interrupt handler */
|
/* Interrupt handler */
|
||||||
void SADC(void)
|
void SADC(void)
|
||||||
{
|
{
|
||||||
|
|
@ -179,18 +171,17 @@ void SADC(void)
|
||||||
/* Pen down IRQ */
|
/* Pen down IRQ */
|
||||||
REG_SADC_CTRL &= (~(SADC_CTRL_PENUM | SADC_CTRL_TSRDYM));
|
REG_SADC_CTRL &= (~(SADC_CTRL_PENUM | SADC_CTRL_TSRDYM));
|
||||||
REG_SADC_CTRL |= (SADC_CTRL_PENDM);
|
REG_SADC_CTRL |= (SADC_CTRL_PENDM);
|
||||||
pendown_flag = true;
|
pen_down = true;
|
||||||
}
|
}
|
||||||
if(state & SADC_CTRL_PENUM)
|
if(state & SADC_CTRL_PENUM)
|
||||||
{
|
{
|
||||||
/* Pen up IRQ */
|
/* Pen up IRQ */
|
||||||
REG_SADC_CTRL &= (~SADC_CTRL_PENDM );
|
REG_SADC_CTRL &= (~SADC_CTRL_PENDM );
|
||||||
REG_SADC_CTRL |= SADC_CTRL_PENUM;
|
REG_SADC_CTRL |= SADC_CTRL_PENUM;
|
||||||
pendown_flag = false;
|
pen_down = false;
|
||||||
x_pos = -1;
|
x_pos = -1;
|
||||||
y_pos = -1;
|
y_pos = -1;
|
||||||
stable_x_pos = -1;
|
cur_touch = 0;
|
||||||
stable_y_pos = -1;
|
|
||||||
}
|
}
|
||||||
if(state & SADC_CTRL_TSRDYM)
|
if(state & SADC_CTRL_TSRDYM)
|
||||||
{
|
{
|
||||||
|
|
@ -200,15 +191,15 @@ void SADC(void)
|
||||||
|
|
||||||
dat = REG_SADC_TSDAT;
|
dat = REG_SADC_TSDAT;
|
||||||
|
|
||||||
xData = (dat >> 0) & 0xfff;
|
xData = (dat >> 0) & 0xFFF;
|
||||||
yData = (dat >> 16) & 0xfff;
|
yData = (dat >> 16) & 0xFFF;
|
||||||
|
|
||||||
dat = REG_SADC_TSDAT;
|
dat = REG_SADC_TSDAT;
|
||||||
tsz1Data = (dat >> 0) & 0xfff;
|
tsz1Data = (dat >> 0) & 0xFFF;
|
||||||
tsz2Data = (dat >> 16) & 0xfff;
|
tsz2Data = (dat >> 16) & 0xFFF;
|
||||||
|
|
||||||
if(!pendown_flag)
|
if( !pen_down )
|
||||||
return ;
|
return;
|
||||||
|
|
||||||
tsz1Data = tsz2Data - tsz1Data;
|
tsz1Data = tsz2Data - tsz1Data;
|
||||||
|
|
||||||
|
|
@ -231,8 +222,7 @@ void SADC(void)
|
||||||
{
|
{
|
||||||
if(x_pos != -1)
|
if(x_pos != -1)
|
||||||
{
|
{
|
||||||
stable_x_pos = x_pos;
|
cur_touch = touch_to_pixels(x_pos, y_pos);
|
||||||
stable_y_pos = y_pos;
|
|
||||||
x_pos = -1;
|
x_pos = -1;
|
||||||
y_pos = -1;
|
y_pos = -1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -497,7 +497,7 @@ static inline u32 jz_readl(u32 address)
|
||||||
|
|
||||||
#define TXFIFOEP0 USB_FIFO_EP0
|
#define TXFIFOEP0 USB_FIFO_EP0
|
||||||
|
|
||||||
u32 Bulk_in_buf[BULK_IN_BUF_SIZE];
|
u8 *Bulk_in_buf;
|
||||||
u32 Bulk_out_buf[BULK_OUT_BUF_SIZE];
|
u32 Bulk_out_buf[BULK_OUT_BUF_SIZE];
|
||||||
u32 Bulk_in_size,Bulk_in_finish,Bulk_out_size;
|
u32 Bulk_in_size,Bulk_in_finish,Bulk_out_size;
|
||||||
u16 handshake_PKT[4]={0,0,0,0};
|
u16 handshake_PKT[4]={0,0,0,0};
|
||||||
|
|
@ -560,12 +560,14 @@ void HW_SendPKT(int ep, const u8 *buf, int size)
|
||||||
Bulk_in_size - Bulk_in_finish);
|
Bulk_in_size - Bulk_in_finish);
|
||||||
usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);
|
usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);
|
||||||
Bulk_in_finish = Bulk_in_size;
|
Bulk_in_finish = Bulk_in_size;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
udcWriteFifo((u8 *)((u32)buf+Bulk_in_finish),
|
udcWriteFifo((u8 *)((u32)buf+Bulk_in_finish),
|
||||||
fifosize[ep]);
|
fifosize[ep]);
|
||||||
usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);
|
usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);
|
||||||
Bulk_in_finish += fifosize[ep];
|
Bulk_in_finish += fifosize[ep];
|
||||||
|
Bulk_in_buf = (u8*)buf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //EP0
|
else //EP0
|
||||||
|
|
@ -645,7 +647,7 @@ static struct {
|
||||||
(1 << 7) | 1,// endpoint 2 is IN endpoint
|
(1 << 7) | 1,// endpoint 2 is IN endpoint
|
||||||
2, /* bulk */
|
2, /* bulk */
|
||||||
512,
|
512,
|
||||||
16
|
0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
sizeof(USB_EndPointDescriptor),
|
sizeof(USB_EndPointDescriptor),
|
||||||
|
|
@ -653,7 +655,7 @@ static struct {
|
||||||
(0 << 7) | 1,// endpoint 5 is OUT endpoint
|
(0 << 7) | 1,// endpoint 5 is OUT endpoint
|
||||||
2, /* bulk */
|
2, /* bulk */
|
||||||
512, /* OUT EP FIFO size */
|
512, /* OUT EP FIFO size */
|
||||||
16
|
0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -822,21 +824,27 @@ void usbHandleStandDevReq(u8 *buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern char printfbuf[256];
|
unsigned char nandbuffer[4096];
|
||||||
|
|
||||||
void usbHandleVendorReq(u8 *buf)
|
void usbHandleVendorReq(u8 *buf)
|
||||||
{
|
{
|
||||||
int ret_state, i;
|
|
||||||
USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
|
USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;
|
||||||
switch (dreq->bRequest)
|
switch (dreq->bRequest)
|
||||||
{
|
{
|
||||||
|
case 0xB0:
|
||||||
|
memset(&nandbuffer, 0, 4096);
|
||||||
|
jz_nand_read(dreq->wValue, dreq->wIndex, &nandbuffer);
|
||||||
|
//printf("Read block %d page %d", dreq->wValue, dreq->wIndex);
|
||||||
|
udc_state = IDLE;
|
||||||
|
break;
|
||||||
case 0xAB:
|
case 0xAB:
|
||||||
//for(i=0; i<256; i+=64)
|
HW_SendPKT(1, nandbuffer, 4096);
|
||||||
HW_SendPKT(0, printfbuf, 64);
|
//printf("Send data");
|
||||||
udc_state = IDLE;
|
//udc_state = BULK_OUT;
|
||||||
break;
|
break;
|
||||||
case 0x12:
|
case 0x12:
|
||||||
HW_SendPKT(0, "TEST", 4);
|
HW_SendPKT(0, "TEST", 4);
|
||||||
|
//printf("Send test");
|
||||||
udc_state = IDLE;
|
udc_state = IDLE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -874,7 +882,7 @@ void EP0_Handler (void)
|
||||||
byCSR0 = jz_readb(USB_REG_CSR0);
|
byCSR0 = jz_readb(USB_REG_CSR0);
|
||||||
|
|
||||||
/* Check for SentStall
|
/* Check for SentStall
|
||||||
if sendtall is set ,clear the sendstall bit*/
|
if sendstall is set ,clear the sendstall bit*/
|
||||||
if (byCSR0 & USB_CSR0_SENTSTALL)
|
if (byCSR0 & USB_CSR0_SENTSTALL)
|
||||||
{
|
{
|
||||||
jz_writeb(USB_REG_CSR0, (byCSR0 & ~USB_CSR0_SENDSTALL));
|
jz_writeb(USB_REG_CSR0, (byCSR0 & ~USB_CSR0_SENDSTALL));
|
||||||
|
|
@ -942,7 +950,8 @@ void EPIN_Handler(u8 EP)
|
||||||
Bulk_in_size - Bulk_in_finish);
|
Bulk_in_size - Bulk_in_finish);
|
||||||
usb_setw(USB_REG_INCSR, USB_INCSR_INPKTRDY);
|
usb_setw(USB_REG_INCSR, USB_INCSR_INPKTRDY);
|
||||||
Bulk_in_finish = Bulk_in_size;
|
Bulk_in_finish = Bulk_in_size;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
udcWriteFifo((u8 *)((u32)Bulk_in_buf+Bulk_in_finish),
|
udcWriteFifo((u8 *)((u32)Bulk_in_buf+Bulk_in_finish),
|
||||||
fifosize[EP]);
|
fifosize[EP]);
|
||||||
|
|
@ -1030,6 +1039,8 @@ void __udc_start(void)
|
||||||
|
|
||||||
void usb_init_device(void)
|
void usb_init_device(void)
|
||||||
{
|
{
|
||||||
|
REG_USB_REG_POWER &= ~USB_POWER_SOFTCONN;
|
||||||
|
REG_USB_REG_POWER |= USB_POWER_SOFTCONN;
|
||||||
__udc_start();
|
__udc_start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue