[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Simulavr-devel] Call Back remove
From: |
Keith Gudger |
Subject: |
Re: [Simulavr-devel] Call Back remove |
Date: |
Tue, 4 Nov 2003 13:32:01 -0800 (PST) |
Ted:
Thanks. I was hoping it was that easy. I'll try it.
Keith
On Tue, 4 Nov 2003, Theodore A. Roth wrote:
>
>
> On Tue, 4 Nov 2003, Keith Gudger wrote:
>
> > Ted:
> >
> > I'm working on imlementing the SPI function. This function uses a "timer"
> > to count 8 (divided) clock ticks. I was thinking that I'd "install" this
> > clock callback everytime the user loads the SPDR, and "remove" it when it
> > finished counting down.
> >
> > I don't, however, find any code for callback removal. I found
> > "callback_destroy", but that doesn't remove it from the callback list
> > (which would be dangerous to do only that). Do you know - does this code
> > exist? (I don't even find a "dlist_remove" function).
>
> The removal of a callback depends on the value returned from the
> callback function. From callback.h:
>
> typedef int (*CallBack_FP)( uint64_t time, AvrClass *data );
>
> enum _cb_ret_codes {
> CB_RET_RETAIN = 0, /* Give the callback in the list and run it again */
> CB_RET_REMOVE = 1, /* Remove callback from list */
> };
>
> The core calls callback_list_execute_all() which calls dlist_iterator()
> which executes all the callbacks and removes any callbacks from the list
> that ask to be removed via the returned value.
>
> >
> > Am I on the right track here? Thanks.
>
> Essentially. Just install the callback, then, when the callback has seen
> 8 cycles, just return CB_RET_REMOVE and the callback is automagically
> removed from the list.
>
> Ted Roth
>
>
>