Skip to content

Commit cc62047

Browse files
committed
chore: move strings to PROGMEM
1 parent fff7740 commit cc62047

14 files changed

+1152
-349
lines changed

Diff for: src/note-c/n_b64.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,13 @@
7979
* Base64 encoder/decoder. Originally Apache file ap_base64.c
8080
*/
8181

82+
#include <avr/pgmspace.h>
8283
#include <string.h>
84+
8385
#include "n_lib.h"
8486

8587
/* aaaack but it's fast and const should make it shared text page. */
86-
static const unsigned char pr2six[256] = {
88+
static const unsigned char pr2six[256] PROGMEM = {
8789
/* ASCII table */
8890
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
8991
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
@@ -163,7 +165,7 @@ int JB64Decode(char *bufplain, const char *bufcoded)
163165
return nbytesdecoded;
164166
}
165167

166-
static const char basis_64[] =
168+
static const char basis_64[] PROGMEM =
167169
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
168170

169171
int JB64EncodeLen(int len)

Diff for: src/note-c/n_cjson.c

+10-10
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ static unsigned char* Jstrdup(const unsigned char* string)
144144
return NULL;
145145
}
146146

147-
length = strlen((const char*)string) + sizeof("");
147+
length = strlen((const char*)string) + 1;
148148
copy = (unsigned char*)_Malloc(length);
149149
if (copy == NULL) {
150150
return NULL;
@@ -412,18 +412,18 @@ static Jbool print_number(const J * const item, printbuffer * const output_buffe
412412
/* This checks for NaN and Infinity */
413413
if ((d * 0) != 0) {
414414
char *nbuf = (char *) number_buffer;
415-
strcpy(nbuf, "null");
415+
strcpy(nbuf, c_null);
416416
length = strlen(nbuf);
417417
} else {
418418
#if !MINIMIZE_CLIB_DEPENDENCIES
419419
JNUMBER test;
420420
/* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
421-
length = sprintf((char*)number_buffer, "%1.15g", d);
421+
length = sprintf((char*)number_buffer, c_fmt_1_15g, d);
422422

423423
/* Check whether the original double can be recovered */
424-
if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || ((JNUMBER)test != d)) {
424+
if ((sscanf((char*)number_buffer, c_fmt_lg, &test) != 1) || ((JNUMBER)test != d)) {
425425
/* If not, print with 17 decimal places of precision */
426-
length = sprintf((char*)number_buffer, "%1.17g", d);
426+
length = sprintf((char*)number_buffer, c_fmt_1_17g, d);
427427
}
428428
#else
429429
char *nbuf = (char *) number_buffer;
@@ -438,7 +438,7 @@ static Jbool print_number(const J * const item, printbuffer * const output_buffe
438438
}
439439

440440
/* reserve appropriate space in the output */
441-
output_pointer = ensure(output_buffer, (size_t)length + sizeof(""));
441+
output_pointer = ensure(output_buffer, (size_t)length + 1);
442442
if (output_pointer == NULL) {
443443
return false;
444444
}
@@ -870,7 +870,7 @@ static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
870870
return NULL;
871871
}
872872

873-
if (can_access_at_index(buffer, 4) && (strncmp((const char*)buffer_at_offset(buffer), "\xEF\xBB\xBF", 3) == 0)) {
873+
if (can_access_at_index(buffer, 4) && (strncmp((const char*)buffer_at_offset(buffer), c_utf8_bom, 3) == 0)) {
874874
buffer->offset += 3;
875875
}
876876

@@ -1003,15 +1003,15 @@ static unsigned char *print(const J * const item, Jbool format)
10031003
N_CJSON_PUBLIC(char *) JPrint(const J *item)
10041004
{
10051005
if (item == NULL) {
1006-
return (char *)"";
1006+
return (char *)c_nullstring;
10071007
}
10081008
return (char*)print(item, true);
10091009
}
10101010

10111011
N_CJSON_PUBLIC(char *) JPrintUnformatted(const J *item)
10121012
{
10131013
if (item == NULL) {
1014-
return (char *)"";
1014+
return (char *)c_nullstring;
10151015
}
10161016
return (char*)print(item, false);
10171017
}
@@ -1021,7 +1021,7 @@ N_CJSON_PUBLIC(char *) JPrintBuffered(const J *item, int prebuffer, Jbool fmt)
10211021
printbuffer p = { 0, 0, 0, 0, 0, 0 };
10221022

10231023
if (item == NULL) {
1024-
return (char *)"";
1024+
return (char *)c_nullstring;
10251025
}
10261026

10271027
if (prebuffer < 0) {

Diff for: src/note-c/n_cjson_helpers.c

+10-10
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ bool JBoolValue(J *item)
106106
char *JStringValue(J *item)
107107
{
108108
if (item == NULL) {
109-
return (char *)"";
109+
return (char *)c_nullstring;
110110
}
111111
return item->valuestring;
112112
}
@@ -392,7 +392,7 @@ bool JGetBinaryFromObject(J *rsp, const char *fieldName, uint8_t **retBinaryData
392392
const char *JGetItemName(const J * item)
393393
{
394394
if (item == NULL || item->string == NULL) {
395-
return "";
395+
return c_nullstring;
396396
}
397397
return item->string;
398398
}
@@ -494,25 +494,25 @@ char *JAllocString(uint8_t *buffer, uint32_t len)
494494
const char *JType(J *item)
495495
{
496496
if (item == NULL) {
497-
return "";
497+
return c_nullstring;
498498
}
499499
switch (item->type & 0xff) {
500500
case JTrue:
501501
case JFalse:
502-
return "bool";
502+
return c_bool;
503503
case JNULL:
504-
return "null";
504+
return c_null;
505505
case JNumber:
506-
return "number";
506+
return c_number;
507507
case JRaw:
508508
case JString:
509-
return "string";
509+
return c_string;
510510
case JObject:
511-
return "object";
511+
return c_object;
512512
case JArray:
513-
return "array";
513+
return c_array;
514514
}
515-
return "invalid";
515+
return c_invalid;
516516
}
517517

518518
//**************************************************************************/

Diff for: src/note-c/n_const.c

+211-13
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,216 @@
1111
*
1212
*/
1313

14+
#include <avr/pgmspace.h>
15+
1416
#include "n_lib.h"
1517

16-
const char *c_null = "null";
17-
const char *c_false = "false";
18-
const char *c_true = "true";
19-
const char *c_nullstring = "";
20-
const char *c_newline = "\r\n";
21-
const char *c_mem = "mem";
22-
const char *c_iotimeout = "timeout {io}";
23-
const char *c_err = "err";
24-
const char *c_req = "req";
25-
const char *c_cmd = "cmd";
26-
const char *c_bad = "bad";
27-
const char *c_iobad = "bad {io}";
28-
const char *c_ioerr = "{io}";
18+
const char c_agent[] PROGMEM = "agent";
19+
const char c_align[] PROGMEM = "align";
20+
const char c_arch_arc32[] PROGMEM = "arc32";
21+
const char c_arch_avr[] PROGMEM = "avr";
22+
const char c_arch_esp32[] PROGMEM = "esp32";
23+
const char c_arch_esp8266[] PROGMEM = "esp8266";
24+
const char c_arch_megaavr[] PROGMEM = "megaavr";
25+
const char c_arch_nrf52840[] PROGMEM = "nrf52840";
26+
const char c_arch_nrf52[] PROGMEM = "nrf52";
27+
const char c_arch_nrf51[] PROGMEM = "nrf51";
28+
const char c_arch_pic32[] PROGMEM = "pic32";
29+
const char c_arch_sam[] PROGMEM = "sam";
30+
const char c_arch_samd[] PROGMEM = "samd";
31+
const char c_arch_spresence[] PROGMEM = "spresence";
32+
const char c_arch_stm32[] PROGMEM = "stm32";
33+
const char c_arch_stm32f0[] PROGMEM = "stm32f0";
34+
const char c_arch_stm32f1[] PROGMEM = "stm32f1";
35+
const char c_arch_stm32f4[] PROGMEM = "stm32f4";
36+
const char c_arch_stm32g0[] PROGMEM = "stm32g0";
37+
const char c_arch_stm32l4[] PROGMEM = "stm32l4";
38+
const char c_arch_stm32u5[] PROGMEM = "stm32u5";
39+
const char c_arch_swan_r5[] PROGMEM = "swan_r5";
40+
const char c_area[] PROGMEM = "area";
41+
const char c_array[] PROGMEM = "array";
42+
const char c_asterisk[] PROGMEM = "*";
43+
const char c_bad[] PROGMEM = "bad";
44+
const char c_bearing[] PROGMEM = "bearing";
45+
const char c_began_loc_dop[] PROGMEM = "began_loc_dop";
46+
const char c_began_loc_lat[] PROGMEM = "began_loc_lat";
47+
const char c_began_loc_lon[] PROGMEM = "began_loc_lon";
48+
const char c_began_loc_when[] PROGMEM = "began_loc_when";
49+
const char c_began_motion_when[] PROGMEM = "began_motion_when";
50+
const char c_began_when[] PROGMEM = "began_when";
51+
const char c_body[] PROGMEM = "body";
52+
const char c_bool[] PROGMEM = "bool";
53+
const char c_card_attn[] PROGMEM = "card.attn";
54+
const char c_card_contact[] PROGMEM = "card.contact";
55+
const char c_card_location[] PROGMEM = "card.location";
56+
const char c_card_location_mode[] PROGMEM = "card.location.mode";
57+
const char c_card_log[] PROGMEM = "card.log";
58+
const char c_card_restore[] PROGMEM = "card.restore";
59+
const char c_card_status[] PROGMEM = "card.status";
60+
const char c_card_temp[] PROGMEM = "card.temp";
61+
const char c_card_time[] PROGMEM = "card.time";
62+
const char c_card_version[] PROGMEM = "card.version";
63+
const char c_card_voltage[] PROGMEM = "card.voltage";
64+
const char c_charging[] PROGMEM = "charging";
65+
const char c_cmd[] PROGMEM = "cmd";
66+
const char c_colon[] PROGMEM = ":";
67+
const char c_compiler[] PROGMEM = "compiler";
68+
const char c_comma[] PROGMEM = ",";
69+
const char c_connected[] PROGMEM = "connected";
70+
const char c_country[] PROGMEM = "country";
71+
const char c_cpu_cores[] PROGMEM = "cpu_cores";
72+
const char c_cpu_mem[] PROGMEM = "cpu_mem";
73+
const char c_cpu_mhz[] PROGMEM = "cpu_mhz";
74+
const char c_cpu_name[] PROGMEM = "cpu_name";
75+
const char c_cpu_vendor[] PROGMEM = "cpu_vendor";
76+
const char c_curly_brace_close[] PROGMEM = "}";
77+
const char c_curly_brace_open[] PROGMEM = "{";
78+
const char c_dbg_msg_about_to_sleep[] PROGMEM = "ABOUT TO SLEEP\n";
79+
const char c_dbg_msg_awakened_successfully[] PROGMEM = "AWAKENED SUCCESSFULLY\n";
80+
const char c_dbg_msg_cannot_convert_to_json[] PROGMEM = "can't convert to JSON";
81+
const char c_dbg_msg_card_restored[] PROGMEM = "CARD RESTORED\n";
82+
const char c_dbg_msg_did_not_sleep[] PROGMEM = "DIDN'T SLEEP\n";
83+
const char c_dbg_msg_i2c_not_active[] PROGMEM = "i2c not active";
84+
const char c_dbg_msg_i2c_or_serial_interface_must_be_selected[] PROGMEM = "i2c or serial interface must be selected";
85+
const char c_dbg_msg_i2c_receive_error[] PROGMEM = "i2c receive error\n";
86+
const char c_dbg_msg_i2c_transmit[] PROGMEM = "i2c transmit";
87+
const char c_dbg_msg_insufficient_memory[] PROGMEM = "insufficient memory";
88+
const char c_dbg_msg_invalid_data_received_on_serial_port_from_notecard[] PROGMEM = "invalid data received on serial port from notecard\n";
89+
const char c_dbg_msg_invalid_json[] PROGMEM = "invalid JSON: ";
90+
const char c_dbg_msg_io_bad[] PROGMEM = "bad {io}";
91+
const char c_dbg_msg_io_err[] PROGMEM = "{io}";
92+
const char c_dbg_msg_io_serial_communications_error[] PROGMEM = "serial communications error {io}";
93+
const char c_dbg_msg_io_timeout[] PROGMEM = "timeout {io}";
94+
const char c_dbg_msg_io_transaction_incomplete[] PROGMEM = "transaction incomplete {io}";
95+
const char c_dbg_msg_io_transaction_timeout[] PROGMEM = "transaction timeout {io}";
96+
const char c_dbg_msg_io_unrecognized_response_from_card[] PROGMEM = "unrecognized response from card {io}";
97+
const char c_dbg_msg_no_notecard[] PROGMEM = "no notecard\n";
98+
const char c_dbg_msg_notecard_not_responding[] PROGMEM = "notecard not responding\n";
99+
const char c_dbg_msg_received_only_partial_reply_after_timeout[] PROGMEM = "received only partial reply after timeout:\n";
100+
const char c_dbg_msg_reply_to_request_did_not_arrive_from_module_in_time[] PROGMEM = "reply to request didn't arrive from module in time\n";
101+
const char c_dbg_msg_request_or_response_was_lost[] PROGMEM = "request or response was lost {io}";
102+
const char c_dbg_msg_requesting_sleep[] PROGMEM = "requesting sleep\n";
103+
const char c_dbg_msg_transaction_jsonbuf_malloc_failed[] PROGMEM = "transaction: jsonbuf malloc failed\n";
104+
const char c_dbg_msg_unrecognized_data_from_notecard[] PROGMEM = "unrecognized data from notecard\n";
105+
const char c_delete[] PROGMEM = "delete";
106+
const char c_device[] PROGMEM = "device";
107+
const char c_distance[] PROGMEM = "distance";
108+
const char c_dop[] PROGMEM = "dop";
109+
const char c_edge_notefile[] PROGMEM = "_edge.qi";
110+
const char c_email[] PROGMEM = "email";
111+
const char c_ended_loc_dop[] PROGMEM = "ended_loc_dop";
112+
const char c_ended_loc_lat[] PROGMEM = "ended_loc_lat";
113+
const char c_ended_loc_lon[] PROGMEM = "ended_loc_lon";
114+
const char c_ended_loc_when[] PROGMEM = "ended_loc_when";
115+
const char c_ended_motion_when[] PROGMEM = "ended_motion_when";
116+
const char c_ended_when[] PROGMEM = "ended_when";
117+
const char c_env_default[] PROGMEM = "env.default";
118+
const char c_env_get[] PROGMEM = "env.get";
119+
const char c_err[] PROGMEM = "err";
120+
const char c_FAIL[] PROGMEM = "FAIL";
121+
const char c_false[] PROGMEM = "false";
122+
const char c_file[] PROGMEM = "file";
123+
const char c_fixed[] PROGMEM = "fixed";
124+
const char c_fmt_1_15g[] PROGMEM = "%1.15g";
125+
const char c_fmt_1_17g[] PROGMEM = "%1.17g";
126+
const char c_fmt_lg[] PROGMEM = "%lg";
127+
const char c_free[] PROGMEM = "free";
128+
const char c_heartbeat[] PROGMEM = "heartbeat";
129+
const char c_HEX[] PROGMEM = "0123456789ABCDEF";
130+
const char c_hex[] PROGMEM = "0123456789abcdef";
131+
const char c_host[] PROGMEM = "host";
132+
const char c_hub_get[] PROGMEM = "hub.get";
133+
const char c_hub_set[] PROGMEM = "hub.set";
134+
const char c_hub_status[] PROGMEM = "hub.status";
135+
const char c_humidity[] PROGMEM = "humidity";
136+
const char c_hyphen[] PROGMEM = "-";
137+
const char c_i2c[] PROGMEM = "i2c";
138+
const char c_inbound[] PROGMEM = "inbound";
139+
const char c_INF[] PROGMEM = "INF";
140+
const char c_inf[] PROGMEM = "inf";
141+
const char c_invalid[] PROGMEM = "invalid";
142+
const char c_jcount[] PROGMEM = "jcount";
143+
const char c_journey[] PROGMEM = "journey";
144+
const char c_lat[] PROGMEM = "lat";
145+
const char c_level[] PROGMEM = "level";
146+
const char c_loc_lat[] PROGMEM = "loc_lat";
147+
const char c_loc_lon[] PROGMEM = "loc_lon";
148+
const char c_log[] PROGMEM = "log";
149+
const char c_lon[] PROGMEM = "lon";
150+
const char c_malloc[] PROGMEM = "malloc";
151+
const char c_mem[] PROGMEM = "mem";
152+
const char c_meters[] PROGMEM = "meters";
153+
const char c_minutes[] PROGMEM = "minutes";
154+
const char c_mode[] PROGMEM = "mode";
155+
const char c_motion[] PROGMEM = "motion";
156+
const char c_movements[] PROGMEM = "movements";
157+
const char c_mtime[] PROGMEM = "mtime";
158+
const char c_name[] PROGMEM = "name";
159+
const char c_NAN[] PROGMEM = "NAN";
160+
const char c_nan[] PROGMEM = "nan";
161+
const char c_newline[] PROGMEM = "\r\n";
162+
const char c_no_sat[] PROGMEM = "no-sat";
163+
const char c_note_add[] PROGMEM = "note.add";
164+
const char c_note_c[] PROGMEM = "note_c";
165+
const char c_note_event[] PROGMEM = "note.event";
166+
const char c_note_get[] PROGMEM = "note.get";
167+
const char c_note_template[] PROGMEM = "note.template";
168+
const char c_null[] PROGMEM = "null";
169+
const char c_null_paren[] PROGMEM = "(null)";
170+
const char c_nullstring[] PROGMEM = "";
171+
const char c_number[] PROGMEM = "number";
172+
const char c_object[] PROGMEM = "object";
173+
const char c_off[] PROGMEM = "off";
174+
const char c_org[] PROGMEM = "org";
175+
const char c_orientation[] PROGMEM = "orientation";
176+
const char c_os_family[] PROGMEM = "os_family";
177+
const char c_os_name[] PROGMEM = "os_name";
178+
const char c_os_platform[] PROGMEM = "os_platform";
179+
const char c_os_version[] PROGMEM = "os_version";
180+
const char c_outbound[] PROGMEM = "outbound";
181+
const char c_payload[] PROGMEM = "payload";
182+
const char c_point[] PROGMEM = "point";
183+
const char c_pressure[] PROGMEM = "pressure";
184+
const char c_product[] PROGMEM = "product";
185+
const char c_quotation_mark[] PROGMEM = "\"";
186+
const char c_req[] PROGMEM = "req";
187+
const char c_req_interface[] PROGMEM = "req_interface";
188+
const char c_role[] PROGMEM = "role";
189+
const char c_route[] PROGMEM = "route";
190+
const char c_scan[] PROGMEM = "scan";
191+
const char c_scan_format_2g[] PROGMEM = "xmcc,xmnc,xlac,xcid,xrssi";
192+
const char c_scan_format_3g[] PROGMEM = "xmcc,xmnc,xlac,xcid,xpsc,xrscp";
193+
const char c_scan_format_4g[] PROGMEM = "xmcc,xmnc,xtac,xcid,xpci,rssi,rsrp,rsrq,xband,xchan";
194+
const char c_scan_format_5g[] PROGMEM = "xmcc,xmnc,xtac,xcid,xpci,rssi,rsrp,rsrq,xband,xchan";
195+
const char c_scan_format_gps[] PROGMEM = "epochsecs,olc,hdop";
196+
const char c_scan_format_time[] PROGMEM = "epochsecs";
197+
const char c_scan_format_wifi[] PROGMEM = "xbssid,xchannel,xfreq,rssi,snr,\"ssid\"";
198+
const char c_seconds[] PROGMEM = "seconds";
199+
const char c_secs[] PROGMEM = "secs";
200+
const char c_serial[] PROGMEM = "serial";
201+
const char c_signals[] PROGMEM = "signals";
202+
const char c_sleep[] PROGMEM = "sleep";
203+
const char c_sn[] PROGMEM = "sn";
204+
const char c_space[] PROGMEM = " ";
205+
const char c_start[] PROGMEM = "start";
206+
const char c_status[] PROGMEM = "status";
207+
const char c_string[] PROGMEM = "string";
208+
const char c_subsystem[] PROGMEM = "subsystem";
209+
const char c_sync[] PROGMEM = "sync";
210+
const char c_synclog_notefile[] PROGMEM = "_synclog.qi";
211+
const char c_temperature[] PROGMEM = "temperature";
212+
const char c_text[] PROGMEM = "text";
213+
const char c_time[] PROGMEM = "time";
214+
const char c_track[] PROGMEM = "track";
215+
const char c_true[] PROGMEM = "true";
216+
const char c_type[] PROGMEM = "type";
217+
const char c_unknown[] PROGMEM = "unknown";
218+
const char c_usb[] PROGMEM = "usb";
219+
const char c_UTC[] PROGMEM = "UTC";
220+
const char c_utf8_bom[] PROGMEM = "\xEF\xBB\xBF";
221+
const char c_value[] PROGMEM = "value";
222+
const char c_velocity[] PROGMEM = "velocity";
223+
const char c_version[] PROGMEM = "version";
224+
const char c_voltage[] PROGMEM = "voltage";
225+
const char c_web_dot[] PROGMEM = "web.";
226+
const char c_zone[] PROGMEM = "zone";

0 commit comments

Comments
 (0)