Add progress dots to USB tab, update rom_info.txt

This commit is contained in:
Vojtech Bocek
2013-01-30 19:06:26 +01:00
parent 7e75af8aa0
commit cbaa8be3ea
6 changed files with 108 additions and 2 deletions

View File

@@ -14,7 +14,8 @@ LOCAL_SRC_FILES:= \
listview.c \ listview.c \
checkbox.c \ checkbox.c \
button.c \ button.c \
pong.c pong.c \
progressdots.c
LOCAL_MODULE:= multirom LOCAL_MODULE:= multirom
LOCAL_MODULE_TAGS := eng LOCAL_MODULE_TAGS := eng

View File

@@ -1761,8 +1761,10 @@ void *multirom_usb_refresh_thread_work(void *status)
if(stat("/dev/block", &info) >= 0 && info.st_ctime > last_change) if(stat("/dev/block", &info) >= 0 && info.st_ctime > last_change)
{ {
multirom_update_partitions((struct multirom_status*)status); multirom_update_partitions((struct multirom_status*)status);
if(usb_refresh_handler) if(usb_refresh_handler)
(*usb_refresh_handler)(); (*usb_refresh_handler)();
last_change = info.st_ctime; last_change = info.st_ctime;
} }
timer = 500; timer = 500;

View File

@@ -16,6 +16,7 @@
#include "checkbox.h" #include "checkbox.h"
#include "version.h" #include "version.h"
#include "pong.h" #include "pong.h"
#include "progressdots.h"
#define HEADER_HEIGHT 75 #define HEADER_HEIGHT 75
#define TAB_BTN_WIDTH 165 #define TAB_BTN_WIDTH 165
@@ -394,6 +395,7 @@ typedef struct
fb_text *title_text; fb_text *title_text;
fb_text *usb_text; fb_text *usb_text;
button *boot_btn; button *boot_btn;
progdots *usb_prog;
} tab_roms; } tab_roms;
void *multirom_ui_tab_rom_init(int tab_type) void *multirom_ui_tab_rom_init(int tab_type)
@@ -475,6 +477,9 @@ void multirom_ui_tab_rom_destroy(void *data)
fb_rm_text(t->rom_name); fb_rm_text(t->rom_name);
if(t->usb_prog)
progdots_destroy(t->usb_prog);
free(t); free(t);
} }
@@ -600,9 +605,15 @@ void multirom_ui_tab_rom_set_empty(void *data, int empty)
int y = center_y(HEADER_HEIGHT, t->list->h, SIZE_NORMAL); int y = center_y(HEADER_HEIGHT, t->list->h, SIZE_NORMAL);
t->usb_text = fb_add_text(x, y, WHITE, SIZE_NORMAL, txt); t->usb_text = fb_add_text(x, y, WHITE, SIZE_NORMAL, txt);
list_add(t->usb_text, &t->ui_elements); list_add(t->usb_text, &t->ui_elements);
x = (fb_width/2) - (PROGDOTS_W/2);
t->usb_prog = progdots_create(x, y+100);
} }
else if(!empty && t->usb_text) else if(!empty && t->usb_text)
{ {
progdots_destroy(t->usb_prog);
t->usb_prog = NULL;
list_rm(t->usb_text, &t->ui_elements, &fb_remove_item); list_rm(t->usb_text, &t->ui_elements, &fb_remove_item);
t->usb_text = NULL; t->usb_text = NULL;
} }

68
progressdots.c Normal file
View File

@@ -0,0 +1,68 @@
#include <unistd.h>
#include "progressdots.h"
// ms
#define SWITCH_SPEED 800
#define THREAD_SLEEP 50
static void *progdots_thread(void *data)
{
progdots *p = (progdots*)data;
int timer = SWITCH_SPEED;
while(p->run)
{
if(timer <= THREAD_SLEEP)
{
if(++p->active_dot >= PROGDOTS_CNT)
p->active_dot = 0;
progdots_set_active(p, p->active_dot);
fb_draw();
timer = SWITCH_SPEED;
}
else timer -= THREAD_SLEEP;
usleep(THREAD_SLEEP*1000);
}
return NULL;
}
progdots *progdots_create(int x, int y)
{
progdots *p = malloc(sizeof(progdots));
memset(p, 0, sizeof(progdots));
p->x = x;
p->y = y;
p->run = 1;
int i;
for(i = 0; i < PROGDOTS_CNT; ++i)
{
p->dots[i] = fb_add_rect(x, y, PROGDOTS_H, PROGDOTS_H, (i == 0 ? LBLUE : WHITE));
x += PROGDOTS_H + (PROGDOTS_W - (PROGDOTS_CNT*PROGDOTS_H))/(PROGDOTS_CNT-1);
}
pthread_create(&p->thread, NULL, progdots_thread, p);
fb_draw();
return p;
}
void progdots_destroy(progdots *p)
{
p->run = 0;
pthread_join(p->thread, NULL);
int i;
for(i = 0; i < PROGDOTS_CNT; ++i)
fb_rm_rect(p->dots[i]);
free(p);
}
void progdots_set_active(progdots *p, int dot)
{
p->active_dot = dot;
int i;
for(i = 0; i < PROGDOTS_CNT; ++i)
p->dots[i]->color = (i == dot ? LBLUE : WHITE);
}

24
progressdots.h Normal file
View File

@@ -0,0 +1,24 @@
#ifndef PROGRESSDOTS_H
#define PROGRESSDOTS_H
#include <pthread.h>
#include "framebuffer.h"
#define PROGDOTS_W 300
#define PROGDOTS_H 10
#define PROGDOTS_CNT 8
typedef struct
{
int x, y;
pthread_t thread;
volatile int run;
fb_rect *dots[PROGDOTS_CNT];
int active_dot;
} progdots;
progdots *progdots_create(int x, int y);
void progdots_destroy(progdots *p);
void progdots_set_active(progdots *p, int dot);
#endif

View File

@@ -39,6 +39,6 @@ initrd_path="%r/boot/initrd.img"
# - %s - root directory, from root of the root device # - %s - root directory, from root of the root device
# - %i - root image, from root of the root device # - %i - root image, from root of the root device
# - %f - fs of the root image # - %f - fs of the root image
base_cmdline="%b root=%d rootfstype=%r rw console=tty0 fbcon=rotate:1 access=m2 quiet splash rootflags=defaults,noatime,nodiratime" base_cmdline="%b root=%d rootfstype=%r rw console=tty0 access=m2 quiet splash rootflags=defaults,noatime,nodiratime"
img_cmdline="loop=%i loopfstype=%f" img_cmdline="loop=%i loopfstype=%f"
dir_cmdline="rootsubdir=%s" dir_cmdline="rootsubdir=%s"