PWM drives the speaker.
PwmOutSpeaker.h@3:37a886d77bae, 2018-07-24 (annotated)
- 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?
User | Revision | Line number | New 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 |