103 lines
3.5 KiB
C
103 lines
3.5 KiB
C
/***************************************************************************
|
|
* Copyright (C) 02/2021 by Olaf Rempel *
|
|
* razzor@kopf-tisch.de *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; version 2 of the License, *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
***************************************************************************/
|
|
#include <avr/interrupt.h>
|
|
#include <avr/io.h>
|
|
#include <avr/power.h>
|
|
|
|
#include "event.h"
|
|
#include "ledfade.h"
|
|
#include "pwm.h"
|
|
#include "timer.h"
|
|
#include "usbcdc.h"
|
|
|
|
/* *********************************************************************** */
|
|
|
|
|
|
/* *************************************************************************
|
|
* disable_wdt_timer
|
|
* ************************************************************************* */
|
|
void disable_wdt_timer(void) __attribute__((naked, section(".init3")));
|
|
void disable_wdt_timer(void)
|
|
{
|
|
MCUSR = 0;
|
|
WDTCSR = (1<<WDCE) | (1<<WDE);
|
|
WDTCSR = (0<<WDE);
|
|
} /* disable_wdt_timer */
|
|
|
|
|
|
/* *************************************************************************
|
|
* main
|
|
* ************************************************************************* */
|
|
int main(void)
|
|
{
|
|
/* Disable clock division */
|
|
clock_prescale_set(clock_div_1);
|
|
|
|
usbcdc_init();
|
|
timer_init();
|
|
pwm_init();
|
|
|
|
sei();
|
|
|
|
// fade LEDs to max, set fan PWM to 50%
|
|
event_queue(EVENT_TYPE_LEDFADE_COMMAND, EVENT_NUM_LED_CH0, EVENT_VALUE_LEDFADE_MAX);
|
|
event_queue(EVENT_TYPE_LEDFADE_COMMAND, EVENT_NUM_LED_CH1, EVENT_VALUE_LEDFADE_MIN);
|
|
event_queue(EVENT_TYPE_PWM_VALUE, EVENT_NUM_PWM_CH2, 0x58);
|
|
|
|
for (;;)
|
|
{
|
|
usbcdc_task();
|
|
|
|
timer_check(0);
|
|
|
|
event_entry_t* p_event = event_get();
|
|
switch (p_event->type)
|
|
{
|
|
case EVENT_TYPE_TIMER_SET:
|
|
timer_event_handler(p_event);
|
|
break;
|
|
|
|
case EVENT_TYPE_TIMER_ELAPSED:
|
|
if (p_event->num == EVENT_NUM_TIMER_LEDFADE)
|
|
{
|
|
ledfade_event_handler(p_event);
|
|
}
|
|
break;
|
|
|
|
case EVENT_TYPE_PWM_VALUE:
|
|
pwm_event_handler(p_event);
|
|
break;
|
|
|
|
case EVENT_TYPE_LEDFADE_COMMAND:
|
|
case EVENT_TYPE_LEDFADE_VALUE:
|
|
ledfade_event_handler(p_event);
|
|
break;
|
|
|
|
case EVENT_TYPE_LEDFADE_STATUS:
|
|
usbcdc_event_handler(p_event);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
event_clear(p_event);
|
|
}
|
|
}
|