return FMWUP_SUCCESS;
}
-void fmwup_unset_resource_changed_cb(void)
+void fmwup_unset_state_changed_cb(void)
{
g_state_changed_cb = NULL;
}
}
+int fmwup_set_firmware_resource_value(fmwup_res_type_e res_type, char *value)
+{
+ if (!g_firmware_resource) {
+ FWR_LOGE("g_firmware_resource is NULL");
+ return FMWUP_NULL_PTR;
+ }
+
+ if (value == NULL) {
+ FWR_LOGE("value is NULL");
+ return FMWUP_INVALID_VALUE;
+ }
+
+ int result = FMWUP_SUCCESS;
+
+ switch (res_type) {
+ case FMWUP_RES_UPDATE:
+ if (value == NULL || (value && strlen(value) != 1)) {
+ result = FMWUP_INVALID_VALUE;
+ FWR_LOGE("value is invalid");
+ break;
+ }
+ FWR_LOGI("value is [%s]", value);
+
+ int64_t update = (int64_t)atoi(value);
+ if (fmwup_update_command(update) != 0) {
+ result = FMWUP_MEMORY_ERR;
+ FWR_LOGE("allocate failed");
+ }
+ break;
+
+ case FMWUP_RES_UPDATE_TIME:
+ if (g_strcmp0(value, g_firmware_resource->update_time)) {
+ g_free(g_firmware_resource->update_time);
+ g_firmware_resource->update_time = g_strdup(value);
+ } else {
+ result = FMWUP_ALREADY_EXIST;
+ FWR_LOGI("Invalid res_type[%d]", res_type);
+ }
+ break;
+
+ default :
+ result = FMWUP_INVALID_VALUE;
+ FWR_LOGI("Invalid res_type[%d]", res_type);
+ break;
+ }
+
+ return result;
+}
+
+
int fmwup_check_firmware_upgraded(void)
{
if (!g_firmware_resource) {
if (g_firmware_resource->state == FMWUP_STATE_UPDATING) {
FWR_LOGD("***Firmware Upgrade Done***");
+ /* Initialize - new firmware information - */
+ g_free(g_firmware_resource->new_version);
+ g_firmware_resource->new_version = g_strdup("");
+ vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_NEW_VERSION, "");
+
+ g_free(g_firmware_resource->package_uri);
+ g_firmware_resource->package_uri = g_strdup("");
+ vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_URL, "");
+
+ g_free(g_firmware_resource->package_md5);
+ g_firmware_resource->package_md5 = g_strdup("");
+ vconf_set_str(VCONF_FIRMWARE_UPDATE_PACKAGE_MD5, "");
+
+ g_firmware_resource->package_size = 0;
+ vconf_set_dbl(VCONF_FIRMWARE_UPDATE_PACKAGE_SIZE, (double)0);
+
// TODO :: It should be checked and set result value according to upgrade result
- fmwup_propagate_firmware_status_resource(FMWUP_STATE_IDLE, FMWUP_RESULT_SUCCESS);
+ fmwup_propagate_firmware_status_resource(FMWUP_STATE_IDLE, FMWUP_RESULT_SUCCESS, false);
} else {
FWR_LOGE("is not updating, state[%d]", g_firmware_resource->state);
}
-void fmwup_propagate_firmware_status_resource(fmwup_update_property_e state, fmwup_result_property_e result)
+void fmwup_propagate_firmware_status_resource(fmwup_update_property_e state, fmwup_result_property_e result, bool is_new_firmware)
{
g_firmware_resource->state = state;
fmwup_propagate_firmware_resource();
if (g_state_changed_cb) {
- g_state_changed_cb(g_firmware_resource->state);
+ g_state_changed_cb(g_firmware_resource->state, is_new_firmware);
}
if (!(result == FMWUP_RESULT_INITIAL)) {
//init state, result in failed case
- g_firmware_resource->state = FMWUP_EXEC_IDLE;
+ g_firmware_resource->state = FMWUP_STATE_IDLE;
g_firmware_resource->result = FMWUP_RESULT_INITIAL;
vconf_set_int(VCONF_FIRMWARE_UPDATE_STATE, (const int)g_firmware_resource->state);
if ((g_firmware_resource->state == FMWUP_STATE_IDLE) && (update_type == FMWUP_EXEC_DOWNLOAD || update_type == FMWUP_EXEC_DOWNLOAD_AND_UPGRADE)) {
FWR_LOGD("***Downloading image from [%s] ***", g_firmware_resource->package_uri);
- fmwup_propagate_firmware_status_resource(FMWUP_STATE_DOWNLOADING, FMWUP_RESULT_INITIAL);
+ fmwup_propagate_firmware_status_resource(FMWUP_STATE_DOWNLOADING, FMWUP_RESULT_INITIAL, true);
#ifdef _USE_WWST_
#endif
FWR_LOGD("*** Firmware image downloaded ***");
- fmwup_propagate_firmware_status_resource(FMWUP_STATE_DOWNLOADED, FMWUP_RESULT_INITIAL);
+ fmwup_propagate_firmware_status_resource(FMWUP_STATE_DOWNLOADED, FMWUP_RESULT_INITIAL, true);
}
if ((g_firmware_resource->state == FMWUP_STATE_DOWNLOADED) &&
(update_type == FMWUP_EXEC_UPGRADE || update_type == FMWUP_EXEC_DOWNLOAD_AND_UPGRADE)) {
- fmwup_propagate_firmware_status_resource(FMWUP_STATE_UPDATING, FMWUP_RESULT_INITIAL);
+ fmwup_propagate_firmware_status_resource(FMWUP_STATE_UPDATING, FMWUP_RESULT_INITIAL, true);
//TODO: To upgrade using interface of fota-client
_exec_update();
_END_OF_FUNC_:
if (result != FMWUP_RESULT_INITIAL) {
- fmwup_propagate_firmware_status_resource(FMWUP_STATE_IDLE, result);
+ fmwup_propagate_firmware_status_resource(FMWUP_STATE_IDLE, result, true);
}
#ifdef _USE_WWST_
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_UPDATE_TIME, g_firmware_resource->update_time);
+ OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_DESCRIPTION, g_firmware_resource->description);
OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_CURRENT_VERSION, g_firmware_resource->current_version);
OCRepPayloadSetPropString(payload, OC_RSRVD_FIRMWARE_NEW_VERSION, g_firmware_resource->new_version);
void _update_firmware_resource(OCRepPayload *input)
{
+
+ /* write to non volatile data - package info */
char *new_firmware = NULL;
if (OCRepPayloadGetPropString(input, OC_RSRVD_FIRMWARE_NEW_VERSION, &new_firmware)) {
if (g_strcmp0(new_firmware, g_firmware_resource->new_version)) {
char *package_uri = NULL;
if (OCRepPayloadGetPropString(input, OC_RSRVD_FIRMWARE_PACKAGE_URI, &package_uri)) {
- FWR_LOGI("g_firmware_resource->package_uri = [%s]", package_uri);
if (g_strcmp0(package_uri, g_firmware_resource->package_uri)) {
g_free(g_firmware_resource->package_uri);
g_firmware_resource->package_uri = g_strdup(package_uri);
} else {
FWR_LOGE("package_uri none");
}
+
+ 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_LOGI("g_firmware_resource->package_size = [%lld]", package_size);
+ } else {
+ FWR_LOGI("package_size none");
+ }
+
+ 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_md5);
+ FWR_LOGI("g_firmware_resource->package_md5 = [%s]", g_firmware_resource->package_md5);
+ } else {
+ FWR_LOGI("package_md5 none");
+ }
+
+ if (g_state_changed_cb) {
+ g_state_changed_cb(g_firmware_resource->state, true);
+ }
}
- 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_LOGI("g_firmware_resource->package_size = [%lld]", package_size);
+
+ /* write to volatile data - update info */
+ char *update_time = NULL;
+ if (OCRepPayloadGetPropString(input, OC_RSRVD_FIRMWARE_UPDATE_TIME, &update_time)) {
+ if (g_strcmp0(update_time, g_firmware_resource->update_time)) {
+ g_free(g_firmware_resource->update_time);
+ g_firmware_resource->update_time = g_strdup(update_time);
+ }
+
+ g_free(update_time);
+ FWR_LOGI("g_firmware_resource->update_time = [%s]", g_firmware_resource->update_time);
+ /* TODO : Check Scheduled update , */
}
- 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);
+ char *description = NULL;
+ if (OCRepPayloadGetPropString(input, OC_RSRVD_FIRMWARE_DESCRIPTION, &description)) {
+ if (g_strcmp0(description, g_firmware_resource->description)) {
+ g_free(g_firmware_resource->description);
+ g_firmware_resource->description = g_strdup(description);
}
- g_free(package_md5);
- FWR_LOGI("g_firmware_resource->package_md5 = [%s]", g_firmware_resource->package_md5);
+
+ g_free(description);
+ FWR_LOGI("g_firmware_resource->description = [%s]", g_firmware_resource->description);
}
- int64_t update_time;
- if (OCRepPayloadGetPropInt(input, OC_RSRVD_FIRMWARE_UPDATE_TIME, &update_time)) {
- g_firmware_resource->update_time = update_time;
- FWR_LOGI("g_firmware_resource->update_time = [%lld]", update_time);
- /* TODO : Check Scheduled update , */
+ int64_t update;
+ if (OCRepPayloadGetPropInt(input, OC_RSRVD_FIRMWARE_UPDATE, &update)) {
+ FWR_LOGD("update command = [%lld]", update);
+ fmwup_update_command(update);
}
+ fmwup_propagate_firmware_resource();
+}
+
+
+int fmwup_update_command(int64_t update_type)
+{
int64_t *update = (int64_t *)calloc(1, sizeof(int64_t));
if (!update) {
FWR_LOGE("Memory allocation error!");
- return;
+ return -1;
}
- 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 {
- g_free(update);
- }
+ g_firmware_resource->update = (int)update_type;
- fmwup_propagate_firmware_resource();
+ *update = update_type;
+
+ pthread_t pThread;
+ pthread_create(&pThread, NULL, _worker, update);
+
+ return 0;
}
void fmwup_get_firmware_info(fmwup_s *firmware_info)
{
- char *manufacturer = NULL;
- char *model_name = NULL;
+ int update_state;
+ int update_result;
+
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;
+
+ char *manufacturer = NULL;
+ char *model_name = NULL;
#if 1
OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, (void **)&manufacturer);
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_update_state=[%d]", update_state);
+ FWR_LOGD("firmware_update_result=[%d]", update_result);
FWR_LOGD("firmware_ver=[%s]", cur_firmware_ver);
FWR_LOGD("firmware_new_ver=[%s]", new_firmware_ver);
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("manufacturer=[%s]", manufacturer);
+ FWR_LOGD("model_name=[%s]", model_name);
- firmware_info->manufacturer = g_strdup(manufacturer);
- firmware_info->model_name = g_strdup(model_name);
+ firmware_info->state = update_state;
+ firmware_info->result = update_result;
+ firmware_info->update_time = g_strdup("");
+ firmware_info->description = g_strdup("");
firmware_info->current_version = g_strdup(cur_firmware_ver);
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->package_md5 = g_strdup(package_md5);
+
+ firmware_info->manufacturer = g_strdup(manufacturer);
+ firmware_info->model_name = g_strdup(model_name);
- firmware_info->state = update_state;
- firmware_info->result = update_result;
g_free(manufacturer);
g_free(model_name);