#include "include/mp3_buffer.h" #include "include/audio.h" #include "include/aural_cues.h" #include "include/clock.h" #include "include/wifi.h" #include "include/mp3_drv.h" #include "config.h" Int16 g_audio_cue_curr; Byte g_current_source; Byte mp3_source_stack [15]; Byte mp3_source_stack_top; void mp3_buffer_init(void) { g_current_source=MP3_BUFFER_WIFI; g_audio_cue_curr=0; mp3_source_stack_top=0; } Byte mp3_buffer_eof(void) { switch (g_current_source) { case TEST_AUDIO_ID: if (g_audio_cue_curr>=TEST_AUDIO_LENGTH) return 1; break; case AUDIO_CUE_ZERO_ID: if (g_audio_cue_curr>=AUDIO_CUE_ZERO_LENGTH) return 1; break; case AUDIO_CUE_ONE_ID: if (g_audio_cue_curr>=AUDIO_CUE_ONE_LENGTH) return 1; break; case AUDIO_CUE_TWO_ID: if (g_audio_cue_curr>=AUDIO_CUE_TWO_LENGTH) return 1; break; case AUDIO_CUE_THREE_ID: if (g_audio_cue_curr>=AUDIO_CUE_THREE_LENGTH) return 1; break; case AUDIO_CUE_FOUR_ID: if (g_audio_cue_curr>=AUDIO_CUE_FOUR_LENGTH) return 1; break; case AUDIO_CUE_FIVE_ID: if (g_audio_cue_curr>=AUDIO_CUE_FIVE_LENGTH) return 1; break; case AUDIO_CUE_SIX_ID: if (g_audio_cue_curr>=AUDIO_CUE_SIX_LENGTH) return 1; break; case AUDIO_CUE_SEVEN_ID: if (g_audio_cue_curr>=AUDIO_CUE_SEVEN_LENGTH) return 1; break; case AUDIO_CUE_EIGHT_ID: if (g_audio_cue_curr>=AUDIO_CUE_EIGHT_LENGTH) return 1; break; case AUDIO_CUE_NINE_ID: if (g_audio_cue_curr>=AUDIO_CUE_NINE_LENGTH) return 1; break; case AUDIO_CUE_VOLUME_ID: if (g_audio_cue_curr>=AUDIO_CUE_VOLUME_LENGTH) return 1; break; case MP3_BUFFER_WIFI: return 0; default: if (g_audio_cue_curr>=AUDIO_CUE_SILENCE_LENGTH) return 1; } return 0; } Byte mp3_buffer_getc(void) { switch (g_current_source) { case TEST_AUDIO_ID: return test_audio[g_audio_cue_curr++]; case AUDIO_CUE_ZERO_ID: return audio_cue_zero[g_audio_cue_curr++]; case AUDIO_CUE_ONE_ID: return audio_cue_one[g_audio_cue_curr++]; case AUDIO_CUE_TWO_ID: return audio_cue_two[g_audio_cue_curr++]; case AUDIO_CUE_THREE_ID: return audio_cue_three[g_audio_cue_curr++]; case AUDIO_CUE_FOUR_ID: return audio_cue_four[g_audio_cue_curr++]; case AUDIO_CUE_FIVE_ID: return audio_cue_five[g_audio_cue_curr++]; case AUDIO_CUE_SIX_ID: return audio_cue_six[g_audio_cue_curr++]; case AUDIO_CUE_SEVEN_ID: return audio_cue_seven[g_audio_cue_curr++]; case AUDIO_CUE_EIGHT_ID: return audio_cue_eight[g_audio_cue_curr++]; case AUDIO_CUE_NINE_ID: return audio_cue_nine[g_audio_cue_curr++]; case AUDIO_CUE_VOLUME_ID: return audio_cue_volume[g_audio_cue_curr++]; case MP3_BUFFER_WIFI: return wifi_recv_byte(); default: return audio_cue_silence[g_audio_cue_curr++]; } } void mp3_switch_source(Byte src_a) { g_current_source=src_a; g_audio_cue_curr=0; } void mp3_buffer_fix_eof() { Byte next; next = pop_mp3_source(); if (next!=MP3_BUFFER_NO_SOURCE) { mp3_switch_source(next); } else { mp3_switch_source(MP3_BUFFER_WIFI); } } void flush_mp3_source_stack() { mp3_source_stack_top=0; } void push_mp3_source(Byte src_a) { mp3_source_stack[mp3_source_stack_top++]=src_a; } Byte pop_mp3_source() { if (mp3_source_stack_top>0) { return mp3_source_stack[--mp3_source_stack_top]; } else { return MP3_BUFFER_NO_SOURCE; } } void push_mp3_preset_number(Byte src_a) { Byte temp1; Byte temp2; temp1 = src_a % 100; temp2 = temp1 % 10; switch (temp2) { case 0: push_mp3_source(AUDIO_CUE_ZERO_ID); break; case 1: push_mp3_source(AUDIO_CUE_ONE_ID); break; case 2: push_mp3_source(AUDIO_CUE_TWO_ID); break; case 3: push_mp3_source(AUDIO_CUE_THREE_ID); break; case 4: push_mp3_source(AUDIO_CUE_FOUR_ID); break; case 5: push_mp3_source(AUDIO_CUE_FIVE_ID); break; case 6: push_mp3_source(AUDIO_CUE_SIX_ID); break; case 7: push_mp3_source(AUDIO_CUE_SEVEN_ID); break; case 8: push_mp3_source(AUDIO_CUE_EIGHT_ID); break; case 9: push_mp3_source(AUDIO_CUE_NINE_ID); break; } switch (temp1/10) { case 0: push_mp3_source(AUDIO_CUE_ZERO_ID); break; case 1: push_mp3_source(AUDIO_CUE_ONE_ID); break; case 2: push_mp3_source(AUDIO_CUE_TWO_ID); break; case 3: push_mp3_source(AUDIO_CUE_THREE_ID); break; case 4: push_mp3_source(AUDIO_CUE_FOUR_ID); break; case 5: push_mp3_source(AUDIO_CUE_FIVE_ID); break; case 6: push_mp3_source(AUDIO_CUE_SIX_ID); break; case 7: push_mp3_source(AUDIO_CUE_SEVEN_ID); break; case 8: push_mp3_source(AUDIO_CUE_EIGHT_ID); break; case 9: push_mp3_source(AUDIO_CUE_NINE_ID); break; } if (src_a/100 != 0) { if (src_a/100 == 1) { push_mp3_source(AUDIO_CUE_ONE_ID); } else { push_mp3_source(AUDIO_CUE_TWO_ID); } } } Byte mp3_buffer_0_eof() {return g_audio_cue_curr>=AUDIO_CUE_ZERO_LENGTH;} Byte mp3_buffer_1_eof() {return g_audio_cue_curr>=AUDIO_CUE_ONE_LENGTH;} Byte mp3_buffer_2_eof() {return g_audio_cue_curr>=AUDIO_CUE_TWO_LENGTH;} Byte mp3_buffer_3_eof() {return g_audio_cue_curr>=AUDIO_CUE_THREE_LENGTH;} Byte mp3_buffer_4_eof() {return g_audio_cue_curr>=AUDIO_CUE_FOUR_LENGTH;} Byte mp3_buffer_5_eof() {return g_audio_cue_curr>=AUDIO_CUE_FIVE_LENGTH;} Byte mp3_buffer_6_eof() {return g_audio_cue_curr>=AUDIO_CUE_SIX_LENGTH;} Byte mp3_buffer_7_eof() {return g_audio_cue_curr>=AUDIO_CUE_SEVEN_LENGTH;} Byte mp3_buffer_8_eof() {return g_audio_cue_curr>=AUDIO_CUE_EIGHT_LENGTH;} Byte mp3_buffer_9_eof() {return g_audio_cue_curr>=AUDIO_CUE_NINE_LENGTH;} Byte mp3_buffer_10_eof() {return g_audio_cue_curr>=AUDIO_CUE_VOLUME_LENGTH;} Byte mp3_buffer_100_eof() {return g_audio_cue_curr>=AUDIO_CUE_SILENCE_LENGTH;} Byte mp3_buffer_120_eof() {return g_audio_cue_curr>=TEST_AUDIO_LENGTH;} Byte mp3_buffer_240_eof() {return 0;} Byte mp3_buffer_0_getc() {return audio_cue_zero[g_audio_cue_curr++];} Byte mp3_buffer_1_getc() {return audio_cue_one[g_audio_cue_curr++];} Byte mp3_buffer_2_getc() {return audio_cue_two[g_audio_cue_curr++];} Byte mp3_buffer_3_getc() {return audio_cue_three[g_audio_cue_curr++];} Byte mp3_buffer_4_getc() {return audio_cue_four[g_audio_cue_curr++];} Byte mp3_buffer_5_getc() {return audio_cue_five[g_audio_cue_curr++];} Byte mp3_buffer_6_getc() {return audio_cue_six[g_audio_cue_curr++];} Byte mp3_buffer_7_getc() {return audio_cue_seven[g_audio_cue_curr++];} Byte mp3_buffer_8_getc() {return audio_cue_eight[g_audio_cue_curr++];} Byte mp3_buffer_9_getc() {return audio_cue_nine[g_audio_cue_curr++];} Byte mp3_buffer_10_getc() {return audio_cue_volume[g_audio_cue_curr++];} Byte mp3_buffer_100_getc() {return audio_cue_silence[g_audio_cue_curr++];} Byte mp3_buffer_120_getc() {return test_audio[g_audio_cue_curr++];}