| #include "hawk_lib.h" |
| #include "hawk_rild.h" |
| |
| #define FOTA_SERVER_VERSION_FILENAME "VersionInfo.ini" |
| #define FOTA_SERVER_PROP "ro.mrvl.hawk.fota.server.url" |
| #define FOTA_SERVER_USERNAME_PROP "ro.mrvl.hawk.fota.server.user" |
| #define FOTA_SERVER_PASSWD_PROP "ro.mrvl.hawk.fota.server.pass" |
| #define FOTA_SERVER_USERNAME_PROP "ro.mrvl.hawk.fota.server_cn.user" |
| #define FOTA_SERVER_PASSWD_PROP "ro.mrvl.hawk.fota.server_cn.pass" |
| |
| #define OTA_MAX_RETRIES 20 |
| #define OTA_NAME "ota" |
| |
| static struct ubus_context *ubus_ctx; |
| static ota_id; |
| struct blob_buf blob; |
| static struct ubus_subscriber notification_event; |
| |
| static int otaReady(void) |
| { |
| if (!ubus_lookup_id(ubus_ctx, OTA_NAME, &ota_id)) |
| return 1; |
| |
| return 0; |
| } |
| |
| static int otad_notify(struct ubus_context *ctx, struct ubus_object *obj, |
| struct ubus_request_data *req, const char *method, struct blob_attr *msg) |
| { |
| ENTER; |
| } |
| |
| int hawk_ota_register(void) |
| { |
| int ret, retries = 0; |
| ENTER; |
| ubus_ctx = ubus_connect(NULL); |
| if (!ubus_ctx) { |
| ml_log_error("Failed to connect to ubus"); |
| return 0; |
| } |
| |
| uloop_init(); |
| ubus_add_uloop(ubus_ctx); |
| |
| ret = ubus_register_subscriber(ubus_ctx, ¬ification_event); |
| if (ret) { |
| ml_log_error("Failed to register subscriber %s\n", ubus_strerror(ret)); |
| ubus_free(ubus_ctx); |
| return 0; |
| } |
| |
| notification_event.cb = otad_notify; |
| |
| do { |
| if (otaReady()) |
| break; |
| sleep(1); |
| } while (retries++ < OTA_MAX_RETRIES); |
| |
| if (retries >= OTA_MAX_RETRIES) { |
| ml_log_error("Failed to look up OTA object"); |
| ubus_free(ubus_ctx); |
| return 0; |
| } |
| |
| ret = ubus_subscribe(ubus_ctx, ¬ification_event, ota_id); |
| if (ret) { |
| ml_log_error("Failed to subscribe to notifications %d\n", ubus_strerror(ret)); |
| ubus_free(ubus_ctx); |
| return 0; |
| } |
| LEAVE; |
| return 1; |
| } |
| |
| static void hawk_ota_download_cb(struct ubus_request *req, int type, struct blob_attr *msg) |
| { |
| ENTER; |
| } |
| |
| void hawk_ota_download(void) |
| { |
| int ret_val = UBUS_STATUS_OK; |
| char server[32]; |
| char username[32]; |
| char password[32]; |
| char url_path[32]; |
| //struct ml_imei imei; |
| ENTER; |
| property_get(FOTA_SERVER_PROP, server, "0"); |
| property_get(FOTA_SERVER_USERNAME_PROP, username, "0"); |
| property_get(FOTA_SERVER_PASSWD_PROP, password, "0"); |
| sprintf(url_path, "%s/Users/%s/%s", server, "001001001001004"/*ml_get_imei(&imei)*/, FOTA_SERVER_VERSION_FILENAME); |
| |
| blob_buf_init(&blob, 0); |
| blobmsg_add_u32(&blob, "type", 0); |
| blobmsg_add_string(&blob, "url", url_path); |
| blobmsg_add_string(&blob ,"username", username); |
| blobmsg_add_string(&blob, "password", password); |
| |
| if ((ret_val = ubus_invoke(ubus_ctx, ota_id, "download", blob.head, hawk_ota_download_cb, 0, 0)) != UBUS_STATUS_OK) |
| ml_log_error("ubus_invoke ota_download failed: %s", ubus_strerror(ret_val)); |
| LEAVE; |
| } |
| |
| |