SerialFlow allows to send and receive packaged arrays of integer values via serial port.

SerialFlow allows to send and receive packaged arrays of integer(short only) values via serial port.

Packet format:

  1. begin - 0x12
  2. end - 0x13
  3. value separator - 0x10
  4. escape - 0x7D

Simple packet example:
0x12,0x1,0x0,0x10,0x7D,0x12,0x0,0x13
corresponds to: [1,18]

Now handles only short int values. Example:

#include "mbed.h"
#include "SerialFlow.h"
SerialFlow pc(USBTX, USBRX);
AnalogIn gyro_x(p17); // data from gyro x axis
AnalogIn gyro_y(p18); // data from gyro y axis

int main(){
    // two short values
    pc.setPacketFormat(SerialFlow::COMPLEX_1, 2, 2);
    while(1){
        pc.setPacketValue((short)(gyro_x*1023.0));
        pc.setPacketValue((short)(gyro_y*1023.0));
        pc.sendPacket();
        wait(0.01);
    }
}

On the PC side you can use this program to catch data flows: http://www.poprobot.ru/files/sfmonitor_0.9.zip

Committer:
Decimus
Date:
Sun Oct 21 17:40:25 2012 +0000
Revision:
4:ebf658b28c5f
Parent:
3:7cbfd422c98e
USE_MODSERIAL flag is on by default

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Decimus 1:5f80d8d44549 1 /* mbed Serial Flow Library
Decimus 1:5f80d8d44549 2 * Copyright (c) 2012 Oleg Evsegneev
Decimus 3:7cbfd422c98e 3 * Released under the MIT License: http://mbed.org/license/mit
Decimus 1:5f80d8d44549 4 */
Decimus 1:5f80d8d44549 5
Decimus 1:5f80d8d44549 6 #ifndef MBED_SERIALFLOW_H
Decimus 1:5f80d8d44549 7 #define MBED_SERIALFLOW_H
Decimus 3:7cbfd422c98e 8
Decimus 3:7cbfd422c98e 9 // optional use of MODSERIAL
Decimus 4:ebf658b28c5f 10 #define USE_MODSERIAL
Decimus 3:7cbfd422c98e 11
Decimus 1:5f80d8d44549 12 #include "mbed.h"
Decimus 1:5f80d8d44549 13
Decimus 3:7cbfd422c98e 14 #ifdef USE_MODSERIAL
Decimus 3:7cbfd422c98e 15 #include "MODSERIAL.h"
Decimus 3:7cbfd422c98e 16 #endif
Decimus 3:7cbfd422c98e 17
Decimus 3:7cbfd422c98e 18 #define MAX_PACKET_SIZE 10
Decimus 3:7cbfd422c98e 19 #define RX_BUFFER_SIZE 32
Decimus 3:7cbfd422c98e 20 #define TX_BUFFER_SIZE 32
Decimus 1:5f80d8d44549 21
Decimus 1:5f80d8d44549 22 class SerialFlow {
Decimus 1:5f80d8d44549 23
Decimus 1:5f80d8d44549 24 public:
Decimus 1:5f80d8d44549 25 /** Data format */
Decimus 1:5f80d8d44549 26 enum DataFormat {
Decimus 1:5f80d8d44549 27 SIMPLE /**< Simple one byte (default) */
Decimus 3:7cbfd422c98e 28 , COMPLEX /**< Packet of many short values */
Decimus 1:5f80d8d44549 29 };
Decimus 1:5f80d8d44549 30
Decimus 1:5f80d8d44549 31 SerialFlow(PinName tx, PinName rx);
Decimus 1:5f80d8d44549 32
Decimus 3:7cbfd422c98e 33 /** Set portal baud rate
Decimus 2:7868220b4fdf 34 *
Decimus 2:7868220b4fdf 35 * @param baud_rate Port baud rate.
Decimus 2:7868220b4fdf 36 */
Decimus 2:7868220b4fdf 37 void baud(int baud_rate);
Decimus 2:7868220b4fdf 38
Decimus 1:5f80d8d44549 39 /** Set data packet format
Decimus 1:5f80d8d44549 40 *
Decimus 1:5f80d8d44549 41 * @param p_format Format type constant.
Decimus 1:5f80d8d44549 42 * @param v_length Length of value in bytes.
Decimus 1:5f80d8d44549 43 * @param p_size Number of values.
Decimus 1:5f80d8d44549 44 */
Decimus 1:5f80d8d44549 45 void setPacketFormat(DataFormat p_format, char v_length, char p_size);
Decimus 1:5f80d8d44549 46
Decimus 1:5f80d8d44549 47 /** Set value to data packet
Decimus 1:5f80d8d44549 48 *
Decimus 1:5f80d8d44549 49 * @param value Value.
Decimus 1:5f80d8d44549 50 */
Decimus 1:5f80d8d44549 51 void setPacketValue(short value);
Decimus 1:5f80d8d44549 52
Decimus 1:5f80d8d44549 53 /** Send packet to serial port
Decimus 1:5f80d8d44549 54 */
Decimus 3:7cbfd422c98e 55 bool sendPacket();
Decimus 1:5f80d8d44549 56
Decimus 1:5f80d8d44549 57 /** Receive packet from serial port
Decimus 1:5f80d8d44549 58 */
Decimus 1:5f80d8d44549 59 bool receivePacket();
Decimus 1:5f80d8d44549 60
Decimus 1:5f80d8d44549 61 /** Get received packet
Decimus 1:5f80d8d44549 62 * @param idx Index of value from packet.
Decimus 1:5f80d8d44549 63 */
Decimus 1:5f80d8d44549 64 short getPacket( char idx );
Decimus 1:5f80d8d44549 65
Decimus 1:5f80d8d44549 66 protected:
Decimus 3:7cbfd422c98e 67 #ifdef USE_MODSERIAL
Decimus 3:7cbfd422c98e 68 MODSERIAL _serial;
Decimus 3:7cbfd422c98e 69 #else
Decimus 1:5f80d8d44549 70 Serial _serial;
Decimus 3:7cbfd422c98e 71 #endif
Decimus 3:7cbfd422c98e 72
Decimus 1:5f80d8d44549 73 char _p_format;
Decimus 1:5f80d8d44549 74 char _p_size;
Decimus 1:5f80d8d44549 75 char _v_length;
Decimus 1:5f80d8d44549 76
Decimus 1:5f80d8d44549 77 short _vs[MAX_PACKET_SIZE];
Decimus 1:5f80d8d44549 78 char _vs_idx;
Decimus 1:5f80d8d44549 79
Decimus 1:5f80d8d44549 80 short _vr[MAX_PACKET_SIZE];
Decimus 1:5f80d8d44549 81 char _vr_val[2];
Decimus 1:5f80d8d44549 82 char _vr_idx;
Decimus 1:5f80d8d44549 83 char _cr_idx;
Decimus 1:5f80d8d44549 84 bool _escape;
Decimus 1:5f80d8d44549 85 bool _collecting;
Decimus 1:5f80d8d44549 86 };
Decimus 1:5f80d8d44549 87
Decimus 1:5f80d8d44549 88 #endif