82 lines
1.4 KiB
C
82 lines
1.4 KiB
C
/*
|
|
* rgbled.h
|
|
*
|
|
* Created on: Nov 11, 2021
|
|
* Author: dooku
|
|
*/
|
|
|
|
#ifndef INC_RGBLED_H_
|
|
#define INC_RGBLED_H_
|
|
|
|
#include "stm32l0xx_ll_tim.h"
|
|
#include "stddef.h"
|
|
|
|
/*
|
|
* Return values for I2C functions
|
|
*/
|
|
|
|
#define RGBLED_OK 0
|
|
#define RGBLED_ERROR -1 // generic error
|
|
#define RGBLED_WRONG_CHANNEL -2 // channel number not in {1,2,3,4}
|
|
|
|
/*
|
|
* Defaults used for LL timer (PWM) initialization
|
|
*/
|
|
|
|
#define RGBLED_PRESCALER 0
|
|
#define RGBLED_PERIOD 255
|
|
#define RGBLED_MAX_INTENSITY 100
|
|
|
|
/*
|
|
* Shorthands for colors
|
|
*/
|
|
|
|
#define RGBLED_RED 255,0,0
|
|
#define RGBLED_GREEN 0,255,0
|
|
#define RGBLED_BLUE 0,0,255
|
|
#define RGBLED_WHITE 255,255,255
|
|
#define RGBLED_YELLOW 255,255,0
|
|
#define RGBLED_OFF 0,0,0
|
|
#define RGBLED_MAGENTA 255,0,255
|
|
|
|
/*
|
|
* Type definitions
|
|
*/
|
|
|
|
typedef struct {
|
|
// tim2 ch1 B
|
|
// tim22 ch1 G
|
|
// tim22 ch2 R
|
|
// TODO union, aby se dalo nastavovat LED v cyklu (set_color)
|
|
union {
|
|
struct {
|
|
TIM_TypeDef *R;
|
|
TIM_TypeDef *G;
|
|
TIM_TypeDef *B;
|
|
} timer;
|
|
TIM_TypeDef *timer_array[3];
|
|
};
|
|
union {
|
|
struct {
|
|
uint8_t R;
|
|
uint8_t G;
|
|
uint8_t B;
|
|
} channel;
|
|
uint8_t channel_array[3];
|
|
};
|
|
|
|
} rgbled_context_t;
|
|
|
|
/*
|
|
* Function declarations
|
|
*/
|
|
|
|
int8_t rgbled_init(rgbled_context_t *context);
|
|
int8_t rgbled_set_color(uint8_t R, uint8_t G, uint8_t B);
|
|
int8_t rgbled_set_intensity(uint8_t intensity);
|
|
int8_t rgbled_get_intensity(uint8_t *intensity);
|
|
int8_t rgbled_off(void);
|
|
|
|
|
|
#endif /* INC_RGBLED_H_ */
|