Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mart Lubbers
CleanSerial
Commits
72164e16
Commit
72164e16
authored
Sep 29, 2016
by
Mart Lubbers
Browse files
add TTYavailable function
parent
1432dcd3
Changes
5
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
72164e16
...
...
@@ -5,4 +5,4 @@ Clean\ System\ Files/tty.o: tty.c
gcc
-g
-c
$<
-o
"
$@
"
clean
:
$(RM)
-r
Clean
\
System
\
Files/
*
test
sapl
$(RM)
-r
Clean
\
System
\
Files/
*
test
TTY.dcl
View file @
72164e16
...
...
@@ -20,12 +20,9 @@ from StdClass import class zero
instance
zero
TTYSettings
TTYopen
::
!
String
!
TTYSettings
!*
env
->
(!
Bool
,!*
TTY
,!*
env
)
TTYclose
::
!*
TTY
!*
env
->
(!
Bool
,
!*
env
)
TTYerror
::
!*
env
->
(!
String
,
!*
env
)
TTYopen
::
!
String
!
TTYSettings
!*
env
->
(!
Bool
,!*
TTY
,!*
env
)
TTYreadline
::
!*
TTY
->
(!
String
,
!*
TTY
)
TTYavailable
::
!*
TTY
->
(!
Bool
,
!*
TTY
)
TTYwrite
::
!*
TTY
!
String
->
*
TTY
TTYerror
::
!*
env
->
(!
String
,
!*
env
)
TTY.icl
View file @
72164e16
...
...
@@ -46,22 +46,27 @@ TTYopen fn ts w = TTYopen2
}
TTYclose
::
!*
TTY
!*
env
->
(!
Bool
,
!*
env
)
TTYclose
f
w
=
code {
TTYclose
_
_
=
code {
ccall
ttyclose
"I:I:A"
}
TTYreadline
::
!*
TTY
->
(!
String
,
!*
TTY
)
TTYreadline
t
=
code {
TTYreadline
_
=
code {
ccall
ttyreadline
"I:VSI"
}
TTYwrite
::
!*
TTY
!
String
->
*
TTY
TTYwrite
s
e
=
code {
TTYwrite
_
_
=
code {
ccall
ttywrite
"IS:I"
}
TTYavailable
::
!*
TTY
->
(!
Bool
,
!*
TTY
)
TTYavailable
_
=
code {
ccall
ttyavailable
"I:VII"
}
TTYerror
::
!*
env
->
(!
String
,
!*
env
)
TTYerror
w
=
code {
TTYerror
_
=
code {
ccall
ttyerror
":S:A"
}
...
...
test.icl
View file @
72164e16
...
...
@@ -4,13 +4,23 @@ import StdEnv
import
TTY
Start
::
*
World
->
(!
String
,
*
World
)
TTYerrorclose
::
!*
File
!*
World
->
*
World
TTYerrorclose
f
w
#
(
err
,
w
)
=
TTYerror
w
#
(
ok
,
w
)
=
fclose
(
f
<<<
err
<<<
"
\n
"
)
w
|
not
ok
=
abort
"Couldn't close file"
=
w
Start
::
*
World
->
*
World
Start
w
#!
(
ok
,
tty
,
w
)
=
TTYopen
"/dev/ttyUSB0"
zero
w
|
not
ok
=
TTYerror
w
#
(
io
,
w
)
=
stdio
w
#
(
ok
,
tty
,
w
)
=
TTYopen
"/dev/ttyUSB0"
zero
w
|
not
ok
=
TTYerrorclose
io
w
#!
tty
=
TTYwrite
tty
"echo123
\n
"
#!
(
c
,
tty
)
=
TTYreadline
tty
#!
(
av
,
tty
)
=
TTYavailable
tty
#
io
=
io
<<<
(
"Bytes available: "
+++
toString
av
+++
"
\n
"
)
#!
(
l
,
tty
)
=
TTYreadline
tty
#
io
=
io
<<<
(
"Line read: "
+++
l
)
#!
(
ok
,
w
)
=
TTYclose
tty
w
|
not
ok
=
TTYerror
w
#!
(
s
,
w
)
=
TTYerror
w
=
(
"Read: "
+++
c
,
w
)
|
not
ok
=
TTYerrorclose
io
w
=
snd
(
fclose
io
w
)
tty.c
View file @
72164e16
...
...
@@ -11,6 +11,7 @@
#include "Clean.h"
#define INITIAL_BUFFERSIZE 2
#define DEVICE_TIMEOUT {5, 0}
#define die(s) {perror(s);exit(EXIT_FAILURE);}
static
speed_t
baudrates
[]
=
{
B0
,
B50
,
B75
,
B110
,
B134
,
B150
,
B200
,
B300
,
B600
,
...
...
@@ -168,6 +169,20 @@ void ttyreadline(int fd, CleanString *result, int *fdo)
free
(
buf
);
}
void
ttyavailable
(
int
fd
,
int
*
r
,
int
*
fdo
)
{
fd_set
fds
;
struct
timeval
tv
=
DEVICE_TIMEOUT
;
FD_ZERO
(
&
fds
);
FD_SET
(
fd
,
&
fds
);
*
r
=
select
(
fd
+
1
,
&
fds
,
NULL
,
NULL
,
NULL
);
if
(
*
r
==
-
1
)
die
(
"select"
);
*
fdo
=
fd
;
}
int
ttywrite
(
int
fd
,
CleanString
s
)
{
write
(
fd
,
CleanStringCharacters
(
s
),
CleanStringLength
(
s
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment