blob: de637ec1609913748c2ff2cdf5dc0f41a1070adc [file] [log] [blame]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <dlfcn.h>
#include <stdint.h>
#include <pthread.h>
int (*lynq_get_upgrade_status)(void);
int (*lynq_fota_set_addr_value)(char *value,int size);
int (*lynq_fota_nrestart)(void);
int (*lynq_rock_main)(int first_run);
int (*lynq_read_process)(void);
void *dlHandle_fota = NULL;
void *thread_function_noreboot(void *arg)
{
lynq_fota_nrestart();
return NULL;
}
void *thread_function_reboot(void *arg)
{
lynq_rock_main(1);
return NULL;
}
int main(int argc,char *argv[])
{
int ret = 0;
int reboot_flag;
char *value = argv[1];
printf("Enter main function\n");
const char *lynqLibPath_fota = "/lib/liblynq-fota.so";
dlHandle_fota = dlopen(lynqLibPath_fota, RTLD_NOW);
if (dlHandle_fota == NULL)
{
printf("dlopen dlHandle_fota failed: %s\n", dlerror());
return -1;
}
lynq_fota_set_addr_value = (int (*)(char *value,int size))dlsym(dlHandle_fota, "lynq_fota_set_addr_value");
if(lynq_fota_set_addr_value == NULL)
{
printf("lynq fota ser addr value is null\n");
return -1;
}
lynq_get_upgrade_status = (int (*)(void))dlsym(dlHandle_fota,"lynq_get_upgrade_status");
if(lynq_get_upgrade_status == NULL)
{
printf("lynq_get_upgrade_status is null\n");
return -1;
}
lynq_fota_nrestart = (int (*)())dlsym(dlHandle_fota,"lynq_fota_nrestart");
if(lynq_fota_nrestart == NULL)
{
printf("lynq_fota_nrestart is null\n");
return -1;
}
lynq_rock_main = (int (*)(int first_run))dlsym(dlHandle_fota,"lynq_rock_main");
if(lynq_rock_main == NULL)
{
printf("lynq_rock_main is null\n");
return -1;
}
lynq_read_process = (int (*)(void))dlsym(dlHandle_fota,"lynq_read_process");
if(lynq_read_process == NULL)
{
printf("lynq_read_process is null\n");
return -1;
}
ret = lynq_fota_set_addr_value(value,(int )strlen(value));
if(ret != 0)
{
printf("set upgrade package addr failed\n");
return -1;
}
while(1)
{
printf("Please chose action 0: upgrade done ,not reboot 1: upgrade done ,reboot 2:get upgrade status 3:read fota process \n");
scanf("%d",&reboot_flag);
switch(reboot_flag)
{
case 0:
{
pthread_t thread_id_noreboot;
int result = pthread_create(&thread_id_noreboot, NULL, thread_function_noreboot, NULL);
if (result != 0)
{
printf("pthread_create failed \n");
return -1;;
}
}
break;
case 1:
{
pthread_t thread_id_reboot;
int result = pthread_create(&thread_id_reboot, NULL, thread_function_reboot, NULL);
if (result != 0)
{
printf("pthread_create failed \n");
return -1;;
}
}
break;
case 2:
printf("Get fota upgrade status \n");
ret = lynq_get_upgrade_status();
printf("lynq_get_upgrade_status ret is %d\n",ret);
break;
case 3:
printf("get fota upgrade process\n");
ret = lynq_read_process();
printf("Now upgrade process is %d\n",ret);
break;
default:
printf("please input right flag 0 or 1 or 2 or 3\n");
break;
}
}
return 0;
}