}
}
-char SDpath[256];
-
// Location
#define LOCATION_STATUS 120
char command[512];
-/*
- * SD Card functions
- */
-
-static char* get_mount_info() {
- struct mntent *ent;
- FILE *aFile;
-
- aFile = setmntent("/proc/mounts", "r");
- if (aFile == NULL) {
- LOGERR("/proc/mounts is not exist");
- return NULL;
- }
- char* mountinfo = new char[512];
- memset(mountinfo, 0, 512);
-
- while (NULL != (ent = getmntent(aFile))) {
-
- if (strcmp(ent->mnt_dir, "/opt/storage/sdcard") == 0)
- {
- LOGDEBUG(",%s,%s,%d,%s,%d,%s",
- ent->mnt_fsname, ent->mnt_dir, ent->mnt_freq, ent->mnt_opts, ent->mnt_passno, ent->mnt_type);
- sprintf(mountinfo,",%s,%s,%d,%s,%d,%s\n",
- ent->mnt_fsname, ent->mnt_dir, ent->mnt_freq, ent->mnt_opts, ent->mnt_passno, ent->mnt_type);
- break;
- }
- }
- endmntent(aFile);
-
- return mountinfo;
-}
-
-int is_mounted()
-{
- int ret = -1, i = 0;
- struct stat buf;
- char file_name[128];
- memset(file_name, '\0', sizeof(file_name));
-
- for(i = 0; i < 10; i++)
- {
- sprintf(file_name, "/dev/mmcblk%d", i);
- ret = access(file_name, F_OK);
- if( ret == 0 )
- {
- lstat(file_name, &buf);
- if(S_ISBLK(buf.st_mode))
- return 1;
- else
- return 0;
- }
- }
-
- return 0;
-}
-
-void* mount_sdcard(void* data)
-{
- int ret = -1, i = 0;
- struct stat buf;
- char file_name[128], command[256];
- memset(file_name, '\0', sizeof(file_name));
- memset(command, '\0', sizeof(command));
-
- LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
- memset(packet, 0, sizeof(LXT_MESSAGE));
-
- LOGINFO("start sdcard mount thread");
-
- pthread_detach(pthread_self());
-
- while (ret < 0)
- {
- for (i = 0; i < 10; i++)
- {
- sprintf(file_name, "/dev/mmcblk%d", i);
- ret = access( file_name, F_OK );
- if( ret == 0 )
- {
- lstat(file_name, &buf);
- if(!S_ISBLK(buf.st_mode))
- {
- sprintf(command, "rm -rf %s", file_name);
- systemcall(command);
- }
- else
- break;
- }
- }
-
- if (i != 10)
- {
- LOGDEBUG( "%s is exist", file_name);
- packet->length = strlen(SDpath); // length
- packet->group = 11; // sdcard
- if (ret == 0)
- packet->action = 1; // mounted
- else
- packet->action = 5; // failed
-
- //
- LOGDEBUG("SDpath is %s", SDpath);
-
- const int tmplen = HEADER_SIZE + packet->length;
- char* tmp = (char*) malloc(tmplen);
-
- if (tmp)
- {
- memcpy(tmp, packet, HEADER_SIZE);
- if (packet->length > 0)
- {
- memcpy(tmp + HEADER_SIZE, SDpath, packet->length);
- }
-
- ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_SDCARD, (const char*) tmp, tmplen);
-
- free(tmp);
- }
-
- break;
- }
- else
- {
- LOGERR( "%s is not exist", file_name);
- }
- }
-
- if(packet)
- {
- free(packet);
- packet = NULL;
- }
-
- pthread_exit((void *) 0);
-}
-
-static int umount_sdcard(void)
-{
- int ret = -1, i = 0;
- char file_name[128];
- memset(file_name, '\0', sizeof(file_name));
-
- LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
- if(packet == NULL){
- return ret;
- }
- memset(packet, 0, sizeof(LXT_MESSAGE));
-
- LOGINFO("start sdcard umount");
-
- pthread_cancel(tid[TID_SDCARD]);
-
- for (i = 0; i < 10; i++)
- {
- sprintf(file_name, "/dev/mmcblk%d", i);
- ret = access(file_name, F_OK);
- if (ret == 0)
- {
- LOGDEBUG("SDpath is %s", SDpath);
-
- packet->length = strlen(SDpath); // length
- packet->group = 11; // sdcard
- packet->action = 0; // unmounted
-
- const int tmplen = HEADER_SIZE + packet->length;
- char* tmp = (char*) malloc(tmplen);
- if (!tmp)
- break;
-
- memcpy(tmp, packet, HEADER_SIZE);
- memcpy(tmp + HEADER_SIZE, SDpath, packet->length);
-
- ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_SDCARD, (const char*) tmp, tmplen);
-
- free(tmp);
-
- memset(SDpath, '\0', sizeof(SDpath));
- sprintf(SDpath, "umounted");
-
- break;
- }
- else
- {
- LOGERR( "%s is not exist", file_name);
- }
- }
-
- if(packet){
- free(packet);
- packet = NULL;
- }
- return ret;
-}
-
-
-void msgproc_sdcard(ijcommand* ijcmd)
-{
- LOGDEBUG("msgproc_sdcard");
-
- const int tmpsize = ijcmd->msg.length;
-
- char token[] = "\n";
- char tmpdata[tmpsize];
- memcpy(tmpdata, ijcmd->data, tmpsize);
-
- char* ret = NULL;
- ret = strtok(tmpdata, token);
-
- LOGDEBUG("%s", ret);
-
- int mount_val = atoi(ret);
- int mount_status = 0;
-
- switch (mount_val)
- {
- case 0: // umount
- {
- mount_status = umount_sdcard();
- }
- break;
- case 1: // mount
- {
- memset(SDpath, '\0', sizeof(SDpath));
- ret = strtok(NULL, token);
- strncpy(SDpath, ret, strlen(ret));
- LOGDEBUG("sdcard path is %s", SDpath);
-
- if (pthread_create(&tid[TID_SDCARD], NULL, mount_sdcard, NULL) != 0)
- LOGERR("mount sdcard pthread create fail!");
- }
-
- break;
- case 2: // mount status
- {
- mount_status = is_mounted();
- LXT_MESSAGE* mntData = (LXT_MESSAGE*) malloc(sizeof(LXT_MESSAGE));
- if (mntData == NULL)
- {
- break;
- }
- memset(mntData, 0, sizeof(LXT_MESSAGE));
-
- mntData->length = strlen(SDpath); // length
- mntData->group = 11; // sdcard
-
- LOGDEBUG("SDpath is %s", SDpath);
-
- switch (mount_status)
- {
- case 0:
- {
- mntData->action = 2; // umounted status
-
- const int tmplen = HEADER_SIZE + mntData->length;
- char* tmp = (char*) malloc(tmplen);
-
- if (tmp)
- {
- memcpy(tmp, mntData, HEADER_SIZE);
- if (mntData->length > 0)
- {
- memcpy(tmp + HEADER_SIZE, SDpath, mntData->length);
- }
-
- ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_SDCARD, (const char*) tmp, tmplen);
-
- free(tmp);
- }
-
- memset(SDpath, '\0', sizeof(SDpath));
- sprintf(SDpath, "umounted");
- }
- break;
- case 1:
- {
- mntData->action = 3; // mounted status
-
- int mountinfo_size = 0;
- char* mountinfo = get_mount_info();
- if (mountinfo)
- {
- mountinfo_size = strlen(mountinfo);
- }
-
- const int tmplen = HEADER_SIZE + mntData->length + mountinfo_size;
- char* tmp = (char*) malloc(tmplen);
-
- if (tmp)
- {
- memcpy(tmp, mntData, HEADER_SIZE);
- if (mntData->length > 0)
- {
- memcpy(tmp + HEADER_SIZE, SDpath, mntData->length);
- }
-
- if (mountinfo)
- {
- memcpy(tmp + HEADER_SIZE + mntData->length, mountinfo, mountinfo_size);
- mntData->length += mountinfo_size;
- memcpy(tmp, mntData, HEADER_SIZE);
- free(mountinfo);
- }
-
- ijmsg_send_to_evdi(g_fd[fdtype_device], IJTYPE_SDCARD, (const char*) tmp, tmplen);
-
- free(tmp);
- } else {
- if (mountinfo) {
- free(mountinfo);
- }
- }
- }
- break;
- default:
- break;
- }
- free(mntData);
- }
- break;
- default:
- LOGERR("unknown data %s", ret);
- break;
- }
-}
-
void* exec_cmd_thread(void *args)
{
char *command = (char*)args;