Smart pole

Dependencies:   FTPClient SDFileSystem WIZnetInterface mbed

Fork of FTP_Streaming_Music_Player_WIZwiki-W7500 by justin kim

Committer:
justinkim
Date:
Tue Sep 22 23:14:59 2015 +0000
Revision:
0:fa775d326f9c
Child:
1:c47c255fcad4
Music Player

Who changed what in which revision?

UserRevisionLine numberNew contents of line
justinkim 0:fa775d326f9c 1 #include "VS1002.h"
justinkim 0:fa775d326f9c 2 #include "mbed.h"
justinkim 0:fa775d326f9c 3
justinkim 0:fa775d326f9c 4 Serial pc(USBTX, USBRX);
justinkim 0:fa775d326f9c 5 TextLCD lcd(D8, D9, D0, D1, D2, D15);
justinkim 0:fa775d326f9c 6
justinkim 0:fa775d326f9c 7 /* ==================================================================
justinkim 0:fa775d326f9c 8 * Constructor
justinkim 0:fa775d326f9c 9 * =================================================================*/
justinkim 0:fa775d326f9c 10
justinkim 0:fa775d326f9c 11 VS1002::VS1002(PinName mmosi, PinName mmiso, PinName ssck, PinName ccs, const char *name, PinName mosi, PinName miso, PinName sck, PinName cs, PinName rst, PinName dreq, PinName dcs)
justinkim 0:fa775d326f9c 12 : _DREQ(dreq), _RST(rst), _spi(mosi, miso, sck), _CS(cs), _DCS(dcs), _sd(mmosi, mmiso, ssck, ccs, name) {
justinkim 0:fa775d326f9c 13
justinkim 0:fa775d326f9c 14 }
justinkim 0:fa775d326f9c 15
justinkim 0:fa775d326f9c 16 /*===================================================================
justinkim 0:fa775d326f9c 17 * Functions
justinkim 0:fa775d326f9c 18 *==================================================================*/
justinkim 0:fa775d326f9c 19
justinkim 0:fa775d326f9c 20 void VS1002::cs_low(void)
justinkim 0:fa775d326f9c 21 {
justinkim 0:fa775d326f9c 22 _CS = 0;
justinkim 0:fa775d326f9c 23 }
justinkim 0:fa775d326f9c 24 void VS1002::cs_high(void)
justinkim 0:fa775d326f9c 25 {
justinkim 0:fa775d326f9c 26 _CS = 1;
justinkim 0:fa775d326f9c 27 }
justinkim 0:fa775d326f9c 28 void VS1002::dcs_low(void)
justinkim 0:fa775d326f9c 29 {
justinkim 0:fa775d326f9c 30 _DCS = 0;
justinkim 0:fa775d326f9c 31 }
justinkim 0:fa775d326f9c 32 void VS1002::dcs_high(void)
justinkim 0:fa775d326f9c 33 {
justinkim 0:fa775d326f9c 34 _DCS = 1;
justinkim 0:fa775d326f9c 35 }
justinkim 0:fa775d326f9c 36 void VS1002::sci_en(void) //SCI enable
justinkim 0:fa775d326f9c 37 {
justinkim 0:fa775d326f9c 38 cs_high();
justinkim 0:fa775d326f9c 39 dcs_high();
justinkim 0:fa775d326f9c 40 cs_low();
justinkim 0:fa775d326f9c 41 }
justinkim 0:fa775d326f9c 42 void VS1002::sci_dis(void) //SCI disable
justinkim 0:fa775d326f9c 43 {
justinkim 0:fa775d326f9c 44 cs_high();
justinkim 0:fa775d326f9c 45 }
justinkim 0:fa775d326f9c 46 void VS1002::sdi_en(void) //SDI enable
justinkim 0:fa775d326f9c 47 {
justinkim 0:fa775d326f9c 48 dcs_high();
justinkim 0:fa775d326f9c 49 cs_high();
justinkim 0:fa775d326f9c 50 dcs_low();
justinkim 0:fa775d326f9c 51 }
justinkim 0:fa775d326f9c 52 void VS1002::sdi_dis(void) //SDI disable
justinkim 0:fa775d326f9c 53 {
justinkim 0:fa775d326f9c 54 dcs_high();
justinkim 0:fa775d326f9c 55 }
justinkim 0:fa775d326f9c 56 void VS1002::reset(void) //hardware reset
justinkim 0:fa775d326f9c 57 {
justinkim 0:fa775d326f9c 58 wait(0.01);
justinkim 0:fa775d326f9c 59 _RST = 0;
justinkim 0:fa775d326f9c 60 wait(0.01);
justinkim 0:fa775d326f9c 61 _RST = 1;
justinkim 0:fa775d326f9c 62 wait(0.10);
justinkim 0:fa775d326f9c 63 }
justinkim 0:fa775d326f9c 64 void VS1002::power_down(void) //hardware and software reset
justinkim 0:fa775d326f9c 65 {
justinkim 0:fa775d326f9c 66 cs_low();
justinkim 0:fa775d326f9c 67 reset();
justinkim 0:fa775d326f9c 68 sci_write(0x00, SM_PDOWN);
justinkim 0:fa775d326f9c 69 wait(0.01);
justinkim 0:fa775d326f9c 70 reset();
justinkim 0:fa775d326f9c 71 }
justinkim 0:fa775d326f9c 72 void VS1002::sci_initialise(void)
justinkim 0:fa775d326f9c 73 {
justinkim 0:fa775d326f9c 74 _RST = 1; //no reset
justinkim 0:fa775d326f9c 75 _spi.format(8,0); //spi 8bit interface, steady state low
justinkim 0:fa775d326f9c 76 _spi.frequency(1000000); //rising edge data record, freq. 1Mhz
justinkim 0:fa775d326f9c 77
justinkim 0:fa775d326f9c 78 cs_low();
justinkim 0:fa775d326f9c 79 for(int i=0; i<4; i++)
justinkim 0:fa775d326f9c 80 {
justinkim 0:fa775d326f9c 81 _spi.write(0xFF); //clock the chip a bit
justinkim 0:fa775d326f9c 82 }
justinkim 0:fa775d326f9c 83 cs_high();
justinkim 0:fa775d326f9c 84 dcs_high();
justinkim 0:fa775d326f9c 85 wait_us(5);
justinkim 0:fa775d326f9c 86 }
justinkim 0:fa775d326f9c 87 void VS1002::sdi_initialise(void)
justinkim 0:fa775d326f9c 88 {
justinkim 0:fa775d326f9c 89 _spi.format(8,0);
justinkim 0:fa775d326f9c 90 _spi.frequency(7000000); //set to 7MHz
justinkim 0:fa775d326f9c 91
justinkim 0:fa775d326f9c 92 cs_high();
justinkim 0:fa775d326f9c 93 dcs_high();
justinkim 0:fa775d326f9c 94 }
justinkim 0:fa775d326f9c 95 void VS1002::sci_write(unsigned char address, unsigned short int data)
justinkim 0:fa775d326f9c 96 {
justinkim 0:fa775d326f9c 97 sci_en(); //enables SCI/disables SDI
justinkim 0:fa775d326f9c 98
justinkim 0:fa775d326f9c 99 while(!_DREQ); //wait unitl data request is high
justinkim 0:fa775d326f9c 100 _spi.write(0x02); //SCI write
justinkim 0:fa775d326f9c 101 _spi.write(address); //register address
justinkim 0:fa775d326f9c 102 _spi.write((data >> 8) & 0xFF); //write out first half of data word
justinkim 0:fa775d326f9c 103 _spi.write(data & 0xFF); //write out second half of data word
justinkim 0:fa775d326f9c 104
justinkim 0:fa775d326f9c 105 sci_dis(); //enables SDI/disables SCI
justinkim 0:fa775d326f9c 106 wait_us(5);
justinkim 0:fa775d326f9c 107 }
justinkim 0:fa775d326f9c 108 void VS1002::sdi_write(unsigned char datum)
justinkim 0:fa775d326f9c 109 {
justinkim 0:fa775d326f9c 110 sdi_en();
justinkim 0:fa775d326f9c 111
justinkim 0:fa775d326f9c 112 while(!_DREQ);
justinkim 0:fa775d326f9c 113 _spi.write(datum);
justinkim 0:fa775d326f9c 114
justinkim 0:fa775d326f9c 115 sci_dis();
justinkim 0:fa775d326f9c 116 }
justinkim 0:fa775d326f9c 117 unsigned short int VS1002::read(unsigned short int address)
justinkim 0:fa775d326f9c 118 {
justinkim 0:fa775d326f9c 119 cs_low(); //enables SCI/disables SDI
justinkim 0:fa775d326f9c 120
justinkim 0:fa775d326f9c 121 while(!_DREQ); //wait unitl data request is high
justinkim 0:fa775d326f9c 122 _spi.write(0x03); //SCI write
justinkim 0:fa775d326f9c 123 _spi.write(address); //register address
justinkim 0:fa775d326f9c 124 unsigned short int received = _spi.write(0x00); //write out dummy byte
justinkim 0:fa775d326f9c 125 received <<= 8;
justinkim 0:fa775d326f9c 126 received += _spi.write(0x00); //write out dummy byte
justinkim 0:fa775d326f9c 127
justinkim 0:fa775d326f9c 128 cs_high(); //enables SDI/disables SCI
justinkim 0:fa775d326f9c 129
justinkim 0:fa775d326f9c 130 return received; //return received word
justinkim 0:fa775d326f9c 131 }
justinkim 0:fa775d326f9c 132 void VS1002::sine_test_activate(unsigned char wave)
justinkim 0:fa775d326f9c 133 {
justinkim 0:fa775d326f9c 134 cs_high(); //enables SDI/disables SCI
justinkim 0:fa775d326f9c 135
justinkim 0:fa775d326f9c 136 while(!_DREQ); //wait unitl data request is high
justinkim 0:fa775d326f9c 137 _spi.write(0x53); //SDI write
justinkim 0:fa775d326f9c 138 _spi.write(0xEF); //SDI write
justinkim 0:fa775d326f9c 139 _spi.write(0x6E); //SDI write
justinkim 0:fa775d326f9c 140 _spi.write(wave); //SDI write
justinkim 0:fa775d326f9c 141 _spi.write(0x00); //filler byte
justinkim 0:fa775d326f9c 142 _spi.write(0x00); //filler byte
justinkim 0:fa775d326f9c 143 _spi.write(0x00); //filler byte
justinkim 0:fa775d326f9c 144 _spi.write(0x00); //filler byte
justinkim 0:fa775d326f9c 145
justinkim 0:fa775d326f9c 146 cs_low(); //enables SCI/disables SDI
justinkim 0:fa775d326f9c 147 }
justinkim 0:fa775d326f9c 148 void VS1002::sine_test_deactivate(void)
justinkim 0:fa775d326f9c 149 {
justinkim 0:fa775d326f9c 150 cs_high();
justinkim 0:fa775d326f9c 151
justinkim 0:fa775d326f9c 152 while(!_DREQ);
justinkim 0:fa775d326f9c 153 _spi.write(0x45); //SDI write
justinkim 0:fa775d326f9c 154 _spi.write(0x78); //SDI write
justinkim 0:fa775d326f9c 155 _spi.write(0x69); //SDI write
justinkim 0:fa775d326f9c 156 _spi.write(0x74); //SDI write
justinkim 0:fa775d326f9c 157 _spi.write(0x00); //filler byte
justinkim 0:fa775d326f9c 158 _spi.write(0x00); //filler byte
justinkim 0:fa775d326f9c 159 _spi.write(0x00); //filler byte
justinkim 0:fa775d326f9c 160 _spi.write(0x00); //filler byte
justinkim 0:fa775d326f9c 161 }
justinkim 0:fa775d326f9c 162
justinkim 0:fa775d326f9c 163
justinkim 0:fa775d326f9c 164 void VS1002::volume(signed int left, signed int right)
justinkim 0:fa775d326f9c 165 {
justinkim 0:fa775d326f9c 166 while(_DREQ == 0);
justinkim 0:fa775d326f9c 167
justinkim 0:fa775d326f9c 168 unsigned short int _left = -left; //convert the decibel values into a format
justinkim 0:fa775d326f9c 169 unsigned short int _right = -right; //readable by the chip cf. datasheet p.32 subsection 8.6.11
justinkim 0:fa775d326f9c 170 _left *= 2;
justinkim 0:fa775d326f9c 171 _right *= 2;
justinkim 0:fa775d326f9c 172 unsigned short int attenuation = ((256 * _left) + _right);
justinkim 0:fa775d326f9c 173 cs_low();
justinkim 0:fa775d326f9c 174 sci_write(0x0B, attenuation); //writeout these values
justinkim 0:fa775d326f9c 175 cs_high();
justinkim 0:fa775d326f9c 176 }
justinkim 0:fa775d326f9c 177
justinkim 0:fa775d326f9c 178 void VS1002::play_song(int song_number)
justinkim 0:fa775d326f9c 179 {
justinkim 0:fa775d326f9c 180 /*====== Song Select ======*/
justinkim 0:fa775d326f9c 181 char str[16]; //folder where the songs are located
justinkim 0:fa775d326f9c 182 sprintf(str,"/sdc/%d",song_number); //appending song number to path of the file
justinkim 0:fa775d326f9c 183 strcat(str,".mp3"); //appending .mp3 to file name
justinkim 0:fa775d326f9c 184 FILE *song;
justinkim 0:fa775d326f9c 185 unsigned char array[512]; //array for reading data from file
justinkim 0:fa775d326f9c 186 bool play_new=false; // Variable to see if new_song has be assigned or not
justinkim 0:fa775d326f9c 187 song = fopen(str, "r"); // Open the music file in read mode
justinkim 0:fa775d326f9c 188 /* Printing to LCD the present status */
justinkim 0:fa775d326f9c 189 lcd.cls();
justinkim 0:fa775d326f9c 190 if(pause)
justinkim 0:fa775d326f9c 191 lcd.printf(" Paused ");
justinkim 0:fa775d326f9c 192 if(mute)
justinkim 0:fa775d326f9c 193 lcd.printf("Muted");
justinkim 0:fa775d326f9c 194 if(!mute && !pause)
justinkim 0:fa775d326f9c 195 lcd.printf(" Playing...");
justinkim 0:fa775d326f9c 196
justinkim 0:fa775d326f9c 197 lcd.printf("\n %d %s",new_song_number,song_name[new_song_number-1]);
justinkim 0:fa775d326f9c 198
justinkim 0:fa775d326f9c 199 if(!song)
justinkim 0:fa775d326f9c 200 {
justinkim 0:fa775d326f9c 201 lcd.printf("\n \n Error!!");
justinkim 0:fa775d326f9c 202 new_song_number+=1; // Goto Next song on completion of one song
justinkim 0:fa775d326f9c 203 if(new_song_number==10)
justinkim 0:fa775d326f9c 204 new_song_number=1;
justinkim 0:fa775d326f9c 205 }
justinkim 0:fa775d326f9c 206 while(!feof(song))
justinkim 0:fa775d326f9c 207 {
justinkim 0:fa775d326f9c 208 if(!pause)
justinkim 0:fa775d326f9c 209 {
justinkim 0:fa775d326f9c 210
justinkim 0:fa775d326f9c 211 fread(&array, 1, 512, song);
justinkim 0:fa775d326f9c 212 for(int i=0; i<512; i++)
justinkim 0:fa775d326f9c 213 {
justinkim 0:fa775d326f9c 214 sdi_write(array[i]);
justinkim 0:fa775d326f9c 215 }
justinkim 0:fa775d326f9c 216 volume(volume_set,volume_set);
justinkim 0:fa775d326f9c 217 }
justinkim 0:fa775d326f9c 218 if(new_song_number!=song_number)
justinkim 0:fa775d326f9c 219 {
justinkim 0:fa775d326f9c 220 play_new=true;
justinkim 0:fa775d326f9c 221 break;
justinkim 0:fa775d326f9c 222 }
justinkim 0:fa775d326f9c 223
justinkim 0:fa775d326f9c 224
justinkim 0:fa775d326f9c 225 }
justinkim 0:fa775d326f9c 226
justinkim 0:fa775d326f9c 227 fclose(song); //close the file
justinkim 0:fa775d326f9c 228
justinkim 0:fa775d326f9c 229 if(!play_new)
justinkim 0:fa775d326f9c 230 {
justinkim 0:fa775d326f9c 231 new_song_number+=1; // Goto Next song on completion of one song
justinkim 0:fa775d326f9c 232 if(new_song_number==10)
justinkim 0:fa775d326f9c 233 new_song_number=1;
justinkim 0:fa775d326f9c 234 play_new=false;
justinkim 0:fa775d326f9c 235 }
justinkim 0:fa775d326f9c 236 }
justinkim 0:fa775d326f9c 237