This library for Akita Sound module. very personal.

Committer:
kazushi2008
Date:
Fri Oct 29 02:22:14 2010 +0000
Revision:
0:934392476bd5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kazushi2008 0:934392476bd5 1 /**
kazushi2008 0:934392476bd5 2 * ...
kazushi2008 0:934392476bd5 3 * @author Kazushi Mukaiyama
kazushi2008 0:934392476bd5 4 */
kazushi2008 0:934392476bd5 5
kazushi2008 0:934392476bd5 6 #include "AkitaSM.h"
kazushi2008 0:934392476bd5 7 #include "mbed.h"
kazushi2008 0:934392476bd5 8
kazushi2008 0:934392476bd5 9 #define AKITA_AICTRL0 0x0C // Current song number / Song change
kazushi2008 0:934392476bd5 10 #define AKITA_AICTRL1 0x0D // Number of songs on MMC
kazushi2008 0:934392476bd5 11 #define AKITA_AICTRL2 0x0E // Number of songs on MMC (VS1103b)
kazushi2008 0:934392476bd5 12 #define AKITA_AICTRL3 0x0F // Play mode
kazushi2008 0:934392476bd5 13
kazushi2008 0:934392476bd5 14 AkitaSM::AkitaSM(int addr, PinName sda, PinName scl)
kazushi2008 0:934392476bd5 15 : _i2c(sda, scl) {
kazushi2008 0:934392476bd5 16
kazushi2008 0:934392476bd5 17 _addr = addr<<1;
kazushi2008 0:934392476bd5 18
kazushi2008 0:934392476bd5 19 // Set up the i2c interface
kazushi2008 0:934392476bd5 20 //_i2c.frequency(1000000);
kazushi2008 0:934392476bd5 21 }
kazushi2008 0:934392476bd5 22
kazushi2008 0:934392476bd5 23 void AkitaSM::play(int index, bool loop)
kazushi2008 0:934392476bd5 24 {
kazushi2008 0:934392476bd5 25 char p = 0;
kazushi2008 0:934392476bd5 26 if(loop) p = 1; else p = 3;
kazushi2008 0:934392476bd5 27 _cmd[0] = AKITA_AICTRL3;
kazushi2008 0:934392476bd5 28 _cmd[1] = 0;
kazushi2008 0:934392476bd5 29 _cmd[2] = p << 1;
kazushi2008 0:934392476bd5 30 _i2c.write(_addr, _cmd, 3);
kazushi2008 0:934392476bd5 31 wait(0.01);
kazushi2008 0:934392476bd5 32 int n = 0x8000 + index;
kazushi2008 0:934392476bd5 33 _cmd[0] = AKITA_AICTRL0;
kazushi2008 0:934392476bd5 34 _cmd[1] = (n >> 8) & 0xFF;
kazushi2008 0:934392476bd5 35 _cmd[2] = n & 0xFF;
kazushi2008 0:934392476bd5 36 _i2c.write(_addr, _cmd, 3);
kazushi2008 0:934392476bd5 37 //_cmd[0] = index & 0xFF;
kazushi2008 0:934392476bd5 38 //_i2c.write(_addr, _cmd, 1);
kazushi2008 0:934392476bd5 39 }
kazushi2008 0:934392476bd5 40
kazushi2008 0:934392476bd5 41 void AkitaSM::stop()
kazushi2008 0:934392476bd5 42 {
kazushi2008 0:934392476bd5 43 _cmd[0] = AKITA_AICTRL3;
kazushi2008 0:934392476bd5 44 _cmd[1] = 0;
kazushi2008 0:934392476bd5 45 _cmd[2] = 1<<4;
kazushi2008 0:934392476bd5 46 _i2c.write(_addr, _cmd, 3);
kazushi2008 0:934392476bd5 47 }
kazushi2008 0:934392476bd5 48
kazushi2008 0:934392476bd5 49 void AkitaSM::control(char r, int cmd)
kazushi2008 0:934392476bd5 50 {
kazushi2008 0:934392476bd5 51 //r is resistor 0x00-0x0f
kazushi2008 0:934392476bd5 52 _cmd[0] = r;
kazushi2008 0:934392476bd5 53 _cmd[1] = (cmd >> 8) & 0xFF;
kazushi2008 0:934392476bd5 54 _cmd[2] = cmd & 0xFF;
kazushi2008 0:934392476bd5 55 _i2c.write(_addr, _cmd, 3);
kazushi2008 0:934392476bd5 56 }
kazushi2008 0:934392476bd5 57
kazushi2008 0:934392476bd5 58 char* AkitaSM::isPlaying()
kazushi2008 0:934392476bd5 59 {
kazushi2008 0:934392476bd5 60 //_i2c.read(_addr, _cmd, 4);
kazushi2008 0:934392476bd5 61 _i2c.read(_addr, _cmd, 4);
kazushi2008 0:934392476bd5 62 return _cmd;
kazushi2008 0:934392476bd5 63 }