156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EASLib.c 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EASLIb 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright (C) 2008 The Android Open Source Project 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Licensed under the Apache License, Version 2.0 (the "License"); 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * you may not use this file except in compliance with the License. 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * You may obtain a copy of the License at 1056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * http://www.apache.org/licenses/LICENSE-2.0 1256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Unless required by applicable law or agreed to in writing, software 1456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * distributed under the License is distributed on an "AS IS" BASIS, 1556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * See the License for the specific language governing permissions and 1756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * limitations under the License. 1856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 2156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 2256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdlib.h> 2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdio.h> 2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdarg.h> 2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <string.h> 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas.h" 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_report.h" 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_host.h" 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef JET_INTERFACE 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "jet.h" 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_EXPORT __attribute__((visibility("default"))) 3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// #define DEBUG_FILE_IO 3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* include debug interface */ 4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_host_debug.h" 4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef AUX_MIXER 4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_auxmix.h" 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* this module requires dynamic memory support */ 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _STATIC_MEMORY 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#error "eas_hostmm.c requires the dynamic memory model!\n" 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef EAS_MAX_FILE_HANDLES 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_MAX_FILE_HANDLES 32 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef EAS_FILE_BUFFER_SIZE 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_FILE_BUFFER_SIZE 32 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * this structure and the related function are here 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to support the ability to create duplicate handles 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and buffering it in memory. If your system uses 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * in-memory resources, you can eliminate the calls 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to malloc and free, the dup flag, and simply track 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the file size and read position. 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks #ifdef BUFFERED_FILE_ACCESS 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct eas_hw_file_tag 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks FILE *pFile; 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 bytesInBuffer; 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 readIndex; 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 filePos; 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 fileSize; 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL dup; 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 buffer[EAS_FILE_BUFFER_SIZE]; 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} EAS_HW_FILE; 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct eas_hw_file_tag 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 fileSize; 8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 filePos; 8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL dup; 8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 *buffer; 8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} EAS_HW_FILE; 8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct eas_hw_inst_data_tag 9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE files[EAS_MAX_FILE_HANDLES]; 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} EAS_HW_INST_DATA; 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL errorConditions[eNumErrorConditions]; 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL ledState; 9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL vibState; 9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL backlightState; 9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_DEBUG_MSG_LEN 1024 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef void (*EAS_LOG_FUNC)(EAS_INT severity, char *msg); 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_LOG_FUNC logCallback = NULL; 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic char messageBuffer[MAX_DEBUG_MSG_LEN]; 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* error counts */ 10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_INT eas_fatalErrors; 10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_INT eas_errors; 10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_INT eas_warnings; 11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic int severityLevel = 9999; 11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* wave out device */ 11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef MAX_WAVE_OUT_BUFFERS 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_WAVE_OUT_BUFFERS 8 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef EAS_BUFFERS_PER_WAVE_BUFFER 11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_BUFFERS_PER_WAVE_BUFFER 8 11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * ResetErrorCounters() 12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_EXPORT void ResetErrorCounters() 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_fatalErrors = 0; 12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_errors = 0; 12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_warnings = 0; 13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * SetLogCallback() 13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_EXPORT void SetLogCallback (EAS_LOG_FUNC callback) 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks logCallback = callback; 13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _NO_DEBUG_PREPROCESSOR 14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic S_DEBUG_MESSAGES debugMessages[] = 14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef UNIFIED_DEBUG_MESSAGES 14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_debugmsgs.h" 14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 0,0,0 } 14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}; 14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_ReportEx() 15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_ReportEx (int severity, unsigned long hashCode, int serialNum, ...) 15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_list vargs; 15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (severity) 16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_FATAL: 16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_fatalErrors++; 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_ERROR: 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_errors++; 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_WARNING: 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_warnings++; 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check severity level */ 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (severity > severityLevel) 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return; 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for callback */ 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (logCallback == NULL) 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return; 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find the error message and output to stdout */ 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; debugMessages[i].m_pDebugMsg; i++) 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((debugMessages[i].m_nHashCode == hashCode) && 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (debugMessages[i].m_nSerialNum == serialNum)) 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_start(vargs, serialNum); 19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef WIN32 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks vsprintf_s(messageBuffer, sizeof(messageBuffer), fmt, vargs); 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks vsprintf(messageBuffer, debugMessages[i].m_pDebugMsg, vargs); 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks logCallback(severity, messageBuffer); 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_end(vargs); 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return; 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks printf("Unrecognized error: Severity=%d; HashCode=%lu; SerialNum=%d\n", severity, hashCode, serialNum); 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EAS_ReportEx */ 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Report() 20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_Report (int severity, const char *fmt, ...) 21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_list vargs; 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (severity) 21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_FATAL: 21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_fatalErrors++; 21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_ERROR: 22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_errors++; 22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_WARNING: 22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_warnings++; 22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check severity level */ 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (severity > severityLevel) 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return; 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for callback */ 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (logCallback == NULL) 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return; 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_start(vargs, fmt); 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _WIN32 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks vsprintf_s(messageBuffer, sizeof(messageBuffer), fmt, vargs); 24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks vsprintf(messageBuffer, fmt, vargs); 24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks logCallback(severity, messageBuffer); 24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_end(vargs); 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EAS_Report */ 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_ReportX() 25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_ReportX (int severity, const char *fmt, ...) 25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_list vargs; 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (severity) 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_FATAL: 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_fatalErrors++; 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_ERROR: 26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_errors++; 26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case _EAS_SEVERITY_WARNING: 26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eas_warnings++; 27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check severity level */ 27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (severity > severityLevel) 27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return; 27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for callback */ 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (logCallback == NULL) 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return; 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_start(vargs, fmt); 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _WIN32 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks vsprintf_s(messageBuffer, sizeof(messageBuffer), fmt, vargs); 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks vsprintf(messageBuffer, fmt, vargs); 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks logCallback(severity, messageBuffer); 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks va_end(vargs); 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_DLLSetDebugLevel() 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_EXPORT void EAS_DLLSetDebugLevel (int severity) 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks severityLevel = severity; 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_ExSetDebugLevel() 30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_SetDebugLevel (int severity) 30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks severityLevel = severity; 31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SelectLibrary() 31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_EXPORT EAS_RESULT EAS_SelectLib (EAS_DATA_HANDLE pEASData, EAS_HANDLE streamHandle, EAS_BOOL testLib) 31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks extern EAS_SNDLIB_HANDLE VMGetLibHandle(EAS_INT libNum); 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SetSoundLibrary(pEASData, streamHandle, VMGetLibHandle(testLib ? 1 : 0)); 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(_DEBUG) && !defined(MSC) 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <crtdbg.h> 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EnableHeapDebug() 32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic void EnableHeapDebug (void) 33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int temp; 33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); 33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp |= _CRTDBG_ALLOC_MEM_DF; 33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp |= _CRTDBG_CHECK_ALWAYS_DF; 33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp |= _CRTDBG_LEAK_CHECK_DF; 33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// temp |= _CRTDBG_DELAY_FREE_MEM_DF; 33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks _CrtSetDbgFlag(temp); 33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * HeapCheck() 34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Check heap status 34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid HeapCheck (void) 34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int heapStatus; 35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* Check heap status */ 35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks heapStatus = _heapchk(); 35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((heapStatus == _HEAPOK) || (heapStatus == _HEAPEMPTY)) 35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return; 35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_FATAL, "Heap corrupt\n" ); 35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWInit 36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Initialize host wrapper interface 36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWInit (EAS_HW_DATA_HANDLE *pHWInstData) 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(_DEBUG) && !defined(MSC) 37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EnableHeapDebug(); 37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks #ifdef BUFFERED_FILE_ACCESS 37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_INFO, "EAS_HWInit: Buffered file access\n"); 37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks #else 37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_INFO, "EAS_HWInit: Memory mapped file access\n"); 37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks #endif 38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eInitError]) 38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* need to track file opens for duplicate handles */ 38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pHWInstData = malloc(sizeof(EAS_HW_INST_DATA)); 38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!(*pHWInstData)) 38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(*pHWInstData, 0, sizeof(EAS_HW_INST_DATA)); 39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWShutdown 39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Shut down host wrapper interface 39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWShutdown (EAS_HW_DATA_HANDLE hwInstData) 40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eShutdownError]) 40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks free(hwInstData); 40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(_DEBUG) && !defined(MSC) 41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks HeapCheck(); 41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMalloc 42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Allocates dynamic memory 42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMalloc (EAS_HW_DATA_HANDLE hwInstData, EAS_I32 size) 42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eMallocError]) 43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return NULL; 43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return malloc((size_t) size); 43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFree 43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Frees dynamic memory 44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_HWFree (EAS_HW_DATA_HANDLE hwInstData, void *p) 44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks free(p); 44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemCpy 45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copy memory wrapper 45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMemCpy (void *dest, const void *src, EAS_I32 amount) 45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return memcpy(dest, src, (size_t) amount); 46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 46356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 46456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemSet 46556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 46656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set memory wrapper 46756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMemSet (void *dest, int val, EAS_I32 amount) 47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return memset(dest, val, (size_t) amount); 47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemCmp 47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Compare memory wrapper 48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 EAS_HWMemCmp (const void *s1, const void *s2, EAS_I32 amount) 48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_I32) memcmp(s1, s2, (size_t) amount); 48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef BUFFERED_FILE_ACCESS 48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWOpenFile 49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Open a file for read or write 49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWOpenFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_LOCATOR locator, EAS_FILE_HANDLE *pFile, EAS_FILE_MODE mode) 49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *file; 50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set return value to NULL */ 50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pFile = NULL; 50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* only support read mode at this time */ 50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (mode != EAS_FILE_READ) 50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_FILE_MODE; 50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find an empty entry in the file table */ 51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file = hwInstData->files; 51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is this slot being used? */ 51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->pFile = fopen((const char*) locator, "rb"); 52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_OPEN_FAILED; 52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get file length */ 52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileLength(hwInstData, file, &file->fileSize)) != EAS_SUCCESS) 52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(hwInstData, file); 52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWOpenFile: Open file %d\n", i); 53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some values */ 53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = 0; 53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = 0; 53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->dup = EAS_FALSE; 53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pFile = file; 54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file++; 54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* too many open files */ 54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_FILES_OPEN; 54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFillBuffer 55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Fill buffer from file 55556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 55656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 55756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 55856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFillBuffer (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file) 55956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 56056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reposition the file pointer */ 56156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(file->pFile, file->filePos, SEEK_SET) != 0) 56256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_SEEK; 56356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 56456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read some data from the file */ 56556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = (EAS_I32) fread(file->buffer, 1, EAS_FILE_BUFFER_SIZE, file->pFile); 56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->bytesInBuffer == 0) 56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_EOF; 56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWReadFile 57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read data from a file 57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWReadFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *pBuffer, EAS_I32 n, EAS_I32 *pBytesRead) 58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 temp; 58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 *p = pBuffer; 58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 bytesLeft = n; 58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pBytesRead = 0; 58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWReadFile: Reading %d bytes from position %d\n", n, file->filePos); 59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* try to fulfill request from buffer */ 59856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (;bytesLeft > 0;) 59956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 60056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* how many bytes can we get from buffer? */ 60156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = file->bytesInBuffer - file->readIndex; 60256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp > bytesLeft) 60356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = bytesLeft; 60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 60556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* copy data from buffer */ 60656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemCpy(p, &file->buffer[file->readIndex], temp); 60756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pBytesRead += temp; 60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex += temp; 60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += temp; 61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p += temp; 61156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks bytesLeft -= temp; 61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 61356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* don't refill buffer if request is bigger than buffer */ 61456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((bytesLeft == 0) || (bytesLeft >= EAS_FILE_BUFFER_SIZE)) 61556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 61656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 61756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* refill buffer */ 61856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFillBuffer(hwInstData, file)) != EAS_SUCCESS) 61956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* more to read? do unbuffered read directly to target memory */ 62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (bytesLeft) 62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* position the file pointer */ 62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(file->pFile, file->filePos, SEEK_SET) != 0) 62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_SEEK; 62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read data in the buffer */ 63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = (EAS_I32) fread(p, 1, (size_t) bytesLeft, file->pFile); 63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pBytesRead += temp; 63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += temp; 63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset buffer info */ 63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = 0; 63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define BYTES_PER_LINE 16 64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char str[BYTES_PER_LINE * 3 + 1]; 64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT i; 64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < (n > BYTES_PER_LINE ? BYTES_PER_LINE : n) ; i ++) 64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks sprintf(&str[i*3], "%02x ", ((EAS_U8*)pBuffer)[i]); 64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (i) 64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "%s\n", str); 64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* were n bytes read? */ 65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (*pBytesRead != n) 65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_EOF; 65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetByte 66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a byte from a file 66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetByte (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p) 66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 67156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 67256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 67356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 67556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use local buffer - do we have any data? */ 67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->readIndex >= file->bytesInBuffer) 67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFillBuffer(hwInstData, file)) != EAS_SUCCESS) 67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if nothing to read, return EOF */ 68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->bytesInBuffer == 0) 68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_EOF; 68456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get a character from the buffer */ 68756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U8*) p) = file->buffer[file->readIndex++]; 68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 69056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetByte: Reading from position %d, byte = 0x%02x\n", file->filePos, *(EAS_U8*)p); 69156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos++; 69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 69856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetWord 70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a 16-bit value from the file 70256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst) 70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 count; 70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c[2]; 70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetWord: Reading 2 bytes from position %d\n", file->filePos); 71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read 2 bytes from the file */ 71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWReadFile(hwInstData, file, c, 2, &count)) != EAS_SUCCESS) 71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* order them as requested */ 71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (msbFirst) 72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U16*) p) = ((EAS_U16) c[0] << 8) | c[1]; 72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U16*) p) = ((EAS_U16) c[1] << 8) | c[0]; 72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetDWord 73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a 16-bit value from the file 73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetDWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst) 73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 count; 73856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c[4]; 73956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 74056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 74156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetDWord: Reading 4 bytes from position %d\n", file->filePos); 74256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read 4 bytes from the file */ 74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWReadFile(hwInstData, file, c, 4, &count)) != EAS_SUCCESS) 74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 74856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* order them as requested */ 74956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (msbFirst) 75056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U32*) p) = ((EAS_U32) c[0] << 24) | ((EAS_U32) c[1] << 16) | ((EAS_U32) c[2] << 8) | c[3]; 75156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 75256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U32*) p) = ((EAS_U32) c[3] << 24) | ((EAS_U32) c[2] << 16) | ((EAS_U32) c[1] << 8) | c[0]; 75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 75456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 75556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 75956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFilePos 76056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 76156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file 76256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 76556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFilePos (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pPosition) 76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 77056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 77156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 77256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 77356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pPosition = file->filePos; 77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 77756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeek 78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 78156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek to a specific location in the file 78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 78356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 78456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeek (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position) 78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 78856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 newIndex; 78956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 79056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 79156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 79256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 79356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 79456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for seek past end */ 79556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((position < 0) || (position > file->fileSize)) 79656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_SEEK; 79756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 79856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWFileSeek: Seeking to new position %d\n", file->filePos); 80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 80156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 80256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is new position in current buffer? */ 80356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks newIndex = position - file->filePos + file->readIndex; 80456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((newIndex >= 0) && (newIndex < file->bytesInBuffer)) 80556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 80656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = newIndex; 80756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = position; 80856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 80956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 81056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 81156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save new position and reset buffer info so EAS_HWGetByte doesn't fail */ 81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = position; 81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = 0; 81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 81656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 82056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeekOfs 82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek forward or back relative to the current position 82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 82456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeekOfs (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position) 82856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 82956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 temp; 83056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO 83256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWFileSeekOfs: Seeking to new position %d\n", file->filePos + position); 83356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 83456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 83656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for seek past end */ 84056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = file->filePos + position; 84156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((temp < 0) || (temp > file->fileSize)) 84256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_SEEK; 84356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 84456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is new position in current buffer? */ 84556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = position + file->readIndex; 84656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((temp >= 0) && (temp < file->bytesInBuffer)) 84756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = temp; 84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += position; 85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 85156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 85256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 85356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save new position and reset buffer info so EAS_HWGetByte doesn't fail */ 85456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += position; 85556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->bytesInBuffer = 0; 85656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->readIndex = 0; 85756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 85856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 85956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 86056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 86156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 86256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileLength 86356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 86456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Return the file length 86556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 86656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 86756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 86856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */ 86956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileLength (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pLength) 87056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 87156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks long pos; 87256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 87356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 87456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 87556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 87656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 87756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pos = ftell(file->pFile)) == -1L) 87856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 87956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(file->pFile, 0L, SEEK_END) != 0) 88056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 88156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((*pLength = ftell(file->pFile)) == -1L) 88256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 88356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(file->pFile, pos, SEEK_SET) != 0) 88456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 88556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 88656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 88756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 88856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 88956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 89056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWDupHandle 89156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 89256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Duplicate a file handle 89356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 89456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 89556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 89656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWDupHandle (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_FILE_HANDLE* pDupFile) 89756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 89856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *dupfile; 89956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 90056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 90256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pDupFile = NULL; 90356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->pFile == NULL) 90456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 90556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find an empty entry in the file table */ 90756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile = hwInstData->files; 90856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 90956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 91056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is this slot being used? */ 91156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupfile->pFile == NULL) 91256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 91356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* copy info from the handle to be duplicated */ 91556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->filePos = file->filePos; 91656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->pFile = file->pFile; 91756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->fileSize = file->fileSize; 91856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the duplicate handle flag */ 92056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->dup = file->dup = EAS_TRUE; 92156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 92256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some values */ 92356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->bytesInBuffer = 0; 92456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile->readIndex = 0; 92556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 92656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pDupFile = dupfile; 92756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 92856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 92956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupfile++; 93056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 93156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* too many open files */ 93356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_FILES_OPEN; 93456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 93556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 93756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 93856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWClose 93956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 94056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Wrapper for fclose function 94156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 94256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 94356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 94456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1) 94556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 94656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *file2,*dupFile; 94756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 94856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check handle integrity */ 95056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file1->pFile == NULL) 95156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 95256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for duplicate handle */ 95456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file1->dup) 95556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 95656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile = NULL; 95756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file2 = hwInstData->files; 95856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 95956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 96056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for duplicate */ 96156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((file1 != file2) && (file2->pFile == file1->pFile)) 96256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 96356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is there more than one duplicate? */ 96456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupFile != NULL) 96556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 96656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 96756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->pFile = NULL; 96856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 96956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 97156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* this is the first duplicate found */ 97256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile = file2; 97356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file2++; 97556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 97756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* there is only one duplicate, clear the dup flag */ 97856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupFile) 97956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile->dup = EAS_FALSE; 98056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 98156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we get here, there's a serious problem */ 98256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_HANDLE_INTEGRITY; 98356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 98456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 98556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->pFile = NULL; 98656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 98756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 98856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 98956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no duplicates - close the file */ 99056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fclose(file1->pFile) != 0) 99156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_CLOSE_FAILED; 99256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 99356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 99456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->pFile = NULL; 99556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 99656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 99756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 99856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 99956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 100056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWOpenFile 100156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 100256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Open a file for read or write 100356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 100456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 100556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 100656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWOpenFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_LOCATOR locator, EAS_FILE_HANDLE *pFile, EAS_FILE_MODE mode) 100756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 100856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *file; 100956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks FILE *ioFile; 101056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i, temp; 101156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 101256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set return value to NULL */ 101356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pFile = NULL; 101456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 101556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 101656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eOpenError]) 101756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 101856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 101956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* only support read mode at this time */ 102056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (mode != EAS_FILE_READ) 102156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_FILE_MODE; 102256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 102356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find an empty entry in the file table */ 102456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file = hwInstData->files; 102556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 102656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 102756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is this slot being used? */ 102856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 102956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 103056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 103156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((ioFile = fopen(locator,"rb")) == NULL) 103256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_OPEN_FAILED; 103356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 103456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* determine the file size */ 103556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(ioFile, 0L, SEEK_END) != 0) 103656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 103756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((file->fileSize = ftell(ioFile)) == -1L) 103856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 103956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (fseek(ioFile, 0L, SEEK_SET) != 0) 104056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_LENGTH; 104156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 104256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a buffer */ 104356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->buffer = EAS_HWMalloc(hwInstData, file->fileSize); 104456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 104556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 104656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks fclose(ioFile); 104756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 104856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 104956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 105056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the file into memory */ 105156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = (int) fread(file->buffer, (size_t) file->fileSize, 1, ioFile); 105256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 105356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the file - don't need it any more */ 105456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks fclose(ioFile); 105556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 105656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for error reading file */ 105756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp != 1) 105856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_READ_FAILED; 105956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 106056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some values */ 106156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = 0; 106256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->dup = EAS_FALSE; 106356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 106456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pFile = file; 106556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 106656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 106756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file++; 106856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 106956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 107056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* too many open files */ 107156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_FILES_OPEN; 107256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 107356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 107456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 107556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 107656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWReadFile 107756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 107856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read data from a file 107956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 108056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 108156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 108256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 108356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWReadFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *pBuffer, EAS_I32 n, EAS_I32 *pBytesRead) 108456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 108556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 count; 108656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 108756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 108856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eReadError]) 108956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 109056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 109156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure we have a valid handle */ 109256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 109356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 109456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 109556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate the bytes to read */ 109656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks count = file->fileSize - file->filePos; 109756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (n < count) 109856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks count = n; 109956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 110056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* copy the data to the requested location, and advance the pointer */ 110156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (count) 110256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemCpy(pBuffer, &file->buffer[file->filePos], count); 110356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos += count; 110456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pBytesRead = count; 110556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 110656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* were n bytes read? */ 110756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (count!= n) 110856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_EOF; 110956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 111056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 111156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 111256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 111356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 111456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetByte 111556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 111656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a byte from a file 111756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 111856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 111956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 112056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -e{715} hwInstData available for customer use */ 112156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetByte (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p) 112256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 112356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 112456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 112556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eReadError]) 112656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 112756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 112856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure we have a valid handle */ 112956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 113056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 113156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 113256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for end of file */ 113356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->filePos >= file->fileSize) 113456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 113556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U8*) p) = 0; 113656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_EOF; 113756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 113856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 113956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get a character from the buffer */ 114056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U8*) p) = file->buffer[file->filePos++]; 114156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 114256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 114356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 114456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 114556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 114656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetWord 114756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 114856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file 114956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 115056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 115156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 115256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 115356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst) 115456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 115556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 115656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c1, c2; 115756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 115856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read 2 bytes from the file */ 115956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetByte(hwInstData, file, &c1)) != EAS_SUCCESS) 116056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 116156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetByte(hwInstData, file, &c2)) != EAS_SUCCESS) 116256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 116356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 116456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* order them as requested */ 116556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (msbFirst) 116656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U16*) p) = ((EAS_U16) c1 << 8) | c2; 116756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 116856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U16*) p) = ((EAS_U16) c2 << 8) | c1; 116956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 117056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 117156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 117256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 117356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 117456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 117556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetDWord 117656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 117756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file 117856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 117956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 118056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 118156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 118256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetDWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst) 118356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 118456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 118556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c1, c2,c3,c4; 118656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 118756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read 4 bytes from the file */ 118856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetByte(hwInstData, file, &c1)) != EAS_SUCCESS) 118956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 119056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetByte(hwInstData, file, &c2)) != EAS_SUCCESS) 119156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 119256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetByte(hwInstData, file, &c3)) != EAS_SUCCESS) 119356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 119456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetByte(hwInstData, file, &c4)) != EAS_SUCCESS) 119556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 119656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 119756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* order them as requested */ 119856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (msbFirst) 119956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U32*) p) = ((EAS_U32) c1 << 24) | ((EAS_U32) c2 << 16) | ((EAS_U32) c3 << 8) | c4; 120056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 120156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *((EAS_U32*) p)= ((EAS_U32) c4 << 24) | ((EAS_U32) c3 << 16) | ((EAS_U32) c2 << 8) | c1; 120256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 120356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 120456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 120556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 120656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 120756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 120856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFilePos 120956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 121056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file 121156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 121256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 121356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 121456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 121556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFilePos (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pPosition) 121656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 121756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 121856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 121956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[ePosError]) 122056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 122156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 122256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure we have a valid handle */ 122356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 122456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 122556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 122656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pPosition = file->filePos; 122756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 122856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EAS_HWFilePos */ 122956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 123056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 123156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 123256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeek 123356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 123456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek to a specific location in the file 123556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 123656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 123756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 123856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 123956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeek (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position) 124056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 124156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 124256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 124356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eSeekError]) 124456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 124556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 124656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure we have a valid handle */ 124756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 124856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 124956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* validate new position */ 125156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((position < 0) || (position > file->fileSize)) 125256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_SEEK; 125356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save new position */ 125556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = position; 125656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 125756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 125856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 126056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 126156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeekOfs 126256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 126356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek forward or back relative to the current position 126456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 126556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 126656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 126756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 126856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeekOfs (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position) 126956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 127056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 127256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eSeekError]) 127356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 127456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure we have a valid handle */ 127656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 127756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 127856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* determine the file position */ 128056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks position += file->filePos; 128156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((position < 0) || (position > file->fileSize)) 128256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_SEEK; 128356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 128456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save new position */ 128556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file->filePos = position; 128656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 128756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 128856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 128956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 129056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 129156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileLength 129256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 129356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Return the file length 129456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 129556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 129656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 129756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 129856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileLength (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pLength) 129956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 130056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 130156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 130256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eLengthError]) 130356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 130456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 130556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure we have a valid handle */ 130656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 130756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 130856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 130956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pLength = file->fileSize; 131056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 131156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 131256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 131356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 131456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 131556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWDupHandle 131656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 131756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Duplicate a file handle 131856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 131956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 132056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 132156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWDupHandle (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_FILE_HANDLE *pDupFile) 132256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 132356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *dupFile; 132456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 132556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 132656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 132756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eDupError]) 132856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 132956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 133056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure we have a valid handle */ 133156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file->buffer == NULL) 133256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 133356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 133456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find an empty entry in the file table */ 133556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile = hwInstData->files; 133656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 133756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 133856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is this slot being used? */ 133956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupFile->buffer == NULL) 134056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 134156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 134256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* copy info from the handle to be duplicated */ 134356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile->filePos = file->filePos; 134456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile->fileSize = file->fileSize; 134556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile->buffer = file->buffer; 134656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 134756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the duplicate handle flag */ 134856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile->dup = file->dup = EAS_TRUE; 134956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 135056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pDupFile = dupFile; 135156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 135256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 135356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile++; 135456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 135556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 135656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* too many open files */ 135756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_FILES_OPEN; 135856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 135956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 136156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 136256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWClose 136356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 136456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Wrapper for fclose function 136556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 136656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 136756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 136856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1) 136956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 137056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_FILE *file2,*dupFile; 137156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 137256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* simulate failure */ 137456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (errorConditions[eCloseError]) 137556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 137656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure we have a valid handle */ 137856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file1->buffer == NULL) 137956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_HANDLE; 138056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 138156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for duplicate handle */ 138256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (file1->dup) 138356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 138456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile = NULL; 138556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file2 = hwInstData->files; 138656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) 138756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 138856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for duplicate */ 138956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((file1 != file2) && (file2->buffer == file1->buffer)) 139056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 139156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is there more than one duplicate? */ 139256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupFile != NULL) 139356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 139456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 139556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->buffer = NULL; 139656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 139756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 139856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 139956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* this is the first duplicate found */ 140056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 140156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile = file2; 140256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 140356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file2++; 140456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 140556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 140656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* there is only one duplicate, clear the dup flag */ 140756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dupFile) 140856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dupFile->dup = EAS_FALSE; 140956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 141056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we get here, there's a serious problem */ 141156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_HANDLE_INTEGRITY; 141256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 141356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 141456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->buffer = NULL; 141556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 141656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 141756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 141856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no duplicates -free the buffer */ 141956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(hwInstData, file1->buffer); 142056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 142156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear this entry and return */ 142256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file1->buffer = NULL; 142356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 142456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 142556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 142656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 142756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 142856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 142956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWVibrate 143056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 143156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off vibrate function 143256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 143356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 143456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 143556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 143656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWVibrate (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state) 143756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 143856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks vibState = state; 143956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// EAS_ReportX(_EAS_SEVERITY_NOFILTER, "Vibrate state: %d\n", state); 144056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 144156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EAS_HWVibrate */ 144256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 144356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 144456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 144556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWLED 144656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 144756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off LED 144856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 144956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 145056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 145156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 145256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWLED (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state) 145356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 145456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks ledState = state; 145556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// EAS_ReportX(_EAS_SEVERITY_NOFILTER, "LED state: %d\n", state); 145656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 145756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 145856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 145956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 146056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 146156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWBackLight 146256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 146356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off backlight 146456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 146556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 146656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 146756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 146856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWBackLight (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state) 146956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 147056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks backlightState = state; 147156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// EAS_ReportX(_EAS_SEVERITY_NOFILTER, "Backlight state: %d\n", state); 147256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 147356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 147456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 147556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 147656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 147756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWYield 147856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 147956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This function is called periodically by the EAS library to give the 148056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * host an opportunity to allow other tasks to run. There are two ways to 148156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * use this call: 148256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 148356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If you have a multi-tasking OS, you can call the yield function in the 148456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * OS to allow other tasks to run. In this case, return EAS_FALSE to tell 148556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the EAS library to continue processing when control returns from this 148656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * function. 148756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 148856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If tasks run in a single thread by sequential function calls (sometimes 148956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * call a "commutator loop"), return EAS_TRUE to cause the EAS Library to 149056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * return to the caller. Be sure to check the number of bytes rendered 149156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * before passing the audio buffer to the codec - it may not be filled. 149256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * The next call to EAS_Render will continue processing until the buffer 149356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * has been filled. 149456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 149556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 149656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 149756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */ 149856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL EAS_HWYield (EAS_HW_DATA_HANDLE hwInstData) 149956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 150056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* put your code here */ 150156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 150256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 150356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 150456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 1505