summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-23 13:57:33 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-23 13:57:33 (GMT)
commitbb9593c750f326e732e957b6c9d552f548df91cf (patch)
tree5b6d579ba265abaa82a63ec0a1b482c1d2b70e2a /src
parentcdc2d181e2f2877eacb7dbd4fb4951d3a25b2b88 (diff)
downloadeulogium-bb9593c750f326e732e957b6c9d552f548df91cf.zip
eulogium-bb9593c750f326e732e957b6c9d552f548df91cf.tar.gz
eulogium-bb9593c750f326e732e957b6c9d552f548df91cf.tar.bz2
Fix and use network data
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src')
-rw-r--r--src/dbus_handlers.c15
-rw-r--r--src/eulogium.c54
2 files changed, 46 insertions, 23 deletions
diff --git a/src/dbus_handlers.c b/src/dbus_handlers.c
index 8630f54..7e30fca 100644
--- a/src/dbus_handlers.c
+++ b/src/dbus_handlers.c
@@ -29,7 +29,7 @@ void on_method_generic_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending
void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
struct eulogium_data *eulogium = data; /* TODO replace this by making networks direct via ** */
- struct network_data *networks = eulogium->networks;
+ struct network_data *networks = NULL;
const char *errname, *errmsg;
Eldbus_Message_Iter *array, *net_struct;
char *obj_path, *tech, *ipv4, *ipv6, *ssid, *dummy;
@@ -48,7 +48,7 @@ void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbu
EINA_LOG_ERR("Message content does not match expected \"osssss\" signature. (%s)", eldbus_message_signature_get(msg));
break;
} else {
- networks = realloc(networks, (i + 1) * sizeof(struct network_data));
+ networks = realloc(networks, (i + 2) * sizeof(struct network_data));
if (!networks) {
EINA_LOG_ERR("Unable to allocate memory.");
} else {
@@ -60,10 +60,11 @@ void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbu
else
strncpy(networks[i].obj_path, obj_path, obj_pathsize);
- if (strncmp(tech, _TECH_ETHERNET, sizeof(_TECH_ETHERNET)))
- networks[i].tech = ETHERNET;
- if (strncmp(tech, _TECH_WIFI, sizeof(_TECH_WIFI)))
- networks[i].tech = WIFI;
+ networks[i].tech = UNKNOWN;
+ if (strcmp(tech, _TECH_ETHERNET))
+ networks[i].tech = TECH_ETHERNET;
+ if (strcmp(tech, _TECH_WIFI))
+ networks[i].tech = TECH_WIFI;
strncpy(networks[i].ipv4, ipv4, IPV4_MAX_LEN);
strncpy(networks[i].ipv6, ipv6, IPV6_MAX_LEN);
@@ -71,6 +72,8 @@ void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbu
}
i++;
}
+ networks[i].obj_path = NULL; /* sentinel */
+ eulogium->networks = networks;
}
void on_signal_network_info_changed_ret(void *data, const Eldbus_Message *msg)
diff --git a/src/eulogium.c b/src/eulogium.c
index 8e3b951..d3774e1 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -78,7 +78,7 @@ static void _but_settings_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSE
static void _but_settings_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_change_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
-static void _but_network_stats_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_network_info_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_settings_network_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
@@ -497,7 +497,7 @@ static struct menu_def menu_settings_network = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = _but_network_stats_cb,
+ .func = _but_network_info_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1603,28 +1603,48 @@ static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED,
elm_naviframe_item_simple_push(eulogium->navi, content);
}
-static void _but_network_stats_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+static char *parse_networks_for_display(struct network_data *networks)
+{
+ char *buf = NULL;
+ uint_fast16_t i;
+ uint_fast32_t pos = 0;
+
+ if (!networks)
+ return NULL;
+
+ for (i = 0; networks[i].obj_path; i++) {
+ buf = realloc(buf, pos + 34 * sizeof(char *));
+ pos += sprintf(buf + pos, "%s%s IP: %s", i == 0 ? "": "<br>", (networks[i].tech == TECH_ETHERNET) ? "Ethernet" : (networks[i].tech == TECH_WIFI) ? "WiFi" : "", networks[i].ipv4);
+ }
+
+ return buf;
+}
+
+static void _but_network_info_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
struct eulogium_data *eulogium = data;
- Evas_Object *box, *object;
- printf("But settings settings\n");
+ Evas_Object *content, *_top, *_bottom;
+ char *buf;
/* XXX Quick hack to make the adv feature a little more useful, this needs to be made much better! */
- box = elm_box_add(eulogium->navi);
- evas_object_show(box);
+ _top = elm_box_add(eulogium->navi);
+ evas_object_show(_top);
- object = elm_label_add(box);
- elm_object_text_set(object, "Ethernet IP: 1.2.3.4<br>WiFi IP: 5.6.7.8"); /* TODO: text outline left */
- evas_object_show(object);
- elm_box_pack_end(box, object);
+ _top = elm_label_add(eulogium->navi); /* TODO, dynamically update IPs */
+ buf = parse_networks_for_display(eulogium->networks);
+ elm_object_text_set(_top, buf);
+ free(buf);
+ evas_object_show(_top);
- object = elm_button_add(box);
- elm_object_text_set(object, _(but_return.text)); /* not pretty using the global XXX */
- evas_object_smart_callback_add(object, "clicked", but_return.cb.func, but_return.cb.data);
- evas_object_show(object);
- elm_box_pack_end(box, object);
+ _bottom = elm_button_add(eulogium->navi);
+ elm_object_text_set(_bottom, _(but_return.text)); /* not pretty using the global XXX */
+ evas_object_smart_callback_add(_bottom, "clicked", but_return.cb.func, but_return.cb.data);
+ evas_object_show(_bottom);
- elm_naviframe_item_simple_push(eulogium->navi, box);
+// elm_naviframe_item_simple_push(eulogium->navi, box);
+ content = eulogium_split_screen(eulogium->navi, _top, _bottom);
+ if (content)
+ elm_naviframe_item_simple_push(eulogium->navi, content);
}
static void _but_main_mathot_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)