xpl lib

Dependents:   XPL-App4_cleanup XPL-App5

xPL.h

Committer:
richnash
Date:
2018-10-09
Revision:
0:23c0d0e1c31d

File content as of revision 0:23c0d0e1c31d:

/*
 * xPL.Arduino v0.1, xPL Implementation for Arduino
 *
 * This code is parsing a xPL message stored in 'received' buffer
 * - isolate and store in 'line' buffer each part of the message -> detection of EOL character (DEC 10)
 * - analyse 'line', function of its number and store information in xpl_header memory
 * - check for each step if the message respect xPL protocol
 * - parse each command line
 *
 * Copyright (C) 2012 johan@pirlouit.ch, olivier.lebrun@gmail.com
 * Original version by Gromain59@gmail.com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

#ifndef xPL_h
#define xPL_h
 
#define ENABLE_PARSING 1

//#include "Arduino.h"
#include "mbed.h"

#include "xPL_utils.h"
#include "xPL_Message.h"

#define XPL_CMND 1
#define XPL_STAT 2
#define XPL_TRIG 3

#define XPL_DEFAULT_HEARTBEAT_INTERVAL   300

#define XPL_UDP_PORT 3865

#define XPL_PORT_L  0x19
#define XPL_PORT_H  0xF

typedef enum {XPL_ACCEPT_ALL, XPL_ACCEPT_SELF, XPL_ACCEPT_SELF_ANY} xpl_accepted_type;
// XPL_ACCEPT_ALL = all xpl messages
// XPL_ACCEPT_SELF = only for me
// XPL_ACCEPT_SELF_ANY = only for me and any (*)

typedef void (*xPLSendExternal)(char*);
typedef void (*xPLAfterParseAction)(xPL_Message * message);

class xPL
{
  public:
    xPL();
    ~xPL();

    struct_id source;  // my source
    unsigned short udp_port;    // default 3865

    xPLSendExternal SendExternal;

    void SendMessage(char *);
    void SendMessage(xPL_Message *, bool = true);

    void SetSource(const char *,const char *,const char *);  // define my source

#ifdef ENABLE_PARSING
    xPLAfterParseAction AfterParseAction;


    //byte hbeat_interval;  // default 5
    short hbeat_interval;  // default 5
    xpl_accepted_type xpl_accepted;


    void Process();
    void ParseInputMessage(char *buffer);

    bool TargetIsMe(xPL_Message * message);

    void SendHBeat();

  private:
    //void ClearData();
    unsigned long last_heartbeat;
//    void SendHBeat();
    bool CheckHBeatRequest(xPL_Message * message);

    void Parse(xPL_Message *, char *);
    //byte AnalyseHeaderLine(xPL_Message *, char *, byte );
    //byte AnalyseCommandLine(xPL_Message *, char *, byte, byte );
    short AnalyseHeaderLine(xPL_Message *, char *, short );
    short AnalyseCommandLine(xPL_Message *, char *, short, short );
#endif
};

#endif