Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Bigcheese
Date:
Sun Mar 02 06:33:08 2014 +0000
Revision:
3:f151d08d335c
Parent:
2:1df0b61d3b5a
Bunch of stuff. Need to locally merge in updated USB changes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 /*
scachat 0:31e91bb0ef3c 2 This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
scachat 0:31e91bb0ef3c 3 Smoothie 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 3 of the License, or (at your option) any later version.
scachat 0:31e91bb0ef3c 4 Smoothie 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.
Michael J. Spencer 2:1df0b61d3b5a 5 You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
scachat 0:31e91bb0ef3c 6 */
scachat 0:31e91bb0ef3c 7
scachat 0:31e91bb0ef3c 8 #ifndef CONFIGSOURCE_H
scachat 0:31e91bb0ef3c 9 #define CONFIGSOURCE_H
scachat 0:31e91bb0ef3c 10
scachat 0:31e91bb0ef3c 11 using namespace std;
scachat 0:31e91bb0ef3c 12 #include <vector>
scachat 0:31e91bb0ef3c 13 #include <string>
scachat 0:31e91bb0ef3c 14 #include "ConfigValue.h"
scachat 0:31e91bb0ef3c 15 #include "ConfigCache.h"
scachat 0:31e91bb0ef3c 16
scachat 0:31e91bb0ef3c 17 class ConfigValue;
scachat 0:31e91bb0ef3c 18
scachat 0:31e91bb0ef3c 19 class ConfigSource {
scachat 0:31e91bb0ef3c 20 public:
scachat 0:31e91bb0ef3c 21 ConfigSource(){}
scachat 0:31e91bb0ef3c 22
scachat 0:31e91bb0ef3c 23 // Read each value, and append it as a ConfigValue to the config_cache we were passed
Michael J. Spencer 2:1df0b61d3b5a 24 virtual void transfer_values_to_cache( ConfigCache* ) = 0;
Michael J. Spencer 2:1df0b61d3b5a 25 virtual bool is_named( uint16_t check_sum ) = 0;
Michael J. Spencer 2:1df0b61d3b5a 26 virtual void write( string setting, string value ) = 0;
Michael J. Spencer 2:1df0b61d3b5a 27 virtual string read( uint16_t check_sums[3] ) = 0;
scachat 0:31e91bb0ef3c 28
scachat 0:31e91bb0ef3c 29 uint16_t name_checksum;
Michael J. Spencer 2:1df0b61d3b5a 30 protected:
Michael J. Spencer 2:1df0b61d3b5a 31 virtual string process_char_from_ascii_config(int c, ConfigCache* cache) {
Michael J. Spencer 2:1df0b61d3b5a 32 static string buffer;
Michael J. Spencer 2:1df0b61d3b5a 33 if (c == '\n' || c == EOF)
Michael J. Spencer 2:1df0b61d3b5a 34 {
Michael J. Spencer 2:1df0b61d3b5a 35 // We have a new line
Michael J. Spencer 2:1df0b61d3b5a 36 if( buffer[0] == '#' ){ buffer.clear(); return ""; } // Ignore comments
Michael J. Spencer 2:1df0b61d3b5a 37 if( buffer.length() < 3 ){ buffer.clear(); return ""; } //Ignore empty lines
Michael J. Spencer 2:1df0b61d3b5a 38 size_t begin_key = buffer.find_first_not_of(" ");
Michael J. Spencer 2:1df0b61d3b5a 39 size_t begin_value = buffer.find_first_not_of(" ", buffer.find_first_of(" ", begin_key));
Michael J. Spencer 2:1df0b61d3b5a 40
Michael J. Spencer 2:1df0b61d3b5a 41 uint16_t check_sums[3];
Michael J. Spencer 2:1df0b61d3b5a 42 get_checksums(check_sums, buffer.substr(begin_key, buffer.find_first_of(" ", begin_key) - begin_key).append(" "));
Michael J. Spencer 2:1df0b61d3b5a 43
Michael J. Spencer 2:1df0b61d3b5a 44 ConfigValue* result = new ConfigValue;
Michael J. Spencer 2:1df0b61d3b5a 45
Michael J. Spencer 2:1df0b61d3b5a 46 result->found = true;
Michael J. Spencer 2:1df0b61d3b5a 47 result->check_sums[0] = check_sums[0];
Michael J. Spencer 2:1df0b61d3b5a 48 result->check_sums[1] = check_sums[1];
Michael J. Spencer 2:1df0b61d3b5a 49 result->check_sums[2] = check_sums[2];
Michael J. Spencer 2:1df0b61d3b5a 50
Michael J. Spencer 2:1df0b61d3b5a 51 result->value = buffer.substr(begin_value, buffer.find_first_of("\r\n# ", begin_value+1)-begin_value);
Michael J. Spencer 2:1df0b61d3b5a 52 // Append the newly found value to the cache we were passed
Michael J. Spencer 2:1df0b61d3b5a 53 cache->replace_or_push_back(result);
Michael J. Spencer 2:1df0b61d3b5a 54
Michael J. Spencer 2:1df0b61d3b5a 55 buffer.clear();
Michael J. Spencer 2:1df0b61d3b5a 56
Michael J. Spencer 2:1df0b61d3b5a 57 return result->value;
Michael J. Spencer 2:1df0b61d3b5a 58 }
Michael J. Spencer 2:1df0b61d3b5a 59 else
Michael J. Spencer 2:1df0b61d3b5a 60 buffer += c;
Michael J. Spencer 2:1df0b61d3b5a 61
Michael J. Spencer 2:1df0b61d3b5a 62 return "";
Michael J. Spencer 2:1df0b61d3b5a 63 };
Michael J. Spencer 2:1df0b61d3b5a 64 virtual string process_char_from_ascii_config(int c, uint16_t line_checksums[3]) {
Michael J. Spencer 2:1df0b61d3b5a 65 static string buffer;
Michael J. Spencer 2:1df0b61d3b5a 66 string value;
Michael J. Spencer 2:1df0b61d3b5a 67 if (c == '\n' || c == EOF)
Michael J. Spencer 2:1df0b61d3b5a 68 {
Michael J. Spencer 2:1df0b61d3b5a 69 // We have a new line
Michael J. Spencer 2:1df0b61d3b5a 70 if( buffer[0] == '#' ){ buffer.clear(); return ""; } // Ignore comments
Michael J. Spencer 2:1df0b61d3b5a 71 if( buffer.length() < 3 ){ buffer.clear(); return ""; } //Ignore empty lines
Michael J. Spencer 2:1df0b61d3b5a 72 size_t begin_key = buffer.find_first_not_of(" ");
Michael J. Spencer 2:1df0b61d3b5a 73 size_t begin_value = buffer.find_first_not_of(" ", buffer.find_first_of(" ", begin_key));
Michael J. Spencer 2:1df0b61d3b5a 74
Michael J. Spencer 2:1df0b61d3b5a 75 uint16_t check_sums[3];
Michael J. Spencer 2:1df0b61d3b5a 76 get_checksums(check_sums, buffer.substr(begin_key, buffer.find_first_of(" ", begin_key) - begin_key).append(" "));
Michael J. Spencer 2:1df0b61d3b5a 77
Michael J. Spencer 2:1df0b61d3b5a 78 if(check_sums[0] == line_checksums[0] && check_sums[1] == line_checksums[1] && check_sums[2] == line_checksums[2] ){
Michael J. Spencer 2:1df0b61d3b5a 79 value = buffer.substr(begin_value, buffer.find_first_of("\r\n# ", begin_value+1)-begin_value);
Michael J. Spencer 2:1df0b61d3b5a 80 buffer.clear();
Michael J. Spencer 2:1df0b61d3b5a 81 return value;
Michael J. Spencer 2:1df0b61d3b5a 82 }
Michael J. Spencer 2:1df0b61d3b5a 83
Michael J. Spencer 2:1df0b61d3b5a 84 buffer.clear();
Michael J. Spencer 2:1df0b61d3b5a 85 }
Michael J. Spencer 2:1df0b61d3b5a 86 else
Michael J. Spencer 2:1df0b61d3b5a 87 buffer += c;
Michael J. Spencer 2:1df0b61d3b5a 88 return value;
Michael J. Spencer 2:1df0b61d3b5a 89 };
scachat 0:31e91bb0ef3c 90 };
scachat 0:31e91bb0ef3c 91
scachat 0:31e91bb0ef3c 92
scachat 0:31e91bb0ef3c 93
scachat 0:31e91bb0ef3c 94 #endif