Add propery by Firmware Resource Spec 30/145430/3
authorhhk86.heo <hhk86.heo@samsung.com>
Tue, 22 Aug 2017 08:44:10 +0000 (17:44 +0900)
committerheo hyungkang <hhk86.heo@samsung.com>
Tue, 22 Aug 2017 08:50:42 +0000 (08:50 +0000)
- To use vconf (firmware url, new ver, md5, size)
- To get&set property in (OC REST GET / OC REST POST)

Change-Id: I56e8690e89d4e62756e7f58c1d4f6d9cf232c121

inc/controlee_firmware_resource_internal.h
packaging/controlee-firmware-resource.spec
src/controlee_firmware_resource_internal.c

index 04fe3c149a177b074cfe0c85c382dd72bde3c9c1..fb050112f7c59eca918e1991a8096ef31afdb0a0 100644 (file)
 #define OC_RSRVD_CONTROLEE_FIRMWARE_URI                "/firmware"
 #define OC_RSRVD_FIRMWARE_RES_TYPE                     "x.samsung.firmware"
 
-#define OC_RSRVD_FIRMWARE_CURRENT_VERSION      "currentversion"
-#define OC_RSRVD_FIRMWARE_NEW_VERSION          "newversion"
 #define OC_RSRVD_FIRMWARE_STATE                                "state"
 #define OC_RSRVD_FIRMWARE_RESULT                       "result"
-#define OC_RSRVD_FIRMWARE_PACKAGE_URI          "packageuri"
 #define OC_RSRVD_FIRMWARE_UPDATE                       "update"
+#define OC_RSRVD_FIRMWARE_PROGRESS                     "progress"
+#define OC_RSRVD_FIRMWARE_UPDATE_TIME          "updatetime"
+
+#define OC_RSRVD_FIRMWARE_CURRENT_VERSION      "version"
+#define OC_RSRVD_FIRMWARE_NEW_VERSION          "newversion"
+#define OC_RSRVD_FIRMWARE_PACKAGE_URI          "packageuri"
+#define OC_RSRVD_FIRMWARE_PACKAGE_SIZE         "packagesize"
+#define OC_RSRVD_FIRMWARE_PACKAGE_MD5          "packagemd5"
+
+#define OC_RSRVD_FIRMWARE_VENDER                       "vender"
+#define OC_RSRVD_FIRMWARE_MODEL                                "model"
+
+#define OC_RSRVD_FIRMWARE_ACTIVE_CHECK         "x.com.samsung.update.activecheck"
+
 
 #define VCONF_FIRMWARE_UPDATE_STATE    "db/private/firmware_update/state"
 #define VCONF_FIRMWARE_UPDATE_RESULT   "db/private/firmware_update/result"
-#define VCONF_FIRMWARE_UPDATE_DOWNLOAD_URL     "db/private/firmware_update/download_url"
+
+#define VCONF_FIRMWARE_UPDATE_PACKAGE_NEW_VERSION      "db/private/firmware_update/package_new_version"
+#define VCONF_FIRMWARE_UPDATE_PACKAGE_URL                              "db/private/firmware_update/package_url"
+#define VCONF_FIRMWARE_UPDATE_PACKAGE_SIZE                     "db/private/firmware_update/package_size"
+#define VCONF_FIRMWARE_UPDATE_PACKAGE_MD5                              "db/private/firmware_update/package_md5"
 #ifdef LOG_TAG
 #undef LOG_TAG
 #define LOG_TAG "FIRMWARE_RESOURCE"
 #define FWR_LOGE(fmt, args...)  LOGE(fmt, ##args)
 
 typedef struct {
-    int state;         //controlee_firmware_state_e - 0: Idle, 1: Downloading, 2: Downloaded, 3: Updating
-    int result;                //0: Initial, 1: success, 2: not enough space, 3: out of ram, 4: connection lost, 5: invalid binary, 6: invalid uri, 7: update failed, 8: unsupport protocol
-    char *current_version;
-    char *new_version;
-    char *package_uri;
+       /* Update Property */
+    int state;                                 //[R][M] controlee_firmware_state_e - 0: Idle, 1: Downloading, 2: Downloaded, 3: Updating
+    int result;                                        //[R][M] 0: Initial, 1: Success, 2: Not enough space, 3: Out of ram, 4: Connection lost, 5: Invalid binary, 6: Invalid uri, 7: Update failed, 8: Unsupport protocol
+    int update;                                        //[RW][M] 0: Initial, 1: Download Image, 2: Upgrade Image, 3:Dwonload and Upgrade, 4 Scheduled Upgrade
+    int progress;                                      //[R][O] 0-100 range based progress include downloading state.
+    int64_t update_time;                       //[RW][O] case of (4 – update) (scheduled)  TODO: ISO 8601
+
+    /* Package Information */
+    char *current_version;             //[R][M] Current firmware version
+    char *new_version;                 //[RW][M] New Version of the firmware package
+    char *package_uri;                 //[RW][M] Firmware package URI where the package located
+    int64_t package_size;              //[RW][O] Package Size
+    char *package_md5;                 //[RW][O] base64-encoded 128-bit MD5 digest of the object
+
+    /* Device Information*/
+    char *manufacturer;                        //[R][O] Device vendor identifier
+    char *model_name;                  //[R][O] Device model identifier
+
+    /* Vender specific - for polling */
+    bool active_check;                 //[R][O] x.com.samsung.update.activecheck
+
+    /* Resource Handle */
     OCResourceHandle *resource_handle;
-
-    /*device info*/
-    char *manufacturer;
-    char *model_name;
 } controlee_firmware_s;
 
 
