usbfanctrl/main.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);
}
}