Skip to content

Commit 79eb042

Browse files
committed
TEENSY: 'teensy' module now working with digital output to built-in LED
1 parent 9edff2d commit 79eb042

File tree

10 files changed

+82
-60
lines changed

10 files changed

+82
-60
lines changed

configure.ac

+1
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,7 @@ function buildTEENSY() {
396396
AM_CONDITIONAL(WITH_CYGWIN_CONSOLE, false)
397397
AC_DEFINE(_UnixOS, 1, [Building under Unix like systems.])
398398
AC_DEFINE(_MCU, 1, [Micro controller based builds])
399+
AC_DEFINE(_TEENSY, 1, [Teensy Micro controller based build])
399400
AC_DEFINE(USE_TERM_IO, 0, [dont use the termios library.])
400401
AC_DEFINE(IMPL_LOG_WRITE, 1, [Driver implements lwrite()])
401402
AC_DEFINE(IMPL_DEV_READ, 1, [Implement dev_read()])

src/common/plugins.c

-4
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,6 @@ void *slib_getoptptr(slib_t *lib, const char *name) {
7777
}
7878

7979
static int slib_llclose(slib_t *lib) {
80-
if (!lib->_handle) {
81-
return 0;
82-
}
83-
plugin_lib_close(lib->_handle);
8480
lib->_handle = NULL;
8581
return 1;
8682
}

src/common/plugins.h

-5
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ void *plugin_lib_open(const char *name);
3030
//
3131
void *plugin_lib_address(void *handle, const char *name);
3232

33-
//
34-
// lowlevel -close the named library
35-
//
36-
void plugin_lib_close(void *handle);
37-
3833
//
3934
// initialise the plugin system
4035
//

src/common/sys.h

+2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ extern "C" {
7979
#define SB_STR_VER VERSION " FLTK " _FLTK_VERSION SB_VERSYS SB_BIT_SZ BUILD_DATE
8080
#elif defined (_EMCC)
8181
#define SB_STR_VER VERSION " Emscripten " BUILD_DATE
82+
#elif defined (_TEENSY)
83+
#define SB_STR_VER VERSION " Teensy " BUILD_DATE
8284
#else
8385
#define SB_STR_VER VERSION " Console " SB_VERSYS SB_BIT_SZ BUILD_DATE
8486
#endif

src/platform/teensy/Makefile.am

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ build/Makefile: build/modules/cores/teensy4/Makefile
1515
src/main_bas.h: main.bas
1616
@xxd -i $< > $@
1717

18-
build/smallbasic.elf : build/Makefile src/noop.c src/main.cpp src/device.cpp src/main_bas.h
18+
build/smallbasic.elf : build/Makefile src/noop.c src/main.cpp src/device.cpp src/teensy.cpp src/main_bas.h
1919
@cd build && make -j 32
2020

2121
all: build/smallbasic.elf

src/platform/teensy/main.bas

+20-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,23 @@
1-
for i = 0 to 100
2-
print "hello " + i
3-
delay 100
4-
next
5-
print "done !"
61

2+
import teensy
73

4+
out = teensy.openDigitalOutput(13)
5+
6+
while 1
7+
print "Hello Teensy"
8+
print sbver
9+
value = false
10+
for i = 0 to 5
11+
out.write(value)
12+
value = !value
13+
delay 1000
14+
next
15+
16+
for i = 0 to 5
17+
out.write(value)
18+
value = !value
19+
delay 50
20+
next
21+
22+
wend
823

src/platform/teensy/src/main.cpp

+12-15
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
void *plugin_lib_open(const char *name) {
2020
void *result = nullptr;
21-
if (strcmp(name, "teensy") == 0) {
21+
if (strcmp(name, "/libteensy") == 0) {
2222
result = get_teensy_module();
2323
}
2424
return result;
@@ -61,11 +61,13 @@ char *dev_read(const char *fileName) {
6161
return buffer;
6262
}
6363

64-
void blink(int pauseMillis) {
65-
digitalWriteFast(13, HIGH);
66-
delay(pauseMillis);
67-
digitalWriteFast(13, LOW);
68-
delay(pauseMillis);
64+
int sys_search_path(const char *path, const char *file, char *retbuf) {
65+
int result;
66+
if (strcmp(file, "libteensy") == 0) {
67+
strcpy(retbuf, "/");
68+
result = 1;
69+
}
70+
return result;
6971
}
7072

7173
void setup() {
@@ -90,16 +92,11 @@ void setup() {
9092
extern "C" int main(void) {
9193
setup();
9294
if (!sbasic_main(MAIN_BAS)) {
93-
dev_print("run failed");
95+
dev_print("Error: run failed\n");
96+
opt_quiet = 0;
97+
opt_verbose = 1;
98+
sbasic_main(MAIN_BAS);
9499
} else {
95100
dev_print("main.bas ended");
96101
}
97-
98-
pinMode(13, OUTPUT);
99-
while (1) {
100-
dev_print("blink?");
101-
blink(500);
102-
yield();
103-
}
104102
}
105-

src/platform/teensy/src/main_bas.h

+25-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,27 @@
11
unsigned char main_bas[] = {
2-
0x66, 0x6f, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x20, 0x74, 0x6f,
3-
0x20, 0x31, 0x30, 0x30, 0x0a, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74,
4-
0x20, 0x22, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x22, 0x20, 0x2b, 0x20,
5-
0x69, 0x0a, 0x20, 0x20, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x20, 0x31, 0x30,
6-
0x30, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x74,
7-
0x20, 0x22, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x21, 0x22, 0x0a, 0x0a, 0x0a,
8-
0x0a
2+
0x0a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x65, 0x65, 0x6e,
3+
0x73, 0x79, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x65,
4+
0x65, 0x6e, 0x73, 0x79, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x44, 0x69, 0x67,
5+
0x69, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x28, 0x31,
6+
0x33, 0x29, 0x0a, 0x0a, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x31, 0x0a,
7+
0x20, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x20, 0x22, 0x48, 0x65, 0x6c,
8+
0x6c, 0x6f, 0x20, 0x54, 0x65, 0x65, 0x6e, 0x73, 0x79, 0x22, 0x0a, 0x20,
9+
0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x62, 0x76, 0x65, 0x72,
10+
0x0a, 0x20, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x66,
11+
0x61, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69,
12+
0x20, 0x3d, 0x20, 0x30, 0x20, 0x74, 0x6f, 0x20, 0x35, 0x0a, 0x20, 0x20,
13+
0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28,
14+
0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76,
15+
0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x21, 0x76, 0x61, 0x6c, 0x75,
16+
0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x20,
17+
0x31, 0x30, 0x30, 0x30, 0x0a, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x0a,
18+
0x20, 0x20, 0x0a, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x20, 0x3d,
19+
0x20, 0x30, 0x20, 0x74, 0x6f, 0x20, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20,
20+
0x6f, 0x75, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x76, 0x61,
21+
0x6c, 0x75, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x6c,
22+
0x75, 0x65, 0x20, 0x3d, 0x20, 0x21, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a,
23+
0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x20, 0x35, 0x30,
24+
0x0a, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x0a, 0x0a, 0x77, 0x65, 0x6e,
25+
0x64, 0x0a, 0x0a
926
};
10-
unsigned int main_bas_len = 73;
27+
unsigned int main_bas_len = 279;

src/platform/teensy/src/noop.c

-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ int gra_y() { return 0; }
116116
void net_print(const char *data) {}
117117
void net_send(const char *data) {}
118118
time_t sys_filetime(const char *filename) { return 0; }
119-
int sys_search_path(const char *path, const char *file, char *retbuf) { return 0; }
120119
void v_create_image(var_p_t var) {}
121120
void v_create_form(var_p_t var) {}
122121
void v_create_window(var_p_t var) {}

src/platform/teensy/src/teensy.cpp

+21-21
Original file line numberDiff line numberDiff line change
@@ -39,52 +39,52 @@ static int cmd_analoginput_read(var_s *self, int argc, slib_par_t *arg, var_s *r
3939
return result;
4040
}
4141

42-
static int cmd_digitalinput_read(var_s *self, int argc, slib_par_t *arg, var_s *retval) {
43-
int result = 0;
44-
if (argc != 0 || !isObject(self)) {
45-
error(retval, "DigitalInput.read", 0);
42+
static int cmd_openanaloginput(int argc, slib_par_t *params, var_t *retval) {
43+
int result = 1;
44+
int pin = get_param_int(argc, params, 0, -1);
45+
if (isPin(pin)) {
46+
setPin(retval, pin, INPUT);
47+
v_create_callback(retval, "read", cmd_analoginput_read);
4648
} else {
47-
int pin = self->v.m.id;
48-
v_setint(retval, digitalRead(pin));
49-
result = 1;
49+
result = 0;
5050
}
5151
return result;
5252
}
5353

54-
static int cmd_digitaloutput_write(var_s *self, int argc, slib_par_t *arg, var_s *retval) {
54+
static int cmd_digitalinput_read(var_s *self, int argc, slib_par_t *arg, var_s *retval) {
5555
int result = 0;
5656
if (argc != 0 || !isObject(self)) {
57-
error(retval, "DigitalOutput.write", 1);
57+
error(retval, "DigitalInput.read", 0);
5858
} else {
5959
int pin = self->v.m.id;
60-
int value = get_param_int(argc, arg, 0, 0);
61-
digitalWrite(pin, value);
60+
v_setint(retval, digitalRead(pin));
6261
result = 1;
6362
}
6463
return result;
6564
}
6665

67-
static int cmd_openanaloginput(int argc, slib_par_t *params, var_t *retval) {
66+
static int cmd_opendigitalinput(int argc, slib_par_t *params, var_t *retval) {
6867
int result = 1;
6968
int pin = get_param_int(argc, params, 0, -1);
7069
if (isPin(pin)) {
7170
setPin(retval, pin, INPUT);
72-
v_create_callback(retval, "read", cmd_analoginput_read);
71+
v_create_callback(retval, "read", cmd_digitalinput_read);
72+
result = 1;
7373
} else {
7474
result = 0;
7575
}
7676
return result;
7777
}
7878

79-
static int cmd_opendigitalinput(int argc, slib_par_t *params, var_t *retval) {
80-
int result = 1;
81-
int pin = get_param_int(argc, params, 0, -1);
82-
if (isPin(pin)) {
83-
setPin(retval, pin, INPUT);
84-
v_create_callback(retval, "read", cmd_digitalinput_read);
85-
result = 1;
79+
static int cmd_digitaloutput_write(var_s *self, int argc, slib_par_t *arg, var_s *retval) {
80+
int result = 0;
81+
if (argc != 1 || !isObject(self)) {
82+
error(retval, "DigitalOutput.write", 1);
8683
} else {
87-
result = 0;
84+
int pin = self->v.m.id;
85+
int value = get_param_int(argc, arg, 0, 0);
86+
digitalWrite(pin, value);
87+
result = 1;
8888
}
8989
return result;
9090
}

0 commit comments

Comments
 (0)