blob: 9d9f5463eecdb062a5e4c1719d63af2ac8bc1df1 [file] [log] [blame]
#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, &notification_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, &notification_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;
}