Mbed SDK for XRange SX1272 LoRa module

Dependents:   XRangePingPong XRange-LoRaWAN-lmic-app lora-transceiver

SX1272 LoRa RF module

https://www.netblocks.eu/xrange-sx1272-lora-datasheet/

Committer:
netblocks
Date:
Thu Jan 07 13:01:25 2016 +0000
Revision:
339:ac6f3fd999f3
Parent:
336:1e18a06a987b
HSE_VALUE set for XTAL 16Mhz

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudmuck 336:1e18a06a987b 1 /* mbed Microcontroller Library
dudmuck 336:1e18a06a987b 2 * Copyright (c) 2006-2013 ARM Limited
dudmuck 336:1e18a06a987b 3 *
dudmuck 336:1e18a06a987b 4 * Licensed under the Apache License, Version 2.0 (the "License");
dudmuck 336:1e18a06a987b 5 * you may not use this file except in compliance with the License.
dudmuck 336:1e18a06a987b 6 * You may obtain a copy of the License at
dudmuck 336:1e18a06a987b 7 *
dudmuck 336:1e18a06a987b 8 * http://www.apache.org/licenses/LICENSE-2.0
dudmuck 336:1e18a06a987b 9 *
dudmuck 336:1e18a06a987b 10 * Unless required by applicable law or agreed to in writing, software
dudmuck 336:1e18a06a987b 11 * distributed under the License is distributed on an "AS IS" BASIS,
dudmuck 336:1e18a06a987b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dudmuck 336:1e18a06a987b 13 * See the License for the specific language governing permissions and
dudmuck 336:1e18a06a987b 14 * limitations under the License.
dudmuck 336:1e18a06a987b 15 */
dudmuck 336:1e18a06a987b 16 #ifndef MBED_I2C_SLAVE_H
dudmuck 336:1e18a06a987b 17 #define MBED_I2C_SLAVE_H
dudmuck 336:1e18a06a987b 18
dudmuck 336:1e18a06a987b 19 #include "platform.h"
dudmuck 336:1e18a06a987b 20
dudmuck 336:1e18a06a987b 21 #if DEVICE_I2CSLAVE
dudmuck 336:1e18a06a987b 22
dudmuck 336:1e18a06a987b 23 #include "i2c_api.h"
dudmuck 336:1e18a06a987b 24
dudmuck 336:1e18a06a987b 25 namespace mbed {
dudmuck 336:1e18a06a987b 26
dudmuck 336:1e18a06a987b 27 /** An I2C Slave, used for communicating with an I2C Master device
dudmuck 336:1e18a06a987b 28 *
dudmuck 336:1e18a06a987b 29 * Example:
dudmuck 336:1e18a06a987b 30 * @code
dudmuck 336:1e18a06a987b 31 * // Simple I2C responder
dudmuck 336:1e18a06a987b 32 * #include <mbed.h>
dudmuck 336:1e18a06a987b 33 *
dudmuck 336:1e18a06a987b 34 * I2CSlave slave(p9, p10);
dudmuck 336:1e18a06a987b 35 *
dudmuck 336:1e18a06a987b 36 * int main() {
dudmuck 336:1e18a06a987b 37 * char buf[10];
dudmuck 336:1e18a06a987b 38 * char msg[] = "Slave!";
dudmuck 336:1e18a06a987b 39 *
dudmuck 336:1e18a06a987b 40 * slave.address(0xA0);
dudmuck 336:1e18a06a987b 41 * while (1) {
dudmuck 336:1e18a06a987b 42 * int i = slave.receive();
dudmuck 336:1e18a06a987b 43 * switch (i) {
dudmuck 336:1e18a06a987b 44 * case I2CSlave::ReadAddressed:
dudmuck 336:1e18a06a987b 45 * slave.write(msg, strlen(msg) + 1); // Includes null char
dudmuck 336:1e18a06a987b 46 * break;
dudmuck 336:1e18a06a987b 47 * case I2CSlave::WriteGeneral:
dudmuck 336:1e18a06a987b 48 * slave.read(buf, 10);
dudmuck 336:1e18a06a987b 49 * printf("Read G: %s\n", buf);
dudmuck 336:1e18a06a987b 50 * break;
dudmuck 336:1e18a06a987b 51 * case I2CSlave::WriteAddressed:
dudmuck 336:1e18a06a987b 52 * slave.read(buf, 10);
dudmuck 336:1e18a06a987b 53 * printf("Read A: %s\n", buf);
dudmuck 336:1e18a06a987b 54 * break;
dudmuck 336:1e18a06a987b 55 * }
dudmuck 336:1e18a06a987b 56 * for(int i = 0; i < 10; i++) buf[i] = 0; // Clear buffer
dudmuck 336:1e18a06a987b 57 * }
dudmuck 336:1e18a06a987b 58 * }
dudmuck 336:1e18a06a987b 59 * @endcode
dudmuck 336:1e18a06a987b 60 */
dudmuck 336:1e18a06a987b 61 class I2CSlave {
dudmuck 336:1e18a06a987b 62
dudmuck 336:1e18a06a987b 63 public:
dudmuck 336:1e18a06a987b 64 enum RxStatus {
dudmuck 336:1e18a06a987b 65 NoData = 0,
dudmuck 336:1e18a06a987b 66 ReadAddressed = 1,
dudmuck 336:1e18a06a987b 67 WriteGeneral = 2,
dudmuck 336:1e18a06a987b 68 WriteAddressed = 3
dudmuck 336:1e18a06a987b 69 };
dudmuck 336:1e18a06a987b 70
dudmuck 336:1e18a06a987b 71 /** Create an I2C Slave interface, connected to the specified pins.
dudmuck 336:1e18a06a987b 72 *
dudmuck 336:1e18a06a987b 73 * @param sda I2C data line pin
dudmuck 336:1e18a06a987b 74 * @param scl I2C clock line pin
dudmuck 336:1e18a06a987b 75 */
dudmuck 336:1e18a06a987b 76 I2CSlave(PinName sda, PinName scl);
dudmuck 336:1e18a06a987b 77
dudmuck 336:1e18a06a987b 78 /** Set the frequency of the I2C interface
dudmuck 336:1e18a06a987b 79 *
dudmuck 336:1e18a06a987b 80 * @param hz The bus frequency in hertz
dudmuck 336:1e18a06a987b 81 */
dudmuck 336:1e18a06a987b 82 void frequency(int hz);
dudmuck 336:1e18a06a987b 83
dudmuck 336:1e18a06a987b 84 /** Checks to see if this I2C Slave has been addressed.
dudmuck 336:1e18a06a987b 85 *
dudmuck 336:1e18a06a987b 86 * @returns
dudmuck 336:1e18a06a987b 87 * A status indicating if the device has been addressed, and how
dudmuck 336:1e18a06a987b 88 * - NoData - the slave has not been addressed
dudmuck 336:1e18a06a987b 89 * - ReadAddressed - the master has requested a read from this slave
dudmuck 336:1e18a06a987b 90 * - WriteAddressed - the master is writing to this slave
dudmuck 336:1e18a06a987b 91 * - WriteGeneral - the master is writing to all slave
dudmuck 336:1e18a06a987b 92 */
dudmuck 336:1e18a06a987b 93 int receive(void);
dudmuck 336:1e18a06a987b 94
dudmuck 336:1e18a06a987b 95 /** Read from an I2C master.
dudmuck 336:1e18a06a987b 96 *
dudmuck 336:1e18a06a987b 97 * @param data pointer to the byte array to read data in to
dudmuck 336:1e18a06a987b 98 * @param length maximum number of bytes to read
dudmuck 336:1e18a06a987b 99 *
dudmuck 336:1e18a06a987b 100 * @returns
dudmuck 336:1e18a06a987b 101 * 0 on success,
dudmuck 336:1e18a06a987b 102 * non-0 otherwise
dudmuck 336:1e18a06a987b 103 */
dudmuck 336:1e18a06a987b 104 int read(char *data, int length);
dudmuck 336:1e18a06a987b 105
dudmuck 336:1e18a06a987b 106 /** Read a single byte from an I2C master.
dudmuck 336:1e18a06a987b 107 *
dudmuck 336:1e18a06a987b 108 * @returns
dudmuck 336:1e18a06a987b 109 * the byte read
dudmuck 336:1e18a06a987b 110 */
dudmuck 336:1e18a06a987b 111 int read(void);
dudmuck 336:1e18a06a987b 112
dudmuck 336:1e18a06a987b 113 /** Write to an I2C master.
dudmuck 336:1e18a06a987b 114 *
dudmuck 336:1e18a06a987b 115 * @param data pointer to the byte array to be transmitted
dudmuck 336:1e18a06a987b 116 * @param length the number of bytes to transmite
dudmuck 336:1e18a06a987b 117 *
dudmuck 336:1e18a06a987b 118 * @returns
dudmuck 336:1e18a06a987b 119 * 0 on success,
dudmuck 336:1e18a06a987b 120 * non-0 otherwise
dudmuck 336:1e18a06a987b 121 */
dudmuck 336:1e18a06a987b 122 int write(const char *data, int length);
dudmuck 336:1e18a06a987b 123
dudmuck 336:1e18a06a987b 124 /** Write a single byte to an I2C master.
dudmuck 336:1e18a06a987b 125 *
dudmuck 336:1e18a06a987b 126 * @data the byte to write
dudmuck 336:1e18a06a987b 127 *
dudmuck 336:1e18a06a987b 128 * @returns
dudmuck 336:1e18a06a987b 129 * '1' if an ACK was received,
dudmuck 336:1e18a06a987b 130 * '0' otherwise
dudmuck 336:1e18a06a987b 131 */
dudmuck 336:1e18a06a987b 132 int write(int data);
dudmuck 336:1e18a06a987b 133
dudmuck 336:1e18a06a987b 134 /** Sets the I2C slave address.
dudmuck 336:1e18a06a987b 135 *
dudmuck 336:1e18a06a987b 136 * @param address The address to set for the slave (ignoring the least
dudmuck 336:1e18a06a987b 137 * signifcant bit). If set to 0, the slave will only respond to the
dudmuck 336:1e18a06a987b 138 * general call address.
dudmuck 336:1e18a06a987b 139 */
dudmuck 336:1e18a06a987b 140 void address(int address);
dudmuck 336:1e18a06a987b 141
dudmuck 336:1e18a06a987b 142 /** Reset the I2C slave back into the known ready receiving state.
dudmuck 336:1e18a06a987b 143 */
dudmuck 336:1e18a06a987b 144 void stop(void);
dudmuck 336:1e18a06a987b 145
dudmuck 336:1e18a06a987b 146 protected:
dudmuck 336:1e18a06a987b 147 i2c_t _i2c;
dudmuck 336:1e18a06a987b 148 };
dudmuck 336:1e18a06a987b 149
dudmuck 336:1e18a06a987b 150 } // namespace mbed
dudmuck 336:1e18a06a987b 151
dudmuck 336:1e18a06a987b 152 #endif
dudmuck 336:1e18a06a987b 153
dudmuck 336:1e18a06a987b 154 #endif