strat des robots

Fork of CRAC-Strat_2017 by CRAC Team

Committer:
ClementBreteau
Date:
Fri May 19 17:14:07 2017 +0000
Revision:
17:d1594579eec6
Parent:
0:ad97421fb1fb
strat du robot, 19-05-2017, 19h

Who changed what in which revision?

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