callback 8c source


Main Page Main Page Related Pages Files callback.c00001 /* 00002 * $Id: callback.c,v 1.5 2003/12/01 09:10:14 troth Exp $ 00003 * 00004 **************************************************************************** 00005 * 00006 * simulavr - A simulator for the Atmel AVR family of microcontrollers. 00007 * Copyright (C) 2001, 2002, 2003 Theodore A. Roth 00008 * 00009 * This program is free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU General Public License 00020 * along with this program; if not, write to the Free Software 00021 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00022 * 00023 **************************************************************************** 00024 */ 00025 00026 #include <config.h> 00027 00028 #include <stdio.h> 00029 #include <stdlib.h> 00030 00031 #include "avrerror.h" 00032 #include "avrmalloc.h" 00033 #include "avrclass.h" 00034 #include "utils.h" 00035 #include "callback.h" 00036 00037 /****************************************************************************\ 00038 * 00039 * Clock Call Back methods 00040 * 00041 \****************************************************************************/ 00042 00043 #ifndef DOXYGEN /* don't expose to doxygen */ 00044 00045 struct _CallBack 00046 { 00047 AvrClass parent; 00048 CallBack_FP func; /* the callback function */ 00049 AvrClass *data; /* user data to be passed to callback 00050 function */ 00051 }; 00052 00053 #endif /* DOXYGEN */ 00054 00055 CallBack * 00056 callback_new (CallBack_FP func, AvrClass *data) 00057 { 00058 CallBack *cb; 00059 00060 cb = avr_new (CallBack, 1); 00061 callback_construct (cb, func, data); 00062 class_overload_destroy ((AvrClass *)cb, callback_destroy); 00063 00064 return cb; 00065 } 00066 00067 void 00068 callback_construct (CallBack *cb, CallBack_FP func, AvrClass *data) 00069 { 00070 if (cb == NULL) 00071 avr_error ("passed null ptr"); 00072 00073 class_construct ((AvrClass *)cb); 00074 00075 cb->func = func; 00076 00077 cb->data = data; 00078 00079 if (data) 00080 class_ref (data); 00081 } 00082 00083 void 00084 callback_destroy (void *cb) 00085 { 00086 CallBack *_cb = (CallBack *)cb; 00087 00088 if (cb == NULL) 00089 return; 00090 00091 if (_cb->data) 00092 class_unref (_cb->data); 00093 00094 class_destroy (cb); 00095 } 00096 00097 DList * 00098 callback_list_add (DList *head, CallBack *cb) 00099 { 00100 return dlist_add (head, (AvrClass *)cb, NULL); 00101 } 00102 00103 static int 00104 callback_execute (AvrClass *data, void *user_data) 00105 { 00106 CallBack *cb = (CallBack *)data; 00107 uint64_t time = *(uint64_t *) user_data; 00108 00109 return cb->func (time, cb->data); 00110 } 00111 00112 DList * 00113 callback_list_execute_all (DList *head, uint64_t time) 00114 { 00115 return dlist_iterator (head, callback_execute, &time); 00116 } Automatically generated by Doxygen 1.5.5 on 7 Nov 2008.

Wyszukiwarka

Podobne podstrony:
source30
Matrix3?pp source
Thread?pp source
arm biquad ?scade ?1 ?st q31? source
arm conv ?2? source
arm mat mult q15? source
CallbackDemo
Resource 8inl source
arm fir lattice init q31? source
KeyStore CallbackHandlerProtection
arm fir ?cimate ?st q15? source
source11
arm correlate ?st q15? source
connector?s source
source8
register? source
passing values source

więcej podobnych podstron