diff --git a/scheduler/include/scheduler.h b/scheduler/include/scheduler.h index cdbdae51afea7b792d61cded39081c118bf8bcbe..539b9c502894b20471fa03ca6ba503c445db991d 100644 --- a/scheduler/include/scheduler.h +++ b/scheduler/include/scheduler.h @@ -24,25 +24,26 @@ typedef enum {SCHED_CH1=0,SCHED_CH2=1,SCHED_CH3=2,SCHED_CH4=3} sched_channel_t; typedef struct{ - void (*function)(void); + void (*function)(void *data); unsigned char period_ms; unsigned int pulse; unsigned char enabled; + void *data; }TSchedulerChannel; typedef struct{ TSchedulerChannel channels[SCHEDULER_MAX_CHANNELS]; unsigned char num_channels; unsigned short int prescaler; - void (* start)(sched_channel_t); - void (* stop)(sched_channel_t); - void (* set_pulse)(sched_channel_t,unsigned short,unsigned char); + void (* start)(unsigned short int); + void (* stop)(unsigned short int); + void (* set_pulse)(unsigned short int,unsigned short int,unsigned char); }TScheduler; void scheduler_init(TScheduler *scheduler,unsigned char num_channels, unsigned short int prescaler); void scheduler_interrupt(TScheduler *scheduler,sched_channel_t channel_id); unsigned short int scheduler_get_pulse(TScheduler *scheduler, sched_channel_t channel_id); -void scheduler_set_channel(TScheduler *scheduler,sched_channel_t channel_id, void (*function)(void), unsigned char period_ms); +void scheduler_set_channel(TScheduler *scheduler,sched_channel_t channel_id, void (*function)(void *data), unsigned char period_ms,void *data); void scheduler_enable_channel(TScheduler *scheduler,sched_channel_t channel_id); void scheduler_change_period(TScheduler *scheduler,sched_channel_t channel_id,unsigned char period_ms); void scheduler_disable_channel(TScheduler *scheduler,sched_channel_t channel_id); diff --git a/scheduler/src/scheduler.c b/scheduler/src/scheduler.c index a9bfd0d96ffad632eaadb31c5a7c718492d46b80..d4f420decf26a9cba28e4f6439e294d40fbfd79c 100644 --- a/scheduler/src/scheduler.c +++ b/scheduler/src/scheduler.c @@ -42,13 +42,13 @@ void scheduler_interrupt(TScheduler *scheduler,sched_channel_t channel_id) if(channel_id<scheduler->num_channels) { if(scheduler->set_pulse!=0x00000000) - scheduler->set_pulse(channel_id,scheduler->channels[channel_id].pulse,0x01); + scheduler->set_pulse(scheduler_get_channel(channel_id),scheduler->channels[channel_id].pulse,0x01); if(scheduler->channels[channel_id].function!=0x00000000) - scheduler->channels[channel_id].function(); + scheduler->channels[channel_id].function(scheduler->channels[channel_id].data); } } -void scheduler_set_channel(TScheduler *scheduler,sched_channel_t channel_id, void (*function)(void), unsigned char period_ms) +void scheduler_set_channel(TScheduler *scheduler,sched_channel_t channel_id, void (*function)(void *data), unsigned char period_ms,void *data) { if(channel_id<scheduler->num_channels) { @@ -61,6 +61,7 @@ void scheduler_set_channel(TScheduler *scheduler,sched_channel_t channel_id, voi scheduler->channels[channel_id].function=function; scheduler->channels[channel_id].period_ms=period_ms; scheduler->channels[channel_id].pulse=scheduler_ms_to_pulse(scheduler,period_ms); + scheduler->channels[channel_id].data=data; } } @@ -71,9 +72,9 @@ void scheduler_enable_channel(TScheduler *scheduler,sched_channel_t channel_id) if(scheduler->channels[channel_id].enabled==0x00) { if(scheduler->set_pulse!=0x00000000) - scheduler->set_pulse(channel_id,scheduler->channels[channel_id].pulse,0x00); + scheduler->set_pulse(scheduler_get_channel(channel_id),scheduler->channels[channel_id].pulse,0x00); if(scheduler->start!=0x00000000) - scheduler->start(channel_id); + scheduler->start(scheduler_get_channel(channel_id)); scheduler->channels[channel_id].enabled=0x01; } } @@ -92,8 +93,8 @@ void scheduler_disable_channel(TScheduler *scheduler,sched_channel_t channel_id) if(scheduler->channels[channel_id].enabled==0x01) { if(scheduler->stop!=0x00000000) - scheduler->stop(channel_id); - scheduler->channels[channel_id].enabled=0x0; + scheduler->stop(scheduler_get_channel(channel_id)); + scheduler->channels[channel_id].enabled=0x00; } } }