eas_hostmm.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. /*----------------------------------------------------------------------------
  2. *
  3. * File:
  4. * eas_hostmm.c
  5. *
  6. * Contents and purpose:
  7. * This file contains the host wrapper functions for stdio, stdlib, etc.
  8. * This is a sample version that maps the requested files to an
  9. * allocated memory block and uses in-memory pointers to replace
  10. * file system calls. The file locator (EAS_FILE_LOCATOR) handle passed
  11. * HWOpenFile is the same one that is passed to EAS_OpenFile. If your
  12. * system stores data in fixed locations (such as flash) instead of
  13. * using a file system, you can use the locator handle to point to
  14. * your memory. You will need a way of knowing the length of the
  15. * data stored at that location in order to respond correctly in the
  16. * HW_FileLength function.
  17. *
  18. * Modify this file to suit the needs of your particular system.
  19. *
  20. * EAS_MAX_FILE_HANDLES sets the maximum number of MIDI streams within
  21. * a MIDI type 1 file that can be played.
  22. *
  23. * EAS_HW_FILE is a structure to support the file I/O functions. It
  24. * comprises the base memory pointer, the file read pointer, and
  25. * the dup flag, which when sets, indicates that the file handle has
  26. * been duplicated. If your system uses in-memory resources, you
  27. * can eliminate the duplicate handle logic, and simply copy the
  28. * base memory pointer and file read pointer to the duplicate handle.
  29. *
  30. * Copyright 2005 Sonic Network Inc.
  31. * Licensed under the Apache License, Version 2.0 (the "License");
  32. * you may not use this file except in compliance with the License.
  33. * You may obtain a copy of the License at
  34. *
  35. * http://www.apache.org/licenses/LICENSE-2.0
  36. *
  37. * Unless required by applicable law or agreed to in writing, software
  38. * distributed under the License is distributed on an "AS IS" BASIS,
  39. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  40. * See the License for the specific language governing permissions and
  41. * limitations under the License.
  42. *
  43. *----------------------------------------------------------------------------
  44. * Revision Control:
  45. * $Revision: 795 $
  46. * $Date: 2007-08-01 00:14:45 -0700 (Wed, 01 Aug 2007) $
  47. *----------------------------------------------------------------------------
  48. */
  49. #ifdef _lint
  50. #include "lint_stdlib.h"
  51. #else
  52. #include <stdio.h>
  53. #include <stdlib.h>
  54. #include <string.h>
  55. #endif
  56. #include "eas_host.h"
  57. /* Only for debugging LED, vibrate, and backlight functions */
  58. #include "eas_report.h"
  59. /* this module requires dynamic memory support */
  60. #ifdef _STATIC_MEMORY
  61. #error "eas_hostmm.c requires the dynamic memory model!\n"
  62. #endif
  63. #ifndef EAS_MAX_FILE_HANDLES
  64. #define EAS_MAX_FILE_HANDLES 32
  65. #endif
  66. /*
  67. * this structure and the related function are here
  68. * to support the ability to create duplicate handles
  69. * and buffering it in memory. If your system uses
  70. * in-memory resources, you can eliminate the calls
  71. * to malloc and free, the dup flag, and simply track
  72. * the file size and read position.
  73. */
  74. typedef struct eas_hw_file_tag
  75. {
  76. EAS_I32 fileSize;
  77. EAS_I32 filePos;
  78. EAS_BOOL dup;
  79. EAS_U8 *buffer;
  80. } EAS_HW_FILE;
  81. typedef struct eas_hw_inst_data_tag
  82. {
  83. EAS_HW_FILE files[EAS_MAX_FILE_HANDLES];
  84. } EAS_HW_INST_DATA;
  85. /*----------------------------------------------------------------------------
  86. * EAS_HWInit
  87. *
  88. * Initialize host wrapper interface
  89. *
  90. *----------------------------------------------------------------------------
  91. */
  92. EAS_RESULT EAS_HWInit (EAS_HW_DATA_HANDLE *pHWInstData)
  93. {
  94. /* need to track file opens for duplicate handles */
  95. *pHWInstData = malloc(sizeof(EAS_HW_INST_DATA));
  96. if (!(*pHWInstData))
  97. return EAS_ERROR_MALLOC_FAILED;
  98. EAS_HWMemSet(*pHWInstData, 0, sizeof(EAS_HW_INST_DATA));
  99. return EAS_SUCCESS;
  100. }
  101. /*----------------------------------------------------------------------------
  102. * EAS_HWShutdown
  103. *
  104. * Shut down host wrapper interface
  105. *
  106. *----------------------------------------------------------------------------
  107. */
  108. EAS_RESULT EAS_HWShutdown (EAS_HW_DATA_HANDLE hwInstData)
  109. {
  110. free(hwInstData);
  111. return EAS_SUCCESS;
  112. }
  113. /*----------------------------------------------------------------------------
  114. *
  115. * EAS_HWMalloc
  116. *
  117. * Allocates dynamic memory
  118. *
  119. *----------------------------------------------------------------------------
  120. */
  121. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  122. void *EAS_HWMalloc (EAS_HW_DATA_HANDLE hwInstData, EAS_I32 size)
  123. {
  124. return malloc((size_t) size);
  125. }
  126. /*----------------------------------------------------------------------------
  127. *
  128. * EAS_HWFree
  129. *
  130. * Frees dynamic memory
  131. *
  132. *----------------------------------------------------------------------------
  133. */
  134. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  135. void EAS_HWFree (EAS_HW_DATA_HANDLE hwInstData, void *p)
  136. {
  137. free(p);
  138. }
  139. /*----------------------------------------------------------------------------
  140. *
  141. * EAS_HWMemCpy
  142. *
  143. * Copy memory wrapper
  144. *
  145. *----------------------------------------------------------------------------
  146. */
  147. void *EAS_HWMemCpy (void *dest, const void *src, EAS_I32 amount)
  148. {
  149. return memcpy(dest, src, (size_t) amount);
  150. }
  151. /*----------------------------------------------------------------------------
  152. *
  153. * EAS_HWMemSet
  154. *
  155. * Set memory wrapper
  156. *
  157. *----------------------------------------------------------------------------
  158. */
  159. void *EAS_HWMemSet (void *dest, int val, EAS_I32 amount)
  160. {
  161. return memset(dest, val, (size_t) amount);
  162. }
  163. /*----------------------------------------------------------------------------
  164. *
  165. * EAS_HWMemCmp
  166. *
  167. * Compare memory wrapper
  168. *
  169. *----------------------------------------------------------------------------
  170. */
  171. EAS_I32 EAS_HWMemCmp (const void *s1, const void *s2, EAS_I32 amount)
  172. {
  173. return (EAS_I32) memcmp(s1, s2, (size_t) amount);
  174. }
  175. /*----------------------------------------------------------------------------
  176. *
  177. * EAS_HWOpenFile
  178. *
  179. * Open a file for read or write
  180. *
  181. *----------------------------------------------------------------------------
  182. */
  183. EAS_RESULT EAS_HWOpenFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_LOCATOR locator, EAS_FILE_HANDLE *pFile, EAS_FILE_MODE mode)
  184. {
  185. EAS_HW_FILE *file;
  186. FILE *ioFile;
  187. int i, temp;
  188. /* set return value to NULL */
  189. *pFile = NULL;
  190. /* only support read mode at this time */
  191. if (mode != EAS_FILE_READ)
  192. return EAS_ERROR_INVALID_FILE_MODE;
  193. /* find an empty entry in the file table */
  194. file = hwInstData->files;
  195. for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
  196. {
  197. /* is this slot being used? */
  198. if (file->buffer == NULL)
  199. {
  200. /* open the file */
  201. if ((ioFile = fopen(locator,"rb")) == NULL)
  202. return EAS_ERROR_FILE_OPEN_FAILED;
  203. /* determine the file size */
  204. if (fseek(ioFile, 0L, SEEK_END) != 0)
  205. return EAS_ERROR_FILE_LENGTH;
  206. if ((file->fileSize = ftell(ioFile)) == -1L)
  207. return EAS_ERROR_FILE_LENGTH;
  208. if (fseek(ioFile, 0L, SEEK_SET) != 0)
  209. return EAS_ERROR_FILE_LENGTH;
  210. /* allocate a buffer */
  211. file->buffer = EAS_HWMalloc(hwInstData, file->fileSize);
  212. if (file->buffer == NULL)
  213. {
  214. fclose(ioFile);
  215. return EAS_ERROR_MALLOC_FAILED;
  216. }
  217. /* read the file into memory */
  218. temp = (int) fread(file->buffer, (size_t) file->fileSize, 1, ioFile);
  219. /* close the file - don't need it any more */
  220. fclose(ioFile);
  221. /* check for error reading file */
  222. if (temp != 1)
  223. return EAS_ERROR_FILE_READ_FAILED;
  224. /* initialize some values */
  225. file->filePos = 0;
  226. file->dup = EAS_FALSE;
  227. *pFile = file;
  228. return EAS_SUCCESS;
  229. }
  230. file++;
  231. }
  232. /* too many open files */
  233. return EAS_ERROR_MAX_FILES_OPEN;
  234. }
  235. /*----------------------------------------------------------------------------
  236. *
  237. * EAS_HWReadFile
  238. *
  239. * Read data from a file
  240. *
  241. *----------------------------------------------------------------------------
  242. */
  243. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  244. EAS_RESULT EAS_HWReadFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *pBuffer, EAS_I32 n, EAS_I32 *pBytesRead)
  245. {
  246. EAS_I32 count;
  247. /* make sure we have a valid handle */
  248. if (file->buffer == NULL)
  249. return EAS_ERROR_INVALID_HANDLE;
  250. /* calculate the bytes to read */
  251. count = file->fileSize - file->filePos;
  252. if (n < count)
  253. count = n;
  254. /* copy the data to the requested location, and advance the pointer */
  255. if (count)
  256. EAS_HWMemCpy(pBuffer, &file->buffer[file->filePos], count);
  257. file->filePos += count;
  258. *pBytesRead = count;
  259. /* were n bytes read? */
  260. if (count!= n)
  261. return EAS_EOF;
  262. return EAS_SUCCESS;
  263. }
  264. /*----------------------------------------------------------------------------
  265. *
  266. * EAS_HWGetByte
  267. *
  268. * Read a byte from a file
  269. *
  270. *----------------------------------------------------------------------------
  271. */
  272. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  273. EAS_RESULT EAS_HWGetByte (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p)
  274. {
  275. /* make sure we have a valid handle */
  276. if (file->buffer == NULL)
  277. return EAS_ERROR_INVALID_HANDLE;
  278. /* check for end of file */
  279. if (file->filePos >= file->fileSize)
  280. {
  281. *((EAS_U8*) p) = 0;
  282. return EAS_EOF;
  283. }
  284. /* get a character from the buffer */
  285. *((EAS_U8*) p) = file->buffer[file->filePos++];
  286. return EAS_SUCCESS;
  287. }
  288. /*----------------------------------------------------------------------------
  289. *
  290. * EAS_HWGetWord
  291. *
  292. * Returns the current location in the file
  293. *
  294. *----------------------------------------------------------------------------
  295. */
  296. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  297. EAS_RESULT EAS_HWGetWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
  298. {
  299. EAS_RESULT result;
  300. EAS_U8 c1, c2;
  301. /* read 2 bytes from the file */
  302. if ((result = EAS_HWGetByte(hwInstData, file, &c1)) != EAS_SUCCESS)
  303. return result;
  304. if ((result = EAS_HWGetByte(hwInstData, file, &c2)) != EAS_SUCCESS)
  305. return result;
  306. /* order them as requested */
  307. if (msbFirst)
  308. *((EAS_U16*) p) = ((EAS_U16) c1 << 8) | c2;
  309. else
  310. *((EAS_U16*) p) = ((EAS_U16) c2 << 8) | c1;
  311. return EAS_SUCCESS;
  312. }
  313. /*----------------------------------------------------------------------------
  314. *
  315. * EAS_HWGetDWord
  316. *
  317. * Returns the current location in the file
  318. *
  319. *----------------------------------------------------------------------------
  320. */
  321. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  322. EAS_RESULT EAS_HWGetDWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
  323. {
  324. EAS_RESULT result;
  325. EAS_U8 c1, c2,c3,c4;
  326. /* read 4 bytes from the file */
  327. if ((result = EAS_HWGetByte(hwInstData, file, &c1)) != EAS_SUCCESS)
  328. return result;
  329. if ((result = EAS_HWGetByte(hwInstData, file, &c2)) != EAS_SUCCESS)
  330. return result;
  331. if ((result = EAS_HWGetByte(hwInstData, file, &c3)) != EAS_SUCCESS)
  332. return result;
  333. if ((result = EAS_HWGetByte(hwInstData, file, &c4)) != EAS_SUCCESS)
  334. return result;
  335. /* order them as requested */
  336. if (msbFirst)
  337. *((EAS_U32*) p) = ((EAS_U32) c1 << 24) | ((EAS_U32) c2 << 16) | ((EAS_U32) c3 << 8) | c4;
  338. else
  339. *((EAS_U32*) p)= ((EAS_U32) c4 << 24) | ((EAS_U32) c3 << 16) | ((EAS_U32) c2 << 8) | c1;
  340. return EAS_SUCCESS;
  341. }
  342. /*----------------------------------------------------------------------------
  343. *
  344. * EAS_HWFilePos
  345. *
  346. * Returns the current location in the file
  347. *
  348. *----------------------------------------------------------------------------
  349. */
  350. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  351. EAS_RESULT EAS_HWFilePos (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pPosition)
  352. {
  353. /* make sure we have a valid handle */
  354. if (file->buffer == NULL)
  355. return EAS_ERROR_INVALID_HANDLE;
  356. *pPosition = file->filePos;
  357. return EAS_SUCCESS;
  358. } /* end EAS_HWFilePos */
  359. /*----------------------------------------------------------------------------
  360. *
  361. * EAS_HWFileSeek
  362. *
  363. * Seek to a specific location in the file
  364. *
  365. *----------------------------------------------------------------------------
  366. */
  367. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  368. EAS_RESULT EAS_HWFileSeek (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
  369. {
  370. /* make sure we have a valid handle */
  371. if (file->buffer == NULL)
  372. return EAS_ERROR_INVALID_HANDLE;
  373. /* validate new position */
  374. if ((position < 0) || (position > file->fileSize))
  375. return EAS_ERROR_FILE_SEEK;
  376. /* save new position */
  377. file->filePos = position;
  378. return EAS_SUCCESS;
  379. }
  380. /*----------------------------------------------------------------------------
  381. *
  382. * EAS_HWFileSeekOfs
  383. *
  384. * Seek forward or back relative to the current position
  385. *
  386. *----------------------------------------------------------------------------
  387. */
  388. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  389. EAS_RESULT EAS_HWFileSeekOfs (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
  390. {
  391. /* make sure we have a valid handle */
  392. if (file->buffer == NULL)
  393. return EAS_ERROR_INVALID_HANDLE;
  394. /* determine the file position */
  395. position += file->filePos;
  396. if ((position < 0) || (position > file->fileSize))
  397. return EAS_ERROR_FILE_SEEK;
  398. /* save new position */
  399. file->filePos = position;
  400. return EAS_SUCCESS;
  401. }
  402. /*----------------------------------------------------------------------------
  403. *
  404. * EAS_HWFileLength
  405. *
  406. * Return the file length
  407. *
  408. *----------------------------------------------------------------------------
  409. */
  410. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  411. EAS_RESULT EAS_HWFileLength (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pLength)
  412. {
  413. /* make sure we have a valid handle */
  414. if (file->buffer == NULL)
  415. return EAS_ERROR_INVALID_HANDLE;
  416. *pLength = file->fileSize;
  417. return EAS_SUCCESS;
  418. }
  419. /*----------------------------------------------------------------------------
  420. *
  421. * EAS_HWDupHandle
  422. *
  423. * Duplicate a file handle
  424. *
  425. *----------------------------------------------------------------------------
  426. */
  427. EAS_RESULT EAS_HWDupHandle (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_FILE_HANDLE *pDupFile)
  428. {
  429. EAS_HW_FILE *dupFile;
  430. int i;
  431. /* make sure we have a valid handle */
  432. if (file->buffer == NULL)
  433. return EAS_ERROR_INVALID_HANDLE;
  434. /* find an empty entry in the file table */
  435. dupFile = hwInstData->files;
  436. for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
  437. {
  438. /* is this slot being used? */
  439. if (dupFile->buffer == NULL)
  440. {
  441. /* copy info from the handle to be duplicated */
  442. dupFile->filePos = file->filePos;
  443. dupFile->fileSize = file->fileSize;
  444. dupFile->buffer = file->buffer;
  445. /* set the duplicate handle flag */
  446. dupFile->dup = file->dup = EAS_TRUE;
  447. *pDupFile = dupFile;
  448. return EAS_SUCCESS;
  449. }
  450. dupFile++;
  451. }
  452. /* too many open files */
  453. return EAS_ERROR_MAX_FILES_OPEN;
  454. }
  455. /*----------------------------------------------------------------------------
  456. *
  457. * EAS_HWClose
  458. *
  459. * Wrapper for fclose function
  460. *
  461. *----------------------------------------------------------------------------
  462. */
  463. EAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1)
  464. {
  465. EAS_HW_FILE *file2,*dupFile;
  466. int i;
  467. /* make sure we have a valid handle */
  468. if (file1->buffer == NULL)
  469. return EAS_ERROR_INVALID_HANDLE;
  470. /* check for duplicate handle */
  471. if (file1->dup)
  472. {
  473. dupFile = NULL;
  474. file2 = hwInstData->files;
  475. for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
  476. {
  477. /* check for duplicate */
  478. if ((file1 != file2) && (file2->buffer == file1->buffer))
  479. {
  480. /* is there more than one duplicate? */
  481. if (dupFile != NULL)
  482. {
  483. /* clear this entry and return */
  484. file1->buffer = NULL;
  485. return EAS_SUCCESS;
  486. }
  487. /* this is the first duplicate found */
  488. else
  489. dupFile = file2;
  490. }
  491. file2++;
  492. }
  493. /* there is only one duplicate, clear the dup flag */
  494. if (dupFile)
  495. dupFile->dup = EAS_FALSE;
  496. else
  497. /* if we get here, there's a serious problem */
  498. return EAS_ERROR_HANDLE_INTEGRITY;
  499. /* clear this entry and return */
  500. file1->buffer = NULL;
  501. return EAS_SUCCESS;
  502. }
  503. /* no duplicates -free the buffer */
  504. EAS_HWFree(hwInstData, file1->buffer);
  505. /* clear this entry and return */
  506. file1->buffer = NULL;
  507. return EAS_SUCCESS;
  508. }
  509. /*----------------------------------------------------------------------------
  510. *
  511. * EAS_HWVibrate
  512. *
  513. * Turn on/off vibrate function
  514. *
  515. *----------------------------------------------------------------------------
  516. */
  517. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  518. EAS_RESULT EAS_HWVibrate (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
  519. {
  520. EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000001 , state);
  521. return EAS_SUCCESS;
  522. } /* end EAS_HWVibrate */
  523. /*----------------------------------------------------------------------------
  524. *
  525. * EAS_HWLED
  526. *
  527. * Turn on/off LED
  528. *
  529. *----------------------------------------------------------------------------
  530. */
  531. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  532. EAS_RESULT EAS_HWLED (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
  533. {
  534. EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000002 , state);
  535. return EAS_SUCCESS;
  536. }
  537. /*----------------------------------------------------------------------------
  538. *
  539. * EAS_HWBackLight
  540. *
  541. * Turn on/off backlight
  542. *
  543. *----------------------------------------------------------------------------
  544. */
  545. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  546. EAS_RESULT EAS_HWBackLight (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
  547. {
  548. EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x1a54b6e8, 0x00000003 , state);
  549. return EAS_SUCCESS;
  550. }
  551. /*----------------------------------------------------------------------------
  552. *
  553. * EAS_HWYield
  554. *
  555. * This function is called periodically by the EAS library to give the
  556. * host an opportunity to allow other tasks to run. There are two ways to
  557. * use this call:
  558. *
  559. * If you have a multi-tasking OS, you can call the yield function in the
  560. * OS to allow other tasks to run. In this case, return EAS_FALSE to tell
  561. * the EAS library to continue processing when control returns from this
  562. * function.
  563. *
  564. * If tasks run in a single thread by sequential function calls (sometimes
  565. * call a "commutator loop"), return EAS_TRUE to cause the EAS Library to
  566. * return to the caller. Be sure to check the number of bytes rendered
  567. * before passing the audio buffer to the codec - it may not be filled.
  568. * The next call to EAS_Render will continue processing until the buffer
  569. * has been filled.
  570. *
  571. *----------------------------------------------------------------------------
  572. */
  573. /*lint -esym(715, hwInstData) hwInstData available for customer use */
  574. EAS_BOOL EAS_HWYield (EAS_HW_DATA_HANDLE hwInstData)
  575. {
  576. /* put your code here */
  577. return EAS_FALSE;
  578. }