Mbed Clock application using an NTP connection to get internet time and a terminal interface to send commands

Dependencies:   4DGL-uLCD-SE EthernetInterface NTPClient mbed-rtos mbed SDFileSystem wavfile

Committer:
dudanian
Date:
Mon Dec 08 10:06:35 2014 +0000
Revision:
1:c47a2f0816bb
Child:
2:c939d0501184
Working after accidental delete.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudanian 1:c47a2f0816bb 1 #include "Recorder.h"
dudanian 1:c47a2f0816bb 2
dudanian 1:c47a2f0816bb 3 #define RAM_TOTAL 1024
dudanian 1:c47a2f0816bb 4
dudanian 1:c47a2f0816bb 5 AnalogIn adcin(p20);
dudanian 1:c47a2f0816bb 6 DigitalOut led_rec_ok(LED2);
dudanian 1:c47a2f0816bb 7
dudanian 1:c47a2f0816bb 8 Ticker ticker;
dudanian 1:c47a2f0816bb 9 float buffer[RAM_TOTAL];
dudanian 1:c47a2f0816bb 10 int rp = 0;
dudanian 1:c47a2f0816bb 11 int wp = 0;
dudanian 1:c47a2f0816bb 12 int dropout = 0;
dudanian 1:c47a2f0816bb 13
dudanian 1:c47a2f0816bb 14 #define WAVFILE_ERROR_PRINT(RESULT) \
dudanian 1:c47a2f0816bb 15 do { \
dudanian 1:c47a2f0816bb 16 WavFileResult R = RESULT; \
dudanian 1:c47a2f0816bb 17 if (R != WavFileResultOK) { \
dudanian 1:c47a2f0816bb 18 char wavfile_error_print_text[BUFSIZ]; \
dudanian 1:c47a2f0816bb 19 wavfile_result_string(R, wavfile_error_print_text, sizeof(wavfile_error_print_text)); \
dudanian 1:c47a2f0816bb 20 printf("%s (code=%d)\r\n", wavfile_error_print_text, R); \
dudanian 1:c47a2f0816bb 21 return 1; \
dudanian 1:c47a2f0816bb 22 } \
dudanian 1:c47a2f0816bb 23 } while(0)
dudanian 1:c47a2f0816bb 24
dudanian 1:c47a2f0816bb 25 void tickrec(void)
dudanian 1:c47a2f0816bb 26 {
dudanian 1:c47a2f0816bb 27 int np = (wp + 1) & (RAM_TOTAL - 1);
dudanian 1:c47a2f0816bb 28 if (np != rp) {
dudanian 1:c47a2f0816bb 29 buffer[wp] = adcin;
dudanian 1:c47a2f0816bb 30 wp = np;
dudanian 1:c47a2f0816bb 31 } else {
dudanian 1:c47a2f0816bb 32 dropout++;
dudanian 1:c47a2f0816bb 33 }
dudanian 1:c47a2f0816bb 34 led_rec_ok = !led_rec_ok;
dudanian 1:c47a2f0816bb 35 }
dudanian 1:c47a2f0816bb 36
dudanian 1:c47a2f0816bb 37 int rec(const char *filename, const int nsec)
dudanian 1:c47a2f0816bb 38 {
dudanian 1:c47a2f0816bb 39 WavFileResult result;
dudanian 1:c47a2f0816bb 40 wavfile_info_t info;
dudanian 1:c47a2f0816bb 41 wavfile_data_t data;
dudanian 1:c47a2f0816bb 42
dudanian 1:c47a2f0816bb 43 WAVFILE_INFO_AUDIO_FORMAT(&info) = 1;
dudanian 1:c47a2f0816bb 44 WAVFILE_INFO_NUM_CHANNELS(&info) = 1;
dudanian 1:c47a2f0816bb 45 WAVFILE_INFO_SAMPLE_RATE(&info) = 11025;
dudanian 1:c47a2f0816bb 46 WAVFILE_INFO_BYTE_RATE(&info) = 22050;
dudanian 1:c47a2f0816bb 47 WAVFILE_INFO_BLOCK_ALIGN(&info) = 2;
dudanian 1:c47a2f0816bb 48 WAVFILE_INFO_BITS_PER_SAMPLE(&info) = 16;
dudanian 1:c47a2f0816bb 49
dudanian 1:c47a2f0816bb 50 WAVFILE *wf = wavfile_open(filename, WavFileModeWrite, &result);
dudanian 1:c47a2f0816bb 51 WAVFILE_ERROR_PRINT(result);
dudanian 1:c47a2f0816bb 52 WAVFILE_ERROR_PRINT(wavfile_write_info(wf, &info));
dudanian 1:c47a2f0816bb 53
dudanian 1:c47a2f0816bb 54 //printf("[REC:%s]\r\n", filename);
dudanian 1:c47a2f0816bb 55 //printf("\tWAVFILE_INFO_AUDIO_FORMAT(&info) = %d\r\n", WAVFILE_INFO_AUDIO_FORMAT(&info));
dudanian 1:c47a2f0816bb 56 //printf("\tWAVFILE_INFO_NUM_CHANNELS(&info) = %d\r\n", WAVFILE_INFO_NUM_CHANNELS(&info));
dudanian 1:c47a2f0816bb 57 //printf("\tWAVFILE_INFO_SAMPLE_RATE(&info) = %d\r\n", WAVFILE_INFO_SAMPLE_RATE(&info));
dudanian 1:c47a2f0816bb 58 //printf("\tWAVFILE_INFO_BYTE_RATE(&info) = %d\r\n", WAVFILE_INFO_BYTE_RATE(&info));
dudanian 1:c47a2f0816bb 59 //printf("\tWAVFILE_INFO_BLOCK_ALIGN(&info) = %d\r\n", WAVFILE_INFO_BLOCK_ALIGN(&info));
dudanian 1:c47a2f0816bb 60 //printf("\tWAVFILE_INFO_BITS_PER_SAMPLE(&info) = %d\r\n", WAVFILE_INFO_BITS_PER_SAMPLE(&info));
dudanian 1:c47a2f0816bb 61
dudanian 1:c47a2f0816bb 62 const int interval_us = 1000000 / WAVFILE_INFO_SAMPLE_RATE(&info);
dudanian 1:c47a2f0816bb 63 const unsigned int samples_for_nsec = WAVFILE_INFO_SAMPLE_RATE(&info) * nsec;
dudanian 1:c47a2f0816bb 64
dudanian 1:c47a2f0816bb 65 rp = 0;
dudanian 1:c47a2f0816bb 66 wp = 0;
dudanian 1:c47a2f0816bb 67 dropout = 0;
dudanian 1:c47a2f0816bb 68 unsigned int count = 0;
dudanian 1:c47a2f0816bb 69 ticker.attach_us(tickrec, interval_us);
dudanian 1:c47a2f0816bb 70 WAVFILE_DATA_NUM_CHANNELS(&data) = 1;
dudanian 1:c47a2f0816bb 71 while (1) {
dudanian 1:c47a2f0816bb 72 while (rp == wp) {
dudanian 1:c47a2f0816bb 73 wait_us(1);
dudanian 1:c47a2f0816bb 74 }
dudanian 1:c47a2f0816bb 75
dudanian 1:c47a2f0816bb 76 WAVFILE_DATA_CHANNEL_DATA(&data, 0) = buffer[rp];
dudanian 1:c47a2f0816bb 77 rp = (rp + 1) & (RAM_TOTAL - 1);
dudanian 1:c47a2f0816bb 78 WAVFILE_ERROR_PRINT(wavfile_write_data(wf, &data));
dudanian 1:c47a2f0816bb 79
dudanian 1:c47a2f0816bb 80 count++;
dudanian 1:c47a2f0816bb 81 if (count > samples_for_nsec) {
dudanian 1:c47a2f0816bb 82 break;
dudanian 1:c47a2f0816bb 83 }
dudanian 1:c47a2f0816bb 84 }
dudanian 1:c47a2f0816bb 85 ticker.detach();
dudanian 1:c47a2f0816bb 86 led_rec_ok = 0;
dudanian 1:c47a2f0816bb 87 //printf("\t-- Rec done. (dropout=%d) --\r\n", dropout);
dudanian 1:c47a2f0816bb 88
dudanian 1:c47a2f0816bb 89 WAVFILE_ERROR_PRINT(wavfile_close(wf));
dudanian 1:c47a2f0816bb 90 return 0;
dudanian 1:c47a2f0816bb 91 }