]> AND Private Git Repository - Cipher_code.git/blob - Arduino/libraries/Firmata/FirmataParser.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
new scprng
[Cipher_code.git] / Arduino / libraries / Firmata / FirmataParser.h
1 /*
2   FirmataParser.h
3   Copyright (c) 2006-2008 Hans-Christoph Steiner.  All rights reserved.
4   Copyright (C) 2009-2016 Jeff Hoefs.  All rights reserved.
5
6   This library is free software; you can redistribute it and/or
7   modify it under the terms of the GNU Lesser General Public
8   License as published by the Free Software Foundation; either
9   version 2.1 of the License, or (at your option) any later version.
10
11   See file LICENSE.txt for further informations on licensing terms.
12 */
13
14 #ifndef FirmataParser_h
15 #define FirmataParser_h
16
17 #if defined(__cplusplus) && !defined(ARDUINO)
18   #include <cstddef>
19   #include <cstdint>
20 #else
21   #include <stddef.h>
22   #include <stdint.h>
23 #endif
24
25 namespace firmata {
26
27 class FirmataParser
28 {
29   public:
30     /* callback function types */
31     typedef void (*callbackFunction)(void * context, uint8_t command, uint16_t value);
32     typedef void (*dataBufferOverflowCallbackFunction)(void * context);
33     typedef void (*stringCallbackFunction)(void * context, const char * c_str);
34     typedef void (*sysexCallbackFunction)(void * context, uint8_t command, size_t argc, uint8_t * argv);
35     typedef void (*systemCallbackFunction)(void * context);
36     typedef void (*versionCallbackFunction)(void * context, size_t sv_major, size_t sv_minor, const char * firmware);
37
38     FirmataParser(uint8_t * dataBuffer = (uint8_t *)NULL, size_t dataBufferSize = 0);
39
40     /* serial receive handling */
41     void parse(uint8_t value);
42     bool isParsingMessage(void) const;
43     int setDataBufferOfSize(uint8_t * dataBuffer, size_t dataBufferSize);
44
45     /* attach & detach callback functions to messages */
46     void attach(uint8_t command, callbackFunction newFunction, void * context = NULL);
47     void attach(dataBufferOverflowCallbackFunction newFunction, void * context = NULL);
48     void attach(uint8_t command, stringCallbackFunction newFunction, void * context = NULL);
49     void attach(uint8_t command, sysexCallbackFunction newFunction, void * context = NULL);
50     void attach(uint8_t command, systemCallbackFunction newFunction, void * context = NULL);
51     void attach(uint8_t command, versionCallbackFunction newFunction, void * context = NULL);
52     void detach(uint8_t command);
53     void detach(dataBufferOverflowCallbackFunction);
54
55   private:
56     /* input message handling */
57     bool allowBufferUpdate;
58     uint8_t * dataBuffer; // multi-byte data
59     size_t dataBufferSize;
60     uint8_t executeMultiByteCommand; // execute this after getting multi-byte data
61     uint8_t multiByteChannel; // channel data for multiByteCommands
62     size_t waitForData; // this flag says the next serial input will be data
63
64     /* sysex */
65     bool parsingSysex;
66     size_t sysexBytesRead;
67
68     /* callback context */
69     void * currentAnalogCallbackContext;
70     void * currentDigitalCallbackContext;
71     void * currentReportAnalogCallbackContext;
72     void * currentReportDigitalCallbackContext;
73     void * currentPinModeCallbackContext;
74     void * currentPinValueCallbackContext;
75     void * currentReportFirmwareCallbackContext;
76     void * currentReportVersionCallbackContext;
77     void * currentDataBufferOverflowCallbackContext;
78     void * currentStringCallbackContext;
79     void * currentSysexCallbackContext;
80     void * currentSystemResetCallbackContext;
81
82     /* callback functions */
83     callbackFunction currentAnalogCallback;
84     callbackFunction currentDigitalCallback;
85     callbackFunction currentReportAnalogCallback;
86     callbackFunction currentReportDigitalCallback;
87     callbackFunction currentPinModeCallback;
88     callbackFunction currentPinValueCallback;
89     dataBufferOverflowCallbackFunction currentDataBufferOverflowCallback;
90     stringCallbackFunction currentStringCallback;
91     sysexCallbackFunction currentSysexCallback;
92     versionCallbackFunction currentReportFirmwareCallback;
93     systemCallbackFunction currentReportVersionCallback;
94     systemCallbackFunction currentSystemResetCallback;
95
96     /* private methods ------------------------------ */
97     bool bufferDataAtPosition(const uint8_t data, const size_t pos);
98     size_t decodeByteStream(size_t bytec, uint8_t * bytev);
99     void processSysexMessage(void);
100     void systemReset(void);
101 };
102
103 } // firmata
104
105 #endif /* FirmataParser_h */