1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/**
17 ************************************************************************
18 * @file         M4OSA_FileWriter.h
19 * @ingroup      OSAL
20 * @brief        File writer
21 * @note         This file declares functions and types to write in a file.
22 ************************************************************************
23*/
24
25
26#ifndef M4OSA_FILEWRITER_H
27#define M4OSA_FILEWRITER_H
28
29#include "M4OSA_Types.h"
30#include "M4OSA_Error.h"
31#include "M4OSA_FileCommon.h"
32#include "M4OSA_Memory.h"
33
34
35/** This enum defines the option ID to be used in M4OSA_FileWriteGetOption()
36and M4OSA_FileWriteSetOption()*/
37typedef enum
38{
39   /** Get the file URL, provided by the M4OSA_FileWriteOpen (M4OSA_Char*)*/
40   M4OSA_kFileWriteGetURL
41               = M4OSA_OPTION_ID_CREATE(M4_READ, M4OSA_FILE_WRITER, 0x01),
42
43   /** Get the file attributes (M4OSA_FileAttribute*)*/
44   M4OSA_kFileWriteGetAttribute
45               = M4OSA_OPTION_ID_CREATE(M4_READ, M4OSA_FILE_WRITER, 0x02),
46
47   /** Get the reader context for read & write file. (M4OSA_Context*)*/
48   M4OSA_kFileWriteGetReaderContext
49               = M4OSA_OPTION_ID_CREATE(M4_READ, M4OSA_FILE_WRITER, 0x03),
50
51   M4OSA_kFileWriteGetFilePosition
52               = M4OSA_OPTION_ID_CREATE(M4_READ, M4OSA_FILE_WRITER, 0x04),
53
54   M4OSA_kFileWriteGetFileSize
55               = M4OSA_OPTION_ID_CREATE(M4_READ, M4OSA_FILE_WRITER, 0x05),
56
57
58    M4OSA_kFileWriteLockMode
59               = M4OSA_OPTION_ID_CREATE(M4_READWRITE, M4OSA_FILE_WRITER, 0x06),
60
61
62   /** Check lock of file */
63   M4OSA_kFileWriteDescMode
64                = M4OSA_OPTION_ID_CREATE(M4_READWRITE, M4OSA_FILE_WRITER, 0x07)
65} M4OSA_FileWriteOptionID;
66
67
68/** This structure stores the set of the function pointer to access to a file
69    in read mode*/
70typedef struct
71{
72   M4OSA_ERR (*openWrite)   (M4OSA_Context* context,
73                             M4OSA_Void* fileDescriptor,
74                             M4OSA_UInt32 fileModeAccess);
75
76   M4OSA_ERR (*writeData)   (M4OSA_Context context,
77                             M4OSA_MemAddr8 data,
78                             M4OSA_UInt32 size);
79
80   M4OSA_ERR (*seek)        (M4OSA_Context context,
81                             M4OSA_FileSeekAccessMode seekMode,
82                             M4OSA_FilePosition* position);
83
84   M4OSA_ERR (*Flush)       (M4OSA_Context context);
85   M4OSA_ERR (*closeWrite)  (M4OSA_Context context);
86   M4OSA_ERR (*setOption)   (M4OSA_Context context,
87                             M4OSA_OptionID optionID,
88                             M4OSA_DataOption optionValue);
89
90   M4OSA_ERR (*getOption)   (M4OSA_Context context,
91                             M4OSA_OptionID optionID,
92                             M4OSA_DataOption* optionValue);
93} M4OSA_FileWriterPointer;
94
95#ifdef __cplusplus
96extern "C"
97{
98#endif
99
100M4OSAL_FILE_EXPORT_TYPE M4OSA_ERR M4OSA_fileWriteOpen       (M4OSA_Context* context,
101                                     M4OSA_Void* fileDescriptor,
102                                     M4OSA_UInt32 fileModeAccess);
103
104M4OSAL_FILE_EXPORT_TYPE M4OSA_ERR M4OSA_fileWriteData       (M4OSA_Context context,
105                                     M4OSA_MemAddr8 data,
106                                     M4OSA_UInt32 size);
107
108/* Pierre Lebeaupin 2008/04/29: WARNING! the feature of file*Seek which returns
109the position in the file (from the beginning) after the seek in the "position"
110pointer has been found to be unreliably (or sometimes not at all) implemented
111in some OSALs, so relying on it is strongly discouraged, unless you really want
112to have a pizza evening. */
113M4OSAL_FILE_EXPORT_TYPE M4OSA_ERR M4OSA_fileWriteSeek       (M4OSA_Context context,
114                                     M4OSA_FileSeekAccessMode seekMode,
115                                     M4OSA_FilePosition* position);
116
117M4OSAL_FILE_EXPORT_TYPE M4OSA_ERR M4OSA_fileWriteClose      (M4OSA_Context context);
118
119M4OSAL_FILE_EXPORT_TYPE M4OSA_ERR M4OSA_fileWriteFlush      (M4OSA_Context context);
120
121M4OSAL_FILE_EXPORT_TYPE M4OSA_ERR M4OSA_fileWriteGetOption  (M4OSA_Context context,
122                                     M4OSA_OptionID optionID,
123                                     M4OSA_DataOption* optionValue);
124
125M4OSAL_FILE_EXPORT_TYPE M4OSA_ERR M4OSA_fileWriteSetOption  (M4OSA_Context context,
126                                     M4OSA_OptionID optionID,
127                                     M4OSA_DataOption optionValue);
128
129#ifdef __cplusplus
130}
131#endif
132
133
134#endif /*M4OSA_FILEWRITER_H*/
135
136