/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * 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.
 */
/**
 ************************************************************************
 * @file         M4OSA_FileCommon_priv.h
 * @ingroup      OSAL
 * @brief        File common private for Android
 * @note         This file declares functions and types used by both the file
 *               writer and file reader.
 ************************************************************************
*/

#ifndef M4OSA_FILECOMMON_PRIV_H
#define M4OSA_FILECOMMON_PRIV_H


#include "M4OSA_FileCommon.h"
#include <stdio.h>

#define M4OSA_isAccessModeActived(compound_mode_access,elementary_mode_access)\
        (((compound_mode_access)&(elementary_mode_access))? 1:0)


typedef enum M4OSA_LastSeek
{
   SeekNone,
   SeekRead,
   SeekWrite
} M4OSA_LastSeek;

/** This structure defines the file context*/
typedef struct {
   M4OSA_UInt32         coreID_read;
   M4OSA_UInt32         coreID_write;
   FILE*                file_desc;
   /** The name of the URL */
   M4OSA_Char*          url_name;
   /** The name of the file */
   M4OSA_Char*          file_name;
   /** The size in bytes of the file */
   M4OSA_FilePosition   file_size;
   /** The file mode access used to open the file */
   M4OSA_FileModeAccess access_mode;
   M4OSA_LastSeek       current_seek;
   M4OSA_FilePosition   read_position;
   M4OSA_FilePosition   write_position;
   M4OSA_Bool           b_is_end_of_file;

#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
   M4OSA_Context        semaphore_context;
#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */


   /* These two variables were added to manage case where a file
    * is opened in read and write mode with one descriptor */
    M4OSA_DescrModeAccess    m_DescrModeAccess;
    M4OSA_UInt32            m_uiLockMode;


} M4OSA_FileContext;



M4OSA_ERR M4OSA_fileCommonOpen(M4OSA_UInt16 core_id,
                               M4OSA_Context* context,
                               M4OSA_Char* URL,
                               M4OSA_FileModeAccess fileModeAccess);

M4OSA_ERR M4OSA_fileCommonClose(M4OSA_UInt16 core_id,
                                M4OSA_Context context);

M4OSA_ERR M4OSA_fileCommonGetAttribute(M4OSA_Context context,
                                       M4OSA_FileAttribute* attribute);

M4OSA_ERR M4OSA_fileCommonGetURL(M4OSA_Context context,
                                 M4OSA_Char** url);

M4OSA_ERR M4OSA_fileCommonGetFilename(M4OSA_Char* url,
                                      M4OSA_Char** filename);

M4OSA_ERR M4OSA_fileCommonSeek(M4OSA_Context context,
                               M4OSA_FileSeekAccessMode seekMode,
                               M4OSA_FilePosition* position);

#ifdef UTF_CONVERSION
M4OSA_ERR M4OSA_ToUTF8_OSAL (M4OSA_Void   *pBufferIn,
                             M4OSA_UInt8  *pBufferOut,
                             M4OSA_UInt32 *bufferOutSize);
#endif /*UTF_CONVERSION*/


#endif /*M4OSA_FILECOMMON_PRIV_H*/