mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
174 lines
3.0 KiB
C++
174 lines
3.0 KiB
C++
//
|
|
// FILE: MiniMP3.cpp
|
|
// AUTHOR: Rob.Tillaart@gmail.com
|
|
// VERSION: 0.1.2
|
|
// PURPOSE: Arduino library for DFRobotics MP3 player and compatibles.
|
|
|
|
|
|
#include "MiniMP3.h"
|
|
|
|
|
|
// CONSTANTS
|
|
#define MP3_MAX_VOLUME 30
|
|
|
|
|
|
// COMMANDS
|
|
#define MP3_NEXT 0x01
|
|
#define MP3_PREV 0x02
|
|
#define MP3_PLAY 0x03
|
|
#define MP3_VOL_INCR 0x04
|
|
#define MP3_VOL_DECR 0x05
|
|
#define MP3_VOL_SET 0x06
|
|
#define MP3_EQUAL 0x07
|
|
#define MP3_PLAYMODE 0x08
|
|
#define MP3_PLAYSOURCE 0x09
|
|
#define MP3_LOWPOWER 0x0A
|
|
#define MP3_POWER 0x0B
|
|
#define MP3_RESET 0x0C
|
|
#define MP3_PLAYBACK 0x0D
|
|
#define MP3_PAUSE 0x0E
|
|
#define MP3_PLAY_FOLDER 0x0F
|
|
#define MP3_VOL_ADJUST_SET 0x10
|
|
#define MP3_REPEAT 0x11
|
|
|
|
|
|
// QUERIES
|
|
// not supported (yet)
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
//
|
|
// PUBLIC
|
|
//
|
|
MINIMP3::MINIMP3(Stream * stream)
|
|
{
|
|
_stream = stream;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
//
|
|
// PLAY
|
|
//
|
|
void MINIMP3::play(uint16_t track)
|
|
{
|
|
command(MP3_PLAY, track);
|
|
}
|
|
|
|
// void MINIMP3::playFolder(uint8_t folder, uint8_t track)
|
|
// {
|
|
// command(MP3_PLAY_FOLDER, folder, track);
|
|
// }
|
|
|
|
void MINIMP3::next()
|
|
{
|
|
command(MP3_NEXT);
|
|
}
|
|
|
|
void MINIMP3::prev()
|
|
{
|
|
command(MP3_PREV);
|
|
}
|
|
|
|
void MINIMP3::stop()
|
|
{
|
|
command(0x15);
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
//
|
|
// CONTROL
|
|
//
|
|
void MINIMP3::pause()
|
|
{
|
|
command(MP3_PAUSE);
|
|
}
|
|
|
|
void MINIMP3::reset()
|
|
{
|
|
command(MP3_RESET);
|
|
}
|
|
|
|
void MINIMP3::lowPower()
|
|
{
|
|
command(MP3_LOWPOWER);
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
//
|
|
// VOLUME
|
|
//
|
|
void MINIMP3::volume(uint16_t vol)
|
|
{
|
|
if (vol > MP3_MAX_VOLUME) vol = MP3_MAX_VOLUME;
|
|
command(MP3_VOL_SET, 256 + vol);
|
|
}
|
|
|
|
void MINIMP3::volumeUp()
|
|
{
|
|
command(MP3_VOL_INCR);
|
|
}
|
|
|
|
void MINIMP3::volumeDown()
|
|
{
|
|
command(MP3_VOL_DECR);
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
//
|
|
// EQUALIZER
|
|
//
|
|
void MINIMP3::equalizer(uint8_t mode)
|
|
{
|
|
if (mode > 5) mode = MP3_EQ_NORMAL;
|
|
command(MP3_EQUAL, mode);
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
//
|
|
// PRIVATE
|
|
//
|
|
void MINIMP3::command(uint8_t cmd, uint16_t arg)
|
|
{
|
|
uint8_t arg2 = arg & 0xFF;
|
|
uint8_t arg1 = arg >> 8;
|
|
command(cmd, arg1, arg2);
|
|
}
|
|
|
|
|
|
void MINIMP3::command(uint8_t cmd, uint8_t arg1, uint8_t arg2)
|
|
{
|
|
uint8_t buffer[10] = {0x7E, // Start == $
|
|
0xFF, // version
|
|
0x06, // length
|
|
cmd,
|
|
0x00, // 0 = no feedback
|
|
arg1, // param 1
|
|
arg2, // param 2
|
|
0x00, // CheckSumHigh
|
|
0x00, // CheckSumLow
|
|
0xEF // End Byte
|
|
};
|
|
|
|
uint16_t chksum = 0;
|
|
for (int i = 1; i < 7; i++ )
|
|
{
|
|
chksum += buffer[i];
|
|
}
|
|
chksum = -chksum;
|
|
buffer[7] = (chksum >> 8); // CheckSumHigh
|
|
buffer[8] = (chksum & 0xFF); // CheckSumLow
|
|
|
|
_stream->write(buffer, 10);
|
|
}
|
|
|
|
|
|
// -- END OF FILE --
|
|
|