A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 68 lines 2.2 kB view raw
1/*************************************************************************** 2* __________ __ ___. 3* Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7* \/ \/ \/ \/ \/ 8* $Id$ 9* 10* Copyright (C) 2005 Jens Arnold 11* 12* This program is free software; you can redistribute it and/or 13* modify it under the terms of the GNU General Public License 14* as published by the Free Software Foundation; either version 2 15* of the License, or (at your option) any later version. 16* 17* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18* KIND, either express or implied. 19* 20****************************************************************************/ 21 22#include <stdbool.h> 23#include "config.h" 24#include "cpu.h" 25#include "system.h" 26#include "timer.h" 27#include "logf.h" 28 29static int timer_prio = -1; 30void SHAREDBSS_ATTR (*pfn_timer)(void) = NULL; /* timer callback */ 31void SHAREDBSS_ATTR (*pfn_unregister)(void) = NULL; /* unregister callback */ 32 33/* Register a user timer, called every <cycles> TIMER_FREQ cycles */ 34bool timer_register(int reg_prio, void (*unregister_callback)(void), 35 long cycles, void (*timer_callback)(void) 36 IF_COP(, int core)) 37{ 38 if (reg_prio <= timer_prio || cycles == 0) 39 return false; 40 41 if (!timer_set(cycles, true)) 42 return false; 43 44 pfn_timer = timer_callback; 45 /* NOTE: if unreg cb is defined you are in charge of calling timer_unregister() */ 46 pfn_unregister = unregister_callback; 47 timer_prio = reg_prio; 48 49 return timer_start(IF_COP(core)); 50} 51 52bool timer_set_period(long cycles) 53{ 54 return timer_set(cycles, false); 55} 56 57/* NOTE: unregister callbacks are not called by timer_unregister() 58* the unregister_callback only gets called when your timer gets 59* overwritten by a lower priority timer using timer_register() */ 60void timer_unregister(void) 61{ 62 timer_stop(); 63 64 pfn_timer = NULL; 65 pfn_unregister = NULL; 66 timer_prio = -1; 67} 68