Add method to clear all existing callbacks.
Subversion-branch: /branches/opl-branch Subversion-revision: 1642
This commit is contained in:
parent
4d13a13300
commit
076adeb0aa
9 changed files with 37 additions and 0 deletions
|
|
@ -117,6 +117,14 @@ void OPL_SetCallback(unsigned int ms, opl_callback_t callback, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
void OPL_ClearCallbacks(void)
|
||||
{
|
||||
if (driver != NULL)
|
||||
{
|
||||
driver->clear_callbacks_func();
|
||||
}
|
||||
}
|
||||
|
||||
void OPL_Lock(void)
|
||||
{
|
||||
if (driver != NULL)
|
||||
|
|
|
|||
|
|
@ -79,6 +79,10 @@ unsigned int OPL_ReadPort(opl_port_t port);
|
|||
|
||||
void OPL_SetCallback(unsigned int ms, opl_callback_t callback, void *data);
|
||||
|
||||
// Clear all OPL callbacks that have been set.
|
||||
|
||||
void OPL_ClearCallbacks(void);
|
||||
|
||||
// Begin critical section, during which, OPL callbacks will not be
|
||||
// invoked.
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ typedef void (*opl_write_port_func)(opl_port_t port, unsigned int value);
|
|||
typedef void (*opl_set_callback_func)(unsigned int ms,
|
||||
opl_callback_t callback,
|
||||
void *data);
|
||||
typedef void (*opl_clear_callbacks_func)(void);
|
||||
typedef void (*opl_lock_func)(void);
|
||||
typedef void (*opl_unlock_func)(void);
|
||||
|
||||
|
|
@ -48,6 +49,7 @@ typedef struct
|
|||
opl_read_port_func read_port_func;
|
||||
opl_write_port_func write_port_func;
|
||||
opl_set_callback_func set_callback_func;
|
||||
opl_clear_callbacks_func clear_callbacks_func;
|
||||
opl_lock_func lock_func;
|
||||
opl_unlock_func unlock_func;
|
||||
} opl_driver_t;
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ opl_driver_t opl_linux_driver =
|
|||
OPL_Linux_PortRead,
|
||||
OPL_Linux_PortWrite,
|
||||
OPL_Timer_SetCallback,
|
||||
OPL_Timer_ClearCallbacks,
|
||||
OPL_Timer_Lock,
|
||||
OPL_Timer_Unlock
|
||||
};
|
||||
|
|
|
|||
|
|
@ -65,6 +65,11 @@ int OPL_Queue_IsEmpty(opl_callback_queue_t *queue)
|
|||
return queue->num_entries == 0;
|
||||
}
|
||||
|
||||
void OPL_Queue_Clear(opl_callback_queue_t *queue)
|
||||
{
|
||||
queue->num_entries = 0;
|
||||
}
|
||||
|
||||
void OPL_Queue_Push(opl_callback_queue_t *queue,
|
||||
opl_callback_t callback, void *data,
|
||||
unsigned int time)
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ typedef struct opl_callback_queue_s opl_callback_queue_t;
|
|||
|
||||
opl_callback_queue_t *OPL_Queue_Create(void);
|
||||
int OPL_Queue_IsEmpty(opl_callback_queue_t *queue);
|
||||
void OPL_Queue_Clear(opl_callback_queue_t *queue);
|
||||
void OPL_Queue_Destroy(opl_callback_queue_t *queue);
|
||||
void OPL_Queue_Push(opl_callback_queue_t *queue,
|
||||
opl_callback_t callback, void *data,
|
||||
|
|
|
|||
|
|
@ -374,6 +374,13 @@ static void OPL_SDL_SetCallback(unsigned int ms,
|
|||
SDL_UnlockMutex(callback_queue_mutex);
|
||||
}
|
||||
|
||||
static void OPL_SDL_ClearCallbacks(void)
|
||||
{
|
||||
SDL_LockMutex(callback_queue_mutex);
|
||||
OPL_Queue_Clear(callback_queue);
|
||||
SDL_UnlockMutex(callback_queue_mutex);
|
||||
}
|
||||
|
||||
static void OPL_SDL_Lock(void)
|
||||
{
|
||||
SDL_LockMutex(callback_mutex);
|
||||
|
|
@ -392,6 +399,7 @@ opl_driver_t opl_sdl_driver =
|
|||
OPL_SDL_PortRead,
|
||||
OPL_SDL_PortWrite,
|
||||
OPL_SDL_SetCallback,
|
||||
OPL_SDL_ClearCallbacks,
|
||||
OPL_SDL_Lock,
|
||||
OPL_SDL_Unlock
|
||||
};
|
||||
|
|
|
|||
|
|
@ -202,6 +202,13 @@ void OPL_Timer_SetCallback(unsigned int ms, opl_callback_t callback, void *data)
|
|||
SDL_UnlockMutex(callback_queue_mutex);
|
||||
}
|
||||
|
||||
void OPL_Timer_ClearCallbacks(void)
|
||||
{
|
||||
SDL_LockMutex(callback_queue_mutex);
|
||||
OPL_Queue_Clear(callback_queue);
|
||||
SDL_UnlockMutex(callback_queue_mutex);
|
||||
}
|
||||
|
||||
void OPL_Timer_Lock(void)
|
||||
{
|
||||
SDL_LockMutex(timer_mutex);
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ void OPL_Timer_StopThread(void);
|
|||
void OPL_Timer_SetCallback(unsigned int ms,
|
||||
opl_callback_t callback,
|
||||
void *data);
|
||||
void OPL_Timer_ClearCallbacks(void);
|
||||
void OPL_Timer_Lock(void);
|
||||
void OPL_Timer_Unlock(void);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue