1*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
2*f81fb7c4SAndroid Build Coastguard Worker *
3*f81fb7c4SAndroid Build Coastguard Worker * File:
4*f81fb7c4SAndroid Build Coastguard Worker * eas_host.c
5*f81fb7c4SAndroid Build Coastguard Worker *
6*f81fb7c4SAndroid Build Coastguard Worker * Contents and purpose:
7*f81fb7c4SAndroid Build Coastguard Worker * This file contains the host wrapper functions for stdio, stdlib, etc.
8*f81fb7c4SAndroid Build Coastguard Worker * This is a sample version that wraps the standard library functions.
9*f81fb7c4SAndroid Build Coastguard Worker * Modify this file to suit the needs of your particular system.
10*f81fb7c4SAndroid Build Coastguard Worker *
11*f81fb7c4SAndroid Build Coastguard Worker * EAS_MAX_FILE_HANDLES sets the maximum number of MIDI streams within
12*f81fb7c4SAndroid Build Coastguard Worker * a MIDI type 1 file that can be played. To maintain efficiency, data
13*f81fb7c4SAndroid Build Coastguard Worker * is buffered locally when byte access is used (EAS_HWGetByte). The
14*f81fb7c4SAndroid Build Coastguard Worker * size of the buffer is set by EAS_FILE_BUFFER_SIZE.
15*f81fb7c4SAndroid Build Coastguard Worker *
16*f81fb7c4SAndroid Build Coastguard Worker * EAS_HW_FILE is a structure to support local file buffering. It
17*f81fb7c4SAndroid Build Coastguard Worker * comprises the OS File handle, some data related to the local file
18*f81fb7c4SAndroid Build Coastguard Worker * buffer, the position of the next byte of data to be read, the dup
19*f81fb7c4SAndroid Build Coastguard Worker * flag which when set, indicates that the handle has been duplicated,
20*f81fb7c4SAndroid Build Coastguard Worker * and the data buffer. Since the data buffer is only used for byte
21*f81fb7c4SAndroid Build Coastguard Worker * access, it does not need to be large.
22*f81fb7c4SAndroid Build Coastguard Worker *
23*f81fb7c4SAndroid Build Coastguard Worker * If the file system supports duplicate file handles and buffering,
24*f81fb7c4SAndroid Build Coastguard Worker * this entire subsystem can be replaced with direct calls to the
25*f81fb7c4SAndroid Build Coastguard Worker * native file I/O routines.
26*f81fb7c4SAndroid Build Coastguard Worker *
27*f81fb7c4SAndroid Build Coastguard Worker * If the system has enough memory to support reading the entire file
28*f81fb7c4SAndroid Build Coastguard Worker * into memory, it will be much more efficient to do so on the call to
29*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWOpenFile and then close the file. Simply substitute a memory
30*f81fb7c4SAndroid Build Coastguard Worker * pointer for the FILE* pointer. Calls to EAS_HW_DupHandle will work
31*f81fb7c4SAndroid Build Coastguard Worker * as they do in this version. In the call to EAS_HWCloseFile, instead
32*f81fb7c4SAndroid Build Coastguard Worker * of calling fclose, free the memory containing the file data.
33*f81fb7c4SAndroid Build Coastguard Worker *
34*f81fb7c4SAndroid Build Coastguard Worker * Copyright 2005 Sonic Network Inc.
35*f81fb7c4SAndroid Build Coastguard Worker
36*f81fb7c4SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
37*f81fb7c4SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
38*f81fb7c4SAndroid Build Coastguard Worker * You may obtain a copy of the License at
39*f81fb7c4SAndroid Build Coastguard Worker *
40*f81fb7c4SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
41*f81fb7c4SAndroid Build Coastguard Worker *
42*f81fb7c4SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
43*f81fb7c4SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
44*f81fb7c4SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
45*f81fb7c4SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
46*f81fb7c4SAndroid Build Coastguard Worker * limitations under the License.
47*f81fb7c4SAndroid Build Coastguard Worker *
48*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
49*f81fb7c4SAndroid Build Coastguard Worker * Revision Control:
50*f81fb7c4SAndroid Build Coastguard Worker * $Revision: 853 $
51*f81fb7c4SAndroid Build Coastguard Worker * $Date: 2007-09-05 09:54:17 -0700 (Wed, 05 Sep 2007) $
52*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
53*f81fb7c4SAndroid Build Coastguard Worker */
54*f81fb7c4SAndroid Build Coastguard Worker
55*f81fb7c4SAndroid Build Coastguard Worker #ifdef _lint
56*f81fb7c4SAndroid Build Coastguard Worker #include "lint_stdlib.h"
57*f81fb7c4SAndroid Build Coastguard Worker #else
58*f81fb7c4SAndroid Build Coastguard Worker #include <stdio.h>
59*f81fb7c4SAndroid Build Coastguard Worker #include <stdlib.h>
60*f81fb7c4SAndroid Build Coastguard Worker #include <string.h>
61*f81fb7c4SAndroid Build Coastguard Worker #endif
62*f81fb7c4SAndroid Build Coastguard Worker
63*f81fb7c4SAndroid Build Coastguard Worker #include "eas_host.h"
64*f81fb7c4SAndroid Build Coastguard Worker
65*f81fb7c4SAndroid Build Coastguard Worker // #define DEBUG_FILE_IO
66*f81fb7c4SAndroid Build Coastguard Worker
67*f81fb7c4SAndroid Build Coastguard Worker /* Only for debugging LED, vibrate, and backlight functions */
68*f81fb7c4SAndroid Build Coastguard Worker #include "eas_report.h"
69*f81fb7c4SAndroid Build Coastguard Worker
70*f81fb7c4SAndroid Build Coastguard Worker #ifndef EAS_MAX_FILE_HANDLES
71*f81fb7c4SAndroid Build Coastguard Worker #define EAS_MAX_FILE_HANDLES 32
72*f81fb7c4SAndroid Build Coastguard Worker #endif
73*f81fb7c4SAndroid Build Coastguard Worker
74*f81fb7c4SAndroid Build Coastguard Worker #ifndef EAS_FILE_BUFFER_SIZE
75*f81fb7c4SAndroid Build Coastguard Worker #define EAS_FILE_BUFFER_SIZE 32
76*f81fb7c4SAndroid Build Coastguard Worker #endif
77*f81fb7c4SAndroid Build Coastguard Worker
78*f81fb7c4SAndroid Build Coastguard Worker /*
79*f81fb7c4SAndroid Build Coastguard Worker * this structure and the related function are here
80*f81fb7c4SAndroid Build Coastguard Worker * to support the ability to create duplicate handles
81*f81fb7c4SAndroid Build Coastguard Worker * and buffering into a single file. If the OS supports
82*f81fb7c4SAndroid Build Coastguard Worker * duplicate file handles natively, this code can be
83*f81fb7c4SAndroid Build Coastguard Worker * stripped to eliminate double-buffering.
84*f81fb7c4SAndroid Build Coastguard Worker */
85*f81fb7c4SAndroid Build Coastguard Worker typedef struct eas_hw_file_tag
86*f81fb7c4SAndroid Build Coastguard Worker {
87*f81fb7c4SAndroid Build Coastguard Worker FILE *pFile;
88*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 bytesInBuffer;
89*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 readIndex;
90*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 filePos;
91*f81fb7c4SAndroid Build Coastguard Worker EAS_BOOL dup;
92*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 buffer[EAS_FILE_BUFFER_SIZE];
93*f81fb7c4SAndroid Build Coastguard Worker } EAS_HW_FILE;
94*f81fb7c4SAndroid Build Coastguard Worker
95*f81fb7c4SAndroid Build Coastguard Worker typedef struct eas_hw_inst_data_tag
96*f81fb7c4SAndroid Build Coastguard Worker {
97*f81fb7c4SAndroid Build Coastguard Worker EAS_HW_FILE files[EAS_MAX_FILE_HANDLES];
98*f81fb7c4SAndroid Build Coastguard Worker } EAS_HW_INST_DATA;
99*f81fb7c4SAndroid Build Coastguard Worker
100*f81fb7c4SAndroid Build Coastguard Worker /* local memory for files and streams */
101*f81fb7c4SAndroid Build Coastguard Worker #ifdef _STATIC_MEMORY
102*f81fb7c4SAndroid Build Coastguard Worker EAS_HW_INST_DATA fileData;
103*f81fb7c4SAndroid Build Coastguard Worker #endif
104*f81fb7c4SAndroid Build Coastguard Worker
105*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
106*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWInit
107*f81fb7c4SAndroid Build Coastguard Worker *
108*f81fb7c4SAndroid Build Coastguard Worker * Initialize host wrapper interface
109*f81fb7c4SAndroid Build Coastguard Worker *
110*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
111*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWInit(EAS_HW_DATA_HANDLE * pHWInstData)112*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWInit (EAS_HW_DATA_HANDLE *pHWInstData)
113*f81fb7c4SAndroid Build Coastguard Worker {
114*f81fb7c4SAndroid Build Coastguard Worker
115*f81fb7c4SAndroid Build Coastguard Worker /* need to track file opens for duplicate handles */
116*f81fb7c4SAndroid Build Coastguard Worker #ifndef _STATIC_MEMORY
117*f81fb7c4SAndroid Build Coastguard Worker *pHWInstData = malloc(sizeof(EAS_HW_INST_DATA));
118*f81fb7c4SAndroid Build Coastguard Worker if (!(*pHWInstData))
119*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_MALLOC_FAILED;
120*f81fb7c4SAndroid Build Coastguard Worker #else
121*f81fb7c4SAndroid Build Coastguard Worker *pHWInstData = &fileData;
122*f81fb7c4SAndroid Build Coastguard Worker #endif
123*f81fb7c4SAndroid Build Coastguard Worker EAS_HWMemSet(*pHWInstData, 0, sizeof(EAS_HW_INST_DATA));
124*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
125*f81fb7c4SAndroid Build Coastguard Worker }
126*f81fb7c4SAndroid Build Coastguard Worker
127*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
128*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWShutdown
129*f81fb7c4SAndroid Build Coastguard Worker *
130*f81fb7c4SAndroid Build Coastguard Worker * Shut down host wrapper interface
131*f81fb7c4SAndroid Build Coastguard Worker *
132*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
133*f81fb7c4SAndroid Build Coastguard Worker */
134*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWShutdown(EAS_HW_DATA_HANDLE hwInstData)135*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWShutdown (EAS_HW_DATA_HANDLE hwInstData)
136*f81fb7c4SAndroid Build Coastguard Worker {
137*f81fb7c4SAndroid Build Coastguard Worker
138*f81fb7c4SAndroid Build Coastguard Worker #ifndef _STATIC_MEMORY
139*f81fb7c4SAndroid Build Coastguard Worker free(hwInstData);
140*f81fb7c4SAndroid Build Coastguard Worker #endif
141*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
142*f81fb7c4SAndroid Build Coastguard Worker }
143*f81fb7c4SAndroid Build Coastguard Worker
144*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
145*f81fb7c4SAndroid Build Coastguard Worker *
146*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWMalloc
147*f81fb7c4SAndroid Build Coastguard Worker *
148*f81fb7c4SAndroid Build Coastguard Worker * Allocates dynamic memory
149*f81fb7c4SAndroid Build Coastguard Worker *
150*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
151*f81fb7c4SAndroid Build Coastguard Worker */
152*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
153*f81fb7c4SAndroid Build Coastguard Worker #ifdef _STATIC_MEMORY
154*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, size) not used in static memory model */
155*f81fb7c4SAndroid Build Coastguard Worker #endif
EAS_HWMalloc(EAS_HW_DATA_HANDLE hwInstData,EAS_I32 size)156*f81fb7c4SAndroid Build Coastguard Worker void *EAS_HWMalloc (EAS_HW_DATA_HANDLE hwInstData, EAS_I32 size)
157*f81fb7c4SAndroid Build Coastguard Worker {
158*f81fb7c4SAndroid Build Coastguard Worker #ifdef _STATIC_MEMORY
159*f81fb7c4SAndroid Build Coastguard Worker return NULL;
160*f81fb7c4SAndroid Build Coastguard Worker #else
161*f81fb7c4SAndroid Build Coastguard Worker return malloc((EAS_U32)size);
162*f81fb7c4SAndroid Build Coastguard Worker #endif
163*f81fb7c4SAndroid Build Coastguard Worker }
164*f81fb7c4SAndroid Build Coastguard Worker
165*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
166*f81fb7c4SAndroid Build Coastguard Worker *
167*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWFree
168*f81fb7c4SAndroid Build Coastguard Worker *
169*f81fb7c4SAndroid Build Coastguard Worker * Frees dynamic memory
170*f81fb7c4SAndroid Build Coastguard Worker *
171*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
172*f81fb7c4SAndroid Build Coastguard Worker */
173*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
174*f81fb7c4SAndroid Build Coastguard Worker #ifdef _STATIC_MEMORY
175*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, p) not used in static memory model */
176*f81fb7c4SAndroid Build Coastguard Worker #endif
EAS_HWFree(EAS_HW_DATA_HANDLE hwInstData,void * p)177*f81fb7c4SAndroid Build Coastguard Worker void EAS_HWFree(EAS_HW_DATA_HANDLE hwInstData, void *p)
178*f81fb7c4SAndroid Build Coastguard Worker {
179*f81fb7c4SAndroid Build Coastguard Worker #ifndef _STATIC_MEMORY
180*f81fb7c4SAndroid Build Coastguard Worker free(p);
181*f81fb7c4SAndroid Build Coastguard Worker #endif
182*f81fb7c4SAndroid Build Coastguard Worker }
183*f81fb7c4SAndroid Build Coastguard Worker
184*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
185*f81fb7c4SAndroid Build Coastguard Worker *
186*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWMemCpy
187*f81fb7c4SAndroid Build Coastguard Worker *
188*f81fb7c4SAndroid Build Coastguard Worker * Copy memory wrapper
189*f81fb7c4SAndroid Build Coastguard Worker *
190*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
191*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWMemCpy(void * dest,const void * src,EAS_I32 amount)192*f81fb7c4SAndroid Build Coastguard Worker void *EAS_HWMemCpy (void *dest, const void *src, EAS_I32 amount)
193*f81fb7c4SAndroid Build Coastguard Worker {
194*f81fb7c4SAndroid Build Coastguard Worker return memcpy(dest,src,(size_t) amount);
195*f81fb7c4SAndroid Build Coastguard Worker }
196*f81fb7c4SAndroid Build Coastguard Worker
197*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
198*f81fb7c4SAndroid Build Coastguard Worker *
199*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWMemSet
200*f81fb7c4SAndroid Build Coastguard Worker *
201*f81fb7c4SAndroid Build Coastguard Worker * Set memory wrapper
202*f81fb7c4SAndroid Build Coastguard Worker *
203*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
204*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWMemSet(void * dest,int val,EAS_I32 amount)205*f81fb7c4SAndroid Build Coastguard Worker void *EAS_HWMemSet (void *dest, int val, EAS_I32 amount)
206*f81fb7c4SAndroid Build Coastguard Worker {
207*f81fb7c4SAndroid Build Coastguard Worker return memset(dest,val,(size_t) amount);
208*f81fb7c4SAndroid Build Coastguard Worker }
209*f81fb7c4SAndroid Build Coastguard Worker
210*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
211*f81fb7c4SAndroid Build Coastguard Worker *
212*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWMemCmp
213*f81fb7c4SAndroid Build Coastguard Worker *
214*f81fb7c4SAndroid Build Coastguard Worker * Compare memory wrapper
215*f81fb7c4SAndroid Build Coastguard Worker *
216*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
217*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWMemCmp(const void * s1,const void * s2,EAS_I32 amount)218*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 EAS_HWMemCmp (const void *s1, const void *s2, EAS_I32 amount)
219*f81fb7c4SAndroid Build Coastguard Worker {
220*f81fb7c4SAndroid Build Coastguard Worker return (EAS_I32) memcmp(s1, s2, (size_t) amount);
221*f81fb7c4SAndroid Build Coastguard Worker }
222*f81fb7c4SAndroid Build Coastguard Worker
223*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
224*f81fb7c4SAndroid Build Coastguard Worker *
225*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWOpenFile
226*f81fb7c4SAndroid Build Coastguard Worker *
227*f81fb7c4SAndroid Build Coastguard Worker * Open a file for read or write
228*f81fb7c4SAndroid Build Coastguard Worker *
229*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
230*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWOpenFile(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_LOCATOR locator,EAS_FILE_HANDLE * pFile,EAS_FILE_MODE mode)231*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWOpenFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_LOCATOR locator, EAS_FILE_HANDLE *pFile, EAS_FILE_MODE mode)
232*f81fb7c4SAndroid Build Coastguard Worker {
233*f81fb7c4SAndroid Build Coastguard Worker EAS_HW_FILE *file;
234*f81fb7c4SAndroid Build Coastguard Worker int i;
235*f81fb7c4SAndroid Build Coastguard Worker
236*f81fb7c4SAndroid Build Coastguard Worker /* set return value to NULL */
237*f81fb7c4SAndroid Build Coastguard Worker *pFile = NULL;
238*f81fb7c4SAndroid Build Coastguard Worker
239*f81fb7c4SAndroid Build Coastguard Worker /* only support read mode at this time */
240*f81fb7c4SAndroid Build Coastguard Worker if (mode != EAS_FILE_READ)
241*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_FILE_MODE;
242*f81fb7c4SAndroid Build Coastguard Worker
243*f81fb7c4SAndroid Build Coastguard Worker /* find an empty entry in the file table */
244*f81fb7c4SAndroid Build Coastguard Worker file = hwInstData->files;
245*f81fb7c4SAndroid Build Coastguard Worker for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
246*f81fb7c4SAndroid Build Coastguard Worker {
247*f81fb7c4SAndroid Build Coastguard Worker /* is this slot being used? */
248*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
249*f81fb7c4SAndroid Build Coastguard Worker {
250*f81fb7c4SAndroid Build Coastguard Worker /* open the file */
251*f81fb7c4SAndroid Build Coastguard Worker if (locator->path)
252*f81fb7c4SAndroid Build Coastguard Worker file->pFile = fopen((const char*) locator->path, "rb");
253*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
254*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FILE_OPEN_FAILED;
255*f81fb7c4SAndroid Build Coastguard Worker
256*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_FILE_IO
257*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWOpenFile: Open file %d\n", i);
258*f81fb7c4SAndroid Build Coastguard Worker #endif
259*f81fb7c4SAndroid Build Coastguard Worker
260*f81fb7c4SAndroid Build Coastguard Worker /* initialize some values */
261*f81fb7c4SAndroid Build Coastguard Worker file->bytesInBuffer = 0;
262*f81fb7c4SAndroid Build Coastguard Worker file->readIndex = 0;
263*f81fb7c4SAndroid Build Coastguard Worker file->filePos = 0;
264*f81fb7c4SAndroid Build Coastguard Worker file->dup = EAS_FALSE;
265*f81fb7c4SAndroid Build Coastguard Worker
266*f81fb7c4SAndroid Build Coastguard Worker *pFile = file;
267*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
268*f81fb7c4SAndroid Build Coastguard Worker }
269*f81fb7c4SAndroid Build Coastguard Worker file++;
270*f81fb7c4SAndroid Build Coastguard Worker }
271*f81fb7c4SAndroid Build Coastguard Worker
272*f81fb7c4SAndroid Build Coastguard Worker /* too many open files */
273*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_MAX_FILES_OPEN;
274*f81fb7c4SAndroid Build Coastguard Worker }
275*f81fb7c4SAndroid Build Coastguard Worker
276*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
277*f81fb7c4SAndroid Build Coastguard Worker *
278*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWFillBuffer
279*f81fb7c4SAndroid Build Coastguard Worker *
280*f81fb7c4SAndroid Build Coastguard Worker * Fill buffer from file
281*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
282*f81fb7c4SAndroid Build Coastguard Worker */
283*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWFillBuffer(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file)284*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWFillBuffer (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file)
285*f81fb7c4SAndroid Build Coastguard Worker {
286*f81fb7c4SAndroid Build Coastguard Worker /* reposition the file pointer */
287*f81fb7c4SAndroid Build Coastguard Worker if (fseek(file->pFile, file->filePos, SEEK_SET) != 0)
288*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FILE_SEEK;
289*f81fb7c4SAndroid Build Coastguard Worker
290*f81fb7c4SAndroid Build Coastguard Worker /* read some data from the file */
291*f81fb7c4SAndroid Build Coastguard Worker file->bytesInBuffer = (EAS_I32) fread(file->buffer, 1, EAS_FILE_BUFFER_SIZE, file->pFile);
292*f81fb7c4SAndroid Build Coastguard Worker file->readIndex = 0;
293*f81fb7c4SAndroid Build Coastguard Worker if (file->bytesInBuffer == 0)
294*f81fb7c4SAndroid Build Coastguard Worker return EAS_EOF;
295*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
296*f81fb7c4SAndroid Build Coastguard Worker }
297*f81fb7c4SAndroid Build Coastguard Worker
298*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
299*f81fb7c4SAndroid Build Coastguard Worker *
300*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWReadFile
301*f81fb7c4SAndroid Build Coastguard Worker *
302*f81fb7c4SAndroid Build Coastguard Worker * Read data from a file
303*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
304*f81fb7c4SAndroid Build Coastguard Worker */
305*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWReadFile(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,void * pBuffer,EAS_I32 n,EAS_I32 * pBytesRead)306*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWReadFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *pBuffer, EAS_I32 n, EAS_I32 *pBytesRead)
307*f81fb7c4SAndroid Build Coastguard Worker {
308*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
309*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 temp;
310*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 *p = pBuffer;
311*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 bytesLeft = n;
312*f81fb7c4SAndroid Build Coastguard Worker
313*f81fb7c4SAndroid Build Coastguard Worker *pBytesRead = 0;
314*f81fb7c4SAndroid Build Coastguard Worker
315*f81fb7c4SAndroid Build Coastguard Worker /* check handle integrity */
316*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
317*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_HANDLE;
318*f81fb7c4SAndroid Build Coastguard Worker
319*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_FILE_IO
320*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWReadFile: Reading %d bytes from position %d\n", n, file->filePos);
321*f81fb7c4SAndroid Build Coastguard Worker #endif
322*f81fb7c4SAndroid Build Coastguard Worker
323*f81fb7c4SAndroid Build Coastguard Worker /* try to fulfill request from buffer */
324*f81fb7c4SAndroid Build Coastguard Worker for (;bytesLeft > 0;)
325*f81fb7c4SAndroid Build Coastguard Worker {
326*f81fb7c4SAndroid Build Coastguard Worker /* how many bytes can we get from buffer? */
327*f81fb7c4SAndroid Build Coastguard Worker temp = file->bytesInBuffer - file->readIndex;
328*f81fb7c4SAndroid Build Coastguard Worker if (temp > bytesLeft)
329*f81fb7c4SAndroid Build Coastguard Worker temp = bytesLeft;
330*f81fb7c4SAndroid Build Coastguard Worker
331*f81fb7c4SAndroid Build Coastguard Worker /* copy data from buffer */
332*f81fb7c4SAndroid Build Coastguard Worker EAS_HWMemCpy(p, &file->buffer[file->readIndex], temp);
333*f81fb7c4SAndroid Build Coastguard Worker *pBytesRead += temp;
334*f81fb7c4SAndroid Build Coastguard Worker file->readIndex += temp;
335*f81fb7c4SAndroid Build Coastguard Worker file->filePos += temp;
336*f81fb7c4SAndroid Build Coastguard Worker bytesLeft -= temp;
337*f81fb7c4SAndroid Build Coastguard Worker p += temp;
338*f81fb7c4SAndroid Build Coastguard Worker
339*f81fb7c4SAndroid Build Coastguard Worker /* don't refill buffer if request is bigger than buffer */
340*f81fb7c4SAndroid Build Coastguard Worker if ((bytesLeft == 0) || (bytesLeft >= EAS_FILE_BUFFER_SIZE))
341*f81fb7c4SAndroid Build Coastguard Worker break;
342*f81fb7c4SAndroid Build Coastguard Worker
343*f81fb7c4SAndroid Build Coastguard Worker /* refill buffer */
344*f81fb7c4SAndroid Build Coastguard Worker if ((result = EAS_HWFillBuffer(hwInstData, file)) != EAS_SUCCESS)
345*f81fb7c4SAndroid Build Coastguard Worker return result;
346*f81fb7c4SAndroid Build Coastguard Worker }
347*f81fb7c4SAndroid Build Coastguard Worker
348*f81fb7c4SAndroid Build Coastguard Worker /* more to read? do unbuffered read directly to target memory */
349*f81fb7c4SAndroid Build Coastguard Worker if (bytesLeft)
350*f81fb7c4SAndroid Build Coastguard Worker {
351*f81fb7c4SAndroid Build Coastguard Worker
352*f81fb7c4SAndroid Build Coastguard Worker /* position the file pointer */
353*f81fb7c4SAndroid Build Coastguard Worker if (fseek(file->pFile, file->filePos, SEEK_SET) != 0)
354*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FILE_SEEK;
355*f81fb7c4SAndroid Build Coastguard Worker
356*f81fb7c4SAndroid Build Coastguard Worker /* read data in the buffer */
357*f81fb7c4SAndroid Build Coastguard Worker /*lint -e{826} lint doesn't like this with STATIC_MEMORY defined for some reason */
358*f81fb7c4SAndroid Build Coastguard Worker temp = (EAS_I32) fread(p, 1, (size_t) bytesLeft, file->pFile);
359*f81fb7c4SAndroid Build Coastguard Worker *pBytesRead += temp;
360*f81fb7c4SAndroid Build Coastguard Worker file->filePos += temp;
361*f81fb7c4SAndroid Build Coastguard Worker
362*f81fb7c4SAndroid Build Coastguard Worker /* reset buffer info */
363*f81fb7c4SAndroid Build Coastguard Worker file->bytesInBuffer = 0;
364*f81fb7c4SAndroid Build Coastguard Worker file->readIndex = 0;
365*f81fb7c4SAndroid Build Coastguard Worker }
366*f81fb7c4SAndroid Build Coastguard Worker
367*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_FILE_IO
368*f81fb7c4SAndroid Build Coastguard Worker {
369*f81fb7c4SAndroid Build Coastguard Worker #define BYTES_PER_LINE 16
370*f81fb7c4SAndroid Build Coastguard Worker char str[BYTES_PER_LINE * 3 + 1];
371*f81fb7c4SAndroid Build Coastguard Worker EAS_INT i;
372*f81fb7c4SAndroid Build Coastguard Worker for (i = 0; i < (n > BYTES_PER_LINE ? BYTES_PER_LINE : n) ; i ++)
373*f81fb7c4SAndroid Build Coastguard Worker sprintf(&str[i*3], "%02x ", ((EAS_U8*)pBuffer)[i]);
374*f81fb7c4SAndroid Build Coastguard Worker if (i)
375*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "%s\n", str);
376*f81fb7c4SAndroid Build Coastguard Worker }
377*f81fb7c4SAndroid Build Coastguard Worker #endif
378*f81fb7c4SAndroid Build Coastguard Worker
379*f81fb7c4SAndroid Build Coastguard Worker /* were n bytes read? */
380*f81fb7c4SAndroid Build Coastguard Worker if (*pBytesRead != n)
381*f81fb7c4SAndroid Build Coastguard Worker return EAS_EOF;
382*f81fb7c4SAndroid Build Coastguard Worker
383*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
384*f81fb7c4SAndroid Build Coastguard Worker }
385*f81fb7c4SAndroid Build Coastguard Worker
386*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
387*f81fb7c4SAndroid Build Coastguard Worker *
388*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWGetByte
389*f81fb7c4SAndroid Build Coastguard Worker *
390*f81fb7c4SAndroid Build Coastguard Worker * Read a byte from a file
391*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
392*f81fb7c4SAndroid Build Coastguard Worker */
393*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWGetByte(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,void * p)394*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWGetByte (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p)
395*f81fb7c4SAndroid Build Coastguard Worker {
396*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
397*f81fb7c4SAndroid Build Coastguard Worker
398*f81fb7c4SAndroid Build Coastguard Worker /* check handle integrity */
399*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
400*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_HANDLE;
401*f81fb7c4SAndroid Build Coastguard Worker
402*f81fb7c4SAndroid Build Coastguard Worker /* use local buffer - do we have any data? */
403*f81fb7c4SAndroid Build Coastguard Worker if (file->readIndex >= file->bytesInBuffer)
404*f81fb7c4SAndroid Build Coastguard Worker {
405*f81fb7c4SAndroid Build Coastguard Worker if ((result = EAS_HWFillBuffer(hwInstData, file)) != EAS_SUCCESS)
406*f81fb7c4SAndroid Build Coastguard Worker return result;
407*f81fb7c4SAndroid Build Coastguard Worker
408*f81fb7c4SAndroid Build Coastguard Worker /* if nothing to read, return EOF */
409*f81fb7c4SAndroid Build Coastguard Worker if (file->bytesInBuffer == 0)
410*f81fb7c4SAndroid Build Coastguard Worker return EAS_EOF;
411*f81fb7c4SAndroid Build Coastguard Worker }
412*f81fb7c4SAndroid Build Coastguard Worker
413*f81fb7c4SAndroid Build Coastguard Worker /* get a character from the buffer */
414*f81fb7c4SAndroid Build Coastguard Worker *((EAS_U8*) p) = file->buffer[file->readIndex++];
415*f81fb7c4SAndroid Build Coastguard Worker
416*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_FILE_IO
417*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetByte: Reading from position %d, byte = 0x%02x\n", file->filePos, *(EAS_U8*)p);
418*f81fb7c4SAndroid Build Coastguard Worker #endif
419*f81fb7c4SAndroid Build Coastguard Worker
420*f81fb7c4SAndroid Build Coastguard Worker file->filePos++;
421*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
422*f81fb7c4SAndroid Build Coastguard Worker }
423*f81fb7c4SAndroid Build Coastguard Worker
424*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
425*f81fb7c4SAndroid Build Coastguard Worker *
426*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWGetWord
427*f81fb7c4SAndroid Build Coastguard Worker *
428*f81fb7c4SAndroid Build Coastguard Worker * Read a 16-bit value from the file
429*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
430*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWGetWord(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,void * p,EAS_BOOL msbFirst)431*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWGetWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
432*f81fb7c4SAndroid Build Coastguard Worker {
433*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
434*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 count;
435*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 c[2];
436*f81fb7c4SAndroid Build Coastguard Worker
437*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_FILE_IO
438*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetWord: Reading 2 bytes from position %d\n", file->filePos);
439*f81fb7c4SAndroid Build Coastguard Worker #endif
440*f81fb7c4SAndroid Build Coastguard Worker
441*f81fb7c4SAndroid Build Coastguard Worker /* read 2 bytes from the file */
442*f81fb7c4SAndroid Build Coastguard Worker if ((result = EAS_HWReadFile(hwInstData, file, c, 2, &count)) != EAS_SUCCESS)
443*f81fb7c4SAndroid Build Coastguard Worker return result;
444*f81fb7c4SAndroid Build Coastguard Worker
445*f81fb7c4SAndroid Build Coastguard Worker /* order them as requested */
446*f81fb7c4SAndroid Build Coastguard Worker if (msbFirst)
447*f81fb7c4SAndroid Build Coastguard Worker *((EAS_U16*) p) = ((EAS_U16) c[0] << 8) | c[1];
448*f81fb7c4SAndroid Build Coastguard Worker else
449*f81fb7c4SAndroid Build Coastguard Worker *((EAS_U16*) p) = ((EAS_U16) c[1] << 8) | c[0];
450*f81fb7c4SAndroid Build Coastguard Worker
451*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
452*f81fb7c4SAndroid Build Coastguard Worker }
453*f81fb7c4SAndroid Build Coastguard Worker
454*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
455*f81fb7c4SAndroid Build Coastguard Worker *
456*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWGetDWord
457*f81fb7c4SAndroid Build Coastguard Worker *
458*f81fb7c4SAndroid Build Coastguard Worker * Read a 16-bit value from the file
459*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
460*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWGetDWord(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,void * p,EAS_BOOL msbFirst)461*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWGetDWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
462*f81fb7c4SAndroid Build Coastguard Worker {
463*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
464*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 count;
465*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 c[4];
466*f81fb7c4SAndroid Build Coastguard Worker
467*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_FILE_IO
468*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetDWord: Reading 4 bytes from position %d\n", file->filePos);
469*f81fb7c4SAndroid Build Coastguard Worker #endif
470*f81fb7c4SAndroid Build Coastguard Worker
471*f81fb7c4SAndroid Build Coastguard Worker /* read 4 bytes from the file */
472*f81fb7c4SAndroid Build Coastguard Worker if ((result = EAS_HWReadFile(hwInstData, file, c, 4, &count)) != EAS_SUCCESS)
473*f81fb7c4SAndroid Build Coastguard Worker return result;
474*f81fb7c4SAndroid Build Coastguard Worker
475*f81fb7c4SAndroid Build Coastguard Worker /* order them as requested */
476*f81fb7c4SAndroid Build Coastguard Worker if (msbFirst)
477*f81fb7c4SAndroid Build Coastguard Worker *((EAS_U32*) p) = ((EAS_U32) c[0] << 24) | ((EAS_U32) c[1] << 16) | ((EAS_U32) c[2] << 8) | c[3];
478*f81fb7c4SAndroid Build Coastguard Worker else
479*f81fb7c4SAndroid Build Coastguard Worker *((EAS_U32*) p) = ((EAS_U32) c[3] << 24) | ((EAS_U32) c[2] << 16) | ((EAS_U32) c[1] << 8) | c[0];
480*f81fb7c4SAndroid Build Coastguard Worker
481*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
482*f81fb7c4SAndroid Build Coastguard Worker }
483*f81fb7c4SAndroid Build Coastguard Worker
484*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
485*f81fb7c4SAndroid Build Coastguard Worker *
486*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWFilePos
487*f81fb7c4SAndroid Build Coastguard Worker *
488*f81fb7c4SAndroid Build Coastguard Worker * Returns the current location in the file
489*f81fb7c4SAndroid Build Coastguard Worker *
490*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
491*f81fb7c4SAndroid Build Coastguard Worker */
492*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWFilePos(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,EAS_I32 * pPosition)493*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWFilePos (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pPosition)
494*f81fb7c4SAndroid Build Coastguard Worker {
495*f81fb7c4SAndroid Build Coastguard Worker
496*f81fb7c4SAndroid Build Coastguard Worker /* check handle integrity */
497*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
498*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_HANDLE;
499*f81fb7c4SAndroid Build Coastguard Worker
500*f81fb7c4SAndroid Build Coastguard Worker *pPosition = file->filePos;
501*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
502*f81fb7c4SAndroid Build Coastguard Worker }
503*f81fb7c4SAndroid Build Coastguard Worker
504*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
505*f81fb7c4SAndroid Build Coastguard Worker *
506*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWFileSeek
507*f81fb7c4SAndroid Build Coastguard Worker *
508*f81fb7c4SAndroid Build Coastguard Worker * Seek to a specific location in the file
509*f81fb7c4SAndroid Build Coastguard Worker *
510*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
511*f81fb7c4SAndroid Build Coastguard Worker */
512*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWFileSeek(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,EAS_I32 position)513*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWFileSeek (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
514*f81fb7c4SAndroid Build Coastguard Worker {
515*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 newIndex;
516*f81fb7c4SAndroid Build Coastguard Worker
517*f81fb7c4SAndroid Build Coastguard Worker /* check handle integrity */
518*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
519*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_HANDLE;
520*f81fb7c4SAndroid Build Coastguard Worker
521*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_FILE_IO
522*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWFileSeek: Seeking to new position %d\n", file->filePos);
523*f81fb7c4SAndroid Build Coastguard Worker #endif
524*f81fb7c4SAndroid Build Coastguard Worker
525*f81fb7c4SAndroid Build Coastguard Worker /* is new position in current buffer? */
526*f81fb7c4SAndroid Build Coastguard Worker newIndex = position - file->filePos + file->readIndex;
527*f81fb7c4SAndroid Build Coastguard Worker if ((newIndex >= 0) && (newIndex < file->bytesInBuffer))
528*f81fb7c4SAndroid Build Coastguard Worker {
529*f81fb7c4SAndroid Build Coastguard Worker file->readIndex = newIndex;
530*f81fb7c4SAndroid Build Coastguard Worker file->filePos = position;
531*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
532*f81fb7c4SAndroid Build Coastguard Worker }
533*f81fb7c4SAndroid Build Coastguard Worker
534*f81fb7c4SAndroid Build Coastguard Worker /* save new position and reset buffer info so EAS_HWGetByte doesn't fail */
535*f81fb7c4SAndroid Build Coastguard Worker file->filePos = position;
536*f81fb7c4SAndroid Build Coastguard Worker file->bytesInBuffer = 0;
537*f81fb7c4SAndroid Build Coastguard Worker file->readIndex = 0;
538*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
539*f81fb7c4SAndroid Build Coastguard Worker }
540*f81fb7c4SAndroid Build Coastguard Worker
541*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
542*f81fb7c4SAndroid Build Coastguard Worker *
543*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWFileSeekOfs
544*f81fb7c4SAndroid Build Coastguard Worker *
545*f81fb7c4SAndroid Build Coastguard Worker * Seek forward or back relative to the current position
546*f81fb7c4SAndroid Build Coastguard Worker *
547*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
548*f81fb7c4SAndroid Build Coastguard Worker */
549*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWFileSeekOfs(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,EAS_I32 position)550*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWFileSeekOfs (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
551*f81fb7c4SAndroid Build Coastguard Worker {
552*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 temp;
553*f81fb7c4SAndroid Build Coastguard Worker
554*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_FILE_IO
555*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWFileSeekOfs: Seeking to new position %d\n", file->filePos + position);
556*f81fb7c4SAndroid Build Coastguard Worker #endif
557*f81fb7c4SAndroid Build Coastguard Worker
558*f81fb7c4SAndroid Build Coastguard Worker /* check handle integrity */
559*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
560*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_HANDLE;
561*f81fb7c4SAndroid Build Coastguard Worker
562*f81fb7c4SAndroid Build Coastguard Worker /* is new position in current buffer? */
563*f81fb7c4SAndroid Build Coastguard Worker temp = position + file->readIndex;
564*f81fb7c4SAndroid Build Coastguard Worker if ((temp >= 0) && (temp < file->bytesInBuffer))
565*f81fb7c4SAndroid Build Coastguard Worker {
566*f81fb7c4SAndroid Build Coastguard Worker file->readIndex = temp;
567*f81fb7c4SAndroid Build Coastguard Worker file->filePos += position;
568*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
569*f81fb7c4SAndroid Build Coastguard Worker }
570*f81fb7c4SAndroid Build Coastguard Worker
571*f81fb7c4SAndroid Build Coastguard Worker /* save new position and reset buffer info so EAS_HWGetByte doesn't fail */
572*f81fb7c4SAndroid Build Coastguard Worker file->filePos += position;
573*f81fb7c4SAndroid Build Coastguard Worker file->bytesInBuffer = 0;
574*f81fb7c4SAndroid Build Coastguard Worker file->readIndex = 0;
575*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
576*f81fb7c4SAndroid Build Coastguard Worker }
577*f81fb7c4SAndroid Build Coastguard Worker
578*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
579*f81fb7c4SAndroid Build Coastguard Worker *
580*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWFileLength
581*f81fb7c4SAndroid Build Coastguard Worker *
582*f81fb7c4SAndroid Build Coastguard Worker * Return the file length
583*f81fb7c4SAndroid Build Coastguard Worker *
584*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
585*f81fb7c4SAndroid Build Coastguard Worker */
586*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWFileLength(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,EAS_I32 * pLength)587*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWFileLength (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pLength)
588*f81fb7c4SAndroid Build Coastguard Worker {
589*f81fb7c4SAndroid Build Coastguard Worker long pos;
590*f81fb7c4SAndroid Build Coastguard Worker
591*f81fb7c4SAndroid Build Coastguard Worker /* check handle integrity */
592*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
593*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_HANDLE;
594*f81fb7c4SAndroid Build Coastguard Worker
595*f81fb7c4SAndroid Build Coastguard Worker if ((pos = ftell(file->pFile)) == -1L)
596*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FILE_LENGTH;
597*f81fb7c4SAndroid Build Coastguard Worker if (fseek(file->pFile, 0L, SEEK_END) != 0)
598*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FILE_LENGTH;
599*f81fb7c4SAndroid Build Coastguard Worker if ((*pLength = ftell(file->pFile)) == -1L)
600*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FILE_LENGTH;
601*f81fb7c4SAndroid Build Coastguard Worker if (fseek(file->pFile, pos, SEEK_SET) != 0)
602*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FILE_LENGTH;
603*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
604*f81fb7c4SAndroid Build Coastguard Worker }
605*f81fb7c4SAndroid Build Coastguard Worker
606*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
607*f81fb7c4SAndroid Build Coastguard Worker *
608*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWDupHandle
609*f81fb7c4SAndroid Build Coastguard Worker *
610*f81fb7c4SAndroid Build Coastguard Worker * Duplicate a file handle
611*f81fb7c4SAndroid Build Coastguard Worker *
612*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
613*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWDupHandle(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file,EAS_FILE_HANDLE * pDupFile)614*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWDupHandle (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_FILE_HANDLE* pDupFile)
615*f81fb7c4SAndroid Build Coastguard Worker {
616*f81fb7c4SAndroid Build Coastguard Worker EAS_HW_FILE *dupfile;
617*f81fb7c4SAndroid Build Coastguard Worker int i;
618*f81fb7c4SAndroid Build Coastguard Worker
619*f81fb7c4SAndroid Build Coastguard Worker /* check handle integrity */
620*f81fb7c4SAndroid Build Coastguard Worker *pDupFile = NULL;
621*f81fb7c4SAndroid Build Coastguard Worker if (file->pFile == NULL)
622*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_HANDLE;
623*f81fb7c4SAndroid Build Coastguard Worker
624*f81fb7c4SAndroid Build Coastguard Worker /* find an empty entry in the file table */
625*f81fb7c4SAndroid Build Coastguard Worker dupfile = hwInstData->files;
626*f81fb7c4SAndroid Build Coastguard Worker for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
627*f81fb7c4SAndroid Build Coastguard Worker {
628*f81fb7c4SAndroid Build Coastguard Worker /* is this slot being used? */
629*f81fb7c4SAndroid Build Coastguard Worker if (dupfile->pFile == NULL)
630*f81fb7c4SAndroid Build Coastguard Worker {
631*f81fb7c4SAndroid Build Coastguard Worker
632*f81fb7c4SAndroid Build Coastguard Worker /* copy info from the handle to be duplicated */
633*f81fb7c4SAndroid Build Coastguard Worker dupfile->filePos = file->filePos;
634*f81fb7c4SAndroid Build Coastguard Worker dupfile->pFile = file->pFile;
635*f81fb7c4SAndroid Build Coastguard Worker
636*f81fb7c4SAndroid Build Coastguard Worker /* set the duplicate handle flag */
637*f81fb7c4SAndroid Build Coastguard Worker dupfile->dup = file->dup = EAS_TRUE;
638*f81fb7c4SAndroid Build Coastguard Worker
639*f81fb7c4SAndroid Build Coastguard Worker /* initialize some values */
640*f81fb7c4SAndroid Build Coastguard Worker dupfile->bytesInBuffer = 0;
641*f81fb7c4SAndroid Build Coastguard Worker dupfile->readIndex = 0;
642*f81fb7c4SAndroid Build Coastguard Worker
643*f81fb7c4SAndroid Build Coastguard Worker *pDupFile = dupfile;
644*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
645*f81fb7c4SAndroid Build Coastguard Worker }
646*f81fb7c4SAndroid Build Coastguard Worker dupfile++;
647*f81fb7c4SAndroid Build Coastguard Worker }
648*f81fb7c4SAndroid Build Coastguard Worker
649*f81fb7c4SAndroid Build Coastguard Worker /* too many open files */
650*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_MAX_FILES_OPEN;
651*f81fb7c4SAndroid Build Coastguard Worker }
652*f81fb7c4SAndroid Build Coastguard Worker
653*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
654*f81fb7c4SAndroid Build Coastguard Worker *
655*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWClose
656*f81fb7c4SAndroid Build Coastguard Worker *
657*f81fb7c4SAndroid Build Coastguard Worker * Wrapper for fclose function
658*f81fb7c4SAndroid Build Coastguard Worker *
659*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
660*f81fb7c4SAndroid Build Coastguard Worker */
EAS_HWCloseFile(EAS_HW_DATA_HANDLE hwInstData,EAS_FILE_HANDLE file1)661*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1)
662*f81fb7c4SAndroid Build Coastguard Worker {
663*f81fb7c4SAndroid Build Coastguard Worker EAS_HW_FILE *file2,*dupFile;
664*f81fb7c4SAndroid Build Coastguard Worker int i;
665*f81fb7c4SAndroid Build Coastguard Worker
666*f81fb7c4SAndroid Build Coastguard Worker /* check handle integrity */
667*f81fb7c4SAndroid Build Coastguard Worker if (file1->pFile == NULL)
668*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INVALID_HANDLE;
669*f81fb7c4SAndroid Build Coastguard Worker
670*f81fb7c4SAndroid Build Coastguard Worker /* check for duplicate handle */
671*f81fb7c4SAndroid Build Coastguard Worker if (file1->dup)
672*f81fb7c4SAndroid Build Coastguard Worker {
673*f81fb7c4SAndroid Build Coastguard Worker dupFile = NULL;
674*f81fb7c4SAndroid Build Coastguard Worker file2 = hwInstData->files;
675*f81fb7c4SAndroid Build Coastguard Worker for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
676*f81fb7c4SAndroid Build Coastguard Worker {
677*f81fb7c4SAndroid Build Coastguard Worker /* check for duplicate */
678*f81fb7c4SAndroid Build Coastguard Worker if ((file1 != file2) && (file2->pFile == file1->pFile))
679*f81fb7c4SAndroid Build Coastguard Worker {
680*f81fb7c4SAndroid Build Coastguard Worker /* is there more than one duplicate? */
681*f81fb7c4SAndroid Build Coastguard Worker if (dupFile != NULL)
682*f81fb7c4SAndroid Build Coastguard Worker {
683*f81fb7c4SAndroid Build Coastguard Worker /* clear this entry and return */
684*f81fb7c4SAndroid Build Coastguard Worker file1->pFile = NULL;
685*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
686*f81fb7c4SAndroid Build Coastguard Worker }
687*f81fb7c4SAndroid Build Coastguard Worker
688*f81fb7c4SAndroid Build Coastguard Worker /* this is the first duplicate found */
689*f81fb7c4SAndroid Build Coastguard Worker dupFile = file2;
690*f81fb7c4SAndroid Build Coastguard Worker }
691*f81fb7c4SAndroid Build Coastguard Worker file2++;
692*f81fb7c4SAndroid Build Coastguard Worker }
693*f81fb7c4SAndroid Build Coastguard Worker
694*f81fb7c4SAndroid Build Coastguard Worker /* there is only one duplicate, clear the dup flag */
695*f81fb7c4SAndroid Build Coastguard Worker if (dupFile)
696*f81fb7c4SAndroid Build Coastguard Worker dupFile->dup = EAS_FALSE;
697*f81fb7c4SAndroid Build Coastguard Worker else
698*f81fb7c4SAndroid Build Coastguard Worker /* if we get here, there's a serious problem */
699*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_HANDLE_INTEGRITY;
700*f81fb7c4SAndroid Build Coastguard Worker
701*f81fb7c4SAndroid Build Coastguard Worker /* clear this entry and return */
702*f81fb7c4SAndroid Build Coastguard Worker file1->pFile = NULL;
703*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
704*f81fb7c4SAndroid Build Coastguard Worker }
705*f81fb7c4SAndroid Build Coastguard Worker
706*f81fb7c4SAndroid Build Coastguard Worker /* no duplicates - close the file */
707*f81fb7c4SAndroid Build Coastguard Worker if (fclose(file1->pFile) != 0)
708*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_CLOSE_FAILED;
709*f81fb7c4SAndroid Build Coastguard Worker
710*f81fb7c4SAndroid Build Coastguard Worker /* clear this entry and return */
711*f81fb7c4SAndroid Build Coastguard Worker file1->pFile = NULL;
712*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
713*f81fb7c4SAndroid Build Coastguard Worker }
714*f81fb7c4SAndroid Build Coastguard Worker
715*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
716*f81fb7c4SAndroid Build Coastguard Worker *
717*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWVibrate
718*f81fb7c4SAndroid Build Coastguard Worker *
719*f81fb7c4SAndroid Build Coastguard Worker * Turn on/off vibrate function
720*f81fb7c4SAndroid Build Coastguard Worker *
721*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
722*f81fb7c4SAndroid Build Coastguard Worker */
723*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWVibrate(EAS_HW_DATA_HANDLE hwInstData,EAS_BOOL state)724*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWVibrate (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
725*f81fb7c4SAndroid Build Coastguard Worker {
726*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "Vibrate state: %d\n", state);
727*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
728*f81fb7c4SAndroid Build Coastguard Worker }
729*f81fb7c4SAndroid Build Coastguard Worker
730*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
731*f81fb7c4SAndroid Build Coastguard Worker *
732*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWLED
733*f81fb7c4SAndroid Build Coastguard Worker *
734*f81fb7c4SAndroid Build Coastguard Worker * Turn on/off LED
735*f81fb7c4SAndroid Build Coastguard Worker *
736*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
737*f81fb7c4SAndroid Build Coastguard Worker */
738*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWLED(EAS_HW_DATA_HANDLE hwInstData,EAS_BOOL state)739*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWLED (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
740*f81fb7c4SAndroid Build Coastguard Worker {
741*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "LED state: %d\n", state);
742*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
743*f81fb7c4SAndroid Build Coastguard Worker }
744*f81fb7c4SAndroid Build Coastguard Worker
745*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
746*f81fb7c4SAndroid Build Coastguard Worker *
747*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWBackLight
748*f81fb7c4SAndroid Build Coastguard Worker *
749*f81fb7c4SAndroid Build Coastguard Worker * Turn on/off backlight
750*f81fb7c4SAndroid Build Coastguard Worker *
751*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
752*f81fb7c4SAndroid Build Coastguard Worker */
753*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWBackLight(EAS_HW_DATA_HANDLE hwInstData,EAS_BOOL state)754*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_HWBackLight (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
755*f81fb7c4SAndroid Build Coastguard Worker {
756*f81fb7c4SAndroid Build Coastguard Worker EAS_ReportX(_EAS_SEVERITY_NOFILTER, "Backlight state: %d\n", state);
757*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
758*f81fb7c4SAndroid Build Coastguard Worker }
759*f81fb7c4SAndroid Build Coastguard Worker
760*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
761*f81fb7c4SAndroid Build Coastguard Worker *
762*f81fb7c4SAndroid Build Coastguard Worker * EAS_HWYield
763*f81fb7c4SAndroid Build Coastguard Worker *
764*f81fb7c4SAndroid Build Coastguard Worker * This function is called periodically by the EAS library to give the
765*f81fb7c4SAndroid Build Coastguard Worker * host an opportunity to allow other tasks to run. There are two ways to
766*f81fb7c4SAndroid Build Coastguard Worker * use this call:
767*f81fb7c4SAndroid Build Coastguard Worker *
768*f81fb7c4SAndroid Build Coastguard Worker * If you have a multi-tasking OS, you can call the yield function in the
769*f81fb7c4SAndroid Build Coastguard Worker * OS to allow other tasks to run. In this case, return EAS_FALSE to tell
770*f81fb7c4SAndroid Build Coastguard Worker * the EAS library to continue processing when control returns from this
771*f81fb7c4SAndroid Build Coastguard Worker * function.
772*f81fb7c4SAndroid Build Coastguard Worker *
773*f81fb7c4SAndroid Build Coastguard Worker * If tasks run in a single thread by sequential function calls (sometimes
774*f81fb7c4SAndroid Build Coastguard Worker * call a "commutator loop"), return EAS_TRUE to cause the EAS Library to
775*f81fb7c4SAndroid Build Coastguard Worker * return to the caller. Be sure to check the number of bytes rendered
776*f81fb7c4SAndroid Build Coastguard Worker * before passing the audio buffer to the codec - it may not be filled.
777*f81fb7c4SAndroid Build Coastguard Worker * The next call to EAS_Render will continue processing until the buffer
778*f81fb7c4SAndroid Build Coastguard Worker * has been filled.
779*f81fb7c4SAndroid Build Coastguard Worker *
780*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
781*f81fb7c4SAndroid Build Coastguard Worker */
782*f81fb7c4SAndroid Build Coastguard Worker /*lint -esym(715, hwInstData) hwInstData available for customer use */
EAS_HWYield(EAS_HW_DATA_HANDLE hwInstData)783*f81fb7c4SAndroid Build Coastguard Worker EAS_BOOL EAS_HWYield (EAS_HW_DATA_HANDLE hwInstData)
784*f81fb7c4SAndroid Build Coastguard Worker {
785*f81fb7c4SAndroid Build Coastguard Worker /* put your code here */
786*f81fb7c4SAndroid Build Coastguard Worker return EAS_FALSE;
787*f81fb7c4SAndroid Build Coastguard Worker }
788