PWM drives the speaker.

Committer:
dkato
Date:
Tue Jul 24 08:31:11 2018 +0000
Revision:
3:37a886d77bae
Parent:
0:aba6e62b51a7
Changed to be usable with EasyPlayback

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:aba6e62b51a7 1 /* mbed PwmOutSpeaker Library
dkato 0:aba6e62b51a7 2 * Copyright (C) 2016 dkato
dkato 0:aba6e62b51a7 3 *
dkato 0:aba6e62b51a7 4 * Licensed under the Apache License, Version 2.0 (the "License");
dkato 0:aba6e62b51a7 5 * you may not use this file except in compliance with the License.
dkato 0:aba6e62b51a7 6 * You may obtain a copy of the License at
dkato 0:aba6e62b51a7 7 *
dkato 0:aba6e62b51a7 8 * http://www.apache.org/licenses/LICENSE-2.0
dkato 0:aba6e62b51a7 9 *
dkato 0:aba6e62b51a7 10 * Unless required by applicable law or agreed to in writing, software
dkato 0:aba6e62b51a7 11 * distributed under the License is distributed on an "AS IS" BASIS,
dkato 0:aba6e62b51a7 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dkato 0:aba6e62b51a7 13 * See the License for the specific language governing permissions and
dkato 0:aba6e62b51a7 14 * limitations under the License.
dkato 0:aba6e62b51a7 15 */
dkato 0:aba6e62b51a7 16
dkato 0:aba6e62b51a7 17 #ifndef PWMOUT_SPEAKER_H
dkato 0:aba6e62b51a7 18 #define PWMOUT_SPEAKER_H
dkato 0:aba6e62b51a7 19
dkato 0:aba6e62b51a7 20 #include "mbed.h"
dkato 3:37a886d77bae 21 #include "AUDIO_RBSP.h"
dkato 0:aba6e62b51a7 22
dkato 0:aba6e62b51a7 23 /** PwmOutSpeaker class
dkato 0:aba6e62b51a7 24 *
dkato 0:aba6e62b51a7 25 */
dkato 3:37a886d77bae 26 class PwmOutSpeaker : public AUDIO_RBSP {
dkato 0:aba6e62b51a7 27 public:
dkato 0:aba6e62b51a7 28 /** Create a PwmOutSpeaker
dkato 0:aba6e62b51a7 29 *
dkato 0:aba6e62b51a7 30 * @param pwm_l
dkato 0:aba6e62b51a7 31 * @param pwm_r
dkato 0:aba6e62b51a7 32 */
dkato 0:aba6e62b51a7 33 PwmOutSpeaker(PinName pwm_l, PinName pwm_r);
dkato 0:aba6e62b51a7 34
dkato 3:37a886d77bae 35 virtual void power(bool type = true) {
dkato 3:37a886d77bae 36 return;
dkato 3:37a886d77bae 37 }
dkato 3:37a886d77bae 38
dkato 0:aba6e62b51a7 39 /** Set I2S interface bit length and mode
dkato 0:aba6e62b51a7 40 *
dkato 0:aba6e62b51a7 41 * @param length Set bit length to 8 or 16 bits
dkato 0:aba6e62b51a7 42 * @return true = success, false = failure
dkato 0:aba6e62b51a7 43 */
dkato 3:37a886d77bae 44 virtual bool format(char length);
dkato 0:aba6e62b51a7 45
dkato 0:aba6e62b51a7 46 /** Set sample frequency
dkato 0:aba6e62b51a7 47 *
dkato 0:aba6e62b51a7 48 * @param frequency Sample frequency of data in Hz
dkato 0:aba6e62b51a7 49 * @return true = success, false = failure
dkato 0:aba6e62b51a7 50 *
dkato 0:aba6e62b51a7 51 * Supports the following frequencies: 8kHz, 8.021kHz, 32kHz, 44.1kHz, 48kHz
dkato 0:aba6e62b51a7 52 * Default is 44.1kHz
dkato 0:aba6e62b51a7 53 */
dkato 3:37a886d77bae 54 virtual bool frequency(int hz);
dkato 0:aba6e62b51a7 55
dkato 0:aba6e62b51a7 56 /** Enqueue asynchronous write request
dkato 0:aba6e62b51a7 57 *
dkato 0:aba6e62b51a7 58 * @param p_data Location of the data
dkato 0:aba6e62b51a7 59 * @param data_size Number of bytes to write
dkato 0:aba6e62b51a7 60 * @return Number of bytes written on success. negative number on error.
dkato 0:aba6e62b51a7 61 */
dkato 3:37a886d77bae 62 virtual int write(void * const p_data, uint32_t data_size, const rbsp_data_conf_t * const p_data_conf = NULL);
dkato 3:37a886d77bae 63
dkato 3:37a886d77bae 64 virtual int read(void * const p_data, uint32_t data_size, const rbsp_data_conf_t * const p_data_conf = NULL) {
dkato 3:37a886d77bae 65 return -1;
dkato 3:37a886d77bae 66 }
dkato 0:aba6e62b51a7 67
dkato 0:aba6e62b51a7 68 /** Volume control
dkato 0:aba6e62b51a7 69 *
dkato 0:aba6e62b51a7 70 * @param volume Speaker volume
dkato 0:aba6e62b51a7 71 * @return Returns "true" for success, "false" if parameters are out of range
dkato 0:aba6e62b51a7 72 * Parameters accept a value, where 0.0 <= parameter <= 1.0 (1.0 = default)
dkato 0:aba6e62b51a7 73 */
dkato 3:37a886d77bae 74 virtual bool outputVolume(float leftVolumeOut, float rightVolumeOut);
dkato 3:37a886d77bae 75
dkato 3:37a886d77bae 76 virtual bool micVolume(float VolumeIn) {
dkato 3:37a886d77bae 77 return false;
dkato 3:37a886d77bae 78 }
dkato 0:aba6e62b51a7 79
dkato 0:aba6e62b51a7 80 private:
dkato 0:aba6e62b51a7 81 #define WRITE_BUFF_SIZE (1024 * 4)
dkato 0:aba6e62b51a7 82 #define MSK_RING_BUFF (WRITE_BUFF_SIZE - 1)
dkato 0:aba6e62b51a7 83
dkato 0:aba6e62b51a7 84 PwmOut _speaker_l;
dkato 0:aba6e62b51a7 85 PwmOut _speaker_r;
dkato 0:aba6e62b51a7 86 Ticker _timer;
dkato 0:aba6e62b51a7 87 int _length;
dkato 0:aba6e62b51a7 88 int _hz_multi;
dkato 0:aba6e62b51a7 89 int _data_cnt;
dkato 0:aba6e62b51a7 90 bool _playing;
dkato 0:aba6e62b51a7 91 volatile uint32_t _bottom;
dkato 0:aba6e62b51a7 92 volatile uint32_t _top;
dkato 3:37a886d77bae 93 float _speaker_vol_l;
dkato 3:37a886d77bae 94 float _speaker_vol_r;
dkato 0:aba6e62b51a7 95 float _pwm_duty_buf[WRITE_BUFF_SIZE];
dkato 0:aba6e62b51a7 96
dkato 0:aba6e62b51a7 97 void sound_out(void);
dkato 0:aba6e62b51a7 98 };
dkato 0:aba6e62b51a7 99
dkato 0:aba6e62b51a7 100 #endif // PWMOUT_SPEAKER_H