This sample will play a ".wav" file of the USB root folder. Only RIFF format.

Fork of GR-PEACH_Audio_WAV by Daiki Kato

Audio sample for GR-PEACH or GR-LYCHEE. This sample will play a ".wav" file in the root of USB memory or SD card. If the USER_BUTTON0 is pressed, the next song is played.

The default setting of serial communication (baud rate etc.) in mbed is shown the following link.
Please refer to the link and change the settings of your PC terminal software.
The default value of baud rate in mbed is 9600, and this application uses baud rate 9600.
https://developer.mbed.org/teams/Renesas/wiki/GR-PEACH-Getting-Started#install-the-usb-serial-communication

Please refer to following link about Audio/Camera Shield.
https://developer.mbed.org/teams/Renesas/wiki/Audio_Camera-shield

For GR-PEACH:

FormatWav file (RIFF format) ".wav"
Channel2ch
Frequencies32kHz, 44.1kHz, 48kHz, 88.2kHz and 96kHz
Quantization bit rate16bits, 24bits and 32bits


For GR-LYCHEE:

FormatWav file (RIFF format) ".wav"
Channel2ch
Frequencies32kHz, 44.1kHz and 48kHz
Quantization bit rate16bits



  • Use USB0 of PEACH:
    /media/uploads/dkato/audio_wav_usb0.png

    If you use the USB0 as USB Host, please close GR-PEACH's JP3.
    /media/uploads/RyoheiHagimoto/usb.jpg

    Please select USB0 connector by the following configuration.

mbed_app.json

{
    "config": {
        "usb-host-ch":{
            "help": "(for GR-PEACH) 0:ch0 1:ch1",
            "value": "0"
        },
        "audio-camera-shield":{
            "help": "(for GR-PEACH) 0:not use 1:use",
            "value": "0"
        }
    }
}



  • Use USB1 of GR-PEACH:
    /media/uploads/dkato/audio_wav_usb1.png

    If you use the USB1 as USB Host, please close Audio/Camera Shield's JP1. /media/uploads/dkato/audiocamerashield_jp1.jpg

    Please select Audio/Camera Shield and USB1 connector by the following configuration.

mbed_app.json

