diff -Naur -x CVS -x .* em8300/include/libdxr3/api.h em8300-audioapi/include/libdxr3/api.h --- em8300/include/libdxr3/api.h Fri Nov 2 09:09:01 2001 +++ em8300-audioapi/include/libdxr3/api.h Thu Nov 1 22:27:48 2001 @@ -84,6 +84,8 @@ int dxr3_audio_set_stereo(int); int dxr3_audio_set_rate(int); int dxr3_audio_set_samplesize(int); +int dxr3_audio_get_buffersize(void); +int dxr3_audio_get_bytesleft(void); //Bytes left to play in buffer // Video related functions int dxr3_video_set_overlaymode(int); diff -Naur -x CVS -x .* em8300/libdxr3/dxr3-api.c em8300-audioapi/libdxr3/dxr3-api.c --- em8300/libdxr3/dxr3-api.c Fri Nov 2 09:09:01 2001 +++ em8300-audioapi/libdxr3/dxr3-api.c Fri Nov 2 09:02:20 2001 @@ -15,6 +15,7 @@ #include #endif #include +#include "../modules/em8300_reg.h" dxr3_state_t state = { -1,-1,-1,-1,0,0 }; @@ -165,6 +166,53 @@ return -1; return ioctl(state.fd_audio, SNDCTL_DSP_SAMPLESIZE, &val); +} + +int dxr3_audio_get_buffersize() +{ + em8300_register_t ucregister; + + int buffsize = 0; + int error; + + if( !state.open ) return -1; + + ucregister.reg = MA_BuffSize; + ucregister.microcode_register = 1; + ioctl(state.fd_control, EM8300_IOCTL_READREG, &ucregister); + buffsize = ucregister.val; + ucregister.reg = MA_BuffSize_Hi; + ioctl(state.fd_control, EM8300_IOCTL_READREG, &ucregister); + buffsize = buffsize|(ucregister.val<<16); + + return buffsize; +} + +int dxr3_audio_get_bytesleft() +{ + int readptr, writeptr, bufsize; + em8300_register_t ucregister; + + if( !state.open ) return -1; + + bufsize = dxr3_audio_get_buffersize(); + ucregister.microcode_register = 1; + ucregister.reg = MA_Rdptr; + ioctl(state.fd_control, EM8300_IOCTL_READREG, &ucregister); + readptr = ucregister.val; + ucregister.reg = MA_Rdptr_Hi; + ioctl(state.fd_control, EM8300_IOCTL_READREG, &ucregister); + readptr = readptr|(ucregister.val<<16); + + ucregister.reg = MA_Wrptr; + ioctl(state.fd_control, EM8300_IOCTL_READREG, &ucregister); + writeptr = ucregister.val; + ucregister.reg = MA_Wrptr_Hi; + ioctl(state.fd_control, EM8300_IOCTL_READREG, &ucregister); + writeptr = writeptr|(ucregister.val<<16); + + if( readptr > writeptr ) return (readptr-writeptr); + return (writeptr-readptr); } /* probably move this to the driver eventually */