Skip to content

Commit d94a8f5

Browse files
committed
Clean up
1 parent b2deccf commit d94a8f5

File tree

3 files changed

+76
-50
lines changed

3 files changed

+76
-50
lines changed

src/platform/teensy/src/device.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include "serial.h"
1919

2020
uint32_t serialDataTimer = 0;
21-
uint8_t interactive = 1;
21+
uint8_t interactive = 1;
2222

2323
//
2424
// setup the Serial device
@@ -189,4 +189,3 @@ void panic(const char *fmt, ...) {
189189
dev_print("Fatal error");
190190
for (;;);
191191
}
192-

src/platform/teensy/src/main.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ void *plugin_lib_open(const char *name) {
3434
}
3535

3636
void *plugin_lib_address(void *handle, const char *name) {
37-
auto *pModule = (ModuleConfig *)handle;
37+
auto *pModule = (ModuleConfig *) handle;
3838
void *result = nullptr;
3939
if (strcmp(name, "sblib_func_exec") == 0) {
4040
result = (void *)pModule->_func_exec;
4141
} else if (strcmp(name, "sblib_proc_exec") == 0) {
4242
result = (void *)pModule->_proc_exec;
4343
} else if (strcmp(name, "sblib_free") == 0) {
4444
result = (void *)pModule->_free;
45-
} else if (strcmp(name, "sblib_proc_count") == 0){
45+
} else if (strcmp(name, "sblib_proc_count") == 0) {
4646
result = (void *)pModule->_proc_count;
4747
} else if (strcmp(name, "sblib_proc_getname") == 0) {
4848
result = (void *)pModule->_proc_getname;
@@ -73,8 +73,7 @@ char *dev_read(const char *fileName) {
7373

7474
int sys_search_path(const char *path, const char *file, char *retbuf) {
7575
int result;
76-
if (strcmp(file, "libteensy") == 0 ||
77-
strcmp(file, "libssd1306") == 0) {
76+
if (strcmp(file, "libteensy") == 0 || strcmp(file, "libssd1306") == 0) {
7877
strcpy(retbuf, "/");
7978
result = 1;
8079
}
@@ -194,7 +193,7 @@ extern "C" int main(void) {
194193
buffer.clear();
195194
buffer.append(bufferSD);
196195

197-
delete[] bufferSD;
196+
delete[]bufferSD;
198197
sdFile.close();
199198

200199
if (!sbasic_main(SERIAL_SD_BAS)) {
@@ -213,11 +212,11 @@ extern "C" int main(void) {
213212
delay(250);
214213
}
215214
dev_print("Error executing main.bas from memory:\n");
216-
print_error((char *) main_bas);
215+
print_error((char *)main_bas);
217216
} else {
218217
dev_print("main.bas ended");
219218
}
220219
} else {
221220
interactive_main();
222221
}
223-
}
222+
}

src/platform/teensy/src/teensy.cpp

Lines changed: 69 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "module.h"
1818
#include "serial.h"
1919
#include <Wire.h>
20+
#include <malloc.h>
2021

2122
#define USB_CLASS_ID 1002
2223
#define MAX_HW_SERIAL 7
@@ -138,7 +139,7 @@ static int cmd_opendigitalinput(int argc, slib_par_t *args, var_t *retval) {
138139
int result = 1;
139140
int pin = get_param_int(argc, args, 0, -1);
140141
uint8_t mode = get_param_int(argc, args, 1, 1);
141-
if(mode) {
142+
if (mode) {
142143
mode = INPUT_PULLUP;
143144
} else {
144145
mode = INPUT;
@@ -235,7 +236,7 @@ static int cmd_get_temperature(int argc, slib_par_t *args, var_t *retval) {
235236
}
236237

237238
static int cmd_get_cpu_speed(int argc, slib_par_t *args, var_t *retval) {
238-
v_setint(retval, F_CPU_ACTUAL/1000000);
239+
v_setint(retval, F_CPU_ACTUAL / 1000000);
239240
return 1;
240241
}
241242

@@ -262,22 +263,41 @@ static int cmd_serial_receive(var_s *self, int argc, slib_par_t *args, var_s *re
262263
v_setstr(retval, ERR_PARAM);
263264
result = 0;
264265
} else {
265-
auto bufferSize = get_param_int(argc, args, 0, CDC_RX_SIZE_480);
266-
if (!bufferSize) {
267-
bufferSize = CDC_RX_SIZE_480;
268-
}
269-
char buffer[bufferSize];
266+
int bufferSize = get_param_int(argc, args, 0, 0);
270267
int size;
271268
int serialNo = self->v.m.id;
272269

273-
if (serialNo == 0) {
274-
size = Serial.readBytes(buffer, bufferSize);
270+
if (bufferSize == 0) {
271+
// Read until '\n' and return as string
272+
bufferSize = CDC_RX_SIZE_480;
273+
char buffer[bufferSize];
274+
275+
if (serialNo == 0) {
276+
size = Serial.readBytesUntil('\n', buffer, bufferSize - 1);
277+
} else {
278+
size = getSerial(serialNo)->readBytesUntil('\n', buffer, bufferSize - 1);
279+
}
280+
buffer[size] = '\0';
281+
v_setstr(retval, buffer);
282+
result = 1;
275283
} else {
276-
size = getSerial(serialNo)->readBytes(buffer, bufferSize);
284+
// Read number of bytes and return as array
285+
char buffer[bufferSize];
286+
if (serialNo == 0) {
287+
size = Serial.readBytes(buffer, bufferSize);
288+
} else {
289+
size = getSerial(serialNo)->readBytes(buffer, bufferSize);
290+
}
291+
if (bufferSize > 1) {
292+
v_toarray1(retval, bufferSize);
293+
for (int32_t ii = 0; ii < size; ii++) {
294+
v_setint(v_elem(retval, ii), buffer[ii]);
295+
}
296+
} else {
297+
v_setint(retval, buffer[0]);
298+
}
299+
result = 1;
277300
}
278-
buffer[size] = '\0';
279-
v_setstr(retval, buffer);
280-
result = 1;
281301
}
282302
return result;
283303
}
@@ -322,7 +342,8 @@ static int cmd_openserial(int argc, slib_par_t *args, var_t *retval) {
322342
serial_init();
323343
break;
324344
default:
325-
getSerial(serialNo)->begin(BT_BAUD);
345+
int serialSpeed = get_param_int(argc, args, 1, BT_BAUD);
346+
getSerial(serialNo)->begin(serialSpeed);
326347
break;
327348
}
328349
result = 1;
@@ -332,7 +353,7 @@ static int cmd_openserial(int argc, slib_par_t *args, var_t *retval) {
332353

333354
static int cmd_i2c_write(var_s *self, int argc, slib_par_t *args, var_s *retval) {
334355
uint8_t address = get_param_int(argc, args, 0, 0);
335-
uint8_t stop = get_param_int(argc, args, 2, 1);
356+
uint8_t stop = get_param_int(argc, args, 2, 1);
336357

337358
if (address == 0 || argc < 2) {
338359
v_setstr(retval, ERR_PARAM);
@@ -345,36 +366,36 @@ static int cmd_i2c_write(var_s *self, int argc, slib_par_t *args, var_s *retval)
345366

346367
ptrWire->beginTransmission(address);
347368

348-
switch(args[1].var_p->type) {
349-
case V_INT: {
369+
switch (args[1].var_p->type) {
370+
case V_INT:{
350371
int value = get_param_int(argc, args, 1, 0);
351372
ptrWire->write(value);
352373
}
353374
break;
354-
case V_STR: {
375+
case V_STR:{
355376
const char *buffer = v_getstr(args[1].var_p);
356377
int length = v_strlen(args[1].var_p);
357378
ptrWire->write(buffer, length);
358379
}
359380
break;
360-
case V_ARRAY: {
361-
var_p_t array = args[1].var_p; //Get array
381+
case V_ARRAY:{
382+
var_p_t array = args[1].var_p; // Get array
362383
if (array->maxdim > 1) {
363384
v_setstr(retval, "ERROR: I2C: Write requires 1D-array");
364385
return 0;
365386
}
366-
uint32_t bytes = v_ubound(array, 0) - v_lbound(array, 0) + 1;
387+
uint32_t bytes = v_ubound(array, 0) - v_lbound(array, 0) + 1;
367388
uint8_t *buffer = new uint8_t[bytes];
368389
for (uint32_t ii = 0; ii < bytes; ii++) {
369390
buffer[ii] = get_array_elem_int(array, ii);
370391
}
371392
ptrWire->write(buffer, bytes);
372-
delete[] buffer;
393+
delete[]buffer;
373394
}
374395
break;
375396
}
376397

377-
if(ptrWire->endTransmission(stop)) {
398+
if (ptrWire->endTransmission(stop)) {
378399
v_setstr(retval, "ERROR I2C: Transmission failed");
379400
return 0;
380401
}
@@ -383,39 +404,33 @@ static int cmd_i2c_write(var_s *self, int argc, slib_par_t *args, var_s *retval)
383404
}
384405

385406
static int cmd_i2c_read(var_s *self, int argc, slib_par_t *args, var_s *retval) {
386-
uint8_t address = get_param_int(argc, args, 0, 0);
387-
uint32_t bytes = get_param_int(argc, args, 1, 1);
388-
uint8_t stop = get_param_int(argc, args, 2, 1);
407+
uint8_t address = get_param_int(argc, args, 0, 0);
408+
uint32_t bytes = get_param_int(argc, args, 1, 1);
409+
uint8_t stop = get_param_int(argc, args, 2, 1);
389410

390411
if (address == 0) {
391412
v_setstr(retval, ERR_PARAM);
392413
return 0;
393414
}
394415

395-
uint8_t *buffer = new uint8_t[bytes];
396416
int interfaceNumber = self->v.m.id;
397417
TwoWire *ptrWire;
398418
ptrWire = getI2C(interfaceNumber);
399-
400419
ptrWire->requestFrom(address, bytes, stop);
401-
ptrWire->readBytes(buffer, bytes);
402420

403421
if (bytes > 1) {
404422
v_toarray1(retval, bytes);
405423
for (uint32_t ii = 0; ii < bytes; ii++) {
406-
v_setint(v_elem(retval, ii), buffer[ii]);
424+
v_setint(v_elem(retval, ii), ptrWire->read());
407425
}
426+
} else {
427+
v_setint(retval, ptrWire->read());
408428
}
409-
else {
410-
v_setint(retval, buffer[0]);
411-
}
412-
413-
delete[] buffer;
414429
return 1;
415430
}
416431

417432
static int cmd_i2c_setClock(var_s *self, int argc, slib_par_t *args, var_s *retval) {
418-
uint32_t clockFrequency = get_param_int(argc, args, 0, 100000);
433+
uint32_t clockFrequency = get_param_int(argc, args, 0, 100000);
419434

420435
if (clockFrequency != 100000 && clockFrequency != 400000 && clockFrequency != 1000000) {
421436
v_setstr(retval, "ERROR I2C: Clock freuqency not supported");
@@ -429,9 +444,9 @@ static int cmd_i2c_setClock(var_s *self, int argc, slib_par_t *args, var_s *retv
429444
}
430445

431446
static int cmd_openi2c(int argc, slib_par_t *args, var_t *retval) {
432-
uint8_t interfaceNumber = get_param_int(argc, args, 0, 0);
433-
uint8_t pinSDA = get_param_int(argc, args, 1, 0);
434-
uint8_t pinSCL = get_param_int(argc, args, 2, 0);
447+
uint8_t interfaceNumber = get_param_int(argc, args, 0, 0);
448+
uint8_t pinSDA = get_param_int(argc, args, 1, 0);
449+
uint8_t pinSCL = get_param_int(argc, args, 2, 0);
435450

436451
if (interfaceNumber > 2) {
437452
v_setstr(retval, ERR_PARAM);
@@ -458,7 +473,7 @@ static int cmd_openi2c(int argc, slib_par_t *args, var_t *retval) {
458473
}
459474

460475
static int cmd_set_interactive(int argc, slib_par_t *args, var_t *retval) {
461-
uint8_t mode = get_param_int(argc, args, 0, 1);
476+
uint8_t mode = get_param_int(argc, args, 0, 1);
462477

463478
if (mode > 0) {
464479
setInteractive(1);
@@ -469,6 +484,18 @@ static int cmd_set_interactive(int argc, slib_par_t *args, var_t *retval) {
469484
return 1;
470485
}
471486

487+
static int cmd_free(int argc, slib_par_t *args, var_t *retval) {
488+
extern char _ebss[], _heap_end[], *__brkval;
489+
char *sp = (char *)__builtin_frame_address(0);
490+
auto stack = (sp - _ebss), heap = (_heap_end - __brkval);
491+
492+
v_toarray1(retval, 2);
493+
v_setint(v_elem(retval, 0), stack);
494+
v_setint(v_elem(retval, 1), heap);
495+
496+
return 1;
497+
}
498+
472499
static FuncSpec lib_func[] = {
473500
{0, 0, "GETTEMP", cmd_get_temperature},
474501
{0, 0, "GETCPUSPEED", cmd_get_cpu_speed},
@@ -477,7 +504,8 @@ static FuncSpec lib_func[] = {
477504
{1, 1, "OPENDIGITALINPUT", cmd_opendigitalinput},
478505
{1, 1, "OPENDIGITALOUTPUT", cmd_opendigitaloutput},
479506
{0, 1, "OPENSERIAL", cmd_openserial},
480-
{0, 3, "OPENI2C", cmd_openi2c}
507+
{0, 3, "OPENI2C", cmd_openi2c},
508+
{0, 0, "FREE", cmd_free}
481509
};
482510

483511
static FuncSpec lib_proc[] = {

0 commit comments

Comments
 (0)