TI-84_DFPlayer/TI-84_DFPlayer.ino

92 lines
1.9 KiB
C++

#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>
#include "CBL2.h"
#include "TIVar.h"
CBL2 cbl;
SoftwareSerial SoftSerial(0, 1); // RX, TX
DFRobotDFPlayerMini DFPlayer;
#define MAXDATALEN 32
uint8_t header[16];
uint8_t data[MAXDATALEN];
int onSendAsCBL2(uint8_t type, enum Endpoint model, int *headerlen, int *datalen, data_callback *data_callback);
int onGetAsCBL2(uint8_t type, enum Endpoint model, int datalen);
void setup()
{
SoftSerial.begin(9600);
DFPlayer.begin(SoftSerial);
DFPlayer.play(2);
cbl.setLines(4, 3);
cbl.resetLines();
cbl.setupCallbacks(header, data, MAXDATALEN, onGetAsCBL2, onSendAsCBL2);
}
void loop()
{
int rval;
rval = cbl.eventLoopTick();
if (rval && rval != ERR_READ_TIMEOUT)
{
SoftSerial.print("eventLoopTick: error code ");
SoftSerial.println(rval);
}
}
void sendtoDFP(short command, short parameter)
{
switch (command)
{
case 1:
DFPlayer.next(); break;
case 2:
DFPlayer.previous(); break;
case 3:
DFPlayer.play(parameter); break;
case 4:
DFPlayer.volumeUp(); break;
case 5:
DFPlayer.volumeDown(); break;
case 6:
DFPlayer.volume(parameter); break;
case 8:
DFPlayer.randomAll(); break;
case 13:
DFPlayer.start(); break;
case 14:
DFPlayer.pause(); break;
case 17:
DFPlayer.stop(); break;
}
}
int onGetAsCBL2(uint8_t type, enum Endpoint model, int datalen)
{
uint16_t list_len = TIVar::sizeWordToInt(&(data[0])); // Convert 2-byte size word to int
int size_of_real = TIVar::sizeOfReal(model);
short cmd = TIVar::realToLong8x(&data[size_of_real * 0 + 2], model); // First list element starts after 2-byte size word
short parameter = TIVar::realToLong8x(&data[size_of_real * 1 + 2], model);
sendtoDFP(cmd, parameter);
return 0;
}
int onSendAsCBL2(uint8_t type, enum Endpoint model, int *headerlen, int *datalen, data_callback *data_callback)
{
return 0;
}