#include <glib-unix.h>
#include "ttd-log.h"
#include "ttd-cloud-conn-state.h"
-#include "ttd-cmd-type.h"
+#include "ttd-cmd.h"
#include "ttd-queue.h"
#include "ttd-conn-mgr.h"
#include "ttd-task.h"
#include "ttd-http.h"
#include "ttd-parse-cmd.h"
#include "ttd-worker-interface.h"
-
+#include "ttd-worker-handle.h"
#ifndef SERVER_URL
/* TODO : remove it after test */
ret = ttd_task_run(task);
if (ret)
_E("Failed to ttd_task_func_run()");
+
+ ttd_task_free(task);
}
+static ttd_task_func __get_task_func(ttd_cmd_data *cmd)
+{
+ ttd_task_func func = NULL;
+ retv_if(!cmd, NULL);
+
+ switch (ttd_cmd_get_type(cmd)) {
+ case TTD_CMD_TYPE_POWER:
+ break;
+ case TTD_CMD_TYPE_CONFIG:
+ break;
+ case TTD_CMD_TYPE_PACKAGE:
+ case TTD_CMD_TYPE_INFO:
+ func = ttd_worker_launch;
+ break;
+ case TTD_CMD_TYPE_DIAGNOSIS:
+ break;
+ case TTD_CMD_TYPE_LOCAL:
+ break;
+ case TTD_CMD_TYPE_UNKNOWN:
+ case TTD_CMD_TYPE_MAX:
+ default:
+ break;
+ }
+
+ return func;
+}
static gboolean __daemon_job_handler(gpointer data)
{
ttd_data *d_data = data;
cmd_data = ttd_queue_timeout_pop(TTD_QUEUE_TYPE_CMD, 500);
if (cmd_data) {
ttd_task *new_task = NULL;
+ ttd_task_func func = NULL;
/* Do something, creates task... */
+ func = __get_task_func(cmd_data);
+ if (!func) {
+ _E("task func is not defined - type[%d]",
+ ttd_cmd_get_type(cmd_data));
+
+ ttd_cmd_free(cmd_data);
+ return TRUE;
+ }
+
+ new_task = ttd_task_new(TTD_TASK_PRIORITY_NORMAL, func,
+ cmd_data, (ttd_task_data_free_func)ttd_cmd_free);
g_thread_pool_push(d_data->thread_pool, new_task, NULL);
}
ttd_queue_push(TTD_QUEUE_TYPE_CMD,
cmd_data, (ttd_queue_item_free_func)ttd_cmd_free);
}
- }else
+ } else
_D("there is no cmd now");
return 0;
d_data->thread_pool =
g_thread_pool_new(__main_thread_pool_func, d_data, -1, FALSE, NULL);
- g_thread_pool_set_sort_function(d_data->thread_pool, ttd_task_sort_func, NULL);
+ g_thread_pool_set_sort_function(
+ d_data->thread_pool, ttd_task_sort_func, NULL);
_D("[delay] start-to-ready - %.3lf(ms)",
- (double)(_get_monotonic_time()- start)/1000);
+ (double)(_get_monotonic_time() - start)/1000);
g_idle_add(__do_device_register, d_data);
g_main_loop_run(d_data->mainloop);