@@ -73,12 +101,8 @@ OCEntityHandlerResult controlee_handle_firmware_entity(OCEntityHandlerFlag flag,
                                                                                OCEntityHandlerRequest *entityHandlerRequest,
                                                                                void *callbackParam);
 
-void controlee_set_firmware_info(const char *key, const char *value);
-
 void controlee_get_firmware_info(controlee_firmware_s *firmware_info);
 
-void controlee_create_firmware_info_file(void);
-
 void controlee_propagate_firmware_resource(void);
 
 int controlee_http_send_request(controlee_http_req_e type, char *req_url, char **res_header, char **res_body);
index 24a8b74815ca84f1b2c82e2172f3b159ba35f191..39d25340186cdffd6df3ee094d92f2ac5a229c23 100644 (file)
@@ -55,7 +55,10 @@ rm -rf %{buildroot}
 /sbin/ldconfig
 /usr/bin/vconftool set -t int db/private/firmware_update/state 0 -s tizen::vconf::platform::rw
 /usr/bin/vconftool set -t int db/private/firmware_update/result 0 -s tizen::vconf::platform::rw
-/usr/bin/vconftool set -t string db/private/firmware_update/download_url "" -s tizen::vconf::platform::rw
+/usr/bin/vconftool set -t string db/private/firmware_update/package_new_version "" -s tizen::vconf::platform::rw
+/usr/bin/vconftool set -t string db/private/firmware_update/package_url "" -s tizen::vconf::platform::rw
+/usr/bin/vconftool set -t double db/private/firmware_update/package_size "" -s tizen::vconf::platform::rw
+/usr/bin/vconftool set -t string db/private/firmware_update/package_md5 0 -s tizen::vconf::platform::rw
 mkdir -p /opt/usr/data/ua-client
 
 %postun 
index 4bc6013ab5fff4f298304419d07cbb4ccade78fd..a95a3d535ab6595e0a87f705eda4a3cd594720ee 100644 (file)
@@ -138,10 +138,23 @@ OCRepPayload* _construct_response_of_firmware()
        OCRepPayloadAddInterface(payload, OC_RSRVD_INTERFACE_DEFAULT);
        OCRepPayloadAddResourceType(payload, OC_RSRVD_FIRMWARE_RES_TYPE);
 
-       OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_CURRENT_VERSION, g_firmware_resource->current_version);
-       OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_NEW_VERSION, g_firmware_resource->new_version);
        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);
+       OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_PROGRESS, (int64_t)g_firmware_resource->progress);
+       OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_UPDATE_TIME, g_firmware_resource->update_time);
+
+       OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_CURRENT_VERSION, g_firmware_resource->current_version);
+       OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_NEW_VERSION, g_firmware_resource->new_version);
+       OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_PACKAGE_URI, g_firmware_resource->package_uri);
+       OCRepPayloadSetPropInt(payload, OC_RSRVD_FIRMWARE_PACKAGE_SIZE, g_firmware_resource->package_size);
+       OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_PACKAGE_MD5, g_firmware_resource->package_md5);
+
+       OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_VENDER, g_firmware_resource->manufacturer);
+       OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_MODEL, g_firmware_resource->model_name);
+
+       OCRepPayloadSetPropBool(payload, OC_RSRVD_FIRMWARE_ACTIVE_CHECK, g_firmware_resource->active_check);
+
 
        return payload;
 }
@@ -163,6 +176,7 @@ void _update_firmware_resource(OCRepPayload *input)
                if (g_strcmp0(new_firmware, g_firmware_resource->new_version)) {
                        g_free(g_firmware_resource->new_version);
                        g_firmware_resource->new_version = g_strdup(new_firmware);
+                       vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_NEW_VERSION, new_firmware);
                        if (g_state_changed_cb) {
                                g_state_changed_cb(g_firmware_resource->state);
                        }
@@ -176,12 +190,37 @@ void _update_firmware_resource(OCRepPayload *input)
                if (g_strcmp0(package_uri, g_firmware_resource->package_uri)) {
                        g_free(g_firmware_resource->package_uri);
                        g_firmware_resource->package_uri = g_strdup(new_firmware);
-                       vconf_set_str(VCONF_FIRMWARE_UPDATE_DOWNLOAD_URL, new_firmware);
+                       vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_URL, new_firmware);
                }
                g_free(package_uri);
                FWR_LOGD("g_firmware_resource->package_uri = [%s]", g_firmware_resource->package_uri);
        }
 
