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