New screen dump feature for recorders
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4817 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
058302a480
commit
a8dab4c08a
7 changed files with 89 additions and 76 deletions
|
@ -1612,6 +1612,18 @@ static bool dbg_sound(void)
|
|||
return false;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
extern bool do_screendump_instead_of_usb;
|
||||
|
||||
bool dbg_screendump(void)
|
||||
{
|
||||
do_screendump_instead_of_usb = !do_screendump_instead_of_usb;
|
||||
splash(HZ, true, "Screendump %s",
|
||||
do_screendump_instead_of_usb?"enabled":"disabled");
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool debug_menu(void)
|
||||
{
|
||||
int m;
|
||||
|
@ -1635,6 +1647,7 @@ bool debug_menu(void)
|
|||
#endif
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
{ "View battery", -1, view_battery },
|
||||
{ "Screendump", -1, dbg_screendump },
|
||||
#endif
|
||||
{ "View HW info", -1, dbg_hw_info },
|
||||
{ "View partitions", -1, dbg_partitions },
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "sprintf.h"
|
||||
#include "errno.h"
|
||||
#include "system.h"
|
||||
#include "timefuncs.h"
|
||||
|
||||
#define ONE_KILOBYTE 1024
|
||||
#define ONE_MEGABYTE (1024*1024)
|
||||
|
@ -102,7 +103,7 @@ int main(int argc, char **argv)
|
|||
|
||||
#endif
|
||||
|
||||
#ifdef SCREENDUMP
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
extern unsigned char lcd_framebuffer[LCD_HEIGHT/8][LCD_WIDTH];
|
||||
static unsigned char bmpheader[] =
|
||||
{
|
||||
|
@ -117,7 +118,6 @@ static unsigned char bmpheader[] =
|
|||
static unsigned char buf[112*8];
|
||||
static unsigned char buf2[112*8];
|
||||
static char dummy[2] = {0, 0};
|
||||
static int fileindex = 0;
|
||||
|
||||
void screen_dump(void)
|
||||
{
|
||||
|
@ -125,6 +125,7 @@ void screen_dump(void)
|
|||
int i, shift;
|
||||
int x, y;
|
||||
char filename[MAX_PATH];
|
||||
struct tm *tm = get_time();
|
||||
|
||||
i = 0;
|
||||
for(y = 0;y < LCD_HEIGHT/8;y++)
|
||||
|
@ -151,7 +152,9 @@ void screen_dump(void)
|
|||
}
|
||||
}
|
||||
|
||||
snprintf(filename, MAX_PATH, "/dump%03d.bmp", fileindex++);
|
||||
snprintf(filename, MAX_PATH, "/dump %04d-%02d-%02d %02d-%02d-%02d.bmp",
|
||||
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
|
||||
tm->tm_hour, tm->tm_min, tm->tm_sec);
|
||||
f = creat(filename, O_WRONLY);
|
||||
if(f >= 0)
|
||||
{
|
||||
|
|
|
@ -30,3 +30,8 @@ char *num2max5(unsigned int bytes, char *max5);
|
|||
* stored in buffer.
|
||||
*/
|
||||
int read_line(int fd, char* buffer, int buffer_size);
|
||||
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
/* Save a .BMP file containing the current screen contents. */
|
||||
void screen_dump(void);
|
||||
#endif
|
||||
|
|
|
@ -35,12 +35,6 @@
|
|||
#define VOLUP 0xD0
|
||||
#define VOLDN 0xE0
|
||||
|
||||
#ifdef SCREENDUMP
|
||||
#define SCRDMP 0xF0
|
||||
|
||||
static void screen_dump(void);
|
||||
#endif
|
||||
|
||||
void serial_setup (void)
|
||||
{
|
||||
/* Set PB10 function to serial Rx */
|
||||
|
@ -118,11 +112,6 @@ int remote_control_rx(void)
|
|||
last_valid_button = BUTTON_RC_RIGHT;
|
||||
break;
|
||||
|
||||
#ifdef SCREENDUMP
|
||||
case SCRDMP:
|
||||
screen_dump();
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
last_valid_button = BUTTON_NONE;
|
||||
break;
|
||||
|
@ -144,43 +133,3 @@ int remote_control_rx(void)
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef SCREENDUMP
|
||||
static void serial_enable_tx(void)
|
||||
{
|
||||
SCR1 |= 0x20;
|
||||
}
|
||||
|
||||
static void serial_tx(unsigned char ch)
|
||||
{
|
||||
while (!(SSR1 & SCI_TDRE))
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write data into TDR and clear TDRE
|
||||
*/
|
||||
TDR1 = ch;
|
||||
SSR1 &= ~SCI_TDRE;
|
||||
}
|
||||
|
||||
static void screen_dump(void)
|
||||
{
|
||||
int x, y;
|
||||
int level;
|
||||
|
||||
serial_enable_tx();
|
||||
|
||||
level = set_irq_level(HIGHEST_IRQ_LEVEL);
|
||||
for(y = 0;y < LCD_HEIGHT/8;y++)
|
||||
{
|
||||
for(x = 0;x < LCD_WIDTH;x++)
|
||||
{
|
||||
serial_tx(lcd_framebuffer[y][x]);
|
||||
}
|
||||
}
|
||||
set_irq_level(level);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -35,6 +35,11 @@
|
|||
|
||||
extern void dbg_ports(void); /* NASTY! defined in apps/ */
|
||||
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
bool do_screendump_instead_of_usb = false;
|
||||
void screen_dump(void); /* Nasty again. Defined in apps/ too */
|
||||
#endif
|
||||
|
||||
#define USB_REALLY_BRAVE
|
||||
|
||||
#if !defined(SIMULATOR) && !defined(USB_NONE)
|
||||
|
@ -149,13 +154,24 @@ static void usb_thread(void)
|
|||
switch(ev.id)
|
||||
{
|
||||
case USB_INSERTED:
|
||||
/* Tell all threads that they have to back off the ATA.
|
||||
We subtract one for our own thread. */
|
||||
num_acks_to_expect =
|
||||
queue_broadcast(SYS_USB_CONNECTED, NULL) - 1;
|
||||
waiting_for_ack = true;
|
||||
DEBUGF("USB inserted. Waiting for ack from %d threads...\n",
|
||||
num_acks_to_expect);
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
if(do_screendump_instead_of_usb)
|
||||
{
|
||||
screen_dump();
|
||||
}
|
||||
else
|
||||
{
|
||||
#endif
|
||||
/* Tell all threads that they have to back off the ATA.
|
||||
We subtract one for our own thread. */
|
||||
num_acks_to_expect =
|
||||
queue_broadcast(SYS_USB_CONNECTED, NULL) - 1;
|
||||
waiting_for_ack = true;
|
||||
DEBUGF("USB inserted. Waiting for ack from %d threads...\n",
|
||||
num_acks_to_expect);
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case SYS_USB_CONNECTED_ACK:
|
||||
|
@ -181,24 +197,31 @@ static void usb_thread(void)
|
|||
break;
|
||||
|
||||
case USB_EXTRACTED:
|
||||
if(usb_state == USB_INSERTED)
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
if(!do_screendump_instead_of_usb)
|
||||
{
|
||||
/* Only disable the USB mode if we really have enabled it
|
||||
some threads might not have acknowledged the
|
||||
insertion */
|
||||
usb_slave_mode(false);
|
||||
}
|
||||
#endif
|
||||
if(usb_state == USB_INSERTED)
|
||||
{
|
||||
/* Only disable the USB mode if we really have enabled it
|
||||
some threads might not have acknowledged the
|
||||
insertion */
|
||||
usb_slave_mode(false);
|
||||
}
|
||||
|
||||
usb_state = USB_EXTRACTED;
|
||||
|
||||
/* Tell all threads that we are back in business */
|
||||
num_acks_to_expect =
|
||||
queue_broadcast(SYS_USB_DISCONNECTED, NULL) - 1;
|
||||
waiting_for_ack = true;
|
||||
DEBUGF("USB extracted. Waiting for ack from %d threads...\n",
|
||||
num_acks_to_expect);
|
||||
usb_state = USB_EXTRACTED;
|
||||
|
||||
/* Tell all threads that we are back in business */
|
||||
num_acks_to_expect =
|
||||
queue_broadcast(SYS_USB_DISCONNECTED, NULL) - 1;
|
||||
waiting_for_ack = true;
|
||||
DEBUGF("USB extracted. Waiting for ack from %d threads...\n",
|
||||
num_acks_to_expect);
|
||||
#ifdef HAVE_LCD_CHARCELLS
|
||||
lcd_icon(ICON_USB, false);
|
||||
lcd_icon(ICON_USB, false);
|
||||
#endif
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "button.h"
|
||||
#include "kernel.h"
|
||||
#include "backlight.h"
|
||||
#include "misc.h"
|
||||
|
||||
/* how long until repeat kicks in */
|
||||
#define REPEAT_START 6
|
||||
|
@ -89,6 +90,15 @@ void button_event(int key, bool pressed)
|
|||
case VK_SPACE:
|
||||
new_btn = BUTTON_PLAY;
|
||||
break;
|
||||
|
||||
case VK_NUMPAD0:
|
||||
case VK_F5:
|
||||
if(pressed)
|
||||
{
|
||||
screen_dump();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
#else
|
||||
case VK_RETURN:
|
||||
new_btn = BUTTON_MENU;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "button.h"
|
||||
#include "kernel.h"
|
||||
#include "debug.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "X11/keysym.h"
|
||||
|
||||
|
@ -131,6 +132,15 @@ static int get_raw_button (void)
|
|||
case XK_3:
|
||||
k = BUTTON_F3;
|
||||
break;
|
||||
|
||||
case XK_5:
|
||||
if(!release)
|
||||
{
|
||||
screen_dump();
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
#else
|
||||
case XK_KP_Add:
|
||||
case XK_Q:
|
||||
|
|
Loading…
Reference in a new issue