+++ /dev/null
-/*
- * tota-ua
- *
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <sys/un.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define LOG(s, args...) do { printf("FOTA_GUI_TEST" "/(%s): " s, __func__, ##args); } while (0)
-
-
-#define SERV_PATH "/tmp/FotaGuiSocket"
-
-typedef struct {
- char cmd_name[64];
- int argc;
- char argv[3][64];
-} sock_cmd;
-
-typedef struct {
- int ack;
- char ack_desc[256];
-} sock_ack;
-
-#define CMD_SUCCESS 0
-#define CMD_ERROR -1
-#define MISSING_PARAM -2
-
-int sockfd = 0;
-int initcomplete = 0;
-sock_cmd *sendbuff = NULL;
-sock_ack *recvbuff = NULL;
-
-int sock_init(void)
-{
- int len, ret;
- struct sockaddr_un serv_addr;
-
- LOG("%s\n", __func__);
- sendbuff = malloc(sizeof(sock_cmd));
- if (sendbuff == NULL) {
- LOG("memory allocation failed:%s\n", __FUNCTION__);
- return -1;
- }
-
- recvbuff = malloc(sizeof(sock_ack));
- if (recvbuff == NULL) {
- LOG("memory allocation failed:%s\n", __FUNCTION__);
- return -1;
- }
-
- sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (sockfd < 0) {
- perror("\n Error : socket Failed \n");
- return -1;
- }
- bzero((char *)&serv_addr, sizeof(serv_addr));
- serv_addr.sun_family = AF_UNIX;
- strncpy(serv_addr.sun_path, SERV_PATH, sizeof(serv_addr.sun_path) - 1);
- len = sizeof(serv_addr);
-
- ret = connect(sockfd, (struct sockaddr *)&serv_addr, len);
- if (ret < 0) {
- LOG("\n Error : Connect Failed \n");
- return -1;
- }
-
- initcomplete = 1;
- return ret;
-}
-
-void sock_deinit(void)
-{
- LOG("%s\n", __func__);
-
- close(sockfd);
- free(sendbuff);
- free(recvbuff);
- initcomplete = 0;
-}
-
-int sock_cmd_progress(int percent_progress)
-{
- int result = 0;
-
- LOG("%s \n", __func__);
- if (!initcomplete) {
- LOG("sock_init unsuccessful \n");
- return -1;
- }
-
- memset(sendbuff, 0, sizeof(sock_cmd));
- memset(recvbuff, 0xFF, sizeof(sock_ack));
-
- strncpy(sendbuff->cmd_name, "draw_progress", 63);
- sendbuff->argc = 1;
- snprintf(sendbuff->argv[0], 63, "%d", percent_progress);
- LOG("sendbuff->argv[0] = %s \n", sendbuff->argv[0]);
-
- result = write(sockfd, sendbuff, sizeof(sock_cmd));
- if (result < 0) {
- LOG(" Write Failed! \n");
- return -1;
- }
-
- result = read(sockfd, recvbuff, sizeof(sock_ack));
- recvbuff->ack_desc[255] = 0x00;
- if (recvbuff->ack != CMD_SUCCESS || result < 0) {
- LOG(" Fail %s ret(%d)\n", recvbuff->ack_desc, recvbuff->ack);
- return -1;
- } else
- LOG("%s ret(%d)\n", recvbuff->ack_desc, recvbuff->ack);
-
- return recvbuff->ack;
-}
-
-int sock_cmd_end(void)
-{
- int result = 0;
-
- LOG("%s \n", __func__);
- if (!initcomplete) {
- LOG("sock_init unsuccessful \n");
- return -1;
- }
-
- memset(sendbuff, 0, sizeof(sock_cmd));
- memset(recvbuff, 0xFF, sizeof(sock_ack));
-
- strncpy(sendbuff->cmd_name, "draw_end", 63);
- sendbuff->argc = 0;
-
- result = write(sockfd, sendbuff, sizeof(sock_cmd));
- if (result < 0) {
- LOG(" Write Failed! \n");
- return -1;
- }
-
- result = read(sockfd, recvbuff, sizeof(sock_ack));
- recvbuff->ack_desc[255] = 0x00;
- if (recvbuff->ack != CMD_SUCCESS || result < 0) {
- LOG(" Fail %s ret(%d)\n", recvbuff->ack_desc, recvbuff->ack);
- return -1;
- } else
- LOG("%s ret(%d)\n", recvbuff->ack_desc, recvbuff->ack);
-
- return recvbuff->ack;
-}
-
-int main(int argc, char **argv)
-{
- int ret;
- int percent = 0;
-
- if (argc != 2) {
- LOG("Invalid argc = %d\n", argc);
- return -1;
- }
-
- if (sock_init() < 0) {
- LOG("sock_init() failed\n");
- return -1;
- }
-
- percent = atoi(argv[1]);
- if (percent == -1)
- ret = sock_cmd_end();
- else
- ret = sock_cmd_progress(percent);
- LOG("ret = %d\n", ret);
-
- sock_deinit();
-
- return 0;
-}
-
-
#define MAX_CFG_LEN 4096
#define RAMDISK_PATH "/opt/usr/data/fota"
-#define FOTA_GUI_INTERFACE "/usr/bin/fota_gui_test"
#define SYSTEM_LOG_DIR "/opt/var/log"
int ua_op_mode = UA_OP_MODE_FG;
/*-----------------------------------------------------------------------------
fota_gui_update_progress
----------------------------------------------------------------------------*/
+#define TMP_DIR "/tmp/upgrade"
+#define PROGRESS_FILE TMP_DIR "/ro_progress"
+
void fota_gui_update_progress(int percent)
{
- int ret = 0;
- char cmd[1024];
+ int ret;
+ int fd;
+ struct stat s;
+
+ // Check directory
+ ret = stat(TMP_DIR, &s);
+ if (ret == 0) {
+ // TMP_DIR exists but it is not directory
+ if (!S_ISDIR(s.st_mode))
+ goto remove_file;
+ else
+ goto update_progress;
+ } else if (errno == ENOENT) // TMP_DIR not exists
+ goto make_directory;
+ else {
+ LOG("stat failed : %m\n");
+ return;
+ }
+
+remove_file:
+ ret = remove(TMP_DIR);
+ if (ret != 0) {
+ LOG("remove failed : %m\n");
+ return;
+ }
+
+make_directory:
+ ret = mkdir(TMP_DIR, 0755);
+ if (ret != 0) {
+ LOG("mkdir failed : %m\n");
+ return;
+ }
+
+update_progress:
+ fd = creat(PROGRESS_FILE, 0644);
+ if (fd < 0) {
+ LOG("creat failed : %m\n");
+ return;
+ }
- snprintf(cmd, sizeof(cmd)-1, "%s %d", FOTA_GUI_INTERFACE, percent);
+ ret = dprintf(fd, "%d\n", percent);
+ if (close(fd) != 0) {
+ LOG("close failed : %m\n");
+ return;
+ }
+ if (ret < 2) {
+ LOG("write failed (%d) : %m\n", ret);
+ return;
+ }
- ret = _system_cmd_wait(cmd);
- LOG("ret = %d\n", ret);
+ LOG("Succeed to write\n");
}
/*-----------------------------------------------------------------------------