Release 1.01
emic2.h@2:e700404156e4, 2019-09-17 (annotated)
- Committer:
- foxbrianr
- Date:
- Tue Sep 17 13:48:49 2019 +0000
- Revision:
- 2:e700404156e4
- Parent:
- 1:0803158da847
Beta 2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
foxbrianr | 2:e700404156e4 | 1 | /************************************************************************** |
foxbrianr | 2:e700404156e4 | 2 | * @file emic2.h |
foxbrianr | 2:e700404156e4 | 3 | * @brief Base class for wrapping the interface with the EMIC2 Sound Care |
foxbrianr | 2:e700404156e4 | 4 | * @version: V1.0 |
foxbrianr | 2:e700404156e4 | 5 | * @date: 9/17/2019 |
foxbrianr | 2:e700404156e4 | 6 | |
foxbrianr | 2:e700404156e4 | 7 | * |
foxbrianr | 2:e700404156e4 | 8 | * @note |
foxbrianr | 2:e700404156e4 | 9 | * Copyright (C) 2019 E3 Design. All rights reserved. |
foxbrianr | 2:e700404156e4 | 10 | * |
foxbrianr | 2:e700404156e4 | 11 | * @par |
foxbrianr | 2:e700404156e4 | 12 | * E3 Designers LLC is supplying this software for use with Cortex-M3 LPC1768 |
foxbrianr | 2:e700404156e4 | 13 | * processor based microcontroller for the ESCM 2000 Monitor and Display. |
foxbrianr | 2:e700404156e4 | 14 | * * |
foxbrianr | 2:e700404156e4 | 15 | * @par |
foxbrianr | 2:e700404156e4 | 16 | * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED |
foxbrianr | 2:e700404156e4 | 17 | * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF |
foxbrianr | 2:e700404156e4 | 18 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. |
foxbrianr | 2:e700404156e4 | 19 | * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR |
foxbrianr | 2:e700404156e4 | 20 | * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. |
foxbrianr | 2:e700404156e4 | 21 | * |
foxbrianr | 2:e700404156e4 | 22 | ******************************************************************************/ |
foxbrianr | 1:0803158da847 | 23 | #ifndef _EMIC2_DRIVER_ |
foxbrianr | 1:0803158da847 | 24 | #define _EMIC2_DRIVER_ |
foxbrianr | 1:0803158da847 | 25 | |
foxbrianr | 1:0803158da847 | 26 | #include "mbed.h" |
foxbrianr | 1:0803158da847 | 27 | |
4180_1 | 0:b95ede38e19d | 28 | #define speakf printf |
foxbrianr | 1:0803158da847 | 29 | |
4180_1 | 0:b95ede38e19d | 30 | class emic2 : public Stream |
4180_1 | 0:b95ede38e19d | 31 | { |
4180_1 | 0:b95ede38e19d | 32 | public : |
4180_1 | 0:b95ede38e19d | 33 | emic2(PinName tx, PinName rx): _cmd(tx,rx) { |
4180_1 | 0:b95ede38e19d | 34 | _cmd.baud(9600); |
4180_1 | 0:b95ede38e19d | 35 | _cmd.putc('X'); //stop talking if reset and not a power on |
4180_1 | 0:b95ede38e19d | 36 | _cmd.putc('\r'); // Send a CR in case the system is already up |
4180_1 | 0:b95ede38e19d | 37 | wait(1); //delay for emic power on boot or reset respone |
4180_1 | 0:b95ede38e19d | 38 | while (_cmd.getc() != ':'); // When the Emic 2 has initialized and is ready, it will send a single ':' |
4180_1 | 0:b95ede38e19d | 39 | while (_cmd.readable()) _cmd.getc();//flush out buffer just in case |
4180_1 | 0:b95ede38e19d | 40 | }; |
4180_1 | 0:b95ede38e19d | 41 | void ready() { |
foxbrianr | 1:0803158da847 | 42 | while (_cmd.getc() != ':') |
foxbrianr | 1:0803158da847 | 43 | { |
foxbrianr | 1:0803158da847 | 44 | ThisThread::sleep_for(1); |
foxbrianr | 1:0803158da847 | 45 | } |
foxbrianr | 1:0803158da847 | 46 | while (_cmd.readable()) { |
foxbrianr | 1:0803158da847 | 47 | _cmd.getc();//flush out recieve buffer just in case |
foxbrianr | 1:0803158da847 | 48 | ThisThread::sleep_for(1); |
foxbrianr | 1:0803158da847 | 49 | } |
4180_1 | 0:b95ede38e19d | 50 | }; |
4180_1 | 0:b95ede38e19d | 51 | int readable() { |
4180_1 | 0:b95ede38e19d | 52 | return _cmd.readable(); |
4180_1 | 0:b95ede38e19d | 53 | }; |
4180_1 | 0:b95ede38e19d | 54 | int getc() { |
4180_1 | 0:b95ede38e19d | 55 | return _cmd.getc(); |
4180_1 | 0:b95ede38e19d | 56 | } |
4180_1 | 0:b95ede38e19d | 57 | void volume(int x) { |
foxbrianr | 1:0803158da847 | 58 | speakf("V%d\r",x); |
4180_1 | 0:b95ede38e19d | 59 | ready(); |
4180_1 | 0:b95ede38e19d | 60 | } |
4180_1 | 0:b95ede38e19d | 61 | void voice(int x) { |
foxbrianr | 1:0803158da847 | 62 | speakf("N%d\r",x); |
4180_1 | 0:b95ede38e19d | 63 | ready(); |
4180_1 | 0:b95ede38e19d | 64 | } |
4180_1 | 0:b95ede38e19d | 65 | protected : |
4180_1 | 0:b95ede38e19d | 66 | Serial _cmd; |
4180_1 | 0:b95ede38e19d | 67 | //used by printf - supply it and printf works! |
4180_1 | 0:b95ede38e19d | 68 | virtual int _putc(int c) { |
4180_1 | 0:b95ede38e19d | 69 | _cmd.putc(c); |
foxbrianr | 2:e700404156e4 | 70 | ThisThread::sleep_for(1); |
4180_1 | 0:b95ede38e19d | 71 | return 0; |
4180_1 | 0:b95ede38e19d | 72 | }; |
4180_1 | 0:b95ede38e19d | 73 | virtual int _getc() { |
4180_1 | 0:b95ede38e19d | 74 | return -1; |
4180_1 | 0:b95ede38e19d | 75 | }; |
4180_1 | 0:b95ede38e19d | 76 | }; |
foxbrianr | 1:0803158da847 | 77 | |
foxbrianr | 1:0803158da847 | 78 | #endif |