diff options
author | Marcel Lauwerijssen <paranoya@morphcore.com> | 2005-01-31 15:49:47 (GMT) |
---|---|---|
committer | Marcel Lauwerijssen <paranoya@morphcore.com> | 2005-01-31 15:49:47 (GMT) |
commit | ae4f889173bee22e73f2ee471ebfb74d50bba418 (patch) | |
tree | 7da1510c97552bc3e445379ee81b277f25550334 | |
parent | 6fab3c2a10d5fbd28fff1468de36a38382c70707 (diff) | |
download | TASS-ae4f889173bee22e73f2ee471ebfb74d50bba418.zip TASS-ae4f889173bee22e73f2ee471ebfb74d50bba418.tar.gz TASS-ae4f889173bee22e73f2ee471ebfb74d50bba418.tar.bz2 |
Removed carriage returns, added SmartMedia_set_address function
-rw-r--r-- | Graphic_Equalizer/src/smartmedia.hcc | 759 |
1 files changed, 386 insertions, 373 deletions
diff --git a/Graphic_Equalizer/src/smartmedia.hcc b/Graphic_Equalizer/src/smartmedia.hcc index 0fa0c97..1837a6f 100644 --- a/Graphic_Equalizer/src/smartmedia.hcc +++ b/Graphic_Equalizer/src/smartmedia.hcc @@ -1,252 +1,252 @@ -/*! \file smartmedia.hcc
- *
- * \section generic Here we interface with the SmartMedia card.
- *
- * \section project Project information.
- * Project Graphic Equalizer\n
- * \author O.M. Schinagl
- * \date 20041110
- * \version 0.1
- *
- * \section copyright Copyright
- * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved
- *
- * \section history Change history
- * 20041110: O.M. Schinagl\n Initial version
- *
- ********************************************************************/
-
-/******** System Includes *************/
-#include <stdlib.hch>
-
-#include "pal_master.hch"
-
-/******** Application Includes ********/
-#include "configuration.hch"
-#include "display_shared.hch"
-#include "smartmedia_shared.hch"
-#include "smartmedia.hch"
-
-#if HAVE_DEBUG
- #include "debug.hch"
-#endif
-
-#include "audio.hch"
-#include "mouse_shared.hch"
-#include "eventhandler_shared.hch"
-#include "display.hch" /* FIXME: temporary include, needs to be moved to 'init' */
-
-
-unsigned 1 physical_format;
-
-/*! \fn unsigned 1 smartmedia_init(void);
- * \brief We here initialize the Smart Media card and verify wether the
- * card is inserted and such.
- *
- * \return We return 0 on success, 1 on error.
- * \retval unsigned 1
- */
-inline unsigned 1 smartmedia_init(void) {
- unsigned 1 retval;
- /*
- * Firstly we enable both the CPLD.
- */
- RC200CPLDEnable();
-
- /*
- * We must reset the Smart Media before initializing it. If we don't reset it
- * we get a lot of Init failures. If we don't use the delay, we get a lot of
- * init failures.
- */
- RC200SmartMediaReset(&retval);
- delay;
- RC200SmartMediaInit(&retval);
-
-
- /*
- * Before we enter our main Smart Media read loop we verify the format
- * of the SMC. This to ensure we use the correct functions later.
- */
- RC200SmartMediaCheckLogicalFormat(&physical_format);
-
- return retval;
-} /* --- smartmedia_init() --- */
-
-
-
-/*! \fn void smartmedia_loaddata(skindata_t *skindata);
- * \brief We load our memory with skin and help data from the smartmedia.
- *
- * \param *skindata skindata like boundries and colors of elements.
- *
- * \return void
- * \retval void
- */
-void smartmedia_loaddata(skindata_t *skindata) {
- /*
- * Setup RAM Handle, and determin maximum Data and Address widths
- *
- * FIXME: Currently we set the Ram handle here and in the main. If we
- * would want to change it here, also change it elsewhere. A better
- * solution would be to have the RAM_BANK0 macro defined somewhere
- * globally.
- */
- macro expr RAM_BANK0 = PalPL2RAMCT(0);
- macro expr DW = PalPL2RAMGetMaxDataWidthCT();
- macro expr AW = PalPL2RAMGetMaxAddressWidthCT();
-
- unsigned DW data;
- unsigned 27 sm_address;
- unsigned AW address, address_end;
- unsigned 8 mask, r, g, b;
- unsigned 4 stage;
- unsigned 1 result;
-
- extern ram unsigned 8 presets_default_values[768];
-
- /*
- * We have several stages to go through. We stop once we pass the last
- * one.
- */
- while ((STAGE_LOAD_ABOUT_BOTTOM +1) != stage) {
- /*
- * For each iteration of the main loop we set a different
- * start and end variables.
- */
- switch (stage) {
- case STAGE_LOAD_DEMO_PRESET:
- sm_address = SMARTMEDIA_ADDRESS_PRESET_DEMO_START;
- address = INDEX_PRESET_DEMO_START;
- address_end = INDEX_PRESET_DEMO_END;
- break;
- case STAGE_LOAD_RESET_PRESET:
- sm_address = SMARTMEDIA_ADDRESS_PRESET_RESET_START;
- address = INDEX_PRESET_RESET_START;
- address_end = INDEX_PRESET_RESET_END;
- break;
- case STAGE_LOAD_SKIN:
- sm_address = SMARTMEDIA_ADDRESS_SKIN_START;
- address = ADDRESS_SKIN_START;
- address_end = ADDRESS_SKIN_END;
- break;
- case STAGE_LOAD_HELP:
- sm_address = SMARTMEDIA_ADDRESS_HELP_START;
- address = ADDRESS_HELP_START;
- address_end = ADDRESS_HELP_END;
- break;
- case STAGE_LOAD_GRAPH:
- sm_address = SMARTMEDIA_ADDRESS_GRAPH_START;
- address = ADDRESS_GRAPH_START;
- address_end = ADDRESS_GRAPH_END;
- break;
- case STAGE_LOAD_TOP_FONTYS:
- sm_address = SMARTMEDIA_ADDRESS_TOP_FONTYS_START;
- address = ADDRESS_ABOUT_TOP_FONTYS_START;
- address_end = ADDRESS_ABOUT_TOP_FONTYS_END;
- break;
- case STAGE_LOAD_TOP_TASS:
- sm_address = SMARTMEDIA_ADDRESS_TOP_TASS_START;
- address = ADDRESS_ABOUT_TOP_TASS_START;
- address_end = ADDRESS_ABOUT_TOP_TASS_END;
- break;
- case STAGE_LOAD_TOP_TRANSFER:
- sm_address = SMARTMEDIA_ADDRESS_TOP_TRANSFER_START;
- address = ADDRESS_ABOUT_TOP_TRANSFER_START;
- address_end = ADDRESS_ABOUT_TOP_TRANSFER_END;
- break;
- case STAGE_LOAD_TOP_CELOXICA:
- sm_address = SMARTMEDIA_ADDRESS_TOP_CELOXICA_START;
- address = ADDRESS_ABOUT_TOP_CELOXICA_START;
- address_end = ADDRESS_ABOUT_TOP_CELOXICA_END;
- break;
-/*
- case STAGE_LOAD_TOP_DETAILS:
- sm_address = SMARTMEDIA_ADDRESS_TOP_DETAILS_START;
- address = ADDRESS_ABOUT_TOP_DETAILS_START;
- address_end = ADDRESS_ABOUT_TOP_DETAILS_END;
- break;
-*/
- case STAGE_LOAD_ABOUT_BOTTOM:
- sm_address = SMARTMEDIA_ADDRESS_BOTTOM_START;
- address = ADDRESS_ABOUT_BOTTOM_START;
- address_end = ADDRESS_ABOUT_BOTTOM_END;
- break;
- default:
- break;
- }
- /*
- * TODO: Replace the above switch-case with a lookuptables.
- */
-
- /*
- * The only difference between logical and phyiscally formated
- * SMCs codewise is how they are addressed.
- */
- if (physical_format) {
- RC200SmartMediaSetAddress(READ, sm_address);
- } else {
- RC200SmartMediaSetLogicalAddress(READ, sm_address);
- }
-
- /*
- * While the address hasn't reached the end, continue loading data.
- */
- while (address != address_end) {
-
- /*
- * No matter what we read from the SMC, we aways need to
- * read at least one byte per iteration. (Otherwise there
- * would be no point in entering this loop.
- */
- RC200SmartMediaRead(&mask, FALSE);
-
- /*
- * The difference when loading data from the SMC is
- * when we load the presets. These aren't stored in
- * external RAM but in an array on the FPGA.
- */
- if ((STAGE_LOAD_DEMO_PRESET == stage) || (STAGE_LOAD_RESET_PRESET == stage)) {
- /*
- * We only read one byte from the SMC and thus
- * we only store one byte. We re-use the 'mask'
- * variable here. The address is also re-used
- * and thus we only use the last 10 bits to fit
- * the address in our index.
- *
- */
- presets_default_values[address <- 10] = mask;
- } else {
- /*
- * All other data has RGB image data and thus
- * we read those additional bytes from the SMC.
- * The image used for the graphic visualization
- * is packed together however and thus we
- * re-use the rgb variables here.
- */
- RC200SmartMediaRead(&r, FALSE);
- RC200SmartMediaRead(&g, FALSE);
- RC200SmartMediaRead(&b, FALSE);
-
- /*
- * There needs to be atleast one clock cycle
- * between setting the address and reading
- * from it. We therefore set the address before
- * reading from the SmartMedia as 'delay'.
- */
- PalPL2RAMSetWriteAddress(RAM_BANK0, address);
-
- /*
- * FIXME: Do we need this even?
- */
- data = 0 @ mask @ r @ g @ b;
-
- /*
- * Now that we read a while 32bit wide word
- * we can store it in the main memory bank.
- */
- PalPL2RAMWrite(RAM_BANK0, data);
- }
-
+/*! \file smartmedia.hcc + * + * \section generic Here we interface with the SmartMedia card. + * + * \section project Project information. + * Project Graphic Equalizer\n + * \author O.M. Schinagl + * \date 20041110 + * \version 0.1 + * + * \section copyright Copyright + * Copyright ©2004 Koninklijke Philips Electronics N.V. All rights reserved + * + * \section history Change history + * 20041110: O.M. Schinagl\n Initial version + * + ********************************************************************/ + +/******** System Includes *************/ +#include <stdlib.hch> + +#include "pal_master.hch" + +/******** Application Includes ********/ +#include "configuration.hch" +#include "display_shared.hch" +#include "smartmedia_shared.hch" +#include "smartmedia.hch" + +#if HAVE_DEBUG + #include "debug.hch" +#endif + +#include "audio.hch" +#include "mouse_shared.hch" +#include "eventhandler_shared.hch" +#include "display.hch" /* FIXME: temporary include, needs to be moved to 'init' */ + + +unsigned 1 physical_format; + +/*! \fn unsigned 1 smartmedia_init(void); + * \brief We here initialize the Smart Media card and verify wether the + * card is inserted and such. + * + * \return We return 0 on success, 1 on error. + * \retval unsigned 1 + */ +inline unsigned 1 smartmedia_init(void) { + unsigned 1 retval; + /* + * Firstly we enable both the CPLD. + */ + RC200CPLDEnable(); + + /* + * We must reset the Smart Media before initializing it. If we don't reset it + * we get a lot of Init failures. If we don't use the delay, we get a lot of + * init failures. + */ + RC200SmartMediaReset(&retval); + delay; + RC200SmartMediaInit(&retval); + + + /* + * Before we enter our main Smart Media read loop we verify the format + * of the SMC. This to ensure we use the correct functions later. + */ + RC200SmartMediaCheckLogicalFormat(&physical_format); + + return retval; +} /* --- smartmedia_init() --- */ + + + +/*! \fn void smartmedia_loaddata(skindata_t *skindata); + * \brief We load our memory with skin and help data from the smartmedia. + * + * \param *skindata skindata like boundries and colors of elements. + * + * \return void + * \retval void + */ +void smartmedia_loaddata(skindata_t *skindata) { + /* + * Setup RAM Handle, and determin maximum Data and Address widths + * + * FIXME: Currently we set the Ram handle here and in the main. If we + * would want to change it here, also change it elsewhere. A better + * solution would be to have the RAM_BANK0 macro defined somewhere + * globally. + */ + macro expr RAM_BANK0 = PalPL2RAMCT(0); + macro expr DW = PalPL2RAMGetMaxDataWidthCT(); + macro expr AW = PalPL2RAMGetMaxAddressWidthCT(); + + unsigned DW data; + unsigned 27 sm_address; + unsigned AW address, address_end; + unsigned 8 mask, r, g, b; + unsigned 4 stage; + unsigned 1 result; + + extern ram unsigned 8 presets_default_values[768]; + + /* + * We have several stages to go through. We stop once we pass the last + * one. + */ + while ((STAGE_LOAD_ABOUT_BOTTOM +1) != stage) { + /* + * For each iteration of the main loop we set a different + * start and end variables. + */ + switch (stage) { + case STAGE_LOAD_DEMO_PRESET: + sm_address = SMARTMEDIA_ADDRESS_PRESET_DEMO_START; + address = INDEX_PRESET_DEMO_START; + address_end = INDEX_PRESET_DEMO_END; + break; + case STAGE_LOAD_RESET_PRESET: + sm_address = SMARTMEDIA_ADDRESS_PRESET_RESET_START; + address = INDEX_PRESET_RESET_START; + address_end = INDEX_PRESET_RESET_END; + break; + case STAGE_LOAD_SKIN: + sm_address = SMARTMEDIA_ADDRESS_SKIN_START; + address = ADDRESS_SKIN_START; + address_end = ADDRESS_SKIN_END; + break; + case STAGE_LOAD_HELP: + sm_address = SMARTMEDIA_ADDRESS_HELP_START; + address = ADDRESS_HELP_START; + address_end = ADDRESS_HELP_END; + break; + case STAGE_LOAD_GRAPH: + sm_address = SMARTMEDIA_ADDRESS_GRAPH_START; + address = ADDRESS_GRAPH_START; + address_end = ADDRESS_GRAPH_END; + break; + case STAGE_LOAD_TOP_FONTYS: + sm_address = SMARTMEDIA_ADDRESS_TOP_FONTYS_START; + address = ADDRESS_ABOUT_TOP_FONTYS_START; + address_end = ADDRESS_ABOUT_TOP_FONTYS_END; + break; + case STAGE_LOAD_TOP_TASS: + sm_address = SMARTMEDIA_ADDRESS_TOP_TASS_START; + address = ADDRESS_ABOUT_TOP_TASS_START; + address_end = ADDRESS_ABOUT_TOP_TASS_END; + break; + case STAGE_LOAD_TOP_TRANSFER: + sm_address = SMARTMEDIA_ADDRESS_TOP_TRANSFER_START; + address = ADDRESS_ABOUT_TOP_TRANSFER_START; + address_end = ADDRESS_ABOUT_TOP_TRANSFER_END; + break; + case STAGE_LOAD_TOP_CELOXICA: + sm_address = SMARTMEDIA_ADDRESS_TOP_CELOXICA_START; + address = ADDRESS_ABOUT_TOP_CELOXICA_START; + address_end = ADDRESS_ABOUT_TOP_CELOXICA_END; + break; +/* + case STAGE_LOAD_TOP_DETAILS: + sm_address = SMARTMEDIA_ADDRESS_TOP_DETAILS_START; + address = ADDRESS_ABOUT_TOP_DETAILS_START; + address_end = ADDRESS_ABOUT_TOP_DETAILS_END; + break; +*/ + case STAGE_LOAD_ABOUT_BOTTOM: + sm_address = SMARTMEDIA_ADDRESS_BOTTOM_START; + address = ADDRESS_ABOUT_BOTTOM_START; + address_end = ADDRESS_ABOUT_BOTTOM_END; + break; + default: + break; + } + /* + * TODO: Replace the above switch-case with a lookuptables. + */ + + /* + * The only difference between logical and phyiscally formated + * SMCs codewise is how they are addressed. + */ + if (physical_format) { + RC200SmartMediaSetAddress(READ, sm_address); + } else { + RC200SmartMediaSetLogicalAddress(READ, sm_address); + } + + /* + * While the address hasn't reached the end, continue loading data. + */ + while (address != address_end) { + + /* + * No matter what we read from the SMC, we aways need to + * read at least one byte per iteration. (Otherwise there + * would be no point in entering this loop. + */ + RC200SmartMediaRead(&mask, FALSE); + + /* + * The difference when loading data from the SMC is + * when we load the presets. These aren't stored in + * external RAM but in an array on the FPGA. + */ + if ((STAGE_LOAD_DEMO_PRESET == stage) || (STAGE_LOAD_RESET_PRESET == stage)) { + /* + * We only read one byte from the SMC and thus + * we only store one byte. We re-use the 'mask' + * variable here. The address is also re-used + * and thus we only use the last 10 bits to fit + * the address in our index. + * + */ + presets_default_values[address <- 10] = mask; + } else { + /* + * All other data has RGB image data and thus + * we read those additional bytes from the SMC. + * The image used for the graphic visualization + * is packed together however and thus we + * re-use the rgb variables here. + */ + RC200SmartMediaRead(&r, FALSE); + RC200SmartMediaRead(&g, FALSE); + RC200SmartMediaRead(&b, FALSE); + + /* + * There needs to be atleast one clock cycle + * between setting the address and reading + * from it. We therefore set the address before + * reading from the SmartMedia as 'delay'. + */ + PalPL2RAMSetWriteAddress(RAM_BANK0, address); + + /* + * FIXME: Do we need this even? + */ + data = 0 @ mask @ r @ g @ b; + + /* + * Now that we read a while 32bit wide word + * we can store it in the main memory bank. + */ + PalPL2RAMWrite(RAM_BANK0, data); + } + #if HAVE_DEBUG /* * Print some indication about data loading. @@ -254,127 +254,140 @@ void smartmedia_loaddata(skindata_t *skindata) { if (!(address <- 14)) {; print_string("."); } -#endif
- /*
- * Finally we increase our address to prepare for the
- * next iteration.
- */
- address++;
- }
- /*
- * We need to tell the SmartMedia that the last byte was read
- * however to check wether it is the last byte during each
- * iteration of the loop would unecasserly 'a lot' of
- * resources. We therefore read a dummy byte here. It doesn't
- * matter where it comes from (from the SMC) as we don't use
- * it.
- */
- RC200SmartMediaRead(&mask, TRUE);
- /*
- * Because we need to set a new starting address in the next
- * iteration we need to 'end' the SmartMedia Operation.
- */
- RC200SmartMediaOperationEnd(&result);
-
- /*
- * We are done with this 'stage' and continue to the next one.
- */
- stage++;
- }
-
- /*
- * TODO: This block needs to move up into the loop where we calculate
- * these settings determind by the image data.
- */
- skindata->spectrum.top = 200;
- skindata->spectrum.bottom = 335;
- skindata->spectrum.left = 77;
- skindata->spectrum.right = 575;
-// skindata->spectrum.color_primary = PIXEL_SPECTRUM;
-// skindata->spectrum.color_secondary = PIXEL_SPECTRUM;
-
- skindata->waveform.top = 46;
- skindata->waveform.bottom = 118;
- skindata->waveform.left = 76;
- skindata->waveform.right = 413;
- skindata->waveform.color_primary = PIXEL_WAVEFORM;
-
- skindata->volume.top = 66;
- skindata->volume.bottom = 112;
- skindata->volume.left = 431;
- skindata->volume.right = 448;
- skindata->volume.color_primary = PIXEL_VOLUME;
-
- skindata->inputgain.top = 66;
- skindata->inputgain.bottom = 112;
- skindata->inputgain.left = 450;
- skindata->inputgain.right = 467;
- skindata->inputgain.color_primary = PIXEL_INPUTGAIN_NORM;
- skindata->inputgain.color_secondary = PIXEL_INPUTGAIN_SAT;
-
- skindata->equalizer.color_primary = PIXEL_EQUALIZER;
-} /* --- smartmedia_loaddata() --- */
-
-/*
-smartmedia_load_block() {
-
- setaddress();
- for () {
- smart_read();
- }
- end();
-}*/
-
-
-unsigned 1 load_audio_samples(signed 18 *samples, unsigned 27 blockoffset, unsigned 7 sample_count) {
- ram unsigned 8 data[128];
-
- unsigned 16 sampleword;
- unsigned 8 sampleindex, samplebyte, samplecount;
- unsigned 1 result;
- unsigned 1 retval;
-
- samplecount = (0 @ sample_count) <<1;
- sampleindex = 0;
- retval = 0;
-
- if (!blockoffset) {
- if (physical_format)
- {
- RC200SmartMediaSetAddress(READ, SMARTMEDIA_ADDRESS_AUDIO_START);
- } else {
- RC200SmartMediaSetLogicalAddress(READ, SMARTMEDIA_ADDRESS_AUDIO_START);
- }
- }
-
- smartmedia_read_bytes(data, samplecount);
-
- while (sampleindex != samplecount) {
- samplebyte = data[sampleindex <- 7];
- sampleword = samplebyte @ data[(sampleindex +1) <- 7];
- samples[sampleindex >>1] = (signed 18)(sampleword @ 0);
- sampleindex +=2;
- }
-
- if (((blockoffset <<7) +(0 @ samplecount) +SMARTMEDIA_ADDRESS_AUDIO_START) >= SMARTMEDIA_ADDRESS_AUDIO_END) {
- RC200SmartMediaRead(&samplebyte, TRUE);
- RC200SmartMediaOperationEnd(&result);
- retval = 1;
- }
- return retval;
-}
-
-void smartmedia_read_bytes(unsigned 8 *data, unsigned 8 bytecount)
-{
- unsigned 8 byteindex;
- unsigned 8 temp;
-
- byteindex = 0;
- while (byteindex != bytecount) {
- RC200SmartMediaRead(&temp, FALSE);
- data[byteindex] = temp;
- byteindex++;
- }
-// print_eol();
-// print_string(".");
-}
\ No newline at end of file +#endif + /* + * Finally we increase our address to prepare for the + * next iteration. + */ + address++; + } + /* + * We need to tell the SmartMedia that the last byte was read + * however to check wether it is the last byte during each + * iteration of the loop would unecasserly 'a lot' of + * resources. We therefore read a dummy byte here. It doesn't + * matter where it comes from (from the SMC) as we don't use + * it. + */ + RC200SmartMediaRead(&mask, TRUE); + /* + * Because we need to set a new starting address in the next + * iteration we need to 'end' the SmartMedia Operation. + */ + RC200SmartMediaOperationEnd(&result); + + /* + * We are done with this 'stage' and continue to the next one. + */ + stage++; + } + + /* + * TODO: This block needs to move up into the loop where we calculate + * these settings determind by the image data. + */ + skindata->spectrum.top = 200; + skindata->spectrum.bottom = 335; + skindata->spectrum.left = 77; + skindata->spectrum.right = 575; +// skindata->spectrum.color_primary = PIXEL_SPECTRUM; +// skindata->spectrum.color_secondary = PIXEL_SPECTRUM; + + skindata->waveform.top = 46; + skindata->waveform.bottom = 118; + skindata->waveform.left = 76; + skindata->waveform.right = 413; + skindata->waveform.color_primary = PIXEL_WAVEFORM; + + skindata->volume.top = 66; + skindata->volume.bottom = 112; + skindata->volume.left = 431; + skindata->volume.right = 448; + skindata->volume.color_primary = PIXEL_VOLUME; + + skindata->inputgain.top = 66; + skindata->inputgain.bottom = 112; + skindata->inputgain.left = 450; + skindata->inputgain.right = 467; + skindata->inputgain.color_primary = PIXEL_INPUTGAIN_NORM; + skindata->inputgain.color_secondary = PIXEL_INPUTGAIN_SAT; + + skindata->equalizer.color_primary = PIXEL_EQUALIZER; +} /* --- smartmedia_loaddata() --- */ + +/* +smartmedia_load_block() { + + setaddress(); + for () { + smart_read(); + } + end(); +}*/ + + +unsigned 1 load_audio_samples(signed 18 *samples, unsigned 27 blockoffset, unsigned 7 sample_count) { + ram unsigned 8 data[128]; + + unsigned 16 sampleword; + unsigned 8 sampleindex, samplebyte, samplecount; + unsigned 1 result; + unsigned 1 retval; + + samplecount = (0 @ sample_count) <<1; + sampleindex = 0; + retval = 0; + + if (!blockoffset) { + smartmedia_set_read_address(SMARTMEDIA_ADDRESS_AUDIO_START) + } + + smartmedia_read_bytes(data, samplecount); + + while (sampleindex != samplecount) { + samplebyte = data[sampleindex <- 7]; + sampleword = samplebyte @ data[(sampleindex +1) <- 7]; + samples[sampleindex >>1] = (signed 18)(sampleword @ 0); + sampleindex +=2; + } + + if (((blockoffset <<7) +(0 @ samplecount) +SMARTMEDIA_ADDRESS_AUDIO_START) >= SMARTMEDIA_ADDRESS_AUDIO_END) { + retval = 1; + } + return retval; +} + +void smartmedia_set_read_address(unsigned 20 address) +{ + unsigned 8 dummy; + unsigned 1 result; + + /* + * Read dummy value to signal the SmartMedia card reader + * that the last byte is read from the SmartMedia card + */ + RC200SmartMediaRead(&dummy, TRUE); + RC200SmartMediaOperationEnd(&result); + /* + * Check the format of the SmartMedia card and set the address accordingly + */ + if (physical_format) + { + RC200SmartMediaSetAddress(READ, SMARTMEDIA_ADDRESS_AUDIO_START); + } else { + RC200SmartMediaSetLogicalAddress(READ, SMARTMEDIA_ADDRESS_AUDIO_START); + } +} + +void smartmedia_read_bytes(unsigned 8 *data, unsigned 8 bytecount) +{ + unsigned 8 byteindex; + unsigned 8 temp; + + byteindex = 0; + while (byteindex != bytecount) { + RC200SmartMediaRead(&temp, FALSE); + data[byteindex] = temp; + byteindex++; + } +} |