mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 00:18:11 +01:00
play_folder bugfix and addition of play_mp3 (#4758)
This commit is contained in:
parent
76b6fcf554
commit
c13e20643b
3 changed files with 36 additions and 2 deletions
|
@ -40,6 +40,7 @@ DEVICE = {
|
||||||
|
|
||||||
NextAction = dfplayer_ns.class_("NextAction", automation.Action)
|
NextAction = dfplayer_ns.class_("NextAction", automation.Action)
|
||||||
PreviousAction = dfplayer_ns.class_("PreviousAction", automation.Action)
|
PreviousAction = dfplayer_ns.class_("PreviousAction", automation.Action)
|
||||||
|
PlayMp3Action = dfplayer_ns.class_("PlayMp3Action", automation.Action)
|
||||||
PlayFileAction = dfplayer_ns.class_("PlayFileAction", automation.Action)
|
PlayFileAction = dfplayer_ns.class_("PlayFileAction", automation.Action)
|
||||||
PlayFolderAction = dfplayer_ns.class_("PlayFolderAction", automation.Action)
|
PlayFolderAction = dfplayer_ns.class_("PlayFolderAction", automation.Action)
|
||||||
SetVolumeAction = dfplayer_ns.class_("SetVolumeAction", automation.Action)
|
SetVolumeAction = dfplayer_ns.class_("SetVolumeAction", automation.Action)
|
||||||
|
@ -113,6 +114,25 @@ async def dfplayer_previous_to_code(config, action_id, template_arg, args):
|
||||||
return var
|
return var
|
||||||
|
|
||||||
|
|
||||||
|
@automation.register_action(
|
||||||
|
"dfplayer.play_mp3",
|
||||||
|
PlayMp3Action,
|
||||||
|
cv.maybe_simple_value(
|
||||||
|
{
|
||||||
|
cv.GenerateID(): cv.use_id(DFPlayer),
|
||||||
|
cv.Required(CONF_FILE): cv.templatable(cv.int_),
|
||||||
|
},
|
||||||
|
key=CONF_FILE,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
async def dfplayer_play_mp3_to_code(config, action_id, template_arg, args):
|
||||||
|
var = cg.new_Pvariable(action_id, template_arg)
|
||||||
|
await cg.register_parented(var, config[CONF_ID])
|
||||||
|
template_ = await cg.templatable(config[CONF_FILE], args, float)
|
||||||
|
cg.add(var.set_file(template_))
|
||||||
|
return var
|
||||||
|
|
||||||
|
|
||||||
@automation.register_action(
|
@automation.register_action(
|
||||||
"dfplayer.play",
|
"dfplayer.play",
|
||||||
PlayFileAction,
|
PlayFileAction,
|
||||||
|
|
|
@ -7,10 +7,10 @@ namespace dfplayer {
|
||||||
static const char *const TAG = "dfplayer";
|
static const char *const TAG = "dfplayer";
|
||||||
|
|
||||||
void DFPlayer::play_folder(uint16_t folder, uint16_t file) {
|
void DFPlayer::play_folder(uint16_t folder, uint16_t file) {
|
||||||
if (folder < 100 && file < 256) {
|
if (folder <= 10 && file <= 1000) {
|
||||||
this->ack_set_is_playing_ = true;
|
this->ack_set_is_playing_ = true;
|
||||||
this->send_cmd_(0x0F, (uint8_t) folder, (uint8_t) file);
|
this->send_cmd_(0x0F, (uint8_t) folder, (uint8_t) file);
|
||||||
} else if (folder <= 10 && file <= 1000) {
|
} else if (folder < 100 && file < 256) {
|
||||||
this->ack_set_is_playing_ = true;
|
this->ack_set_is_playing_ = true;
|
||||||
this->send_cmd_(0x14, (((uint16_t) folder) << 12) | file);
|
this->send_cmd_(0x14, (((uint16_t) folder) << 12) | file);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -35,6 +35,10 @@ class DFPlayer : public uart::UARTDevice, public Component {
|
||||||
this->ack_set_is_playing_ = true;
|
this->ack_set_is_playing_ = true;
|
||||||
this->send_cmd_(0x02);
|
this->send_cmd_(0x02);
|
||||||
}
|
}
|
||||||
|
void play_mp3(uint16_t file) {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
this->send_cmd_(0x12, file);
|
||||||
|
}
|
||||||
void play_file(uint16_t file) {
|
void play_file(uint16_t file) {
|
||||||
this->ack_set_is_playing_ = true;
|
this->ack_set_is_playing_ = true;
|
||||||
this->send_cmd_(0x03, file);
|
this->send_cmd_(0x03, file);
|
||||||
|
@ -113,6 +117,16 @@ class DFPlayer : public uart::UARTDevice, public Component {
|
||||||
DFPLAYER_SIMPLE_ACTION(NextAction, next)
|
DFPLAYER_SIMPLE_ACTION(NextAction, next)
|
||||||
DFPLAYER_SIMPLE_ACTION(PreviousAction, previous)
|
DFPLAYER_SIMPLE_ACTION(PreviousAction, previous)
|
||||||
|
|
||||||
|
template<typename... Ts> class PlayMp3Action : public Action<Ts...>, public Parented<DFPlayer> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(uint16_t, file)
|
||||||
|
|
||||||
|
void play(Ts... x) override {
|
||||||
|
auto file = this->file_.value(x...);
|
||||||
|
this->parent_->play_mp3(file);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template<typename... Ts> class PlayFileAction : public Action<Ts...>, public Parented<DFPlayer> {
|
template<typename... Ts> class PlayFileAction : public Action<Ts...>, public Parented<DFPlayer> {
|
||||||
public:
|
public:
|
||||||
TEMPLATABLE_VALUE(uint16_t, file)
|
TEMPLATABLE_VALUE(uint16_t, file)
|
||||||
|
|
Loading…
Reference in a new issue