update firmware.bin
[clinton/Smoothieware.git] / src / libs / ConfigSources / FirmConfigSource.cpp
1 /*
2 This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
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.
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.
5 You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
6 */
7
8 #include "libs/Kernel.h"
9 #include "ConfigValue.h"
10 #include "FirmConfigSource.h"
11 #include "ConfigCache.h"
12 #include <malloc.h>
13 #include "utils.h"
14
15 using namespace std;
16 #include <string>
17
18 // we use objdump in the Makefile to import your config.default file into the compiled code
19 // Since the two symbols below are derived from the filename, we need to change them if the filename changes
20 extern char _binary_config_default_start;
21 extern char _binary_config_default_end;
22
23
24 FirmConfigSource::FirmConfigSource(const char* name){
25 this->name_checksum = get_checksum(name);
26 }
27
28 // Transfer all values found in the file to the passed cache
29 void FirmConfigSource::transfer_values_to_cache( ConfigCache* cache ){
30
31 char* p = &_binary_config_default_start;
32 // For each line
33 while( p < &_binary_config_default_end ){
34 // find eol
35 char *eol= p;
36 while(eol < &_binary_config_default_end) {
37 if(*eol++ == '\n') break;
38 }
39 string line(p, eol-p);
40 //printf("firm: processing %s\n", line.c_str());
41 p= eol;
42 process_line_from_ascii_config(line, cache);
43 }
44 }
45
46 // Return true if the check_sums match
47 bool FirmConfigSource::is_named( uint16_t check_sum ){
48 return check_sum == this->name_checksum;
49 }
50
51 // Write a config setting to the file *** FirmConfigSource is read only ***
52 bool FirmConfigSource::write( string setting, string value ){
53 //THEKERNEL->streams->printf("ERROR: FirmConfigSource is read only\r\n");
54 return false;
55 }
56
57 // Return the value for a specific checksum
58 string FirmConfigSource::read( uint16_t check_sums[3] ){
59
60 string value = "";
61
62 char* p = &_binary_config_default_start;
63 // For each line
64 while( p < &_binary_config_default_end ){
65 // find eol
66 char *eol= p;
67 while(eol < &_binary_config_default_end) {
68 if(*eol++ == '\n') break;
69 }
70 string line(p, eol-p);
71 p= eol;
72 value = process_line_from_ascii_config(line, check_sums);
73 if(!value.empty()) return value;
74 }
75
76 return value;
77 }
78