Ernst-Georg Schmid / HC12
Committer:
Ernst-Georg Schmid
Date:
Wed Sep 02 20:20:59 2020 +0200
Revision:
3:ab80d3d6d790
Parent:
2:703f6b7b10d0
+ v 0.0.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ernst-Georg Schmid 0:6cad071c4589 1 /**
Ernst-Georg Schmid 0:6cad071c4589 2 ******************************************************************************
Ernst-Georg Schmid 0:6cad071c4589 3 * @file HC12.h
Ernst-Georg Schmid 0:6cad071c4589 4 * @author Ernst-Georg Schmid
Ernst-Georg Schmid 3:ab80d3d6d790 5 * @version V0.0.2
Ernst-Georg Schmid 3:ab80d3d6d790 6 * @date 02 September 2020
Ernst-Georg Schmid 0:6cad071c4589 7 * @brief This file contains a HC12 433 MHz ISM-band transceiver library with
Ernst-Georg Schmid 0:6cad071c4589 8 * serial interface
Ernst-Georg Schmid 0:6cad071c4589 9 ******************************************************************************
Ernst-Georg Schmid 0:6cad071c4589 10 * @attention
Ernst-Georg Schmid 0:6cad071c4589 11 *
Ernst-Georg Schmid 0:6cad071c4589 12 * Permission is hereby granted, free of charge, to any person obtaining a copy
Ernst-Georg Schmid 0:6cad071c4589 13 * of this software and associated documentation files (the "Software"), to deal
Ernst-Georg Schmid 0:6cad071c4589 14 * in the Software without restriction, including without limitation the rights
Ernst-Georg Schmid 0:6cad071c4589 15 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Ernst-Georg Schmid 0:6cad071c4589 16 * copies of the Software, and to permit persons to whom the Software is
Ernst-Georg Schmid 0:6cad071c4589 17 * furnished to do so, subject to the following conditions:
Ernst-Georg Schmid 0:6cad071c4589 18 *
Ernst-Georg Schmid 0:6cad071c4589 19 * The above copyright notice and this permission notice shall be included in
Ernst-Georg Schmid 0:6cad071c4589 20 * all copies or substantial portions of the Software.
Ernst-Georg Schmid 0:6cad071c4589 21 *
Ernst-Georg Schmid 0:6cad071c4589 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Ernst-Georg Schmid 0:6cad071c4589 23 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Ernst-Georg Schmid 0:6cad071c4589 24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Ernst-Georg Schmid 0:6cad071c4589 25 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Ernst-Georg Schmid 0:6cad071c4589 26 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Ernst-Georg Schmid 0:6cad071c4589 27 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Ernst-Georg Schmid 0:6cad071c4589 28 * THE SOFTWARE.
Ernst-Georg Schmid 0:6cad071c4589 29 */
Ernst-Georg Schmid 0:6cad071c4589 30
Ernst-Georg Schmid 0:6cad071c4589 31 /**
Ernst-Georg Schmid 0:6cad071c4589 32 *
Ernst-Georg Schmid 0:6cad071c4589 33 * For more information about the HC12 433 MHz ISM-band transceiver:
Ernst-Georg Schmid 0:6cad071c4589 34 * https://ecksteinimg.de/Datasheet/HC-12%20english%20datasheets.pdf
Ernst-Georg Schmid 0:6cad071c4589 35 */
Ernst-Georg Schmid 0:6cad071c4589 36
Ernst-Georg Schmid 0:6cad071c4589 37 #ifndef MBED_HC12_H
Ernst-Georg Schmid 0:6cad071c4589 38 #define MBED_HC12_H
Ernst-Georg Schmid 0:6cad071c4589 39
Ernst-Georg Schmid 0:6cad071c4589 40 #include "mbed.h"
Ernst-Georg Schmid 0:6cad071c4589 41
Ernst-Georg Schmid 0:6cad071c4589 42 /** Interface for controlling the HC12 HC12 433 MHz ISM-band transceiver
Ernst-Georg Schmid 0:6cad071c4589 43 *
Ernst-Georg Schmid 0:6cad071c4589 44 * @code
Ernst-Georg Schmid 0:6cad071c4589 45 * #include "mbed.h"
Ernst-Georg Schmid 0:6cad071c4589 46 * #include "HC12.h"
Ernst-Georg Schmid 0:6cad071c4589 47 *
Ernst-Georg Schmid 0:6cad071c4589 48 * static HC12 hc12;
Ernst-Georg Schmid 0:6cad071c4589 49 *
Ernst-Georg Schmid 0:6cad071c4589 50 * int main() {
Ernst-Georg Schmid 0:6cad071c4589 51 *
Ernst-Georg Schmid 0:6cad071c4589 52 * int data = 627604;
Ernst-Georg Schmid 0:6cad071c4589 53 *
Ernst-Georg Schmid 0:6cad071c4589 54 * while(true) {
Ernst-Georg Schmid 0:6cad071c4589 55 * hc12.wakeup();
Ernst-Georg Schmid 0:6cad071c4589 56 * hc12.send(&data, sizeof(int));
Ernst-Georg Schmid 0:6cad071c4589 57 * hc12.sleep();
Ernst-Georg Schmid 0:6cad071c4589 58 * ThisThread::sleep_for(10s);
Ernst-Georg Schmid 0:6cad071c4589 59 * }
Ernst-Georg Schmid 0:6cad071c4589 60 * }
Ernst-Georg Schmid 0:6cad071c4589 61 *
Ernst-Georg Schmid 0:6cad071c4589 62 * @endcode
Ernst-Georg Schmid 0:6cad071c4589 63 */
Ernst-Georg Schmid 0:6cad071c4589 64
Ernst-Georg Schmid 0:6cad071c4589 65 /** HC12 class
Ernst-Georg Schmid 0:6cad071c4589 66 *
Ernst-Georg Schmid 0:6cad071c4589 67 * HC12: A library to transmit and receive data using the HC12 433 MHz ISM-band
Ernst-Georg Schmid 0:6cad071c4589 68 * transceiver
Ernst-Georg Schmid 0:6cad071c4589 69 *
Ernst-Georg Schmid 0:6cad071c4589 70 */
Ernst-Georg Schmid 0:6cad071c4589 71 class HC12 {
Ernst-Georg Schmid 0:6cad071c4589 72 public:
Ernst-Georg Schmid 0:6cad071c4589 73 /** Create a HC12 instance
Ernst-Georg Schmid 0:6cad071c4589 74 *
Ernst-Georg Schmid 0:6cad071c4589 75 * @param p_tx USART TX Pin (default: D8)
Ernst-Georg Schmid 0:6cad071c4589 76 * @param p_rx USART RX Pin (default: D2)
Ernst-Georg Schmid 0:6cad071c4589 77 * @param p_set MODE SET DigitalOut Pin (default: D4)
Ernst-Georg Schmid 0:6cad071c4589 78 * @param baudrate USART / HC12 Baudrate (default: 9600)
Ernst-Georg Schmid 0:6cad071c4589 79 * @param data_bits Number of Data Bits (default: 8)
Ernst-Georg Schmid 0:6cad071c4589 80 * @param parity Parity (default: No Parity)
Ernst-Georg Schmid 0:6cad071c4589 81 * @param stop_bits Number of Stop Bits (default: 1)
Ernst-Georg Schmid 0:6cad071c4589 82 */
Ernst-Georg Schmid 0:6cad071c4589 83 HC12(PinName p_tx = D8, PinName p_rx = D2, PinName p_set = D4,
Ernst-Georg Schmid 0:6cad071c4589 84 int baudrate = 9600, int data_bits = 8,
Ernst-Georg Schmid 0:6cad071c4589 85 SerialBase::Parity parity = SerialBase::None, int stop_bits = 1);
Ernst-Georg Schmid 0:6cad071c4589 86
Ernst-Georg Schmid 0:6cad071c4589 87 /** Destructor of HC12
Ernst-Georg Schmid 0:6cad071c4589 88 */
Ernst-Georg Schmid 0:6cad071c4589 89 virtual ~HC12();
Ernst-Georg Schmid 0:6cad071c4589 90
Ernst-Georg Schmid 0:6cad071c4589 91 unsigned short htons(unsigned short n);
Ernst-Georg Schmid 0:6cad071c4589 92 unsigned short ntohs(unsigned short n);
Ernst-Georg Schmid 0:6cad071c4589 93 unsigned int htonl(unsigned int n);
Ernst-Georg Schmid 0:6cad071c4589 94 unsigned int ntohl(unsigned int n);
Ernst-Georg Schmid 0:6cad071c4589 95
Ernst-Georg Schmid 0:6cad071c4589 96 /** Set HC12 to command mode
Ernst-Georg Schmid 0:6cad071c4589 97 *
Ernst-Georg Schmid 0:6cad071c4589 98 */
Ernst-Georg Schmid 0:6cad071c4589 99 void command_mode();
Ernst-Georg Schmid 0:6cad071c4589 100
Ernst-Georg Schmid 0:6cad071c4589 101 /** Set HC12 to transparent mode
Ernst-Georg Schmid 0:6cad071c4589 102 *
Ernst-Georg Schmid 0:6cad071c4589 103 */
Ernst-Georg Schmid 0:6cad071c4589 104 void transparent_mode();
Ernst-Georg Schmid 0:6cad071c4589 105
Ernst-Georg Schmid 0:6cad071c4589 106 /** Set HC12 deep sleep
Ernst-Georg Schmid 0:6cad071c4589 107 *
Ernst-Georg Schmid 0:6cad071c4589 108 */
Ernst-Georg Schmid 0:6cad071c4589 109 bool sleep();
Ernst-Georg Schmid 0:6cad071c4589 110
Ernst-Georg Schmid 0:6cad071c4589 111 /** Wake HC12 up
Ernst-Georg Schmid 0:6cad071c4589 112 *
Ernst-Georg Schmid 0:6cad071c4589 113 */
Ernst-Georg Schmid 0:6cad071c4589 114 bool wakeup();
Ernst-Georg Schmid 0:6cad071c4589 115
Ernst-Georg Schmid 1:94730dddb530 116 /** Set HC12 channel
Ernst-Georg Schmid 1:94730dddb530 117 *
Ernst-Georg Schmid 1:94730dddb530 118 */
Ernst-Georg Schmid 3:ab80d3d6d790 119 bool channel(unsigned int channel, bool unsafe_channels = false);
Ernst-Georg Schmid 1:94730dddb530 120
Ernst-Georg Schmid 1:94730dddb530 121 /** Set HC12 UART TX mode
Ernst-Georg Schmid 1:94730dddb530 122 *
Ernst-Georg Schmid 1:94730dddb530 123 */
Ernst-Georg Schmid 1:94730dddb530 124 bool uart_tx_mode(unsigned int mode);
Ernst-Georg Schmid 1:94730dddb530 125
Ernst-Georg Schmid 1:94730dddb530 126 /** Set HC12 TX power in dBm
Ernst-Georg Schmid 1:94730dddb530 127 *
Ernst-Georg Schmid 1:94730dddb530 128 */
Ernst-Georg Schmid 1:94730dddb530 129 bool tx_power(int dBm);
Ernst-Georg Schmid 1:94730dddb530 130
Ernst-Georg Schmid 1:94730dddb530 131 /** Set HC12 UART baud rate
Ernst-Georg Schmid 1:94730dddb530 132 *
Ernst-Georg Schmid 1:94730dddb530 133 */
Ernst-Georg Schmid 1:94730dddb530 134 bool baudrate(unsigned int baud);
Ernst-Georg Schmid 1:94730dddb530 135
Ernst-Georg Schmid 2:703f6b7b10d0 136 /** Set HC12 UART comm format
Ernst-Georg Schmid 2:703f6b7b10d0 137 *
Ernst-Georg Schmid 2:703f6b7b10d0 138 */
Ernst-Georg Schmid 2:703f6b7b10d0 139 bool format(unsigned int data_bits = 8,
Ernst-Georg Schmid 2:703f6b7b10d0 140 SerialBase::Parity parity = SerialBase::Parity::None,
Ernst-Georg Schmid 2:703f6b7b10d0 141 unsigned int stop_bits = 1);
Ernst-Georg Schmid 2:703f6b7b10d0 142
Ernst-Georg Schmid 0:6cad071c4589 143 /** Send data
Ernst-Georg Schmid 0:6cad071c4589 144 *
Ernst-Georg Schmid 0:6cad071c4589 145 */
Ernst-Georg Schmid 0:6cad071c4589 146 ssize_t send(const void *data, std::size_t length);
Ernst-Georg Schmid 0:6cad071c4589 147
Ernst-Georg Schmid 0:6cad071c4589 148 /** Receive data
Ernst-Georg Schmid 0:6cad071c4589 149 *
Ernst-Georg Schmid 0:6cad071c4589 150 */
Ernst-Georg Schmid 0:6cad071c4589 151 ssize_t receive(void *data, std::size_t length);
Ernst-Georg Schmid 0:6cad071c4589 152
Ernst-Georg Schmid 0:6cad071c4589 153 private:
Ernst-Georg Schmid 0:6cad071c4589 154 DigitalOut _set;
Ernst-Georg Schmid 0:6cad071c4589 155 BufferedSerial _hc12;
Ernst-Georg Schmid 0:6cad071c4589 156 };
Ernst-Georg Schmid 0:6cad071c4589 157
Ernst-Georg Schmid 3:ab80d3d6d790 158 #endif // MBED_HC12_H