${CMAKE_CURRENT_SOURCE_DIR}/src/fmwup_resource.c
${CMAKE_CURRENT_SOURCE_DIR}/src/fmwup_resource_internal.c
${CMAKE_CURRENT_SOURCE_DIR}/src/fmwup_resource_http.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/fmwup_resource_dbus.c
)
INCLUDE_DIRECTORIES(
CONFIGURE_FILE(fmwup-resource.pc.in fmwup-resource.pc @ONLY)
INSTALL(FILES ${CMAKE_BINARY_DIR}/fmwup-resource.pc DESTINATION ${LIBDIR}/pkgconfig)
-ADD_DEFINITIONS(-D_USE_WWST_)
+#ADD_DEFINITIONS(-D_USE_WWST_)
INCLUDE(FindPkgConfig)
PKG_CHECK_MODULES(fmwup_pkgs REQUIRED
#include "fmwup_resource.h"
#define OC_RSRVD_FIRMWARE_URI "/firmware"
-#ifdef _USE_WWST_
+//#ifdef _USE_WWST_
#define OC_RSRVD_FIRMWARE_RES_TYPE "oic.r.firmware"
-#else
-#define OC_RSRVD_FIRMWARE_RES_TYPE "x.samsung.firmware"
-#endif
+//#else
+//#define OC_RSRVD_FIRMWARE_RES_TYPE "x.samsung.firmware"
+//#endif
#define OC_RSRVD_FIRMWARE_STATE "state"
#define OC_RSRVD_FIRMWARE_RESULT "result"
OCEntityHandlerRequest *entityHandlerRequest,
void *callbackParam);
+int fmwup_dbus_exec_update(const char *path);
+
void fmwup_get_firmware_info(fmwup_s *firmware_info);
int fmwup_update_command(int64_t update_type);
--- /dev/null
+#include <fmwup_resource_internal.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#define FOTA_DBUS_NAME "org.tizen.system.tota"
+#define FOTA_DBUS_PATH "/Org/Tizen/System/Tota"
+#define FOTA_DBUS_INTERFACE "org.tizen.system.tota"
+#define FOTA_DBUS_METHOD "update"
+
+//type: system
+//Bus: org.tizen.system.tota
+//Object path: /Org/Tizen/System/Tota
+//Interface: org.tizen.system.tota
+//method: update
+//parameter: (s) (delta.tar full path)
+//$ dbus-send --print-reply --reply-timeout=120000 --system --type=method_call --dest=org.tizen.system.tota /Org/Tizen/System/Tota org.tizen.system.tota.update string:/tmp/delta.tar
+
+
+static GDBusConnection *__gdbus_conn = NULL;
+
+
+int dbus_init()
+{
+ FWR_ENTER
+ int ret = 0;
+ GError *error = NULL;
+
+ if (!__gdbus_conn) {
+ __gdbus_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (__gdbus_conn == NULL) {
+ if (error != NULL) {
+ FWR_LOGE("g_bus_get_sync error [%s]", error->message);
+ g_error_free(error);
+ }
+ ret = -1;
+ }
+ }
+
+ FWR_EXIT
+ return ret;
+}
+
+int proxy_send_command(const char *bus_name, const char *bus_obj, const char *bus_if, const char *method_name,
+ int cmd_type, GVariant *cmd_param, GVariant **cmd_ret)
+{
+ FWR_ENTER
+ int ret = 0;
+
+ FWR_LOGI("bus_name[%s] bus_obj[%s] bus_if[%s] method_name[%s]", bus_name, bus_obj, bus_if, method_name);
+
+ ret = dbus_init();
+ if (0 != ret) {
+ FWR_LOGE("dbus_init failed");
+ goto EXIT;
+ }
+
+
+ GError *gerror = NULL;
+ GCancellable *proxy_cancel = g_cancellable_new();
+
+
+ GVariant *reply = g_dbus_connection_call_sync(
+ __gdbus_conn,
+ bus_name,
+ bus_obj,
+ bus_if,
+ method_name,
+ cmd_param,
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ proxy_cancel,
+ &gerror);
+
+ if (!reply) {
+ FWR_LOGE("g_dbus_proxy_call_sync error [%s]",
+ (gerror ? gerror->message : "null"));
+ ret = -1; // error code required
+ goto EXIT;
+ }
+
+ g_variant_get(reply, "(i)", &ret);
+ g_variant_unref(reply);
+
+ FWR_LOGD("reply[%d]", ret);
+
+ EXIT:
+ FWR_EXIT
+ return ret;
+}
+
+
+
+int fmwup_dbus_exec_update(const char *path)
+{
+ FWR_ENTER
+
+ if (!path) {
+ FWR_LOGE("path is NULL");
+ return -1;
+ }
+
+ FWR_LOGI("path [%s]", path);
+
+ int ret = 0;
+
+ GVariant *param = g_variant_new("(s)", path);
+ GVariant *cmd_ret = NULL;
+ int cmd_type = 20;
+
+ ret = proxy_send_command(FOTA_DBUS_NAME, FOTA_DBUS_PATH, FOTA_DBUS_INTERFACE, FOTA_DBUS_METHOD,
+ cmd_type, param, &cmd_ret);
+ if (0 != ret) {
+ FWR_LOGE("proxy_send_command failed");
+ goto _END_OF_FUNC_;
+ }
+
+_END_OF_FUNC_:
+
+ FWR_EXIT
+ return ret;
+}
}
-static void _exec_update()
-{
- FILE* fp = fopen(UPDATE_FILE, "w");
- if(!fp) {
- FWR_LOGE("fopen error: %d", errno);
- return;
- }
- fclose(fp);
-}
-
-
void fmwup_propagate_firmware_resource(void)
{
if(OC_STACK_NO_OBSERVERS == OCNotifyAllObservers(g_firmware_resource->resource_handle, OC_HIGH_QOS)) {
void _handle_update_command(int64_t update_type)
{
+ FWR_ENTER
int result = FMWUP_RESULT_INITIAL;
#ifdef _USE_WWST_
char *res_header = NULL;
(update_type == FMWUP_EXEC_UPGRADE || update_type == FMWUP_EXEC_DOWNLOAD_AND_UPGRADE)) {
fmwup_propagate_firmware_status_resource(FMWUP_STATE_UPDATING, FMWUP_RESULT_INITIAL, true);
- //TODO: To upgrade using interface of fota-client
- _exec_update();
+ /* request to update by dbus (fota client) */
+ if (fmwup_dbus_exec_update(g_download_path) != 0) {
+ FWR_LOGE("Fota client update failed");
+ result = FMWUP_RESULT_UPDATE_FAILED;
+ goto _END_OF_FUNC_;
+ }
+
}
_END_OF_FUNC_:
g_free(request_uri);
#endif
+ FWR_EXIT
return;
}
OCRepPayloadAddInterface(payload, OC_RSRVD_INTERFACE_DEFAULT);
OCRepPayloadAddResourceType(payload, OC_RSRVD_FIRMWARE_RES_TYPE);
+
OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_STATE, (int64_t)g_firmware_resource->state);
OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_RESULT, (int64_t)g_firmware_resource->result);
OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_UPDATE, (int64_t)g_firmware_resource->update);
OCRepPayloadSetPropBool(payload, OC_RSRVD_FIRMWARE_ACTIVE_CHECK, g_firmware_resource->active_check);
+ if (g_firmware_resource->state)
+ FWR_LOGD("firmware_update_state=[%d]", g_firmware_resource->state);
+ if (g_firmware_resource->result)
+ FWR_LOGD("firmware_update_result=[%d]", g_firmware_resource->result);
+ if (g_firmware_resource->current_version)
+ FWR_LOGD("firmware_ver=[%s]", g_firmware_resource->current_version);
+ if (g_firmware_resource->new_version)
+ FWR_LOGD("firmware_new_ver=[%s]", g_firmware_resource->new_version);
+ if (g_firmware_resource->package_uri)
+ FWR_LOGD("firmware_package_url=[%s]", g_firmware_resource->package_uri);
+ if (g_firmware_resource->package_md5)
+ FWR_LOGD("firmware_md5=[%s]", g_firmware_resource->package_md5);
+ FWR_LOGD("firmware_package_size=[%lld]", g_firmware_resource->package_size);
+
+ if (g_firmware_resource->manufacturer)
+ FWR_LOGD("manufacturer=[%s]", g_firmware_resource->manufacturer);
+ if (g_firmware_resource->model_name)
+ FWR_LOGD("model_name=[%s]", g_firmware_resource->model_name);
+
FWR_EXIT
return payload;
}
}
}
+ OCPayloadDestroy(response.payload);
return ehRet;
}
return -1;
}
- ocResult = OCRDPublish(NULL, uri, (CT_ADAPTER_TCP | CT_IP_USE_V4), &res_handle[0], 1, &cb_data, OC_LOW_QOS);
+ ocResult = OCRDPublish(NULL, uri, (CT_ADAPTER_TCP | CT_IP_USE_V4), &res_handle[0], 1, &cb_data, OC_LOW_QOS);
if (ocResult != OC_STACK_OK) {
printf("Publish Resource failed [%d]", ocResult);
return -1;
#else
- if (OCRDPublish(uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
+ if (OCRDPublish(NULL, uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
NULL, 0,
&cb_data, OC_LOW_QOS) != OC_STACK_OK) {
printf("OCRDPublish() failed\n");
// _lock_and_wait();
- if (OCRDPublish(uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
+ if (OCRDPublish(NULL, uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
res_handle, 2,
&cb_data, OC_LOW_QOS) != OC_STACK_OK) {
printf("OCRDPublish() failed\n");
return -1;
}
#else
- if (OCRDDelete(uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
+ if (OCRDDelete(NULL, uri, CT_ADAPTER_TCP|CT_IP_USE_V4,
res_handle, 2,
&cb_data, OC_LOW_QOS) != OC_STACK_OK) {
printf("OCRDDelete() failed\n");