You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.7 KiB
70 lines
1.7 KiB
6 years ago
|
//
|
||
|
// Created by MightyPork on 2017/11/25.
|
||
|
//
|
||
|
|
||
|
#include "unit_base.h"
|
||
|
#include "unit_pwmdim.h"
|
||
|
|
||
|
#define PWMDIM_INTERNAL
|
||
|
#include "_pwmdim_internal.h"
|
||
|
|
||
|
// ------------------------------------------------------------------------
|
||
|
|
||
|
enum PwmSimpleCmd_ {
|
||
|
CMD_SET_FREQUENCY = 0,
|
||
|
CMD_SET_DUTY = 1,
|
||
|
CMD_STOP = 2,
|
||
|
CMD_START = 3,
|
||
|
};
|
||
|
|
||
|
/** Handle a request message */
|
||
|
static error_t UPWMDIM_handleRequest(Unit *unit, TF_ID frame_id, uint8_t command, PayloadParser *pp)
|
||
|
{
|
||
|
struct priv *priv = unit->data;
|
||
|
|
||
|
switch (command) {
|
||
|
case CMD_SET_FREQUENCY:
|
||
|
TRY(UPWMDIM_SetFreq(unit, pp_u32(pp)));
|
||
|
return E_SUCCESS;
|
||
|
|
||
|
case CMD_SET_DUTY:
|
||
|
for (; pp_length(pp) > 0;) {
|
||
|
uint8_t ch = pp_u8(pp);
|
||
|
uint16_t duty = pp_u16(pp);
|
||
|
TRY(UPWMDIM_SetDuty(unit, ch, duty));
|
||
|
}
|
||
|
return E_SUCCESS;
|
||
|
|
||
|
case CMD_STOP:
|
||
|
LL_TIM_DisableCounter(priv->TIMx);
|
||
|
LL_TIM_SetCounter(priv->TIMx, 0);
|
||
|
return E_SUCCESS;
|
||
|
|
||
|
case CMD_START:
|
||
|
LL_TIM_EnableCounter(priv->TIMx);
|
||
|
return E_SUCCESS;
|
||
|
|
||
|
default:
|
||
|
return E_UNKNOWN_COMMAND;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ------------------------------------------------------------------------
|
||
|
|
||
|
/** Simple PWM dimming output */
|
||
|
const UnitDriver UNIT_PWMDIM = {
|
||
|
.name = "PWMDIM",
|
||
|
.description = "Simple PWM output",
|
||
|
// Settings
|
||
|
.preInit = UPWMDIM_preInit,
|
||
|
.cfgLoadBinary = UPWMDIM_loadBinary,
|
||
|
.cfgWriteBinary = UPWMDIM_writeBinary,
|
||
|
.cfgLoadIni = UPWMDIM_loadIni,
|
||
|
.cfgWriteIni = UPWMDIM_writeIni,
|
||
|
// Init
|
||
|
.init = UPWMDIM_init,
|
||
|
.deInit = UPWMDIM_deInit,
|
||
|
// Function
|
||
|
.handleRequest = UPWMDIM_handleRequest,
|
||
|
};
|