{
    "config": {
        "usb-host-ch":{
            "help": "(for GR-PEACH) 0:ch0 1:ch1",
            "value": "1"
        },
        "audio-camera-shield":{
            "help": "(for GR-PEACH) 0:not use 1:use",
            "value": "1"
        }
    }
}
Committer:
dkato
Date:
Tue Jun 02 10:19:02 2015 +0000
Revision:
1:967144cffd53
Parent:
0:a24aaf3a41b1
Child:
4:01651a6c3f9a
improving readability

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:a24aaf3a41b1 1 #include "mbed.h"
dkato 0:a24aaf3a41b1 2 #include "TLV320_RBSP.h"
dkato 0:a24aaf3a41b1 3 #include "USBHostMSD.h"
dkato 0:a24aaf3a41b1 4 #if defined(TARGET_RZ_A1H)
dkato 0:a24aaf3a41b1 5 #include "usb_host_setting.h"
dkato 0:a24aaf3a41b1 6 #else
dkato 0:a24aaf3a41b1 7 #define USB_HOST_CH 0
dkato 0:a24aaf3a41b1 8 #endif
dkato 0:a24aaf3a41b1 9
dkato 0:a24aaf3a41b1 10 #if (USB_HOST_CH == 1) //Audio Shield USB1
dkato 0:a24aaf3a41b1 11 DigitalOut usb1en(P3_8);
dkato 0:a24aaf3a41b1 12 #endif
dkato 0:a24aaf3a41b1 13 DigitalIn button(USER_BUTTON0);
dkato 0:a24aaf3a41b1 14
dkato 1:967144cffd53 15 #define FILE_READ_BUFF_SIZE (4096)
dkato 1:967144cffd53 16 #define AUDIO_WRITE_BUFF_SIZE (FILE_READ_BUFF_SIZE)
dkato 1:967144cffd53 17 #define AUDIO_WRITE_BUFF_NUM (16)
dkato 1:967144cffd53 18 #define AUDIO_READ_BUFF_NUM (0)
dkato 1:967144cffd53 19 #define MAIL_QUEUE_SIZE (AUDIO_WRITE_BUFF_NUM)
dkato 0:a24aaf3a41b1 20 #define FILE_NAME_LEN (64)
dkato 0:a24aaf3a41b1 21 #define TEXT_SIZE (64)
dkato 1:967144cffd53 22 #define FLD_PATH "/usb/"
dkato 0:a24aaf3a41b1 23
dkato 0:a24aaf3a41b1 24 typedef struct {
dkato 0:a24aaf3a41b1 25 void * p_data;
dkato 0:a24aaf3a41b1 26 int32_t result;
dkato 0:a24aaf3a41b1 27 } mail_t;
dkato 0:a24aaf3a41b1 28 Mail<mail_t, MAIL_QUEUE_SIZE> mail_box;
dkato 0:a24aaf3a41b1 29
dkato 1:967144cffd53 30 static uint8_t audio_write_buff[AUDIO_WRITE_BUFF_NUM][AUDIO_WRITE_BUFF_SIZE] __attribute((section("NC_BSS"),aligned(4))); //4 bytes aligned! No cache memory
dkato 0:a24aaf3a41b1 31 static uint8_t title_buf[TEXT_SIZE + 1];
dkato 0:a24aaf3a41b1 32 static uint8_t artist_buf[TEXT_SIZE + 1];
dkato 0:a24aaf3a41b1 33 static uint8_t album_buf[TEXT_SIZE + 1];
dkato 0:a24aaf3a41b1 34 static uint32_t music_data_size;
dkato 0:a24aaf3a41b1 35 static uint32_t music_data_index;
dkato 0:a24aaf3a41b1 36
dkato 1:967144cffd53 37 TLV320_RBSP audio(P3_13, P10_13, I2C_SDA, I2C_SCL, P4_4, P4_5, P4_7, P4_6, 0x80, AUDIO_WRITE_BUFF_NUM, AUDIO_READ_BUFF_NUM); // I2S Codec
dkato 0:a24aaf3a41b1 38
dkato 0:a24aaf3a41b1 39 static void callback_audio_tans_end(void * p_data, int32_t result, void * p_app_data) {
dkato 0:a24aaf3a41b1 40 mail_t *mail = mail_box.alloc();
dkato 0:a24aaf3a41b1 41
dkato 0:a24aaf3a41b1 42 if (result < 0) {
dkato 0:a24aaf3a41b1 43 printf("error %d\n", result);
dkato 0:a24aaf3a41b1 44 }
dkato 0:a24aaf3a41b1 45 if (mail == NULL) {
dkato 0:a24aaf3a41b1 46 printf("error mail alloc\n");
dkato 0:a24aaf3a41b1 47 } else {
dkato 0:a24aaf3a41b1 48 mail->p_data = p_data;
dkato 0:a24aaf3a41b1 49 mail->result = result;
dkato 0:a24aaf3a41b1 50 mail_box.put(mail);
dkato 0:a24aaf3a41b1 51 }
dkato 0:a24aaf3a41b1 52 }
dkato 0:a24aaf3a41b1 53
dkato 0:a24aaf3a41b1 54 static bool analyze_wav_heder(FILE * fp) {
dkato 0:a24aaf3a41b1 55 bool result = false;
dkato 0:a24aaf3a41b1 56 size_t read_size;
dkato 0:a24aaf3a41b1 57 uint8_t wk_read_buff[36];
dkato 0:a24aaf3a41b1 58 uint8_t *data;
dkato 0:a24aaf3a41b1 59 uint32_t chunk_size;
dkato 0:a24aaf3a41b1 60 uint32_t sub_chunk_size;
dkato 0:a24aaf3a41b1 61 uint32_t list_index_max;
dkato 0:a24aaf3a41b1 62 bool list_ok = false;
dkato 0:a24aaf3a41b1 63 uint32_t read_index = 0;
dkato 0:a24aaf3a41b1 64 uint32_t data_index = 0;
dkato 0:a24aaf3a41b1 65 int16_t wk_len;
dkato 0:a24aaf3a41b1 66 uint16_t ch;
dkato 0:a24aaf3a41b1 67 uint32_t sampling_rate;
dkato 0:a24aaf3a41b1 68 uint16_t block_size;
dkato 0:a24aaf3a41b1 69
dkato 0:a24aaf3a41b1 70 music_data_size = 0;
dkato 0:a24aaf3a41b1 71 music_data_index = 0;
dkato 0:a24aaf3a41b1 72 title_buf[0] = '\0';
dkato 0:a24aaf3a41b1 73 artist_buf[0] = '\0';
dkato 0:a24aaf3a41b1 74 album_buf[0] = '\0';
dkato 0:a24aaf3a41b1 75
dkato 0:a24aaf3a41b1 76 read_size = fread(&wk_read_buff[0], sizeof(char), 36, fp);
dkato 0:a24aaf3a41b1 77 if (read_size < 36) {
dkato 0:a24aaf3a41b1 78 // do nothing
dkato 0:a24aaf3a41b1 79 } else if (memcmp(&wk_read_buff[0], "RIFF", 4) != 0) {
dkato 0:a24aaf3a41b1 80 // do nothing
dkato 0:a24aaf3a41b1 81 } else if (memcmp(&wk_read_buff[8], "WAVE", 4) != 0) {
dkato 0:a24aaf3a41b1 82 // do nothing
dkato 0:a24aaf3a41b1 83 } else if (memcmp(&wk_read_buff[12], "fmt ", 4) != 0) {
dkato 0:a24aaf3a41b1 84 // do nothing
dkato 0:a24aaf3a41b1 85 } else {
dkato 0:a24aaf3a41b1 86 read_index += 36;
dkato 0:a24aaf3a41b1 87 ch = ((uint32_t)wk_read_buff[22] << 0) + ((uint32_t)wk_read_buff[23] << 8);
dkato 0:a24aaf3a41b1 88 sampling_rate = ((uint32_t)wk_read_buff[24] << 0)
dkato 0:a24aaf3a41b1 89 + ((uint32_t)wk_read_buff[25] << 8)
dkato 0:a24aaf3a41b1 90 + ((uint32_t)wk_read_buff[26] << 16)
dkato 0:a24aaf3a41b1 91 + ((uint32_t)wk_read_buff[27] << 24);
dkato 0:a24aaf3a41b1 92 block_size = ((uint32_t)wk_read_buff[34] << 0) + ((uint32_t)wk_read_buff[35] << 8);
dkato 0:a24aaf3a41b1 93 if ((ch != 2) || (block_size != 16) || (sampling_rate != 44100)) {
dkato 0:a24aaf3a41b1 94 return false;
dkato 0:a24aaf3a41b1 95 }
dkato 0:a24aaf3a41b1 96 while (1) {
dkato 0:a24aaf3a41b1 97 read_size = fread(&wk_read_buff[0], sizeof(char), 8, fp);
dkato 0:a24aaf3a41b1 98 read_index += 8;
dkato 0:a24aaf3a41b1 99 if (read_size < 8) {
dkato 0:a24aaf3a41b1 100 break;
dkato 0:a24aaf3a41b1 101 } else {
dkato 0:a24aaf3a41b1 102 chunk_size = ((uint32_t)wk_read_buff[4] << 0)
dkato 0:a24aaf3a41b1 103 + ((uint32_t)wk_read_buff[5] << 8)
dkato 0:a24aaf3a41b1 104 + ((uint32_t)wk_read_buff[6] << 16)
dkato 0:a24aaf3a41b1 105 + ((uint32_t)wk_read_buff[7] << 24);
dkato 0:a24aaf3a41b1 106 if (memcmp(&wk_read_buff[0], "data", 4) == 0) {
dkato 0:a24aaf3a41b1 107 result = true;
dkato 0:a24aaf3a41b1 108 music_data_size = chunk_size;
dkato 0:a24aaf3a41b1 109 if (list_ok == true) {
dkato 0:a24aaf3a41b1 110 break;
dkato 0:a24aaf3a41b1 111 } else {
dkato 0:a24aaf3a41b1 112 data_index = read_index;
dkato 0:a24aaf3a41b1 113 fseek(fp, chunk_size, SEEK_CUR);
dkato 0:a24aaf3a41b1 114 read_index += chunk_size;
dkato 0:a24aaf3a41b1 115 }
dkato 0:a24aaf3a41b1 116 } else if (memcmp(&wk_read_buff[0], "LIST", 4) == 0) {
dkato 0:a24aaf3a41b1 117 list_ok = true;
dkato 0:a24aaf3a41b1 118 list_index_max = read_index + chunk_size;
dkato 0:a24aaf3a41b1 119 read_size = fread(&wk_read_buff[0], sizeof(char), 4, fp);
dkato 0:a24aaf3a41b1 120 read_index += 4;
dkato 0:a24aaf3a41b1 121 while (read_index < list_index_max) {
dkato 0:a24aaf3a41b1 122 read_size = fread(&wk_read_buff[0], sizeof(char), 8, fp);
dkato 0:a24aaf3a41b1 123 read_index += 8;
dkato 0:a24aaf3a41b1 124 if (read_size < 8) {
dkato 0:a24aaf3a41b1 125 break;
dkato 0:a24aaf3a41b1 126 } else if (memcmp(&wk_read_buff[0], "INAM", 4) == 0) {
dkato 0:a24aaf3a41b1 127 data = title_buf;
dkato 0:a24aaf3a41b1 128 } else if (memcmp(&wk_read_buff[0], "IART", 4) == 0) {
dkato 0:a24aaf3a41b1 129 data = artist_buf;
dkato 0:a24aaf3a41b1 130 } else if (memcmp(&wk_read_buff[0], "IPRD", 4) == 0) {
dkato 0:a24aaf3a41b1 131 data = album_buf;
dkato 0:a24aaf3a41b1 132 } else {
dkato 0:a24aaf3a41b1 133 data = NULL;
dkato 0:a24aaf3a41b1 134 }
dkato 0:a24aaf3a41b1 135 if (data != NULL) {
dkato 0:a24aaf3a41b1 136 sub_chunk_size = ((uint32_t)wk_read_buff[4] << 0)
dkato 0:a24aaf3a41b1 137 + ((uint32_t)wk_read_buff[5] << 8)
dkato 0:a24aaf3a41b1 138 + ((uint32_t)wk_read_buff[6] << 16)
dkato 0:a24aaf3a41b1 139 + ((uint32_t)wk_read_buff[7] << 24);
dkato 0:a24aaf3a41b1 140 if (sub_chunk_size > TEXT_SIZE) {
dkato 0:a24aaf3a41b1 141 wk_len = TEXT_SIZE;
dkato 0:a24aaf3a41b1 142 } else {
dkato 0:a24aaf3a41b1 143 wk_len = sub_chunk_size;
dkato 0:a24aaf3a41b1 144 }
dkato 0:a24aaf3a41b1 145 read_size = fread(data, sizeof(char), wk_len, fp);
dkato 0:a24aaf3a41b1 146 read_index += sub_chunk_size;
dkato 0:a24aaf3a41b1 147 fseek(fp, read_index, SEEK_SET);
dkato 0:a24aaf3a41b1 148 data[wk_len] = '\0';
dkato 0:a24aaf3a41b1 149 }
dkato 0:a24aaf3a41b1 150 }
dkato 0:a24aaf3a41b1 151 if (data_index != 0) {
dkato 0:a24aaf3a41b1 152 break;
dkato 0:a24aaf3a41b1 153 } else {
dkato 0:a24aaf3a41b1 154 fseek(fp, list_index_max, SEEK_SET);
dkato 0:a24aaf3a41b1 155 }
dkato 0:a24aaf3a41b1 156 } else {
dkato 0:a24aaf3a41b1 157 fseek(fp, chunk_size, SEEK_CUR);
dkato 0:a24aaf3a41b1 158 read_index += chunk_size;
dkato 0:a24aaf3a41b1 159 }
dkato 0:a24aaf3a41b1 160 }
dkato 0:a24aaf3a41b1 161 }
dkato 0:a24aaf3a41b1 162
dkato 0:a24aaf3a41b1 163 if (data_index != 0) {
dkato 0:a24aaf3a41b1 164 fseek(fp, data_index, SEEK_SET);
dkato 0:a24aaf3a41b1 165 }
dkato 0:a24aaf3a41b1 166 }
dkato 0:a24aaf3a41b1 167
dkato 0:a24aaf3a41b1 168 return result;
dkato 0:a24aaf3a41b1 169 }
dkato 0:a24aaf3a41b1 170
dkato 0:a24aaf3a41b1 171 static size_t get_audio_data(void *buf, size_t len, FILE * fp) {
dkato 0:a24aaf3a41b1 172 if ((music_data_index + len) > music_data_size) {
dkato 0:a24aaf3a41b1 173 len = music_data_size - music_data_index;
dkato 0:a24aaf3a41b1 174 }
dkato 0:a24aaf3a41b1 175 music_data_index += len;
dkato 0:a24aaf3a41b1 176
dkato 0:a24aaf3a41b1 177 return fread(buf, sizeof(char), len, fp);
dkato 0:a24aaf3a41b1 178 }
dkato 0:a24aaf3a41b1 179
dkato 0:a24aaf3a41b1 180 void msd_task(void const *) {
dkato 0:a24aaf3a41b1 181 FILE * fp = NULL;
dkato 0:a24aaf3a41b1 182 DIR * d = NULL;
dkato 0:a24aaf3a41b1 183 char file_path[sizeof(FLD_PATH) + FILE_NAME_LEN];
dkato 1:967144cffd53 184 rbsp_data_conf_t audio_write_async_ctl = {&callback_audio_tans_end, NULL};
dkato 0:a24aaf3a41b1 185 int cnt;
dkato 1:967144cffd53 186 size_t audio_data_size;
dkato 0:a24aaf3a41b1 187
dkato 0:a24aaf3a41b1 188 #if (USB_HOST_CH == 1) //Audio Shield USB1
dkato 0:a24aaf3a41b1 189 //Audio Shield USB1 enable
dkato 0:a24aaf3a41b1 190 usb1en = 1; //Outputs high level
dkato 0:a24aaf3a41b1 191 Thread::wait(5);
dkato 0:a24aaf3a41b1 192 usb1en = 0; //Outputs low level
dkato 0:a24aaf3a41b1 193 #endif
dkato 0:a24aaf3a41b1 194
dkato 0:a24aaf3a41b1 195 audio.power(0x02); // mic off
dkato 0:a24aaf3a41b1 196 audio.inputVolume(0.7, 0.7);
dkato 0:a24aaf3a41b1 197
dkato 1:967144cffd53 198 for (cnt = 0; cnt < AUDIO_WRITE_BUFF_NUM; cnt++) {
dkato 0:a24aaf3a41b1 199 mail_t *mail = mail_box.alloc();
dkato 0:a24aaf3a41b1 200
dkato 0:a24aaf3a41b1 201 if (mail == NULL) {
dkato 0:a24aaf3a41b1 202 printf("error mail alloc\n");
dkato 0:a24aaf3a41b1 203 } else {
dkato 1:967144cffd53 204 mail->p_data = audio_write_buff[cnt];
dkato 0:a24aaf3a41b1 205 mail->result = 0;
dkato 0:a24aaf3a41b1 206 mail_box.put(mail);
dkato 0:a24aaf3a41b1 207 }
dkato 0:a24aaf3a41b1 208 }
dkato 0:a24aaf3a41b1 209
dkato 0:a24aaf3a41b1 210 USBHostMSD msd("usb");
dkato 0:a24aaf3a41b1 211
dkato 0:a24aaf3a41b1 212 while(1) {
dkato 0:a24aaf3a41b1 213 // try to connect a MSD device
dkato 0:a24aaf3a41b1 214 while(!msd.connect()) {
dkato 0:a24aaf3a41b1 215 Thread::wait(500);
dkato 0:a24aaf3a41b1 216 }
dkato 0:a24aaf3a41b1 217
dkato 0:a24aaf3a41b1 218 // in a loop, append a file
dkato 0:a24aaf3a41b1 219 // if the device is disconnected, we try to connect it again
dkato 0:a24aaf3a41b1 220 while(1) {
dkato 0:a24aaf3a41b1 221 // if device disconnected, try to connect again
dkato 0:a24aaf3a41b1 222 if (!msd.connected()) {
dkato 0:a24aaf3a41b1 223 break;
dkato 0:a24aaf3a41b1 224 }
dkato 0:a24aaf3a41b1 225 if (fp == NULL) {
dkato 0:a24aaf3a41b1 226 // file search
dkato 0:a24aaf3a41b1 227 if (d == NULL) {
dkato 0:a24aaf3a41b1 228 d = opendir(FLD_PATH);
dkato 0:a24aaf3a41b1 229 }
dkato 0:a24aaf3a41b1 230 struct dirent * p;
dkato 0:a24aaf3a41b1 231 while ((p = readdir(d)) != NULL) {
dkato 0:a24aaf3a41b1 232 size_t len = strlen(p->d_name);
dkato 0:a24aaf3a41b1 233 if ((len > 4) && (len < FILE_NAME_LEN) && (memcmp(&p->d_name[len - 4], ".wav", 4) == 0)) {
dkato 0:a24aaf3a41b1 234 strcpy(file_path, FLD_PATH);
dkato 0:a24aaf3a41b1 235 strcat(file_path, p->d_name);
dkato 0:a24aaf3a41b1 236 fp = fopen(file_path, "r");
dkato 0:a24aaf3a41b1 237 if (analyze_wav_heder(fp) == false) {
dkato 0:a24aaf3a41b1 238 fclose(fp);
dkato 0:a24aaf3a41b1 239 fp = NULL;
dkato 0:a24aaf3a41b1 240 } else {
dkato 0:a24aaf3a41b1 241 printf("File :%s\n", p->d_name);
dkato 0:a24aaf3a41b1 242 printf("Title :%s\n", title_buf);
dkato 0:a24aaf3a41b1 243 printf("Artist:%s\n", artist_buf);
dkato 0:a24aaf3a41b1 244 printf("Album :%s\n", album_buf);
dkato 0:a24aaf3a41b1 245 printf("\n");
dkato 0:a24aaf3a41b1 246 break;
dkato 0:a24aaf3a41b1 247 }
dkato 0:a24aaf3a41b1 248 }
dkato 0:a24aaf3a41b1 249 }
dkato 0:a24aaf3a41b1 250 if (p == NULL) {
dkato 0:a24aaf3a41b1 251 closedir(d);
dkato 0:a24aaf3a41b1 252 d = NULL;
dkato 0:a24aaf3a41b1 253 }
dkato 0:a24aaf3a41b1 254 } else {
dkato 0:a24aaf3a41b1 255 // file read
dkato 0:a24aaf3a41b1 256 osEvent evt = mail_box.get();
dkato 0:a24aaf3a41b1 257 if (evt.status == osEventMail) {
dkato 0:a24aaf3a41b1 258 mail_t *mail = (mail_t *)evt.value.p;
dkato 0:a24aaf3a41b1 259
dkato 1:967144cffd53 260 audio_data_size = get_audio_data(mail->p_data, FILE_READ_BUFF_SIZE, fp);
dkato 1:967144cffd53 261 if (audio_data_size > 0) {
dkato 1:967144cffd53 262 audio.write(mail->p_data, audio_data_size, &audio_write_async_ctl);
dkato 0:a24aaf3a41b1 263 mail_box.free(mail);
dkato 0:a24aaf3a41b1 264 } else {
dkato 0:a24aaf3a41b1 265 mail_box.put(mail);
dkato 0:a24aaf3a41b1 266 }
dkato 0:a24aaf3a41b1 267 } else {
dkato 1:967144cffd53 268 audio_data_size = 0;
dkato 0:a24aaf3a41b1 269 }
dkato 0:a24aaf3a41b1 270
dkato 0:a24aaf3a41b1 271 // file close
dkato 1:967144cffd53 272 if ((audio_data_size < FILE_READ_BUFF_SIZE) || (button == 0)) {
dkato 0:a24aaf3a41b1 273 fclose(fp);
dkato 0:a24aaf3a41b1 274 fp = NULL;
dkato 0:a24aaf3a41b1 275 Thread::wait(500);
dkato 0:a24aaf3a41b1 276 }
dkato 0:a24aaf3a41b1 277 }
dkato 0:a24aaf3a41b1 278 }
dkato 0:a24aaf3a41b1 279
dkato 0:a24aaf3a41b1 280 // close check
dkato 0:a24aaf3a41b1 281 if (fp != NULL) {
dkato 0:a24aaf3a41b1 282 fclose(fp);
dkato 0:a24aaf3a41b1 283 fp = NULL;
dkato 0:a24aaf3a41b1 284 }
dkato 0:a24aaf3a41b1 285 if (d != NULL) {
dkato 0:a24aaf3a41b1 286 closedir(d);
dkato 0:a24aaf3a41b1 287 d = NULL;
dkato 0:a24aaf3a41b1 288 }
dkato 0:a24aaf3a41b1 289 }
dkato 0:a24aaf3a41b1 290 }
dkato 0:a24aaf3a41b1 291
dkato 0:a24aaf3a41b1 292 int main() {
dkato 0:a24aaf3a41b1 293 Thread msdTask(msd_task, NULL, osPriorityNormal, 1024 * 8);
dkato 0:a24aaf3a41b1 294
dkato 0:a24aaf3a41b1 295 while(1) {
dkato 0:a24aaf3a41b1 296 Thread::wait(500);
dkato 0:a24aaf3a41b1 297 }
dkato 0:a24aaf3a41b1 298 }