+       int64_t package_size;
+       if (OCRepPayloadGetPropInt(input, OC_RSRVD_FIRMWARE_PACKAGE_SIZE, &package_size)) {
+               g_firmware_resource->package_size = package_size;
+               vconf_set_dbl(VCONF_FIRMWARE_UPDATE_PACKAGE_SIZE, (double)package_size);
+               FWR_LOGD("g_firmware_resource->package_size = [%lld]", package_size);
+       }
+
+       char *package_md5 = NULL;
+       if (OCRepPayloadGetPropString(input, OC_RSRVD_FIRMWARE_PACKAGE_MD5, &package_md5)) {
+               if (g_strcmp0(package_md5, g_firmware_resource->package_md5)) {
+                       g_free(g_firmware_resource->package_md5);
+                       g_firmware_resource->package_md5 = g_strdup(package_md5);
+                       vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_MD5, package_md5);
+               }
+               g_free(package_uri);
+               FWR_LOGD("g_firmware_resource->package_md5 = [%s]", g_firmware_resource->package_md5);
+       }
+
+       int64_t update_time;
+       if (OCRepPayloadGetPropInt(input, OC_RSRVD_FIRMWARE_UPDATE_TIME, &update_time)) {
+               g_firmware_resource->update_time = update_time;
+               FWR_LOGD("g_firmware_resource->update_time = [%lld]", update_time);
+               /* TODO : Check Scheduled update , */
+       }
+
        int64_t *update = (int64_t *)calloc(1, sizeof(int64_t));
        if (!update) {
                FWR_LOGD("Memory allocation error!");
@@ -190,6 +229,7 @@ void _update_firmware_resource(OCRepPayload *input)
 
        if (OCRepPayloadGetPropInt(input, OC_RSRVD_FIRMWARE_UPDATE, update)) {
                FWR_LOGD("update command = [%lld]", *update);
+               g_firmware_resource->update = *update;
                pthread_t pThread;
                pthread_create(&pThread, NULL, _worker, update);
        } else {
@@ -308,6 +348,9 @@ void controlee_get_firmware_info(controlee_firmware_s *firmware_info)
        char *manufacturer = NULL;
        char *model_name = NULL;
        char *cur_firmware_ver = NULL;
+       char *new_firmware_ver = NULL;
+       double package_size = 0;
+       char *package_md5 = NULL;
        char *download_url = NULL;
        int update_state;
        int update_result;
@@ -341,25 +384,42 @@ void controlee_get_firmware_info(controlee_firmware_s *firmware_info)
                FWR_LOGD("vconf_get_int() is failed");
        }
 
-       download_url = vconf_get_str(VCONF_FIRMWARE_UPDATE_DOWNLOAD_URL);
+       if (vconf_get_dbl(VCONF_FIRMWARE_UPDATE_PACKAGE_SIZE, &package_size) != 0) {
+               FWR_LOGD("vconf_get_dbl() is failed");
+       }
+       new_firmware_ver = vconf_get_str(VCONF_FIRMWARE_UPDATE_PACKAGE_NEW_VERSION);
+       package_md5 = vconf_get_str(VCONF_FIRMWARE_UPDATE_PACKAGE_MD5);
+       download_url = vconf_get_str(VCONF_FIRMWARE_UPDATE_PACKAGE_URL);
 
        FWR_LOGD("manufacturer=[%s]", manufacturer);
        FWR_LOGD("model_name=[%s]", model_name);
+
        FWR_LOGD("firmware_ver=[%s]", cur_firmware_ver);
+       FWR_LOGD("firmware_new_ver=[%s]", new_firmware_ver);
+       FWR_LOGD("firmware_package_url=[%s]", download_url);
+       FWR_LOGD("firmware_md5=[%s]", package_md5);
+       FWR_LOGD("firmware_package_size=[%lld]", (int64_t)package_size);
+
        FWR_LOGD("firmware_update_state=[%d]", update_state);
        FWR_LOGD("firmware_update_result=[%d]", update_result);
-       FWR_LOGD("download_url=[%s]", download_url);
 
        firmware_info->manufacturer = g_strdup(manufacturer);
        firmware_info->model_name = g_strdup(model_name);
+
        firmware_info->current_version = g_strdup(cur_firmware_ver);
-       firmware_info->new_version = g_strdup("");
+       firmware_info->new_version = g_strdup(new_firmware_ver);
+       firmware_info->package_uri = g_strdup(download_url);
+       firmware_info->package_md5 = g_strdup(package_md5);
+       firmware_info->package_size = (int64_t)package_size;
+
        firmware_info->state = update_state;
        firmware_info->result = update_result;
-       firmware_info->package_uri = g_strdup(download_url);
 
        g_free(manufacturer);
        g_free(model_name);
+
+       g_free(package_md5);
+       g_free(new_firmware_ver);
        g_free(cur_firmware_ver);
        g_free(download_url);
 }