#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;
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);
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;
}
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);
}
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!");
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 {
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;
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);
}