summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-05-26 05:19:47 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-05-26 05:19:47 (GMT)
commitd9dab117ed43398ad4265f191e0306f7dd076a16 (patch)
tree66d76e559c1c985ff1fd51fc1cf115920e3e0965
parent1a18de80dbd316f402aaf2ee3918e69f3932a5b8 (diff)
downloadeulogium-d9dab117ed43398ad4265f191e0306f7dd076a16.zip
eulogium-d9dab117ed43398ad4265f191e0306f7dd076a16.tar.gz
eulogium-d9dab117ed43398ad4265f191e0306f7dd076a16.tar.bz2
[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 <o.schinagl@ultimaker.com>
-rw-r--r--src/eulogium.c84
1 files 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 */