Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
Software for White Rabbit PTP Core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
32
Issues
32
List
Board
Labels
Milestones
Merge Requests
4
Merge Requests
4
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Software for White Rabbit PTP Core
Commits
94f7fdb4
Commit
94f7fdb4
authored
Apr 07, 2022
by
Tristan Gingold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tools: add vuart_lib
parent
c0e8dfba
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
150 additions
and
119 deletions
+150
-119
Makefile
tools/Makefile
+2
-2
vuart_lib.c
tools/vuart_lib.c
+121
-0
vuart_lib.h
tools/vuart_lib.h
+26
-0
wrpc-vuart.c
tools/wrpc-vuart.c
+1
-117
No files found.
tools/Makefile
View file @
94f7fdb4
...
...
@@ -78,8 +78,8 @@ wr-streamers: wr-streamers.c
wrpc-diags
:
wrpc-diags.c
$(CC)
$(CFLAGS)
$^
$(LDFLAGS)
-o
$@
-lreadline
wrpc-vuart
:
wrpc-vuart.
c
$(CC)
$(CFLAGS)
-Werror
$^
$(LDFLAGS)
-o
$@
wrpc-vuart
:
wrpc-vuart.
o vuart_lib.o
$(CC)
$(CFLAGS)
-Werror
$^
$(LDFLAGS)
-o
$@
wrpc-gdbserver
:
wrpc-gdbserver.c
$(CC)
$(CFLAGS)
-Werror
$^
$(LDFLAGS)
-o
$@
...
...
tools/vuart_lib.c
0 → 100644
View file @
94f7fdb4
/**
* Author: Federico Vaga <federico.vaga@cern.ch>
*/
#include <string.h>
#include "vuart_lib.h"
#include <hw/wb_uart.h>
/**
* It receives a single byte
* @param[in] vuart token from dev_map()
*
*
*/
static
uint32_t
vuart_readl
(
struct
mapping_desc
*
vuart
,
int
reg
)
{
uint32_t
r
=
*
(
volatile
uint32_t
*
)(
vuart
->
base
+
reg
);
if
(
vuart
->
is_be
)
return
ntohl
(
r
);
else
return
r
;
}
static
void
vuart_writel
(
struct
mapping_desc
*
vuart
,
uint32_t
value
,
int
reg
)
{
if
(
vuart
->
is_be
)
value
=
htonl
(
value
);
*
(
volatile
uint32_t
*
)(
vuart
->
base
+
reg
)
=
value
;
}
int
wr_vuart_rx
(
struct
mapping_desc
*
vuart
)
{
int
rdr
=
vuart_readl
(
vuart
,
UART_REG_HOST_RDR
);
return
(
rdr
&
UART_HOST_RDR_RDY
)
?
UART_HOST_RDR_DATA_R
(
rdr
)
:
-
1
;
}
/**
* It transmits a single byte
* @param[in] vuart token from dev_map()
*/
void
wr_vuart_tx
(
struct
mapping_desc
*
vuart
,
char
data
)
{
int
sr
=
vuart_readl
(
vuart
,
UART_REG_SR
);
while
(
sr
&
UART_SR_RX_RDY
)
sr
=
vuart_readl
(
vuart
,
UART_REG_SR
);
vuart_writel
(
vuart
,
UART_HOST_TDR_DATA_W
(
data
),
UART_REG_HOST_TDR
);
}
/**
* It reads a number of bytes and it stores them in a given buffer
* @param[in] vuart token from dev_map()
* @param[out] buf destination for read bytes
* @param[in] size numeber of bytes to read
*
* @return the number of read bytes
*/
size_t
wr_vuart_read
(
struct
mapping_desc
*
vuart
,
char
*
buf
,
size_t
size
)
{
size_t
s
=
size
,
n_rx
=
0
;
int8_t
c
;
while
(
s
--
)
{
c
=
wr_vuart_rx
(
vuart
);
if
(
c
<
0
)
return
n_rx
;
*
buf
++
=
c
;
n_rx
++
;
}
return
n_rx
;
}
/**
* It flush vuart buffer.
*
* @param[in] vuart token from dev_map()
*
*/
void
wr_vuart_flush
(
struct
mapping_desc
*
vuart
)
{
char
rx
;
while
(
wr_vuart_read
(
vuart
,
&
rx
,
1
)
==
1
)
{}
}
/**
* It writes a number of bytes from a given buffer
* @param[in] vuart token from dev_map()
* @param[in] buf buffer to write
* @param[in] size numeber of bytes to write
*/
void
wr_vuart_write
(
struct
mapping_desc
*
vuart
,
char
*
buf
,
size_t
size
)
{
while
(
size
--
)
wr_vuart_tx
(
vuart
,
*
buf
++
);
}
void
wrpc_vuart_set_tty_raw
(
struct
termios
*
old_termios
)
{
struct
termios
newkey
;
tcgetattr
(
STDIN_FILENO
,
old_termios
);
memcpy
(
&
newkey
,
old_termios
,
sizeof
(
struct
termios
));
newkey
.
c_cflag
=
B9600
|
CS8
|
CLOCAL
|
CREAD
;
newkey
.
c_iflag
=
IGNPAR
;
newkey
.
c_oflag
=
0
;
newkey
.
c_lflag
=
ISIG
;
/* Keep C-c, C-z, ... */
tcflush
(
STDIN_FILENO
,
TCIFLUSH
);
tcsetattr
(
STDIN_FILENO
,
TCSANOW
,
&
newkey
);
}
void
wrpc_vuart_restore_tty
(
struct
termios
*
old_termios
)
{
tcsetattr
(
STDIN_FILENO
,
TCSANOW
,
old_termios
);
}
tools/vuart_lib.h
0 → 100644
View file @
94f7fdb4
/**
* Author: Federico Vaga <federico.vaga@cern.ch>
*/
#ifndef __VUART_LIB_H_
#define __VUART_LIB_H_
#include <stddef.h>
#include <unistd.h>
#include <termios.h>
#include <libdevmap.h>
#define VUART_EOL 13
#define VUART_CMD_USLEEP 1000000
#define VUART_CMD_PROMPT "wrc#"
int
wr_vuart_rx
(
struct
mapping_desc
*
vuart
);
void
wr_vuart_tx
(
struct
mapping_desc
*
vuart
,
char
data
);
size_t
wr_vuart_read
(
struct
mapping_desc
*
vuart
,
char
*
buf
,
size_t
size
);
void
wr_vuart_flush
(
struct
mapping_desc
*
vuart
);
void
wr_vuart_write
(
struct
mapping_desc
*
vuart
,
char
*
buf
,
size_t
size
);
void
wrpc_vuart_set_tty_raw
(
struct
termios
*
old_termios
);
void
wrpc_vuart_restore_tty
(
struct
termios
*
old_termios
);
#endif
/* __VUART_LIB_H_ */
tools/wrpc-vuart.c
View file @
94f7fdb4
...
...
@@ -12,12 +12,9 @@
#include <getopt.h>
#include <errno.h>
#include <hw/wb_uart.h>
#include <libdevmap.h>
#define VUART_EOL 13
#define VUART_CMD_USLEEP 1000000
#define VUART_CMD_PROMPT "wrc#"
#include "vuart_lib.h"
static
void
wrpc_vuart_help
(
char
*
prog
)
{
...
...
@@ -30,119 +27,6 @@ static void wrpc_vuart_help(char *prog)
fprintf
(
stderr
,
"Vuart specific option: [-k(keep terminal)]
\n
"
);
}
/**
* It receives a single byte
* @param[in] vuart token from dev_map()
*
*
*/
static
uint32_t
vuart_readl
(
struct
mapping_desc
*
vuart
,
int
reg
)
{
uint32_t
r
=
*
(
volatile
uint32_t
*
)(
vuart
->
base
+
reg
);
if
(
vuart
->
is_be
)
return
ntohl
(
r
);
else
return
r
;
}
static
void
vuart_writel
(
struct
mapping_desc
*
vuart
,
uint32_t
value
,
int
reg
)
{
if
(
vuart
->
is_be
)
value
=
htonl
(
value
);
*
(
volatile
uint32_t
*
)(
vuart
->
base
+
reg
)
=
value
;
}
static
int
wr_vuart_rx
(
struct
mapping_desc
*
vuart
)
{
int
rdr
=
vuart_readl
(
vuart
,
UART_REG_HOST_RDR
);
return
(
rdr
&
UART_HOST_RDR_RDY
)
?
UART_HOST_RDR_DATA_R
(
rdr
)
:
-
1
;
}
/**
* It transmits a single byte
* @param[in] vuart token from dev_map()
*/
static
void
wr_vuart_tx
(
struct
mapping_desc
*
vuart
,
char
data
)
{
int
sr
=
vuart_readl
(
vuart
,
UART_REG_SR
);
while
(
sr
&
UART_SR_RX_RDY
)
sr
=
vuart_readl
(
vuart
,
UART_REG_SR
);
vuart_writel
(
vuart
,
UART_HOST_TDR_DATA_W
(
data
),
UART_REG_HOST_TDR
);
}
/**
* It reads a number of bytes and it stores them in a given buffer
* @param[in] vuart token from dev_map()
* @param[out] buf destination for read bytes
* @param[in] size numeber of bytes to read
*
* @return the number of read bytes
*/
static
size_t
wr_vuart_read
(
struct
mapping_desc
*
vuart
,
char
*
buf
,
size_t
size
)
{
size_t
s
=
size
,
n_rx
=
0
;
int8_t
c
;
while
(
s
--
)
{
c
=
wr_vuart_rx
(
vuart
);
if
(
c
<
0
)
return
n_rx
;
*
buf
++
=
c
;
n_rx
++
;
}
return
n_rx
;
}
/**
* It flush vuart buffer.
*
* @param[in] vuart token from dev_map()
*
*/
static
void
wr_vuart_flush
(
struct
mapping_desc
*
vuart
)
{
char
rx
;
while
(
wr_vuart_read
(
vuart
,
&
rx
,
1
)
==
1
)
{}
}
/**
* It writes a number of bytes from a given buffer
* @param[in] vuart token from dev_map()
* @param[in] buf buffer to write
* @param[in] size numeber of bytes to write
*/
static
void
wr_vuart_write
(
struct
mapping_desc
*
vuart
,
char
*
buf
,
size_t
size
)
{
while
(
size
--
)
wr_vuart_tx
(
vuart
,
*
buf
++
);
}
static
void
wrpc_vuart_set_tty_raw
(
struct
termios
*
old_termios
)
{
struct
termios
newkey
;
tcgetattr
(
STDIN_FILENO
,
old_termios
);
memcpy
(
&
newkey
,
old_termios
,
sizeof
(
struct
termios
));
newkey
.
c_cflag
=
B9600
|
CS8
|
CLOCAL
|
CREAD
;
newkey
.
c_iflag
=
IGNPAR
;
newkey
.
c_oflag
=
0
;
newkey
.
c_lflag
=
ISIG
;
/* Keep C-c, C-z, ... */
tcflush
(
STDIN_FILENO
,
TCIFLUSH
);
tcsetattr
(
STDIN_FILENO
,
TCSANOW
,
&
newkey
);
}
static
void
wrpc_vuart_restore_tty
(
struct
termios
*
old_termios
)
{
tcsetattr
(
STDIN_FILENO
,
TCSANOW
,
old_termios
);
}
static
void
wrpc_vuart_term
(
struct
mapping_desc
*
vuart
,
int
keep_term
)
{
struct
termios
oldkey
;
...
...
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