/************************************************************
**
**     Object name : 
**
**     Public      : 
**
**     Private     : 
**
**     Description
**     -- -- -- -- -- -- -- --
**     各種情報をファイルから取得する
**     
**     mount情報はUSBメモリが接続されたときに実行される
**     udev/mdevのスクリプトで出力しておく
**     
**
**     History
**     -- -- -- -- -- -- -- --
**     2015.06.26 K.Takagi 新規作成
**
**
**     Copyright (c) 2012
**     System In Frontier Inc.
**
*/


/*=========================================================*/
/*               Special Macro Definition                  */
/*=========================================================*/

//#undef  DEBUG
//#undef  TEST_MODE
//#define  DEBUG
//#define  TEST_MODE

/*=========================================================*/
/*                   Include Files                         */
/*=========================================================*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include <sys/stat.h>
#include <sys/types.h>

#include "RecSystem.h"

/*=========================================================*/
/*                   Macro Definition                      */
/*=========================================================*/

#ifdef DEBUG

#define DEBUG_PRINT printf

#else

#define DEBUG_PRINT(...)  

#endif

#define  PRM_STRING_LENGTH       256


/*=========================================================*/
/*                 Structure Declaration                   */
/*=========================================================*/

/*=========================================================*/
/*                    Private Valiable                     */
/*=========================================================*/

/*=========================================================*/
/*                    Public Valiable                      */
/*=========================================================*/

/************************************************************
**
**  Public  : 
**
**  History : 2015.06.26 K.Takagi 新規作成
**
**  Description
**  -----------
**  収録のパラメータをファイルから読み込む
**
*/

int LoadSystemInfo(char *load_file_name, RASP_USB_REC_INFO_t *system_info)
{
    int  num;
    
    FILE *prm_fp;
    char  prm_str[PRM_STRING_LENGTH];
    char *ptr;
    char *pos;
    
    /* パラメータファイルを開く */
    prm_fp = fopen(load_file_name, "rt");
    if(prm_fp == NULL)
    {
        printf("File Open Error.\n");
        return -1;
    }
    DEBUG_PRINT("\nFile : %s\n", load_file_name);
    
    /* パラメータファイル読み込み＆転送 */
    while(1)
    {
        ptr = fgets(prm_str, PRM_STRING_LENGTH, prm_fp);
        if(ptr == NULL)
        {
            break;
        }

        /* #以降はコメントなので削除 */
        pos = strchr(prm_str, (int)'#');
        if(pos != NULL)
        {
            *pos = '\0';
        }
        
        /* 文字列を解析 */
        if(strlen(prm_str) > 8)
        {
            DEBUG_PRINT("%s\n", ptr);
            
            num = 0;
            if((ptr = strstr(prm_str, "mount_device")) != NULL)
            {
                num = sscanf(ptr, "%*s %s", system_info->mount_device);
            }
            else if((ptr = strstr(prm_str, "mount_point")) != NULL)
            {
                num = sscanf(ptr, "%*s %s", system_info->mount_point);
            }
            else if((ptr = strstr(prm_str, "mount_fs")) != NULL)
            {
                num = sscanf(ptr, "%*s %s", system_info->mount_fs);
            }
            else if((ptr = strstr(prm_str, "save_info_file")) != NULL)
            {
                num = sscanf(ptr, "%*s %s", system_info->save_info_file);
            }
            else if((ptr = strstr(prm_str, "sound_file_name")) != NULL)
            {
                num = sscanf(ptr, "%*s %s", system_info->sound_file_name);
            }
            else if((ptr = strstr(prm_str, "sound_file_size")) != NULL)
            {
                num = sscanf(ptr, "%*s %ld", &(system_info->sound_file_size));
            }
        }

    } /* End of while */

    fclose(prm_fp);

    return 0;
}


/************************************************************
**
**  Public  : 
**
**  History : 2015.06.26 K.Takagi 新規作成
**
**  Description
**  -----------
**  設定値を表示
**
*/

void ShowSystemInfo(RASP_USB_REC_INFO_t *system_info)
{
    printf("\n");
    printf("- - - - - - - - - - - - - - - -\n");
    printf("Mount Device          = %s\n",  system_info->mount_device);
    printf("Mount Point           = %s\n",  system_info->mount_point);
    printf("File System Type      = %s\n",  system_info->mount_fs);
    printf("Save Info File        = %s\n",  system_info->save_info_file);
    printf("Sound File Name       = %s\n",  system_info->sound_file_name);
    printf("Sound File Size[MB]   = %ld\n", system_info->sound_file_size);
    printf("- - - - - - - - - - - - - - - -\n");
    printf("\n");
}


#ifdef TEST_MODE

/************************************************************
**
**  Public  : 
**
**  History : 2015.06.26 K.Takagi 新規作成
**
**  Description
**  -----------
**  単独テスト時のメイン
**
*/

int main(int argc, char *argv[])
{
    int  count;

    char *prm_file;
    RASP_USB_REC_INFO_t usb_rec_info;

    /* 引数の解析 */
    prm_file  = NULL;
    for(count=1; count<argc; count++)
    {
        if(argv[count][0] == '-')
        {
            switch( argv[count][1] )
            {
                
                /* ヘルプ表示 */
                case 'h':
                {
                    printf("Usage : %s [-f <Parameter File>]\n", argv[0]);
                    printf("  -f : System Parameter File, Parameter Send & Save\n");
                    return 0;
                }
                break;
                
                /* パラメータファイル指定 */
                case 'f':
                {
                    prm_file = argv[count+1];
                    count++;
                }
                break;
                
                default:
                {
                }
                break;
                
            } /* End of switch() */

        }

    }

    /* ファイル指定を確認 */
    if(prm_file == NULL)
    {
        printf("Help : %s -h\n", argv[0]);
        return -1;
    }

    /* システム情報の構造体を初期化 */
    memset(&usb_rec_info, 0, sizeof(RASP_USB_REC_INFO_t));
    
    /* システム情報取得 */
    LoadSystemInfo("mount.conf", &usb_rec_info);
    LoadSystemInfo(prm_file, &usb_rec_info);

    /* システム情報表示 */
    ShowSystemInfo(&usb_rec_info);
    
    {
        char info_file_name[DIR_NAME_LENGTH + FILE_NAME_LENGTH + 10];
        REC_SOUND_INFO_t sound_info;
        
        sound_info.fd              = 0;
        sound_info.sound_file_size = usb_rec_info.sound_file_size;
        sprintf(sound_info.sound_file_name, "%s/%s",  usb_rec_info.mount_point, usb_rec_info.sound_file_name);
        sprintf(info_file_name, "%s/%s",  usb_rec_info.mount_point, usb_rec_info.save_info_file);
        
        printf("sound file : %s\n", sound_info.sound_file_name);
        printf("info file  : %s\n", info_file_name);
    }
    
    
    return 0;

}

#endif /* End of TEST_MODE */

/* デバックモードを解除 */
#undef DEBUG

/* EOF */
