@@ -55,9 +55,11 @@ struct aesndpb_t
5555
5656 u32 voiceno ;
5757 u32 shift ;
58- AESNDVoiceCallback cb ;
59-
60- AESNDAudioCallback audioCB ;
58+ AESNDVoiceCallbackArg cb ;
59+ void * cbArg ;
60+
61+ AESNDAudioCallbackArg audioCB ;
62+ void * audioCBArg ;
6163};
6264
6365static dsptask_t __aesnddsptask ;
@@ -126,6 +128,7 @@ static __inline__ void __aesndcopycommand(AESNDPB *dst,AESNDPB *src)
126128 dst -> voiceno = src -> voiceno ;
127129 dst -> shift = src -> shift ;
128130 dst -> cb = src -> cb ;
131+ dst -> cbArg = src -> cbArg ;
129132}
130133
131134
@@ -198,7 +201,7 @@ static __inline__ void __aesndhandlerequest(AESNDPB *pb)
198201
199202 if (pb -> mram_curr >=pb -> mram_end ) {
200203 if (pb -> flags & VOICE_STREAM && pb -> cb )
201- pb -> cb (pb ,VOICE_STATE_STREAM );
204+ pb -> cb (pb ,VOICE_STATE_STREAM , pb -> cbArg );
202205 if (pb -> flags & VOICE_ONCE ) {
203206 pb -> flags |= VOICE_STOPPED ;
204207 return ;
@@ -262,7 +265,7 @@ static __inline__ void __aesndhandlerequest(AESNDPB *pb)
262265
263266 if (pb -> mram_curr >=pb -> mram_end ) {
264267 if (pb -> flags & VOICE_STREAM && pb -> cb )
265- pb -> cb (pb ,VOICE_STATE_STREAM );
268+ pb -> cb (pb ,VOICE_STATE_STREAM , pb -> cbArg );
266269 if (pb -> flags & VOICE_ONCE ) {
267270 pb -> buf_start = 0 ;
268271 pb -> flags |= VOICE_STOPPED ;
@@ -332,16 +335,16 @@ static void __dsp_requestcallback(dsptask_t *task)
332335
333336 __aesndhandlerequest (& __aesndcommand );
334337
335- if (__aesndcommand .flags & VOICE_STOPPED && __aesndcommand .cb ) __aesndcommand .cb (& __aesndcommand ,VOICE_STATE_STOPPED );
338+ if (__aesndcommand .flags & VOICE_STOPPED && __aesndcommand .cb ) __aesndcommand .cb (& __aesndcommand ,VOICE_STATE_STOPPED , __aesndcommand . cbArg );
336339
337340 __aesndcopycommand (& __aesndvoicepb [__aesndcurrvoice ],& __aesndcommand );
338341
339342 __aesndcurrvoice ++ ;
340343 while (__aesndcurrvoice < MAX_VOICES && (!(__aesndvoicepb [__aesndcurrvoice ].flags & VOICE_USED ) || (__aesndvoicepb [__aesndcurrvoice ].flags & VOICE_STOPPED ))) __aesndcurrvoice ++ ;
341344 if (__aesndcurrvoice < MAX_VOICES ) {
342345 __aesndcopycommand (& __aesndcommand ,& __aesndvoicepb [__aesndcurrvoice ]);
343-
344- if (__aesndcommand .cb ) __aesndcommand .cb (& __aesndcommand ,VOICE_STATE_RUNNING );
346+
347+ if (__aesndcommand .cb ) __aesndcommand .cb (& __aesndcommand ,VOICE_STATE_RUNNING , __aesndcommand . cbArg );
345348
346349 DCFlushRange (& __aesndcommand ,PB_STRUCT_SIZE );
347350 DSP_SendMailTo (0xface0020 );
@@ -375,7 +378,7 @@ static void __audio_dma_callback(void)
375378 else
376379 ptr = audio_buffer [__aesndcurrab ];
377380
378- if (__aesndcommand .audioCB ) __aesndcommand .audioCB (ptr ,SND_BUFFERSIZE );
381+ if (__aesndcommand .audioCB ) __aesndcommand .audioCB (ptr ,SND_BUFFERSIZE , __aesndcommand . audioCBArg );
379382 AUDIO_InitDMA ((u32 )ptr ,SND_BUFFERSIZE );
380383
381384 if (__aesndglobalpause == true) return ;
@@ -393,7 +396,7 @@ static void __audio_dma_callback(void)
393396 __aesndvoicesstopped = false;
394397 __aesndcopycommand (& __aesndcommand ,& __aesndvoicepb [__aesndcurrvoice ]);
395398
396- if (__aesndcommand .cb ) __aesndcommand .cb (& __aesndcommand ,VOICE_STATE_RUNNING );
399+ if (__aesndcommand .cb ) __aesndcommand .cb (& __aesndcommand ,VOICE_STATE_RUNNING , __aesndcommand . cbArg );
397400
398401 __aesndcommand .out_buf = (u32 )MEM_VIRTUAL_TO_PHYSICAL (audio_buffer [__aesndcurrab ]);
399402 DCFlushRange (& __aesndcommand ,PB_STRUCT_SIZE );
@@ -478,7 +481,7 @@ void AESND_Reset(void)
478481
479482 DSP_SendMailTo (0xfacedead );
480483 while (DSP_CheckMailTo ());
481-
484+
482485 do {
483486 _CPU_ISR_Flash (level );
484487 } while (__aesnddspinit );
@@ -505,7 +508,7 @@ u32 AESND_GetDSPProcessTime(void)
505508 _CPU_ISR_Disable (level );
506509 time = ticks_to_microsecs (__aesnddspprocesstime );
507510 _CPU_ISR_Restore (level );
508-
511+
509512 return time ;
510513}
511514
@@ -517,24 +520,25 @@ f32 AESND_GetDSPProcessUsage(void)
517520 _CPU_ISR_Disable (level );
518521 usage = (ticks_to_microsecs (__aesnddspprocesstime )* 100 )/2000.0f ;
519522 _CPU_ISR_Restore (level );
520-
523+
521524 return usage ;
522525}
523526
524- AESNDAudioCallback AESND_RegisterAudioCallback ( AESNDAudioCallback cb )
527+ AESNDAudioCallbackArg AESND_RegisterAudioCallbackWithArg ( AESNDAudioCallbackArg cb , void * cbArg )
525528{
526529 u32 level ;
527- AESNDAudioCallback aCB ;
530+ AESNDAudioCallbackArg aCB ;
528531
529532 _CPU_ISR_Disable (level );
530533 aCB = __aesndcommand .audioCB ;
531534 __aesndcommand .audioCB = cb ;
535+ __aesndcommand .audioCBArg = cbArg ;
532536 _CPU_ISR_Restore (level );
533537
534538 return aCB ;
535539}
536540
537- AESNDPB * AESND_AllocateVoice ( AESNDVoiceCallback cb )
541+ AESNDPB * AESND_AllocateVoiceWithArg ( AESNDVoiceCallbackArg cb , void * cbArg )
538542{
539543 u32 i ,level ;
540544 AESNDPB * pb = NULL ;
@@ -555,6 +559,7 @@ AESNDPB* AESND_AllocateVoice(AESNDVoiceCallback cb)
555559 pb -> freq_h = 0x0001 ;
556560 pb -> freq_l = 0x0000 ;
557561 pb -> cb = cb ;
562+ pb -> cbArg = cbArg ;
558563 break ;
559564 }
560565 }
@@ -584,7 +589,7 @@ void AESND_PlayVoice(AESNDPB *pb,u32 format,const void *buffer,u32 len,f32 freq,
584589 __aesndsetvoicebuffer (pb ,ptr ,len );
585590
586591 pb -> flags &= ~(VOICE_RUNNING |VOICE_STOPPED |VOICE_LOOP |VOICE_ONCE );
587- if (looped == true)
592+ if (looped == true)
588593 pb -> flags |= VOICE_LOOP ;
589594 else
590595 pb -> flags |= VOICE_ONCE ;
@@ -628,7 +633,7 @@ void AESND_SetVoiceVolume(AESNDPB *pb,u16 volume_l,u16 volume_r)
628633void AESND_SetVoiceFrequency (AESNDPB * pb ,f32 freq )
629634{
630635 u32 level ;
631-
636+
632637 _CPU_ISR_Disable (level );
633638 __aesndsetvoicefreq (pb ,freq );
634639 _CPU_ISR_Restore (level );
@@ -637,7 +642,7 @@ void AESND_SetVoiceFrequency(AESNDPB *pb,f32 freq)
637642void AESND_SetVoiceStream (AESNDPB * pb ,bool stream )
638643{
639644 u32 level ;
640-
645+
641646 _CPU_ISR_Disable (level );
642647 if (stream == true)
643648 pb -> flags |= VOICE_STREAM ;
@@ -649,7 +654,7 @@ void AESND_SetVoiceStream(AESNDPB *pb,bool stream)
649654void AESND_SetVoiceLoop (AESNDPB * pb ,bool loop )
650655{
651656 u32 level ;
652-
657+
653658 _CPU_ISR_Disable (level );
654659 if (loop == true)
655660 pb -> flags |= VOICE_LOOP ;
@@ -682,14 +687,15 @@ void AESND_SetVoiceStop(AESNDPB *pb,bool stop)
682687 _CPU_ISR_Restore (level );
683688}
684689
685- AESNDVoiceCallback AESND_RegisterVoiceCallback (AESNDPB * pb ,AESNDVoiceCallback cb )
690+ AESNDVoiceCallbackArg AESND_RegisterVoiceCallbackWithArg (AESNDPB * pb ,AESNDVoiceCallbackArg cb , void * cbArg )
686691{
687692 u32 level ;
688- AESNDVoiceCallback rcb = NULL ;
693+ AESNDVoiceCallbackArg rcb = NULL ;
689694
690695 _CPU_ISR_Disable (level );
691696 rcb = pb -> cb ;
692697 pb -> cb = cb ;
698+ pb -> cbArg = cbArg ;
693699 _CPU_ISR_Restore (level );
694700
695701 return rcb ;
@@ -703,4 +709,3 @@ void AESND_SetVoiceDelay(AESNDPB *pb,u32 delay)
703709 pb -> delay = (delay * 48 );
704710 _CPU_ISR_Restore (level );
705711}
706-
0 commit comments