Smart pole

Dependencies:   FTPClient SDFileSystem WIZnetInterface mbed

Fork of FTP_Streaming_Music_Player_WIZwiki-W7500 by justin kim

Committer:
Ricky_Kwon
Date:
Fri Oct 30 03:53:23 2015 +0000
Revision:
1:c47c255fcad4
Parent:
0:fa775d326f9c
Smart pole

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