From d9dab117ed43398ad4265f191e0306f7dd076a16 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Tue, 26 May 2015 07:19:47 +0200 Subject: [griffin.display] Add mmc and usb storage options Adds support for mmc or usb storage as an option. Only the last hot-plugged device is being displayed/used now, as we don't know how we want to handle multiple storage options yet. Signed-off-by: Olliver Schinagl --- src/eulogium.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 80 insertions(+), 4 deletions(-) diff --git a/src/eulogium.c b/src/eulogium.c index 128e0e5..254cf0a 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -27,6 +27,8 @@ static void _but_mat_ch_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, static void _but_mat_set_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _eulogium_button_main_maintanance_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); static void _cb_button_main_print(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_print_local_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_print_usb_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_maint_adv_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _eulogium_button_main_mat_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED); @@ -81,6 +83,36 @@ static struct button_def but_main_print = { .data = NULL, }; +static struct button_def but_print_local = { + .text = "LOCAL", + .cb = { + .func = &_but_print_local_cb, + .data = NULL, + .info = "local storage button pressed", + }, + .data = NULL, +}; + +static struct button_def but_print_mmc = { + .text = "SD", + .cb = { + .func = &_but_print_usb_cb, + .data = NULL, + .info = "usb storage button pressed", + }, + .data = NULL, +}; + +static struct button_def but_print_usb = { + .text = "USB", + .cb = { + .func = &_but_print_usb_cb, + .data = NULL, + .info = "usb storage button pressed", + }, + .data = NULL, +}; + static struct button_def but_main_material = { .text = "MATERIAL", .cb = { @@ -242,19 +274,58 @@ static void _eulogium_button_main_maintanance_cb(void *data, Evas_Object *object elm_naviframe_item_simple_push(eulogium->navi, content); } -static void _cb_button_main_print(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +static void _but_print_local_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = data; Evas_Object *content; - printf("Button print pressed\n"); - /* TODO: add intermediate window to list usbdrive/sdcard/youmagine */ + /* Fake entry for local storage, ideally this is a separate partition that is user mounted and trigged via the initial scan */ content = eulogium_print_menu(eulogium, "/home"); /* TODO: replace later */ if (!content) return; elm_naviframe_item_simple_push(eulogium->navi, content); } +static void _but_print_usb_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + struct mount_data *mount; + + /* Only care about last entry. Yes this is wrong as we need a UI element to handle this properly first. XXX */ + mount = eina_list_data_get(eina_list_last(eulogium->mounts)); + if (!mount) + return; + content = eulogium_print_menu(eulogium, (char *)eeze_disk_mount_point_get(mount->disk)); + if (!content) + return; + elm_naviframe_item_simple_push(eulogium->navi, content); +} + +static void _cb_button_main_print(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content = NULL; + struct mount_data *mount; + + /* TODO: Right now we just implement 1 or 2 buttons horizontally, ideally this should be something scrollable where more storage locations are usable */ + if (eina_list_count(eulogium->mounts) < 1) { + content = eulogium_tripple_button_menu(eulogium->navi, &but_print_local, &but_empty, &but_return); + } else { + mount = eina_list_data_get(eina_list_last(eulogium->mounts)); + if (!mount) + return; + if (eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_FLASH) + content = eulogium_tripple_button_menu(eulogium->navi, &but_print_local, &but_print_mmc, &but_return); + if (eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_USB) + content = eulogium_tripple_button_menu(eulogium->navi, &but_print_local, &but_print_usb, &but_return); + } + if (!content) + return; + + elm_naviframe_item_simple_push(eulogium->navi, content); +} + static void _but_maint_adv_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = data; @@ -1151,6 +1222,8 @@ static void eulogium_setup(struct eulogium_data *eulogium) eulogium_button_cb_data_set(&but_print_abort, eulogium); eulogium_button_cb_data_set(&but_print_progress_tune, eulogium); eulogium_button_cb_data_set(&but_main_print, eulogium); + eulogium_button_cb_data_set(&but_print_local, eulogium); + eulogium_button_cb_data_set(&but_print_usb, eulogium); eulogium_button_cb_data_set(&but_main_material, eulogium); eulogium_button_cb_data_set(&but_main_maintanance, eulogium); eulogium_button_cb_data_set(&but_maintanance_advanced, eulogium); @@ -1379,7 +1452,10 @@ static void _on_where_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending eeze_disk_scan(mount->disk); EINA_LOG_ERR("Medium mounted at %s of type %d", where, eeze_disk_type_get(mount->disk)); if (eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_USB) - *mount->mounts = eina_list_append(*mount->mounts, mount); /* XXX DANGER! if _append returns a new list location, eulogium->mounts won't know about it breaking everything! REWRITE!! */ + *mount->mounts = eina_list_append(*mount->mounts, mount); + if ((eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_FLASH) && + (!strstr(eeze_disk_devpath_get(mount->disk), "mmcblk0"))) /* XXX skip using mmcblk0 as that is our root fs for now. This may be handled by udev making it invisible. */ + *mount->mounts = eina_list_append(*mount->mounts, mount); else eulogium_disk_free(mount); /* TODO: UI Stuffs/signals */ -- cgit v0.12