Library to control the mp3-tf-16p
Diff: MP3_TF_16P.cpp
- Revision:
- 2:4697650da797
- Parent:
- 1:c76171b5e9df
--- a/MP3_TF_16P.cpp Fri Mar 12 12:35:52 2021 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -#include "mbed.h" -#include "MP3_TF_16P.h" - -MP3_TF_16P::MP3_TF_16P(PinName PinTX, PinName PinRX) : SerialPort(PinTX,PinRX) -{ - //constructor. - SerialPort.baud(9600); - SerialPort.attach(callback(this,&MP3_TF_16P::Rx_interrupt), Serial::RxIrq); - - Stack[0] = 0x7E; //Start byte (always 7E) - Stack[1] = 0xFF; //Version (always FF) - Stack[2] = 0x06; //Length (always 6) - Stack[3] = 0x00; //Command - Stack[4] = 0x00; //Feedback on/off - Stack[5] = 0x00; //Parameter high byte - Stack[6] = 0x00; //Parameter low byte - Stack[7] = 0x00; //Checksum high byte - Stack[8] = 0x00; //Checksum low byte - Stack[9] = 0xEF; //End byte (always EF) -} - -void MP3_TF_16P::SetVolume(uint16_t Value) -{ - Stack[3] = 0x06; //Put commando in stack. - Stack[4] = 0x00; //No feedback required. - PutUint16InArray(Value,5,6); //Put value in stack. - SendStack(); -} - -void MP3_TF_16P::PlayTrackNumber(uint16_t Number) -{ - Stack[3] = 0x03; //Put commando in stack. - Stack[4] = 0x00; //No feedback required. - PutUint16InArray(Number,5,6); //Put value in stack. - SendStack(); -} - -void MP3_TF_16P::PausePlay() -{ - Stack[3] = 0x0E; //Put commando in stack. - Stack[4] = 0x00; //No feedback required. - SendStack(); -} - -void MP3_TF_16P::RepeatPlay(uint16_t Number) -{ - Stack[3] = 0x08; //Put commando in stack. - Stack[4] = 0x00; //No feedback required. - PutUint16InArray(Number,5,6); //Put value in stack. - SendStack(); -} - -//Sends the stack of data to the MP3-TF-16P module. -void MP3_TF_16P::SendStack() -{ - CalculateCheckSum(); //First calculate the checksum. - - for (int i = 0; i < 10; i++) - { - SerialPort.putc(Stack[i]); - } -} - -void MP3_TF_16P::CalculateCheckSum() -{ - uint16_t sum = 0; - - //Calculate checksum over bytes 1 to 6. - for (int i = 1; i < 7; i++) - { - sum += Stack[i]; - } - - //Invert checksum. - sum = -sum; - - //Put result in stack. - PutUint16InArray(sum,7,8); -} - -void MP3_TF_16P::PutUint16InArray(uint16_t value, uint8_t PlaceHighByte, uint8_t PlaceLowByte) -{ - //Put 16 bits usigned integer in stack at the requested places. - Stack[PlaceHighByte] = (uint8_t)(value>>8); //Shift bits to the right. - Stack[PlaceLowByte] = (uint8_t)(value); -} - -void MP3_TF_16P::Rx_interrupt() -{ - while (SerialPort.readable()) - { - for (int i = 0; i < 9; i++) - { - ReceivedStack[i] = ReceivedStack[i+1]; - } - ReceivedStack[9] = SerialPort.getc(); - - if (ReceivedStack[0] == 0x7E && ReceivedStack[1] == 0xFF && ReceivedStack[2] == 0x06 && ReceivedStack[9] == 0xEF) - { - if (ReceivedStack[3] == 0x48) - { - numberoffiles = ReceivedStack[6]; - } - if (ReceivedStack[3] == 0x40) - { - numberoffiles = 0; - } - } - } -} - -uint16_t MP3_TF_16P::GetNumberOfFiles() -{ - Stack[3] = 0x48; //Put commando in stack. - Stack[4] = 0x00; //No feedback required. - SendStack(); - wait(0.2); - return numberoffiles; -} \ No newline at end of file