17df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
27df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
37df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * File:
47df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * eas_hostmm.c
57df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
67df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Contents and purpose:
77df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This file contains the host wrapper functions for stdio, stdlib, etc.
87df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This is a sample version that reads from a filedescriptor.
97df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * The file locator (EAS_FILE_LOCATOR) handle passed to
107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * HWOpenFile is the same one that is passed to EAS_OpenFile.
1156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Modify this file to suit the needs of your particular system.
137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_MAX_FILE_HANDLES sets the maximum number of MIDI streams within
1556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * a MIDI type 1 file that can be played.
167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HW_FILE is a structure to support the file I/O functions. It
187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * comprises the file descriptor, the file read pointer, and
197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the dup flag, which when set, indicates that the file handle has
207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * been duplicated, and offset and length within the file.
217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Copyright 2005 Sonic Network Inc.
237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License.
267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at
277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and
347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License.
357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Revision Control:
387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *   $Revision: 795 $
397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *   $Date: 2007-08-01 00:14:45 -0700 (Wed, 01 Aug 2007) $
407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _lint
447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "lint_stdlib.h"
457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#else
467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <stdio.h>
477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <stdlib.h>
487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <string.h>
497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <unistd.h>
507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <sys/types.h>
517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <sys/stat.h>
527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <fcntl.h>
537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <limits.h>
547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <sys/mman.h>
557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <errno.h>
567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <signal.h>
572dbbd3bac0f0e819d196a80cc7855054148ef8b6Colin Cross#include <pthread.h>
587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <media/MediaPlayerInterface.h>
597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif
607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_host.h"
627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* Only for debugging LED, vibrate, and backlight functions */
647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_report.h"
657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* this module requires dynamic memory support */
677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _STATIC_MEMORY
687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#error "eas_hostmm.c requires the dynamic memory model!\n"
697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif
707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifndef EAS_MAX_FILE_HANDLES
7276d1ca9c283712cce85667de949403eecc4e92dcThe Android Open Source Project// 100 max file handles == 3 * (nb tracks(32) + 1 for the segment) + 1 for jet file
7376d1ca9c283712cce85667de949403eecc4e92dcThe Android Open Source Project//                         3 == 1(playing segment) + 1(prepared segment)
7476d1ca9c283712cce85667de949403eecc4e92dcThe Android Open Source Project//                              + 1(after end of playing segment, before files closed)
7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_MAX_FILE_HANDLES    100
7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*
797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * this structure and the related function are here
807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to support the ability to create duplicate handles
817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * and buffering it in memory. If your system uses
827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * in-memory resources, you can eliminate the calls
837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to malloc and free, the dup flag, and simply track
847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the file size and read position.
857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project */
867df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttypedef struct eas_hw_file_tag
877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_I32 fileSize;
897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_I32 filePos;
907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_BOOL dup;
917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    int fd;
927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_I32 offset;
937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} EAS_HW_FILE;
947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
957df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttypedef struct eas_hw_inst_data_tag
967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_HW_FILE files[EAS_MAX_FILE_HANDLES];
987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} EAS_HW_INST_DATA;
997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1007df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectpthread_key_t EAS_sigbuskey;
1017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
1037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWInit
1047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Initialize host wrapper interface
1067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
1087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
1097df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWInit (EAS_HW_DATA_HANDLE *pHWInstData)
1107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
1117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_HW_FILE *file;
1127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    int i;
1137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* need to track file opens for duplicate handles */
1157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    *pHWInstData = malloc(sizeof(EAS_HW_INST_DATA));
1167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (!(*pHWInstData))
1177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_MALLOC_FAILED;
1187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_HWMemSet(*pHWInstData, 0, sizeof(EAS_HW_INST_DATA));
12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
1217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    file = (*pHWInstData)->files;
1227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
1237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    {
1247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        file->fd = -1;
1257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        file++;
1267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    }
1277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
1307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
1317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
1337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWShutdown
1347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Shut down host wrapper interface
1367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
1387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
1397df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWShutdown (EAS_HW_DATA_HANDLE hwInstData)
1407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
1417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    free(hwInstData);
1437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
1447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
1457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
1477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWMalloc
1497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Allocates dynamic memory
1517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
1537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
1547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
1557df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectvoid *EAS_HWMalloc (EAS_HW_DATA_HANDLE hwInstData, EAS_I32 size)
1567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
1577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* Since this whole library loves signed sizes, let's not let
1587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project     * negative or 0 values through */
1597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (size <= 0)
1607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      return NULL;
1617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return malloc((size_t) size);
1627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
1637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
1657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWFree
1677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Frees dynamic memory
1697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
1717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
1727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
1737df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectvoid EAS_HWFree (EAS_HW_DATA_HANDLE hwInstData, void *p)
1747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
1757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    free(p);
1767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
1777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
1797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWMemCpy
1817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Copy memory wrapper
1837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
1857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMemCpy (void *dest, const void *src, EAS_I32 amount)
1877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
1887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (amount < 0)  {
1897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000004 , amount);
1907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      exit(255);
1917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    }
1927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return memcpy(dest, src, (size_t) amount);
1937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
1947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
1957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
1967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWMemSet
1987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
1997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set memory wrapper
2007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
2017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
2027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMemSet (void *dest, int val, EAS_I32 amount)
2047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
2057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (amount < 0)  {
2067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000005 , amount);
2077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      exit(255);
2087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    }
2097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return memset(dest, val, (size_t) amount);
2107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
2117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
2137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
2147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWMemCmp
2157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
2167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Compare memory wrapper
2177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
2187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
2197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 EAS_HWMemCmp (const void *s1, const void *s2, EAS_I32 amount)
2217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
2227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (amount < 0) {
2237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000006 , amount);
2247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      exit(255);
2257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    }
2267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return (EAS_I32) memcmp(s1, s2, (size_t) amount);
2277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
2287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
2307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
2317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWOpenFile
2327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
2337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Open a file for read or write
2347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
2357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
2367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
2377df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWOpenFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_LOCATOR locator, EAS_FILE_HANDLE *pFile, EAS_FILE_MODE mode)
2387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
2397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_HW_FILE *file;
2407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    int fd;
2417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    int i, temp;
2427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* set return value to NULL */
2447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    *pFile = NULL;
2457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* only support read mode at this time */
2477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (mode != EAS_FILE_READ)
2487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_INVALID_FILE_MODE;
2497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* find an empty entry in the file table */
2517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    file = hwInstData->files;
2527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
2537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    {
2547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        /* is this slot being used? */
2557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        if (file->fd < 0)
2567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        {
2577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            if (locator->path) {
2587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                /* open the file */
2597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                if ((fd = open(locator->path, O_RDONLY)) < 0) {
2607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    return EAS_ERROR_FILE_OPEN_FAILED;
2617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                }
2627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            } else {
2637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                /* else file is already open */
2647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                fd = dup(locator->fd);
2657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            }
2667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            /* determine the file size */
2687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            if (locator->length == 0) {
2697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                if (lseek(fd, 0, SEEK_END) < 0) {
2707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    close(fd);
2717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    return EAS_ERROR_FILE_LENGTH;
2727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                }
2737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                if ((file->fileSize = lseek(fd, 0, SEEK_CUR)) == -1L) {
2747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    close(fd);
2757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    return EAS_ERROR_FILE_LENGTH;
2767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                }
2777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            }
2787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            // file size was passed in
2807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            else {
2817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                file->fileSize = (EAS_I32) locator->length;
2827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            }
2837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            file->fd = fd;
2857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            file->offset = locator->offset;
2867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            /* initialize some values */
2887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            file->filePos = 0;
2897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            file->dup = EAS_FALSE;
2907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            *pFile = file;
2927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            return EAS_SUCCESS;
2937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        }
2947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        file++;
2957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    }
2967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
2977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* too many open files */
2987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_ERROR_MAX_FILES_OPEN;
2997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
3007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
3037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWReadFile
3057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Read data from a file
3077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
3097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
3107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
3117df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWReadFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *pBuffer, EAS_I32 n, EAS_I32 *pBytesRead)
3127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
3137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_I32 count;
3147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* make sure we have a valid handle */
3167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (file->fd < 0)
3177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_INVALID_HANDLE;
3187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (n < 0)
3207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      return EAS_EOF;
3217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* calculate the bytes to read */
3237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    count = file->fileSize - file->filePos;
3247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (n < count)
3257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        count = n;
3267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (count < 0)
3277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project      return EAS_EOF;
3287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* copy the data to the requested location, and advance the pointer */
3307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (count) {
3317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        lseek(file->fd, file->filePos + file->offset, SEEK_SET);
3327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        count = read(file->fd, pBuffer, count);
3337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    }
3347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    file->filePos += count;
3357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    *pBytesRead = count;
3367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* were n bytes read? */
3387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (count!= n)
3397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_EOF;
3407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
3417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
3427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
3447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWGetByte
3467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Read a byte from a file
3487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
3507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
3517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
3527df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWGetByte (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p)
3537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
3547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_I32 numread;
3557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_HWReadFile(hwInstData, file, p, 1, &numread);
3567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
3577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
3597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWGetWord
3617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Read a 16 bit word from a file
3637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
3657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
3667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
3677df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWGetWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
3687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
3697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_RESULT result;
3707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_U8 c1, c2;
3717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* read 2 bytes from the file */
3737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if ((result = EAS_HWGetByte(hwInstData, file, &c1)) != EAS_SUCCESS)
3747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return result;
3757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if ((result = EAS_HWGetByte(hwInstData, file, &c2)) != EAS_SUCCESS)
3767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return result;
3777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* order them as requested */
3797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (msbFirst)
3807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        *((EAS_U16*) p) = ((EAS_U16) c1 << 8) | c2;
3817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    else
3827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        *((EAS_U16*) p) = ((EAS_U16) c2 << 8) | c1;
3837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
3857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
3867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
3877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
3887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWGetDWord
3907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file
3927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
3937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
3947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
3957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
3967df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWGetDWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
3977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
3987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_RESULT result;
3997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_U8 c1, c2,c3,c4;
4007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* read 4 bytes from the file */
4027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if ((result = EAS_HWGetByte(hwInstData, file, &c1)) != EAS_SUCCESS)
4037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return result;
4047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if ((result = EAS_HWGetByte(hwInstData, file, &c2)) != EAS_SUCCESS)
4057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return result;
4067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if ((result = EAS_HWGetByte(hwInstData, file, &c3)) != EAS_SUCCESS)
4077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return result;
4087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if ((result = EAS_HWGetByte(hwInstData, file, &c4)) != EAS_SUCCESS)
4097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return result;
4107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* order them as requested */
4127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (msbFirst)
4137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        *((EAS_U32*) p) = ((EAS_U32) c1 << 24) | ((EAS_U32) c2 << 16) | ((EAS_U32) c3 << 8) | c4;
4147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    else
4157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        *((EAS_U32*) p)= ((EAS_U32) c4 << 24) | ((EAS_U32) c3 << 16) | ((EAS_U32) c2 << 8) | c1;
4167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
4187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
4197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
4217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWFilePos
4237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file
4257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
4277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
4287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
4297df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWFilePos (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pPosition)
4307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
4317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* make sure we have a valid handle */
4337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (file->fd < 0)
4347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_INVALID_HANDLE;
4357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    *pPosition = file->filePos;
4377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
4387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} /* end EAS_HWFilePos */
4397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
4417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWFileSeek
4437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Seek to a specific location in the file
4457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
4477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
4487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
4497df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWFileSeek (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
4507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
4517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* make sure we have a valid handle */
4537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (file->fd < 0)
4547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_INVALID_HANDLE;
4557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* validate new position */
4577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if ((position < 0) || (position > file->fileSize))
4587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_FILE_SEEK;
4597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* save new position */
4617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    file->filePos = position;
4627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
4637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
4647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
4667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWFileSeekOfs
4687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Seek forward or back relative to the current position
4707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
4727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
4737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
4747df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWFileSeekOfs (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
4757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
4767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* make sure we have a valid handle */
4787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (file->fd < 0)
4797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_INVALID_HANDLE;
4807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* determine the file position */
4827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    position += file->filePos;
4837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if ((position < 0) || (position > file->fileSize))
4847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_FILE_SEEK;
4857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* save new position */
4877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    file->filePos = position;
4887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
4897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
4907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
4917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
4927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWFileLength
4947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Return the file length
4967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
4977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
4987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
4997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
5007df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWFileLength (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pLength)
5017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
5027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* make sure we have a valid handle */
5047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (file->fd < 0)
5057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_INVALID_HANDLE;
5067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    *pLength = file->fileSize;
5087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
5097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
5107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
5127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
5137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWDupHandle
5147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
5157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Duplicate a file handle
5167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
5177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
5187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
5197df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWDupHandle (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_FILE_HANDLE *pDupFile)
5207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
5217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_HW_FILE *dupFile;
5227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    int i;
5237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* make sure we have a valid handle */
5257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (file->fd < 0)
5267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_INVALID_HANDLE;
5277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* find an empty entry in the file table */
5297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    dupFile = hwInstData->files;
5307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
5317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    {
5327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        /* is this slot being used? */
5337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        if (dupFile->fd < 0)
5347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        {
5357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            /* copy info from the handle to be duplicated */
5367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            dupFile->filePos = file->filePos;
5377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            dupFile->fileSize = file->fileSize;
5387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            dupFile->fd = file->fd;
5397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            dupFile->offset = file->offset;
5407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            /* set the duplicate handle flag */
5427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            dupFile->dup = file->dup = EAS_TRUE;
5437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            *pDupFile = dupFile;
5457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            return EAS_SUCCESS;
5467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        }
5477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        dupFile++;
5487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    }
5497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* too many open files */
5517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_ERROR_MAX_FILES_OPEN;
5527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
5537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
5557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
5567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWClose
5577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
5587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Wrapper for fclose function
5597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
5607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
5617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
5627df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1)
5637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
5647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_HW_FILE *file2,*dupFile;
5657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    int i;
5667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* make sure we have a valid handle */
5697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (file1->fd < 0)
5707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_ERROR_INVALID_HANDLE;
5717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* check for duplicate handle */
5737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    if (file1->dup)
5747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    {
5757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        dupFile = NULL;
5767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        file2 = hwInstData->files;
5777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
5787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        {
5797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            /* check for duplicate */
5807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            if ((file1 != file2) && (file2->fd == file1->fd))
5817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            {
5827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                /* is there more than one duplicate? */
5837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                if (dupFile != NULL)
5847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                {
5857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    /* clear this entry and return */
5867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    file1->fd = -1;
5877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    return EAS_SUCCESS;
5887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                }
5897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                /* this is the first duplicate found */
5917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                else
5927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project                    dupFile = file2;
5937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            }
5947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            file2++;
5957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        }
5967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
5977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        /* there is only one duplicate, clear the dup flag */
5987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        if (dupFile)
5997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            dupFile->dup = EAS_FALSE;
6007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        else
6017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            /* if we get here, there's a serious problem */
6027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project            return EAS_ERROR_HANDLE_INTEGRITY;
6037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
6047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        /* clear this entry and return */
6057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        file1->fd = -1;
6067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project        return EAS_SUCCESS;
6077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    }
6087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
6097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* no duplicates - close the file */
6107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    close(file1->fd);
6117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* clear this entry and return */
6127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    file1->fd = -1;
6137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
6147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
6157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
6167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
6177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWVibrate
6197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Turn on/off vibrate function
6217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
6237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
6247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
6257df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWVibrate (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
6267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
6277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000001 , state);
6287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
6297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} /* end EAS_HWVibrate */
6307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
6317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
6327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWLED
6347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Turn on/off LED
6367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
6387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
6397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
6407df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWLED (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
6417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
6427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000002 , state);
6437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
6447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
6457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
6467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
6477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWBackLight
6497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Turn on/off backlight
6517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
6537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
6547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
6557df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_HWBackLight (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
6567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
6577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000003 , state);
6587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_SUCCESS;
6597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
6607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
6617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*----------------------------------------------------------------------------
6627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_HWYield
6647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This function is called periodically by the EAS library to give the
6667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * host an opportunity to allow other tasks to run. There are two ways to
6677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * use this call:
6687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * If you have a multi-tasking OS, you can call the yield function in the
6707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * OS to allow other tasks to run. In this case, return EAS_FALSE to tell
6717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the EAS library to continue processing when control returns from this
6727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * function.
6737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * If tasks run in a single thread by sequential function calls (sometimes
6757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * call a "commutator loop"), return EAS_TRUE to cause the EAS Library to
6767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * return to the caller. Be sure to check the number of bytes rendered
6777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * before passing the audio buffer to the codec - it may not be filled.
6787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * The next call to EAS_Render will continue processing until the buffer
6797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * has been filled.
6807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
6817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *----------------------------------------------------------------------------
6827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/
6837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, hwInstData) hwInstData available for customer use */
6847df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_BOOL EAS_HWYield (EAS_HW_DATA_HANDLE hwInstData)
6857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{
6867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    /* put your code here */
6877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project    return EAS_FALSE;
6887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}
6897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
690