Add basic termios to the rpi platform to allow echoing/newline translation to be controlled.

--HG--
branch : dtrg-videocore
rename : plat/rpi/include/unistd.h => plat/rpi/include/termios.h
rename : plat/rpi/libsys/write.c => plat/rpi/libsys/tcgetattr.c
rename : plat/rpi/libsys/write.c => plat/rpi/libsys/tcsetattr.c
This commit is contained in:
David Given 2013-05-30 23:19:55 +01:00
parent 074b42aa97
commit 2054618e75
7 changed files with 83 additions and 14 deletions

View file

@ -13,6 +13,7 @@ D := plat/rpi/
platform-headers := \ platform-headers := \
unistd.h \ unistd.h \
termios.h \
pi.h \ pi.h \
ack/config.h ack/config.h
@ -33,7 +34,9 @@ platform-libsys := \
kill.c \ kill.c \
lseek.c \ lseek.c \
time.c \ time.c \
signal.c signal.c \
tcgetattr.c \
tcsetattr.c
$(eval $(call build-platform)) $(eval $(call build-platform))

View file

@ -0,0 +1,31 @@
/*
* Raspberry Pi support library for the ACK
* © 2013 David Given
* This file is redistributable under the terms of the 3-clause BSD license.
* See the file 'Copying' in the root of the distribution for the full text.
*/
#ifndef _TERMIOS_H
#define _TERMIOS_H
typedef unsigned char tcflag_t;
struct termios
{
tcflag_t c_iflag;
tcflag_t c_oflag;
tcflag_t c_lflag;
};
#define ONLCR 1
#define ECHO 2
#define INLCR 4
#define TCSANOW 0
#define TCSADRAIN 1
#define TCSAFLUSH 2
extern int tcgetattr(int fd, struct termios* t);
extern int tcsetattr(int fd, int actions, struct termios* t);
#endif

View file

@ -13,6 +13,6 @@ extern unsigned char _sys_rawread(void);
extern void _sys_write_tty(char c); extern void _sys_write_tty(char c);
/* extern int _sys_ttyflags; */ extern int _sys_ttyflags;
#endif #endif

View file

@ -8,6 +8,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <termios.h>
#include "libsys.h" #include "libsys.h"
int read(int fd, void* buffer, size_t count) int read(int fd, void* buffer, size_t count)
@ -30,16 +31,11 @@ int read(int fd, void* buffer, size_t count)
/* Read one byte. */ /* Read one byte. */
i = _sys_rawread(); i = _sys_rawread();
#if 0 if ((i == '\r') && !(_sys_ttyflags & INLCR))
if ((i == '\r') && !(_sys_ttyflags & RAW))
i = '\n'; i = '\n';
if (_sys_ttyflags & ECHO) if (_sys_ttyflags & ECHO)
_sys_write_tty(i); _sys_write_tty(i);
#endif
if (i == '\r')
i = '\n';
_sys_write_tty(i);
*(char*)buffer = i; *(char*)buffer = i;
return 1; return 1;
} }

View file

@ -0,0 +1,21 @@
/*
* Raspberry Pi support library for the ACK
* © 2013 David Given
* This file is redistributable under the terms of the 3-clause BSD license.
* See the file 'Copying' in the root of the distribution for the full text.
*/
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <termios.h>
#include "libsys.h"
int tcgetattr(int fd, struct termios* t)
{
t->c_iflag = _sys_ttyflags & INLCR;
t->c_oflag = _sys_ttyflags & ONLCR;
t->c_lflag = _sys_ttyflags & ECHO;
return 0;
}

View file

@ -0,0 +1,19 @@
/*
* Raspberry Pi support library for the ACK
* © 2013 David Given
* This file is redistributable under the terms of the 3-clause BSD license.
* See the file 'Copying' in the root of the distribution for the full text.
*/
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <termios.h>
#include "libsys.h"
int tcsetattr(int fd, int actions, struct termios* t)
{
_sys_ttyflags = t->c_iflag | t->c_oflag | t->c_lflag;
return 0;
}

View file

@ -8,16 +8,15 @@
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <termios.h>
#include "libsys.h" #include "libsys.h"
int _sys_ttyflags = ONLCR | INLCR | ECHO;
void _sys_write_tty(char c) void _sys_write_tty(char c)
{ {
_sys_rawwrite(c); _sys_rawwrite(c);
#if 0 if ((c == '\n') && (_sys_ttyflags & ONLCR))
if ((c == '\n') && !(_sys_ttyflags & RAW))
_sys_rawwrite('\r');
#endif
if (c == '\n')
_sys_rawwrite('\r'); _sys_rawwrite('\r');
} }