156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_host.c 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose: 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This file contains the host wrapper functions for stdio, stdlib, etc. 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This is a sample version that wraps the standard library functions. 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Modify this file to suit the needs of your particular system. 1056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_MAX_FILE_HANDLES sets the maximum number of MIDI streams within 1256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * a MIDI type 1 file that can be played. To maintain efficiency, data 1356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * is buffered locally when byte access is used (EAS_HWGetByte). The 1456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * size of the buffer is set by EAS_FILE_BUFFER_SIZE. 1556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HW_FILE is a structure to support local file buffering. It 1756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * comprises the OS File handle, some data related to the local file 1856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * buffer, the position of the next byte of data to be read, the dup 1956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * flag which when set, indicates that the handle has been duplicated, 2056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and the data buffer. Since the data buffer is only used for byte 2156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * access, it does not need to be large. 2256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If the file system supports duplicate file handles and buffering, 2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * this entire subsystem can be replaced with direct calls to the 2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * native file I/O routines. 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If the system has enough memory to support reading the entire file 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * into memory, it will be much more efficient to do so on the call to 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWOpenFile and then close the file. Simply substitute a memory 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pointer for the FILE* pointer. Calls to EAS_HW_DupHandle will work 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * as they do in this version. In the call to EAS_HWCloseFile, instead 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * of calling fclose, free the memory containing the file data. 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright 2005 Sonic Network Inc. 357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License. 387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at 397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and 467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License. 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control: 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Revision: 853 $ 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Date: 2007-09-05 09:54:17 -0700 (Wed, 05 Sep 2007) $ 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _lint 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "lint_stdlib.h" 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdio.h> 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdlib.h> 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <string.h> 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_host.h" 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// #define DEBUG_FILE_IO 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* Only for debugging LED, vibrate, and backlight functions */ 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_report.h" 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef EAS_MAX_FILE_HANDLES 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_MAX_FILE_HANDLES 32 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef EAS_FILE_BUFFER_SIZE 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_FILE_BUFFER_SIZE 32 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * this structure and the related function are here 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to support the ability to create duplicate handles 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and buffering into a single file. If the OS supports 8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * duplicate file handles natively, this code can be 8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * stripped to eliminate double-buffering. 8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct eas_hw_file_tag 8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks FILE *pFile; 8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 bytesInBuffer; 8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 readIndex; 9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 filePos; 9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL dup; 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 buffer[EAS_FILE_BUFFER_SIZE]; 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} EAS_HW_FILE; 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct eas_hw_inst_data_tag 9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE files[EAS_MAX_FILE_HANDLES]; 9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} EAS_HW_INST_DATA; 9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* local memory for files and streams */ 10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _STATIC_MEMORY 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_HW_INST_DATA fileData; 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWInit 10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Initialize host wrapper interface 10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWInit (EAS_HW_DATA_HANDLE *pHWInstData) 11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* need to track file opens for duplicate handles */ 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _STATIC_MEMORY 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pHWInstData = malloc(sizeof(EAS_HW_INST_DATA)); 11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!(*pHWInstData)) 11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pHWInstData = &fileData; 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(*pHWInstData, 0, sizeof(EAS_HW_INST_DATA)); 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWShutdown 12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Shut down host wrapper interface 13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWShutdown (EAS_HW_DATA_HANDLE hwInstData) 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _STATIC_MEMORY 13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks free(hwInstData); 14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMalloc 14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Allocates dynamic memory 14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _STATIC_MEMORY 15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, size) not used in static memory model */ 15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMalloc (EAS_HW_DATA_HANDLE hwInstData, EAS_I32 size) 15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _STATIC_MEMORY 15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return NULL; 16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return malloc((EAS_U32)size); 16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFree 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Frees dynamic memory 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _STATIC_MEMORY 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, p) not used in static memory model */ 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_HWFree(EAS_HW_DATA_HANDLE hwInstData, void *p) 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _STATIC_MEMORY 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks free(p); 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemCpy 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copy memory wrapper 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMemCpy (void *dest, const void *src, EAS_I32 amount) 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return memcpy(dest,src,(size_t) amount); 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemSet 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set memory wrapper 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMemSet (void *dest, int val, EAS_I32 amount) 20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return memset(dest,val,(size_t) amount); 20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemCmp 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Compare memory wrapper 21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 EAS_HWMemCmp (const void *s1, const void *s2, EAS_I32 amount) 21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_I32) memcmp(s1, s2, (size_t) amount); 22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWOpenFile 22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Open a file for read or write 22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWOpenFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_LOCATOR locator, EAS_FILE_HANDLE *pFile, EAS_FILE_MODE mode) 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *file; 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set return value to NULL */ 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pFile = NULL; 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* only support read mode at this time */ 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (mode != EAS_FILE_READ) 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_FILE_MODE; 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find an empty entry in the file table */ 24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file = hwInstData->files; 24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is this slot being used? */ 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (locator->path) 25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->pFile = fopen((const char*) locator->path, "rb"); 25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_OPEN_FAILED; 25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWOpenFile: Open file %d\n", i); 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some values */ 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = 0; 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = 0; 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->dup = EAS_FALSE; 26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pFile = file; 26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file++; 27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* too many open files */ 27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_FILES_OPEN; 27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFillBuffer 27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Fill buffer from file 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFillBuffer (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file) 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reposition the file pointer */ 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(file->pFile, file->filePos, SEEK_SET) != 0) 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_SEEK; 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read some data from the file */ 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = (EAS_I32) fread(file->buffer, 1, EAS_FILE_BUFFER_SIZE, file->pFile); 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->bytesInBuffer == 0) 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_EOF; 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWReadFile 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read data from a file 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWReadFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *pBuffer, EAS_I32 n, EAS_I32 *pBytesRead) 30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 temp; 31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 *p = pBuffer; 31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 bytesLeft = n; 31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pBytesRead = 0; 31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWReadFile: Reading %d bytes from position %d\n", n, file->filePos); 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* try to fulfill request from buffer */ 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (;bytesLeft > 0;) 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* how many bytes can we get from buffer? */ 32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = file->bytesInBuffer - file->readIndex; 32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp > bytesLeft) 32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = bytesLeft; 33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* copy data from buffer */ 33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemCpy(p, &file->buffer[file->readIndex], temp); 33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pBytesRead += temp; 33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex += temp; 33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += temp; 33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks bytesLeft -= temp; 33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p += temp; 33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* don't refill buffer if request is bigger than buffer */ 34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((bytesLeft == 0) || (bytesLeft >= EAS_FILE_BUFFER_SIZE)) 34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* refill buffer */ 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFillBuffer(hwInstData, file)) != EAS_SUCCESS) 34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* more to read? do unbuffered read directly to target memory */ 34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (bytesLeft) 35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* position the file pointer */ 35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(file->pFile, file->filePos, SEEK_SET) != 0) 35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_SEEK; 35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read data in the buffer */ 35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{826} lint doesn't like this with STATIC_MEMORY defined for some reason */ 35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = (EAS_I32) fread(p, 1, (size_t) bytesLeft, file->pFile); 35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pBytesRead += temp; 36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += temp; 36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset buffer info */ 36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = 0; 36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define BYTES_PER_LINE 16 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char str[BYTES_PER_LINE * 3 + 1]; 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT i; 37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < (n > BYTES_PER_LINE ? BYTES_PER_LINE : n) ; i ++) 37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks sprintf(&str[i*3], "%02x ", ((EAS_U8*)pBuffer)[i]); 37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (i) 37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "%s\n", str); 37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* were n bytes read? */ 38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (*pBytesRead != n) 38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_EOF; 38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetByte 38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a byte from a file 39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetByte (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p) 39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use local buffer - do we have any data? */ 40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->readIndex >= file->bytesInBuffer) 40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFillBuffer(hwInstData, file)) != EAS_SUCCESS) 40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if nothing to read, return EOF */ 40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->bytesInBuffer == 0) 41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_EOF; 41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get a character from the buffer */ 41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U8*) p) = file->buffer[file->readIndex++]; 41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetByte: Reading from position %d, byte = 0x%02x\n", file->filePos, *(EAS_U8*)p); 41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos++; 42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetWord 42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a 16-bit value from the file 42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst) 43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 count; 43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c[2]; 43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetWord: Reading 2 bytes from position %d\n", file->filePos); 43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read 2 bytes from the file */ 44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWReadFile(hwInstData, file, c, 2, &count)) != EAS_SUCCESS) 44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* order them as requested */ 44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (msbFirst) 44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U16*) p) = ((EAS_U16) c[0] << 8) | c[1]; 44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U16*) p) = ((EAS_U16) c[1] << 8) | c[0]; 45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetDWord 45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a 16-bit value from the file 45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetDWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst) 46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 46356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 46456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 count; 46556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c[4]; 46656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 46756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetDWord: Reading 4 bytes from position %d\n", file->filePos); 46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read 4 bytes from the file */ 47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWReadFile(hwInstData, file, c, 4, &count)) != EAS_SUCCESS) 47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* order them as requested */ 47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (msbFirst) 47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U32*) p) = ((EAS_U32) c[0] << 24) | ((EAS_U32) c[1] << 16) | ((EAS_U32) c[2] << 8) | c[3]; 47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U32*) p) = ((EAS_U32) c[3] << 24) | ((EAS_U32) c[2] << 16) | ((EAS_U32) c[1] << 8) | c[0]; 48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFilePos 48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file 48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFilePos (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pPosition) 49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pPosition = file->filePos; 50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeek 50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek to a specific location in the file 50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeek (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position) 51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 newIndex; 51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWFileSeek: Seeking to new position %d\n", file->filePos); 52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is new position in current buffer? */ 52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks newIndex = position - file->filePos + file->readIndex; 52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((newIndex >= 0) && (newIndex < file->bytesInBuffer)) 52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = newIndex; 53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = position; 53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save new position and reset buffer info so EAS_HWGetByte doesn't fail */ 53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = position; 53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = 0; 53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeekOfs 54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek forward or back relative to the current position 54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeekOfs (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position) 55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 temp; 55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 55556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWFileSeekOfs: Seeking to new position %d\n", file->filePos + position); 55656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 55756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 55956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 56056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 56156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 56256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is new position in current buffer? */ 56356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = position + file->readIndex; 56456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((temp >= 0) && (temp < file->bytesInBuffer)) 56556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = temp; 56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += position; 56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save new position and reset buffer info so EAS_HWGetByte doesn't fail */ 57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += position; 57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = 0; 57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileLength 58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Return the file length 58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileLength (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pLength) 58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks long pos; 59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pos = ftell(file->pFile)) == -1L) 59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(file->pFile, 0L, SEEK_END) != 0) 59856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 59956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((*pLength = ftell(file->pFile)) == -1L) 60056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 60156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(file->pFile, pos, SEEK_SET) != 0) 60256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 60356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 60556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 60656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 60756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWDupHandle 60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Duplicate a file handle 61156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 61356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 61456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWDupHandle (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_FILE_HANDLE* pDupFile) 61556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 61656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *dupfile; 61756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 61856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 61956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pDupFile = NULL; 62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find an empty entry in the file table */ 62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile = hwInstData->files; 62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is this slot being used? */ 62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupfile->pFile == NULL) 63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* copy info from the handle to be duplicated */ 63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->filePos = file->filePos; 63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->pFile = file->pFile; 63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the duplicate handle flag */ 63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->dup = file->dup = EAS_TRUE; 63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some values */ 64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->bytesInBuffer = 0; 64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->readIndex = 0; 64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pDupFile = dupfile; 64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile++; 64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* too many open files */ 65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_FILES_OPEN; 65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWClose 65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Wrapper for fclose function 65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1) 66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *file2,*dupFile; 66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file1->pFile == NULL) 66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for duplicate handle */ 67156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file1->dup) 67256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 67356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile = NULL; 67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file2 = hwInstData->files; 67556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for duplicate */ 67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((file1 != file2) && (file2->pFile == file1->pFile)) 67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is there more than one duplicate? */ 68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupFile != NULL) 68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 68456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->pFile = NULL; 68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 68656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 68756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* this is the first duplicate found */ 68956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile = file2; 69056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 69156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file2++; 69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* there is only one duplicate, clear the dup flag */ 69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupFile) 69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile->dup = EAS_FALSE; 69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 69856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we get here, there's a serious problem */ 69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_HANDLE_INTEGRITY; 70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 70256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->pFile = NULL; 70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no duplicates - close the file */ 70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fclose(file1->pFile) != 0) 70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_CLOSE_FAILED; 70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->pFile = NULL; 71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWVibrate 71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off vibrate function 72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWVibrate (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state) 72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "Vibrate state: %d\n", state); 72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWLED 73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off LED 73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 73856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 73956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWLED (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state) 74056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 74156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "LED state: %d\n", state); 74256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWBackLight 74856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 74956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off backlight 75056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 75156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 75256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 75456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWBackLight (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state) 75556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "Backlight state: %d\n", state); 75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 75956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 76056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 76156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 76256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWYield 76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This function is called periodically by the EAS library to give the 76556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * host an opportunity to allow other tasks to run. There are two ways to 76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * use this call: 76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If you have a multi-tasking OS, you can call the yield function in the 76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * OS to allow other tasks to run. In this case, return EAS_FALSE to tell 77056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the EAS library to continue processing when control returns from this 77156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * function. 77256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 77356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If tasks run in a single thread by sequential function calls (sometimes 77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * call a "commutator loop"), return EAS_TRUE to cause the EAS Library to 77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * return to the caller. Be sure to check the number of bytes rendered 77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * before passing the audio buffer to the codec - it may not be filled. 77756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * The next call to EAS_Render will continue processing until the buffer 77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * has been filled. 77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 78156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 78356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL EAS_HWYield (EAS_HW_DATA_HANDLE hwInstData) 78456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* put your code here */ 78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 788