xpl lib
Dependents: XPL-App4_cleanup XPL-App5
xPL.h@0:23c0d0e1c31d, 2018-10-09 (annotated)
- Committer:
- richnash
- Date:
- Tue Oct 09 17:37:05 2018 +0000
- Revision:
- 0:23c0d0e1c31d
ready to move to cli to explore D11 pin fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
richnash | 0:23c0d0e1c31d | 1 | /* |
richnash | 0:23c0d0e1c31d | 2 | * xPL.Arduino v0.1, xPL Implementation for Arduino |
richnash | 0:23c0d0e1c31d | 3 | * |
richnash | 0:23c0d0e1c31d | 4 | * This code is parsing a xPL message stored in 'received' buffer |
richnash | 0:23c0d0e1c31d | 5 | * - isolate and store in 'line' buffer each part of the message -> detection of EOL character (DEC 10) |
richnash | 0:23c0d0e1c31d | 6 | * - analyse 'line', function of its number and store information in xpl_header memory |
richnash | 0:23c0d0e1c31d | 7 | * - check for each step if the message respect xPL protocol |
richnash | 0:23c0d0e1c31d | 8 | * - parse each command line |
richnash | 0:23c0d0e1c31d | 9 | * |
richnash | 0:23c0d0e1c31d | 10 | * Copyright (C) 2012 johan@pirlouit.ch, olivier.lebrun@gmail.com |
richnash | 0:23c0d0e1c31d | 11 | * Original version by Gromain59@gmail.com |
richnash | 0:23c0d0e1c31d | 12 | * |
richnash | 0:23c0d0e1c31d | 13 | * This program is free software; you can redistribute it and/or |
richnash | 0:23c0d0e1c31d | 14 | * modify it under the terms of the GNU General Public License |
richnash | 0:23c0d0e1c31d | 15 | * as published by the Free Software Foundation; either version 2 |
richnash | 0:23c0d0e1c31d | 16 | * of the License, or (at your option) any later version. |
richnash | 0:23c0d0e1c31d | 17 | * |
richnash | 0:23c0d0e1c31d | 18 | * This program is distributed in the hope that it will be useful, |
richnash | 0:23c0d0e1c31d | 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
richnash | 0:23c0d0e1c31d | 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
richnash | 0:23c0d0e1c31d | 21 | * GNU General Public License for more details. |
richnash | 0:23c0d0e1c31d | 22 | * |
richnash | 0:23c0d0e1c31d | 23 | * You should have received a copy of the GNU General Public License |
richnash | 0:23c0d0e1c31d | 24 | * along with this program; if not, write to the Free Software |
richnash | 0:23c0d0e1c31d | 25 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
richnash | 0:23c0d0e1c31d | 26 | */ |
richnash | 0:23c0d0e1c31d | 27 | |
richnash | 0:23c0d0e1c31d | 28 | #ifndef xPL_h |
richnash | 0:23c0d0e1c31d | 29 | #define xPL_h |
richnash | 0:23c0d0e1c31d | 30 | |
richnash | 0:23c0d0e1c31d | 31 | #define ENABLE_PARSING 1 |
richnash | 0:23c0d0e1c31d | 32 | |
richnash | 0:23c0d0e1c31d | 33 | //#include "Arduino.h" |
richnash | 0:23c0d0e1c31d | 34 | #include "mbed.h" |
richnash | 0:23c0d0e1c31d | 35 | |
richnash | 0:23c0d0e1c31d | 36 | #include "xPL_utils.h" |
richnash | 0:23c0d0e1c31d | 37 | #include "xPL_Message.h" |
richnash | 0:23c0d0e1c31d | 38 | |
richnash | 0:23c0d0e1c31d | 39 | #define XPL_CMND 1 |
richnash | 0:23c0d0e1c31d | 40 | #define XPL_STAT 2 |
richnash | 0:23c0d0e1c31d | 41 | #define XPL_TRIG 3 |
richnash | 0:23c0d0e1c31d | 42 | |
richnash | 0:23c0d0e1c31d | 43 | #define XPL_DEFAULT_HEARTBEAT_INTERVAL 300 |
richnash | 0:23c0d0e1c31d | 44 | |
richnash | 0:23c0d0e1c31d | 45 | #define XPL_UDP_PORT 3865 |
richnash | 0:23c0d0e1c31d | 46 | |
richnash | 0:23c0d0e1c31d | 47 | #define XPL_PORT_L 0x19 |
richnash | 0:23c0d0e1c31d | 48 | #define XPL_PORT_H 0xF |
richnash | 0:23c0d0e1c31d | 49 | |
richnash | 0:23c0d0e1c31d | 50 | typedef enum {XPL_ACCEPT_ALL, XPL_ACCEPT_SELF, XPL_ACCEPT_SELF_ANY} xpl_accepted_type; |
richnash | 0:23c0d0e1c31d | 51 | // XPL_ACCEPT_ALL = all xpl messages |
richnash | 0:23c0d0e1c31d | 52 | // XPL_ACCEPT_SELF = only for me |
richnash | 0:23c0d0e1c31d | 53 | // XPL_ACCEPT_SELF_ANY = only for me and any (*) |
richnash | 0:23c0d0e1c31d | 54 | |
richnash | 0:23c0d0e1c31d | 55 | typedef void (*xPLSendExternal)(char*); |
richnash | 0:23c0d0e1c31d | 56 | typedef void (*xPLAfterParseAction)(xPL_Message * message); |
richnash | 0:23c0d0e1c31d | 57 | |
richnash | 0:23c0d0e1c31d | 58 | class xPL |
richnash | 0:23c0d0e1c31d | 59 | { |
richnash | 0:23c0d0e1c31d | 60 | public: |
richnash | 0:23c0d0e1c31d | 61 | xPL(); |
richnash | 0:23c0d0e1c31d | 62 | ~xPL(); |
richnash | 0:23c0d0e1c31d | 63 | |
richnash | 0:23c0d0e1c31d | 64 | struct_id source; // my source |
richnash | 0:23c0d0e1c31d | 65 | unsigned short udp_port; // default 3865 |
richnash | 0:23c0d0e1c31d | 66 | |
richnash | 0:23c0d0e1c31d | 67 | xPLSendExternal SendExternal; |
richnash | 0:23c0d0e1c31d | 68 | |
richnash | 0:23c0d0e1c31d | 69 | void SendMessage(char *); |
richnash | 0:23c0d0e1c31d | 70 | void SendMessage(xPL_Message *, bool = true); |
richnash | 0:23c0d0e1c31d | 71 | |
richnash | 0:23c0d0e1c31d | 72 | void SetSource(const char *,const char *,const char *); // define my source |
richnash | 0:23c0d0e1c31d | 73 | |
richnash | 0:23c0d0e1c31d | 74 | #ifdef ENABLE_PARSING |
richnash | 0:23c0d0e1c31d | 75 | xPLAfterParseAction AfterParseAction; |
richnash | 0:23c0d0e1c31d | 76 | |
richnash | 0:23c0d0e1c31d | 77 | |
richnash | 0:23c0d0e1c31d | 78 | //byte hbeat_interval; // default 5 |
richnash | 0:23c0d0e1c31d | 79 | short hbeat_interval; // default 5 |
richnash | 0:23c0d0e1c31d | 80 | xpl_accepted_type xpl_accepted; |
richnash | 0:23c0d0e1c31d | 81 | |
richnash | 0:23c0d0e1c31d | 82 | |
richnash | 0:23c0d0e1c31d | 83 | void Process(); |
richnash | 0:23c0d0e1c31d | 84 | void ParseInputMessage(char *buffer); |
richnash | 0:23c0d0e1c31d | 85 | |
richnash | 0:23c0d0e1c31d | 86 | bool TargetIsMe(xPL_Message * message); |
richnash | 0:23c0d0e1c31d | 87 | |
richnash | 0:23c0d0e1c31d | 88 | void SendHBeat(); |
richnash | 0:23c0d0e1c31d | 89 | |
richnash | 0:23c0d0e1c31d | 90 | private: |
richnash | 0:23c0d0e1c31d | 91 | //void ClearData(); |
richnash | 0:23c0d0e1c31d | 92 | unsigned long last_heartbeat; |
richnash | 0:23c0d0e1c31d | 93 | // void SendHBeat(); |
richnash | 0:23c0d0e1c31d | 94 | bool CheckHBeatRequest(xPL_Message * message); |
richnash | 0:23c0d0e1c31d | 95 | |
richnash | 0:23c0d0e1c31d | 96 | void Parse(xPL_Message *, char *); |
richnash | 0:23c0d0e1c31d | 97 | //byte AnalyseHeaderLine(xPL_Message *, char *, byte ); |
richnash | 0:23c0d0e1c31d | 98 | //byte AnalyseCommandLine(xPL_Message *, char *, byte, byte ); |
richnash | 0:23c0d0e1c31d | 99 | short AnalyseHeaderLine(xPL_Message *, char *, short ); |
richnash | 0:23c0d0e1c31d | 100 | short AnalyseCommandLine(xPL_Message *, char *, short, short ); |
richnash | 0:23c0d0e1c31d | 101 | #endif |
richnash | 0:23c0d0e1c31d | 102 | }; |
richnash | 0:23c0d0e1c31d | 103 | |
richnash | 0:23c0d0e1c31d | 104 | #endif |