Command processor to access I2C and SPI Takes URI coded commands and returns JSON array

Fork of SerialInterface by Greg Steiert

Committer:
switches
Date:
Thu Dec 15 17:42:33 2016 +0000
Revision:
7:06a2eb2483f6
Parent:
6:c9b7256c8261
Child:
8:a0937dc92631
Moved the GPIO and AIN pointer assignment to the declaration to eliminate the need for the init function.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsteiert 0:828bfd94972b 1 /* Pmod Interface Library
gsteiert 0:828bfd94972b 2 *
gsteiert 0:828bfd94972b 3 */
switches 2:3f6a8ac111a9 4 #ifndef SERIALINTERFACE_H
switches 2:3f6a8ac111a9 5 #define SERIALINTERFACE_H
gsteiert 0:828bfd94972b 6
gsteiert 0:828bfd94972b 7 #include "mbed.h"
switches 2:3f6a8ac111a9 8 #include "SerialInterface.h"
gsteiert 0:828bfd94972b 9
gsteiert 0:828bfd94972b 10 /** RAPC Library, Provides utilities for remotely accessing peripherals
gsteiert 0:828bfd94972b 11 *
gsteiert 0:828bfd94972b 12 * Example:
gsteiert 0:828bfd94972b 13 * @code
gsteiert 0:828bfd94972b 14 * // Configure board to pass UART signals to peripheral connector.
gsteiert 0:828bfd94972b 15 *
switches 2:3f6a8ac111a9 16 * #include "SerialInterface.h"
gsteiert 0:828bfd94972b 17 *
switches 2:3f6a8ac111a9 18 * SerialInterface serInt;
switches 3:601b78524967 19 * I2C i2c(P3_4, P3_5);
switches 4:0bd9ec504040 20 * SPI spi(P5_1, P5_2, P5_0);
switches 4:0bd9ec504040 21 * DigitalOut ssel(P5_3);
gsteiert 0:828bfd94972b 22 *
gsteiert 0:828bfd94972b 23 * int main() {
gsteiert 0:828bfd94972b 24 * char ibuf[256];
gsteiert 0:828bfd94972b 25 * char obuf[256];
switches 4:0bd9ec504040 26 * serInt.init(&i2c, &spi, &ssel);
gsteiert 0:828bfd94972b 27 * while(1) {
gsteiert 0:828bfd94972b 28 * scanf("%s", ibuf);
switches 3:601b78524967 29 * serInt.call(ibuf, obuf);
gsteiert 0:828bfd94972b 30 * printf("%s=", ibuf);
gsteiert 0:828bfd94972b 31 * printf("%s\n", obuf);
gsteiert 0:828bfd94972b 32 * }
gsteiert 0:828bfd94972b 33 * @endcode
gsteiert 0:828bfd94972b 34 */
switches 2:3f6a8ac111a9 35 class SerialInterface
gsteiert 0:828bfd94972b 36 {
gsteiert 0:828bfd94972b 37 public:
gsteiert 0:828bfd94972b 38
switches 2:3f6a8ac111a9 39 /** Create a SerialInterface interface
gsteiert 0:828bfd94972b 40 *
gsteiert 0:828bfd94972b 41 */
switches 7:06a2eb2483f6 42 SerialInterface(I2C &i2c, SPI &spi, DigitalInOut* gpio, AnalogIn* ain);
gsteiert 0:828bfd94972b 43
switches 2:3f6a8ac111a9 44 ~SerialInterface();
gsteiert 0:828bfd94972b 45
gsteiert 0:828bfd94972b 46 /** Name the I2C arguments
gsteiert 0:828bfd94972b 47 */
gsteiert 0:828bfd94972b 48 enum PINTi2cArgs {
gsteiert 0:828bfd94972b 49 IA_CNT = 0, /**< Argument Count */
gsteiert 0:828bfd94972b 50 IA_ADD, /**< Device Address */
gsteiert 0:828bfd94972b 51 IA_DATA, /**< Data, Read = # bytes to read, Write = first data byte */
gsteiert 0:828bfd94972b 52 IA_RDDA /**< Read Data, data to write prior to read */
gsteiert 0:828bfd94972b 53 };
gsteiert 0:828bfd94972b 54
switches 7:06a2eb2483f6 55 /** Process URI encoded commands
gsteiert 0:828bfd94972b 56 *
gsteiert 0:828bfd94972b 57 * @param input a pointer to the string containing the command
gsteiert 0:828bfd94972b 58 * @param output a pointer to the string to write the result
gsteiert 0:828bfd94972b 59 */
gsteiert 0:828bfd94972b 60 void call(char* input, char* output);
gsteiert 0:828bfd94972b 61
gsteiert 0:828bfd94972b 62 private:
gsteiert 0:828bfd94972b 63
switches 5:9e27e2a46fa6 64 // Types
switches 5:9e27e2a46fa6 65 typedef union {
switches 5:9e27e2a46fa6 66 struct {
switches 5:9e27e2a46fa6 67 char csPin;
switches 5:9e27e2a46fa6 68 char csPol;
switches 5:9e27e2a46fa6 69 char format;
switches 5:9e27e2a46fa6 70 char freq;
switches 5:9e27e2a46fa6 71 };
switches 5:9e27e2a46fa6 72 int merged;
switches 5:9e27e2a46fa6 73 } spiConfig_t;
switches 5:9e27e2a46fa6 74
gsteiert 0:828bfd94972b 75 // Internal Functions
gsteiert 0:828bfd94972b 76
switches 6:c9b7256c8261 77 /** Process Analog Input Command
switches 6:c9b7256c8261 78 *
switches 6:c9b7256c8261 79 * @param resp a pointer to the string to write the result
switches 6:c9b7256c8261 80 */
switches 6:c9b7256c8261 81 void fnc_ain(char* resp);
switches 6:c9b7256c8261 82
switches 5:9e27e2a46fa6 83 /** Process Digital I/O Command
switches 5:9e27e2a46fa6 84 *
switches 5:9e27e2a46fa6 85 * @param resp a pointer to the string to write the result
switches 5:9e27e2a46fa6 86 */
switches 5:9e27e2a46fa6 87 void fnc_dio(char* resp);
switches 5:9e27e2a46fa6 88
gsteiert 0:828bfd94972b 89 /** Process I2C Command
switches 5:9e27e2a46fa6 90 *
gsteiert 0:828bfd94972b 91 * @param resp a pointer to the string to write the result
gsteiert 0:828bfd94972b 92 */
gsteiert 0:828bfd94972b 93 void fnc_i2c(char* resp);
gsteiert 0:828bfd94972b 94
gsteiert 0:828bfd94972b 95 /** Process SPI Command
switches 5:9e27e2a46fa6 96 *
gsteiert 0:828bfd94972b 97 * @param resp a pointer to the string to write the result
gsteiert 0:828bfd94972b 98 */
gsteiert 0:828bfd94972b 99 void fnc_spi(char* resp);
gsteiert 0:828bfd94972b 100
gsteiert 0:828bfd94972b 101 // Internal Resources
switches 6:c9b7256c8261 102 I2C _i2c;
switches 6:c9b7256c8261 103 SPI _spi;
switches 5:9e27e2a46fa6 104 DigitalInOut *_gpio;
switches 6:c9b7256c8261 105 AnalogIn *_ain;
gsteiert 0:828bfd94972b 106
gsteiert 0:828bfd94972b 107 // Internal Buffers
switches 2:3f6a8ac111a9 108 int _args[64];
switches 5:9e27e2a46fa6 109 char _dbuf[256];
gsteiert 0:828bfd94972b 110
gsteiert 0:828bfd94972b 111 };
gsteiert 0:828bfd94972b 112
gsteiert 0:828bfd94972b 113 #endif