Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
lwc
/
compare
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Pipelines
Members
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
1f7473d2
authored
Jul 28, 2019
by
Enrico Pozzobon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mostly similar firmwares
parent
0bf790c5
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
142 additions
and
208 deletions
+142
-208
templates/bluepill/src/main.ino
+25
-43
templates/esp32/src/main.ino
+27
-45
templates/esp32/src/uartp.c
+15
-15
templates/f7/Src/test.c
+0
-23
templates/uno/src/main.ino
+38
-53
templates/uno/src/uartp.c
+15
-15
templates/uno/test
+22
-14
No files found.
templates/bluepill/src/main.ino
View file @
1f7473d2
...
@@ -3,20 +3,22 @@
...
@@ -3,20 +3,22 @@
#include "uartp.h"
#include "uartp.h"
#define MAX_BYTES 100
#define MAX_BYTES 100
#define CMDBUF_LEN 72
static
uint8_t
cmdbuf
[
CMDBUF_LEN
];
//#define DEBUG
#define CRYPTO_BUSY A7
#define CRYPTO_BUSY A7
#define SerialOut Serial1
uint8_t
npub
[
CRYPTO_NPUBBYTES
];
uint8_t
npub
[
CRYPTO_NPUBBYTES
];
uint8_t
nsec
[
CRYPTO_NSECBYTES
];
uint8_t
nsec
[
CRYPTO_NSECBYTES
];
uint8_t
k
[
CRYPTO_KEYBYTES
];
uint8_t
k
[
CRYPTO_KEYBYTES
];
uint8_t
ad
[
MAX_BYTES
];
uint8_t
ad
[
MAX_BYTES
];
unsigned
long
long
int
adlen
;
uint8_t
m
[
MAX_BYTES
];
uint8_t
m
[
MAX_BYTES
];
unsigned
long
long
int
mlen
;
uint8_t
c
[
MAX_BYTES
];
uint8_t
c
[
MAX_BYTES
];
unsigned
long
long
int
clen
;
unsigned
long
long
int
adlen
=
0
;
int
res
;
unsigned
long
long
int
mlen
=
0
;
unsigned
long
long
int
clen
=
0
;
int
res
=
0
;
void
setup
();
void
setup
();
void
loop
();
void
loop
();
...
@@ -26,13 +28,13 @@ extern "C" {
...
@@ -26,13 +28,13 @@ extern "C" {
#endif
#endif
void
uart_wbyte
(
uint8_t
x
)
{
void
uart_wbyte
(
uint8_t
x
)
{
Serial
1
.
write
((
uint8_t
)
(
x
));
Serial
Out
.
write
((
uint8_t
)
(
x
));
}
}
uint8_t
uart_rbyte
()
{
uint8_t
uart_rbyte
()
{
int
r
;
int
r
;
do
{
do
{
r
=
Serial
1
.
read
();
r
=
Serial
Out
.
read
();
}
while
(
r
==
-
1
);
}
while
(
r
==
-
1
);
return
(
uint8_t
)
(
0xff
&
r
);
return
(
uint8_t
)
(
0xff
&
r
);
}
}
...
@@ -41,56 +43,37 @@ uint8_t uart_rbyte() {
...
@@ -41,56 +43,37 @@ uint8_t uart_rbyte() {
}
}
#endif
#endif
int
dbg_printf
(
const
char
*
format
,
...)
{
int
r
=
0
;
#ifdef DEBUG
#define DEBUG_BUF_LEN 80
char
printbuf
[
DEBUG_BUF_LEN
+
2
];
va_list
vargs
;
va_start
(
vargs
,
format
);
r
=
vsnprintf
(
printbuf
+
1
,
DEBUG_BUF_LEN
,
format
,
vargs
);
va_end
(
vargs
);
if
(
r
<
0
)
{
memcpy
(
printbuf
+
1
,
"DEBUG ERROR
\r\n
"
,
13
);
r
=
13
;
}
r
=
r
>
DEBUG_BUF_LEN
?
DEBUG_BUF_LEN
:
r
;
printbuf
[
0
]
=
0xde
;
// Debug messages should start with "\xde"
uartp_send
(
printbuf
,
r
+
1
);
#endif
return
r
;
}
void
my_assert
(
bool
b
)
{
void
my_assert
(
bool
b
)
{
if
(
b
)
if
(
b
)
return
;
return
;
dbg_printf
(
"Assertion failed
\r\n
"
);
for
(;;)
for
(;;)
yield
();
yield
();
}
}
void
setup
()
{
void
setup
()
{
Serial
1
.
begin
(
115200
);
Serial
Out
.
begin
(
115200
);
pinMode
(
CRYPTO_BUSY
,
OUTPUT
);
pinMode
(
CRYPTO_BUSY
,
OUTPUT
);
digitalWrite
(
CRYPTO_BUSY
,
HIGH
);
digitalWrite
(
CRYPTO_BUSY
,
HIGH
);
delay
(
100
);
delay
(
100
);
Serial1
.
print
(
"Hello, World!"
);
memset
(
npub
,
0
,
CRYPTO_NPUBBYTES
);
memset
(
nsec
,
0
,
CRYPTO_NSECBYTES
);
memset
(
k
,
0
,
CRYPTO_KEYBYTES
);
memset
(
ad
,
0
,
MAX_BYTES
);
memset
(
m
,
0
,
MAX_BYTES
);
memset
(
c
,
0
,
MAX_BYTES
);
SerialOut
.
print
(
"Hello, World!"
);
}
}
void
loop
()
{
void
loop
()
{
static
uint8_t
buf
[
256
]
;
int
res
;
uint16_t
len
=
uartp_recv
(
buf
,
255
);
uint16_t
len
=
uartp_recv
(
cmdbuf
,
CMDBUF_LEN
-
1
);
uint8_t
action
=
buf
[
0
];
uint8_t
action
=
cmd
buf
[
0
];
if
(
len
==
0
||
len
>
255
)
if
(
len
==
0
||
len
>
CMDBUF_LEN
-
1
)
return
;
return
;
uint16_t
l
=
len
-
1
;
uint16_t
l
=
len
-
1
;
uint16_t
rl
=
0
;
uint16_t
rl
=
0
;
uint8_t
*
var
=
buf
+
1
;
uint8_t
*
var
=
cmd
buf
+
1
;
switch
(
action
)
{
switch
(
action
)
{
case
'm'
:
my_assert
(
l
<=
MAX_BYTES
);
memcpy
(
m
,
var
,
l
);
mlen
=
l
;
break
;
case
'm'
:
my_assert
(
l
<=
MAX_BYTES
);
memcpy
(
m
,
var
,
l
);
mlen
=
l
;
break
;
case
'c'
:
my_assert
(
l
<=
MAX_BYTES
);
memcpy
(
c
,
var
,
l
);
clen
=
l
;
break
;
case
'c'
:
my_assert
(
l
<=
MAX_BYTES
);
memcpy
(
c
,
var
,
l
);
clen
=
l
;
break
;
...
@@ -124,10 +107,9 @@ void loop() {
...
@@ -124,10 +107,9 @@ void loop() {
case
'S'
:
var
=
nsec
;
rl
=
CRYPTO_NSECBYTES
;
break
;
case
'S'
:
var
=
nsec
;
rl
=
CRYPTO_NSECBYTES
;
break
;
case
'R'
:
var
=
(
uint8_t
*
)
&
res
;
rl
=
sizeof
(
res
);
break
;
case
'R'
:
var
=
(
uint8_t
*
)
&
res
;
rl
=
sizeof
(
res
);
break
;
default
:
default
:
dbg_printf
(
"Unknown command
\r\n
"
);
my_assert
(
false
);
my_assert
(
false
);
}
}
buf
[
0
]
=
action
;
cmd
buf
[
0
]
=
action
;
memcpy
(
buf
+
1
,
var
,
rl
);
memcpy
(
cmd
buf
+
1
,
var
,
rl
);
uartp_send
(
buf
,
rl
+
1
);
uartp_send
(
cmd
buf
,
rl
+
1
);
}
}
templates/esp32/src/main.ino
View file @
1f7473d2
...
@@ -3,19 +3,22 @@
...
@@ -3,19 +3,22 @@
#include "uartp.h"
#include "uartp.h"
#define MAX_BYTES 100
#define MAX_BYTES 100
#define CMDBUF_LEN 72
static
uint8_t
cmdbuf
[
CMDBUF_LEN
];
//#define DEBUG
#define CRYPTO_BUSY 12
#define CRYPTO_BUSY 12
#define SerialOut Serial
uint8_t
npub
[
CRYPTO_NPUBBYTES
];
uint8_t
npub
[
CRYPTO_NPUBBYTES
];
uint8_t
nsec
[
CRYPTO_NSECBYTES
];
uint8_t
nsec
[
CRYPTO_NSECBYTES
];
uint8_t
k
[
CRYPTO_KEYBYTES
];
uint8_t
k
[
CRYPTO_KEYBYTES
];
uint8_t
ad
[
MAX_BYTES
];
uint8_t
ad
[
MAX_BYTES
];
unsigned
long
long
int
adlen
;
uint8_t
m
[
MAX_BYTES
];
uint8_t
m
[
MAX_BYTES
];
unsigned
long
long
int
mlen
;
uint8_t
c
[
MAX_BYTES
];
uint8_t
c
[
MAX_BYTES
];
unsigned
long
long
int
clen
;
unsigned
long
long
int
adlen
=
0
;
unsigned
long
long
int
mlen
=
0
;
unsigned
long
long
int
clen
=
0
;
int
res
=
0
;
void
setup
();
void
setup
();
void
loop
();
void
loop
();
...
@@ -24,14 +27,14 @@ void loop();
...
@@ -24,14 +27,14 @@ void loop();
extern
"C"
{
extern
"C"
{
#endif
#endif
void
uart_w
ri
te
(
uint8_t
x
)
{
void
uart_w
by
te
(
uint8_t
x
)
{
Serial
.
write
((
uint8_t
)
(
x
));
Serial
Out
.
write
((
uint8_t
)
(
x
));
}
}
uint8_t
uart_r
ead
()
{
uint8_t
uart_r
byte
()
{
int
r
;
int
r
;
do
{
do
{
r
=
Serial
.
read
();
r
=
Serial
Out
.
read
();
}
while
(
r
==
-
1
);
}
while
(
r
==
-
1
);
return
(
uint8_t
)
(
0xff
&
r
);
return
(
uint8_t
)
(
0xff
&
r
);
}
}
...
@@ -40,58 +43,37 @@ uint8_t uart_read() {
...
@@ -40,58 +43,37 @@ uint8_t uart_read() {
}
}
#endif
#endif
#ifdef DEBUG
#define DEBUG_BUF_LEN 80
int
dbg_printf
(
const
char
*
format
,
...)
{
char
printbuf
[
DEBUG_BUF_LEN
+
2
];
va_list
vargs
;
va_start
(
vargs
,
format
);
int
r
=
vsnprintf
(
printbuf
+
1
,
DEBUG_BUF_LEN
,
format
,
vargs
);
va_end
(
vargs
);
if
(
r
<
0
)
{
memcpy
(
printbuf
+
1
,
"DEBUG ERROR
\r\n
"
,
13
);
r
=
13
;
}
r
=
r
>
DEBUG_BUF_LEN
?
DEBUG_BUF_LEN
:
r
;
printbuf
[
0
]
=
0xde
;
// Debug messages should start with "\xde"
uartp_send
(
printbuf
,
r
+
1
);
return
r
;
}
#else
#define dbg_printf(...) (0)
#endif
void
my_assert
(
bool
b
)
{
void
my_assert
(
bool
b
)
{
if
(
b
)
if
(
b
)
return
;
return
;
dbg_printf
(
"Assertion failed
\r\n
"
);
for
(;;)
for
(;;)
yield
();
yield
();
}
}
void
setup
()
{
void
setup
()
{
Serial
.
begin
(
115200
);
Serial
Out
.
begin
(
115200
);
pinMode
(
CRYPTO_BUSY
,
OUTPUT
);
pinMode
(
CRYPTO_BUSY
,
OUTPUT
);
digitalWrite
(
CRYPTO_BUSY
,
HIGH
);
digitalWrite
(
CRYPTO_BUSY
,
HIGH
);
delay
(
100
);
delay
(
100
);
Serial
.
print
(
"Hello, World!"
);
memset
(
npub
,
0
,
CRYPTO_NPUBBYTES
);
memset
(
nsec
,
0
,
CRYPTO_NSECBYTES
);
memset
(
k
,
0
,
CRYPTO_KEYBYTES
);
memset
(
ad
,
0
,
MAX_BYTES
);
memset
(
m
,
0
,
MAX_BYTES
);
memset
(
c
,
0
,
MAX_BYTES
);
SerialOut
.
print
(
"Hello, World!"
);
}
}
void
loop
()
{
void
loop
()
{
static
uint8_t
buf
[
256
];
int
res
;
int
res
;
uint16_t
len
=
uartp_recv
(
buf
,
255
);
uint16_t
len
=
uartp_recv
(
cmdbuf
,
CMDBUF_LEN
-
1
);
uint8_t
action
=
buf
[
0
];
uint8_t
action
=
cmd
buf
[
0
];
if
(
len
==
0
||
len
>
255
)
if
(
len
==
0
||
len
>
CMDBUF_LEN
-
1
)
return
;
return
;
uint16_t
l
=
len
-
1
;
uint16_t
l
=
len
-
1
;
uint16_t
rl
=
0
;
uint16_t
rl
=
0
;
uint8_t
*
var
=
buf
+
1
;
uint8_t
*
var
=
cmd
buf
+
1
;
switch
(
action
)
{
switch
(
action
)
{
case
'm'
:
my_assert
(
l
<=
MAX_BYTES
);
memcpy
(
m
,
var
,
l
);
mlen
=
l
;
break
;
case
'm'
:
my_assert
(
l
<=
MAX_BYTES
);
memcpy
(
m
,
var
,
l
);
mlen
=
l
;
break
;
case
'c'
:
my_assert
(
l
<=
MAX_BYTES
);
memcpy
(
c
,
var
,
l
);
clen
=
l
;
break
;
case
'c'
:
my_assert
(
l
<=
MAX_BYTES
);
memcpy
(
c
,
var
,
l
);
clen
=
l
;
break
;
...
@@ -123,11 +105,11 @@ void loop() {
...
@@ -123,11 +105,11 @@ void loop() {
case
'K'
:
var
=
k
;
rl
=
CRYPTO_KEYBYTES
;
break
;
case
'K'
:
var
=
k
;
rl
=
CRYPTO_KEYBYTES
;
break
;
case
'P'
:
var
=
npub
;
rl
=
CRYPTO_NPUBBYTES
;
break
;
case
'P'
:
var
=
npub
;
rl
=
CRYPTO_NPUBBYTES
;
break
;
case
'S'
:
var
=
nsec
;
rl
=
CRYPTO_NSECBYTES
;
break
;
case
'S'
:
var
=
nsec
;
rl
=
CRYPTO_NSECBYTES
;
break
;
case
'R'
:
var
=
(
uint8_t
*
)
&
res
;
rl
=
sizeof
(
res
);
break
;
default
:
default
:
dbg_printf
(
"Unknown command
\r\n
"
);
my_assert
(
false
);
my_assert
(
false
);
}
}
buf
[
0
]
=
action
;
cmd
buf
[
0
]
=
action
;
memcpy
(
buf
+
1
,
var
,
rl
);
memcpy
(
cmd
buf
+
1
,
var
,
rl
);
uartp_send
(
buf
,
rl
+
1
);
uartp_send
(
cmd
buf
,
rl
+
1
);
}
}
templates/esp32/src/uartp.c
View file @
1f7473d2
#include <stdint.h>
#include <stdint.h>
#include "uartp.h"
#include "uartp.h"
extern
void
uart_w
ri
te
(
uint8_t
x
);
extern
void
uart_w
by
te
(
uint8_t
x
);
extern
uint8_t
uart_r
ead
();
extern
uint8_t
uart_r
byte
();
// Simple serial protocol with packets and checksum
// Simple serial protocol with packets and checksum
const
uint8_t
AMUX_TAG
=
0xf9
;
const
uint8_t
AMUX_TAG
=
0xf9
;
...
@@ -13,24 +13,24 @@ void uartp_send(const void *src, uint16_t len) {
...
@@ -13,24 +13,24 @@ void uartp_send(const void *src, uint16_t len) {
uint8_t
len_ind_0
,
len_ind_1
,
fcs
,
info
;
uint8_t
len_ind_0
,
len_ind_1
,
fcs
,
info
;
const
uint8_t
*
buf
=
(
const
uint8_t
*
)
src
;
const
uint8_t
*
buf
=
(
const
uint8_t
*
)
src
;
uart_w
ri
te
(
AMUX_TAG
);
uart_w
by
te
(
AMUX_TAG
);
len_ind_0
=
(
uint8_t
)
(
0xff
&
len
);
len_ind_0
=
(
uint8_t
)
(
0xff
&
len
);
len_ind_1
=
(
uint8_t
)
(
0xff
&
(
len
>>
7
));
len_ind_1
=
(
uint8_t
)
(
0xff
&
(
len
>>
7
));
if
(
len
<
128
)
{
if
(
len
<
128
)
{
uart_w
ri
te
(
len_ind_0
);
uart_w
by
te
(
len_ind_0
);
}
else
{
}
else
{
uart_w
ri
te
(
len_ind_0
|
AMUX_EXT
);
uart_w
by
te
(
len_ind_0
|
AMUX_EXT
);
uart_w
ri
te
(
len_ind_1
);
uart_w
by
te
(
len_ind_1
);
}
}
fcs
=
0
;
fcs
=
0
;
for
(
uint16_t
i
=
0
;
i
<
len
;
i
++
)
{
for
(
uint16_t
i
=
0
;
i
<
len
;
i
++
)
{
info
=
buf
[
i
];
info
=
buf
[
i
];
fcs
+=
info
;
fcs
+=
info
;
uart_w
ri
te
(
buf
[
i
]);
uart_w
by
te
(
buf
[
i
]);
}
}
fcs
=
255
-
fcs
;
fcs
=
255
-
fcs
;
uart_w
ri
te
(
fcs
);
uart_w
by
te
(
fcs
);
uart_w
ri
te
(
AMUX_END
);
uart_w
by
te
(
AMUX_END
);
}
}
...
@@ -44,13 +44,13 @@ uint16_t uartp_recv(void *dst, uint16_t buf_len) {
...
@@ -44,13 +44,13 @@ uint16_t uartp_recv(void *dst, uint16_t buf_len) {
do
{
do
{
tag_old
=
tag
;
tag_old
=
tag
;
tag
=
uart_r
ead
();
tag
=
uart_r
byte
();
}
while
(
tag
!=
AMUX_TAG
||
tag_old
!=
AMUX_END
);
}
while
(
tag
!=
AMUX_TAG
||
tag_old
!=
AMUX_END
);
len
=
(
uint16_t
)
uart_r
ead
();
len
=
(
uint16_t
)
uart_r
byte
();
if
(
len
&
AMUX_EXT
)
{
if
(
len
&
AMUX_EXT
)
{
len
&=
(
~
AMUX_EXT
);
len
&=
(
~
AMUX_EXT
);
len
|=
(
uint16_t
)
(
uart_r
ead
()
<<
7
);
len
|=
(
uint16_t
)
(
uart_r
byte
()
<<
7
);
}
}
if
(
len
>
buf_len
)
{
if
(
len
>
buf_len
)
{
return
len
;
return
len
;
...
@@ -59,12 +59,12 @@ uint16_t uartp_recv(void *dst, uint16_t buf_len) {
...
@@ -59,12 +59,12 @@ uint16_t uartp_recv(void *dst, uint16_t buf_len) {
uint16_t
i
=
0
;
uint16_t
i
=
0
;
cs
=
0
;
cs
=
0
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
for
(
i
=
0
;
i
<
len
;
i
++
)
{
info
=
uart_r
ead
();
info
=
uart_r
byte
();
buf
[
i
]
=
info
;
buf
[
i
]
=
info
;
cs
+=
info
;
cs
+=
info
;
}
}
cs
+=
uart_r
ead
();
cs
+=
uart_r
byte
();
tag
=
uart_r
ead
();
tag
=
uart_r
byte
();
if
(
0xff
==
cs
)
{
if
(
0xff
==
cs
)
{
if
(
AMUX_END
==
tag
)
{
if
(
AMUX_END
==
tag
)
{
return
len
;
return
len
;
...
...
templates/f7/Src/test.c
View file @
1f7473d2
...
@@ -57,31 +57,9 @@ static inline void interrupts() {
...
@@ -57,31 +57,9 @@ static inline void interrupts() {
// TODO: if necessary, provide a way to enable interrupts
// TODO: if necessary, provide a way to enable interrupts
}
}
#define DEBUG_BUF_LEN 80
int
dbg_printf
(
const
char
*
format
,
...)
{
int
r
=
0
;
char
printbuf
[
DEBUG_BUF_LEN
+
2
];
va_list
vargs
;
va_start
(
vargs
,
format
);
r
=
vsnprintf
(
printbuf
+
1
,
DEBUG_BUF_LEN
,
format
,
vargs
);
va_end
(
vargs
);
if
(
r
<
0
)
{
memcpy
(
printbuf
+
1
,
"DEBUG ERROR
\r\n
"
,
13
);
r
=
13
;
}
r
=
r
>
DEBUG_BUF_LEN
?
DEBUG_BUF_LEN
:
r
;
printbuf
[
0
]
=
0xde
;
// Debug messages should start with "\xde"
uartp_send
(
printbuf
,
r
+
1
);
return
r
;
}
void
my_assert
(
bool
b
)
{
void
my_assert
(
bool
b
)
{
if
(
b
)
if
(
b
)
return
;
return
;
dbg_printf
(
"Assertion failed
\r\n
"
);
Error_Handler
();
Error_Handler
();
for
(;;);
for
(;;);
}
}
...
@@ -140,7 +118,6 @@ void test_loop() {
...
@@ -140,7 +118,6 @@ void test_loop() {
case
'S'
:
var
=
nsec
;
rl
=
CRYPTO_NSECBYTES
;
break
;
case
'S'
:
var
=
nsec
;
rl
=
CRYPTO_NSECBYTES
;
break
;
case
'R'
:
var
=
(
uint8_t
*
)
&
res
;
rl
=
sizeof
(
res
);
break
;
case
'R'
:
var
=
(
uint8_t
*
)
&
res
;
rl
=
sizeof
(
res
);
break
;
default:
default:
dbg_printf
(
"Unknown command
\r\n
"
);
my_assert
(
false
);
my_assert
(
false
);
}
}
buf
[
0
]
=
action
;
buf
[
0
]
=
action
;
...
...
templates/uno/src/main.ino
View file @
1f7473d2
...
@@ -3,32 +3,38 @@
...
@@ -3,32 +3,38 @@
#include "uartp.h"
#include "uartp.h"
#define MAX_BYTES 100
#define MAX_BYTES 100
#define CMDBUF_LEN 72
static
uint8_t
cmdbuf
[
CMDBUF_LEN
];
//#define DEBUG
#define CRYPTO_BUSY 12
#define CRYPTO_BUSY 12
#define SerialOut Serial
uint8_t
npub
[
CRYPTO_NPUBBYTES
];
uint8_t
npub
[
CRYPTO_NPUBBYTES
];
uint8_t
nsec
[
CRYPTO_NSECBYTES
];
uint8_t
nsec
[
CRYPTO_NSECBYTES
];
uint8_t
k
[
CRYPTO_KEYBYTES
];
uint8_t
k
[
CRYPTO_KEYBYTES
];
uint8_t
ad
[
MAX_BYTES
];
uint8_t
ad
[
MAX_BYTES
];
unsigned
long
long
int
adlen
;
uint8_t
m
[
MAX_BYTES
];
uint8_t
m
[
MAX_BYTES
];
unsigned
long
long
int
mlen
;
uint8_t
c
[
MAX_BYTES
];
uint8_t
c
[
MAX_BYTES
];
unsigned
long
long
int
clen
;
unsigned
long
long
int
adlen
=
0
;
unsigned
long
long
int
mlen
=
0
;
unsigned
long
long
int
clen
=
0
;
int
res
=
0
;
void
setup
();
void
loop
();
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
#endif
#endif
void
uart_w
ri
te
(
uint8_t
x
)
{
void
uart_w
by
te
(
uint8_t
x
)
{
Serial
.
write
((
uint8_t
)
(
x
));
Serial
Out
.
write
((
uint8_t
)
(
x
));
}
}
uint8_t
uart_r
ead
()
{
uint8_t
uart_r
byte
()
{
int
r
;
int
r
;
do
{
do
{
r
=
Serial
.
read
();
r
=
Serial
Out
.
read
();
}
while
(
r
==
-
1
);
}
while
(
r
==
-
1
);
return
(
uint8_t
)
(
0xff
&
r
);
return
(
uint8_t
)
(
0xff
&
r
);
}
}
...
@@ -37,65 +43,44 @@ uint8_t uart_read() {
...
@@ -37,65 +43,44 @@ uint8_t uart_read() {
}
}
#endif
#endif
#ifdef DEBUG
void
my_assert
(
bool
b
)
{
#define DEBUG_BUF_LEN 80
int
dbg_printf
(
const
char
*
format
,
...)
{
char
printbuf
[
DEBUG_BUF_LEN
+
2
];
va_list
vargs
;
va_start
(
vargs
,
format
);
int
r
=
vsnprintf
(
printbuf
+
1
,
DEBUG_BUF_LEN
,
format
,
vargs
);
va_end
(
vargs
);
if
(
r
<
0
)
{
memcpy
(
printbuf
+
1
,
"DEBUG ERROR
\r\n
"
,
13
);
r
=
13
;
}
r
=
r
>
DEBUG_BUF_LEN
?
DEBUG_BUF_LEN
:
r
;
printbuf
[
0
]
=
0xde
;
// Debug messages should start with "\xde"
uartp_send
(
printbuf
,
r
+
1
);
return
r
;
}
#else
#define dbg_printf(...) (0)
#endif
void
assert
(
bool
b
)
{
if
(
b
)
if
(
b
)
return
;
return
;
dbg_printf
(
"Assertion failed
\r\n
"
);
for
(;;)
for
(;;)
yield
();
yield
();
}
}
void
setup
()
{
void
setup
()
{
Serial
.
begin
(
115200
);
Serial
Out
.
begin
(
115200
);
pinMode
(
CRYPTO_BUSY
,
OUTPUT
);
pinMode
(
CRYPTO_BUSY
,
OUTPUT
);
digitalWrite
(
CRYPTO_BUSY
,
HIGH
);
digitalWrite
(
CRYPTO_BUSY
,
HIGH
);
delay
(
100
);
delay
(
100
);
Serial
.
print
(
"Hello, World!"
);
memset
(
npub
,
0
,
CRYPTO_NPUBBYTES
);
memset
(
nsec
,
0
,
CRYPTO_NSECBYTES
);
memset
(
k
,
0
,
CRYPTO_KEYBYTES
);
memset
(
ad
,
0
,
MAX_BYTES
);
memset
(
m
,
0
,
MAX_BYTES
);
memset
(
c
,
0
,
MAX_BYTES
);
SerialOut
.
print
(
"Hello, World!"
);
}
}
void
loop
()
{
void
loop
()
{
static
uint8_t
buf
[
256
];
int
res
;
int
res
;
uint16_t
len
=
uartp_recv
(
buf
,
255
);
uint16_t
len
=
uartp_recv
(
cmdbuf
,
CMDBUF_LEN
-
1
);
uint8_t
action
=
buf
[
0
];
uint8_t
action
=
cmd
buf
[
0
];
if
(
len
==
0
||
len
>
255
)
if
(
len
==
0
||
len
>
CMDBUF_LEN
-
1
)
return
;
return
;
uint16_t
l
=
len
-
1
;
uint16_t
l
=
len
-
1
;
uint16_t
rl
=
0
;
uint16_t
rl
=
0
;
uint8_t
*
var
=
buf
+
1
;
uint8_t
*
var
=
cmd
buf
+
1
;
switch
(
action
)
{
switch
(
action
)
{
case
'm'
:
assert
(
l
<=
MAX_BYTES
);
memcpy
(
m
,
var
,
l
);
mlen
=
l
;
break
;
case
'm'
:
my_
assert
(
l
<=
MAX_BYTES
);
memcpy
(
m
,
var
,
l
);
mlen
=
l
;
break
;
case
'c'
:
assert
(
l
<=
MAX_BYTES
);
memcpy
(
c
,
var
,
l
);
clen
=
l
;
break
;
case
'c'
:
my_
assert
(
l
<=
MAX_BYTES
);
memcpy
(
c
,
var
,
l
);
clen
=
l
;
break
;
case
'a'
:
assert
(
l
<=
MAX_BYTES
);
memcpy
(
ad
,
var
,
l
);
adlen
=
l
;
break
;
case
'a'
:
my_
assert
(
l
<=
MAX_BYTES
);
memcpy
(
ad
,
var
,
l
);
adlen
=
l
;
break
;
case
'k'
:
assert
(
l
==
CRYPTO_KEYBYTES
);
memcpy
(
k
,
var
,
l
);
break
;
case
'k'
:
my_
assert
(
l
==
CRYPTO_KEYBYTES
);
memcpy
(
k
,
var
,
l
);
break
;
case
'p'
:
assert
(
l
==
CRYPTO_NPUBBYTES
);
memcpy
(
npub
,
var
,
l
);
break
;
case
'p'
:
my_
assert
(
l
==
CRYPTO_NPUBBYTES
);
memcpy
(
npub
,
var
,
l
);
break
;
case
's'
:
assert
(
l
==
CRYPTO_NSECBYTES
);
memcpy
(
nsec
,
var
,
l
);
break
;
case
's'
:
my_
assert
(
l
==
CRYPTO_NSECBYTES
);
memcpy
(
nsec
,
var
,
l
);
break
;
case
'e'
:
case
'e'
:
noInterrupts
();
noInterrupts
();
asm
(
"nop"
);
asm
(
"nop"
);
...
@@ -120,11 +105,11 @@ void loop() {
...
@@ -120,11 +105,11 @@ void loop() {
case
'K'
:
var
=
k
;
rl
=
CRYPTO_KEYBYTES
;
break
;
case
'K'
:
var
=
k
;
rl
=
CRYPTO_KEYBYTES
;
break
;
case
'P'
:
var
=
npub
;
rl
=
CRYPTO_NPUBBYTES
;
break
;
case
'P'
:
var
=
npub
;
rl
=
CRYPTO_NPUBBYTES
;
break
;
case
'S'
:
var
=
nsec
;
rl
=
CRYPTO_NSECBYTES
;
break
;
case
'S'
:
var
=
nsec
;
rl
=
CRYPTO_NSECBYTES
;
break
;
case
'R'
:
var
=
(
uint8_t
*
)
&
res
;
rl
=
sizeof
(
res
);
break
;
default
:
default
:
dbg_printf
(
"Unknown command
\r\n
"
);
my_assert
(
false
);
assert
(
false
);
}
}
buf
[
0
]
=
action
;
cmd
buf
[
0
]
=
action
;
memcpy
(
buf
+
1
,
var
,
rl
);
memcpy
(
cmd
buf
+
1
,
var
,
rl
);
uartp_send
(
buf
,
rl
+
1
);
uartp_send
(
cmd
buf
,
rl
+
1
);
}
}
templates/uno/src/uartp.c
View file @
1f7473d2
#include <stdint.h>
#include <stdint.h>
#include "uartp.h"
#include "uartp.h"
extern
void
uart_w
ri
te
(
uint8_t
x
);
extern
void
uart_w
by
te
(
uint8_t
x
);
extern
uint8_t
uart_r
ead
();
extern
uint8_t
uart_r
byte
();
// Simple serial protocol with packets and checksum
// Simple serial protocol with packets and checksum
const
uint8_t
AMUX_TAG
=
0xf9
;
const
uint8_t
AMUX_TAG
=
0xf9
;
...
@@ -13,24 +13,24 @@ void uartp_send(const void *src, uint16_t len) {
...
@@ -13,24 +13,24 @@ void uartp_send(const void *src, uint16_t len) {
uint8_t
len_ind_0
,
len_ind_1
,
fcs
,
info
;
uint8_t
len_ind_0
,
len_ind_1
,
fcs
,
info
;
const
uint8_t
*
buf
=
(
const
uint8_t
*
)
src
;
const
uint8_t
*
buf
=
(
const
uint8_t
*
)
src
;
uart_w
ri
te
(
AMUX_TAG
);
uart_w
by
te
(
AMUX_TAG
);
len_ind_0
=
(
uint8_t
)
(
0xff
&
len
);
len_ind_0
=
(
uint8_t
)
(
0xff
&
len
);
len_ind_1
=
(
uint8_t
)
(
0xff
&
(
len
>>
7
));
len_ind_1
=
(
uint8_t
)
(
0xff
&
(
len
>>
7
));
if
(
len
<
128
)
{
if
(
len
<
128
)
{
uart_w
ri
te
(
len_ind_0
);
uart_w
by
te
(
len_ind_0
);
}
else
{
}
else
{
uart_w
ri
te
(
len_ind_0
|
AMUX_EXT
);
uart_w
by
te
(
len_ind_0
|
AMUX_EXT
);
uart_w
ri
te
(
len_ind_1
);
uart_w
by
te
(
len_ind_1
);
}
}
fcs
=
0
;
fcs
=
0
;
for
(
uint16_t
i
=
0
;
i
<
len
;
i
++
)
{
for
(
uint16_t
i
=
0
;
i
<
len
;
i
++
)
{
info
=
buf
[
i
];
info
=
buf
[
i
];
fcs
+=
info
;
fcs
+=
info
;
uart_w
ri
te
(
buf
[
i
]);
uart_w
by
te
(
buf
[
i
]);
}
}
fcs
=
255
-
fcs
;
fcs
=
255
-
fcs
;
uart_w
ri
te
(
fcs
);
uart_w
by
te
(
fcs
);
uart_w
ri
te
(
AMUX_END
);
uart_w
by
te
(
AMUX_END
);
}
}
...
@@ -44,13 +44,13 @@ uint16_t uartp_recv(void *dst, uint16_t buf_len) {
...
@@ -44,13 +44,13 @@ uint16_t uartp_recv(void *dst, uint16_t buf_len) {
do
{
do
{
tag_old
=
tag
;
tag_old
=
tag
;
tag
=
uart_r
ead
();
tag
=
uart_r
byte
();
}
while
(
tag
!=
AMUX_TAG
||
tag_old
!=
AMUX_END
);
}
while
(
tag
!=
AMUX_TAG
||
tag_old
!=
AMUX_END
);
len
=
(
uint16_t
)
uart_r
ead
();
len
=
(
uint16_t
)
uart_r
byte
();
if
(
len
&
AMUX_EXT
)
{
if
(
len
&
AMUX_EXT
)
{
len
&=
(
~
AMUX_EXT
);
len
&=
(
~
AMUX_EXT
);
len
|=
(
uint16_t
)
(
uart_r
ead
()
<<
7
);
len
|=
(
uint16_t
)
(
uart_r
byte
()
<<
7
);
}
}
if
(
len
>
buf_len
)
{
if
(
len
>
buf_len
)
{
return
len
;
return
len
;
...
@@ -59,12 +59,12 @@ uint16_t uartp_recv(void *dst, uint16_t buf_len) {
...
@@ -59,12 +59,12 @@ uint16_t uartp_recv(void *dst, uint16_t buf_len) {
uint16_t
i
=
0
;
uint16_t
i
=
0
;
cs
=
0
;
cs
=
0
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
for
(
i
=
0
;
i
<
len
;
i
++
)
{
info
=
uart_r
ead
();
info
=
uart_r
byte
();
buf
[
i
]
=
info
;
buf
[
i
]
=
info
;
cs
+=
info
;
cs
+=
info
;
}
}
cs
+=
uart_r
ead
();
cs
+=
uart_r
byte
();
tag
=
uart_r
ead
();
tag
=
uart_r
byte
();
if
(
0xff
==
cs
)
{
if
(
0xff
==
cs
)
{
if
(
AMUX_END
==
tag
)
{
if
(
AMUX_END
==
tag
)
{
return
len
;
return
len
;
...
...
templates/uno/test
View file @
1f7473d2
...
@@ -104,6 +104,21 @@ class UARTP:
...
@@ -104,6 +104,21 @@ class UARTP:
else
:
else
:
return
buf
return
buf
def
stdin_read
(
n
):
b
=
sys
.
stdin
.
buffer
.
read
(
n
)
if
len
(
b
)
!=
n
:
sys
.
exit
(
1
)
return
b
def
stdin_readvar
():
l
=
stdin_read
(
4
)
(
l
,
)
=
struct
.
unpack
(
"<I"
,
l
)
v
=
stdin_read
(
l
)
return
v
def
main
(
argv
):
def
main
(
argv
):
eprint
(
argv
[
0
])
eprint
(
argv
[
0
])
script_dir
=
os
.
path
.
split
(
argv
[
0
])[
0
]
script_dir
=
os
.
path
.
split
(
argv
[
0
])[
0
]
...
@@ -113,22 +128,15 @@ def main(argv):
...
@@ -113,22 +128,15 @@ def main(argv):
dev
=
get_serial
()
dev
=
get_serial
()
flash
(
dev
)
flash
(
dev
)
eprint
(
"Flashed"
)
eprint
(
"Flashed"
)
time
.
sleep
(
1
)
time
.
sleep
(
0.
1
)
ser
=
serial
.
Serial
(
dev
,
baudrate
=
115200
,
timeout
=
5
)
ser
=
serial
.
Serial
(
dev
,
baudrate
=
115200
,
timeout
=
5
)
uartp
=
UARTP
(
ser
)
uartp
=
UARTP
(
ser
)
def
stdin_read
(
n
):
ser
.
setDTR
(
True
)
b
=
sys
.
stdin
.
buffer
.
read
(
n
)
time
.
sleep
(
0.01
)
if
len
(
b
)
!=
n
:
ser
.
setDTR
(
False
)
sys
.
exit
(
1
)
time
.
sleep
(
1
)
return
b
def
stdin_readvar
():
l
=
stdin_read
(
4
)
(
l
,
)
=
struct
.
unpack
(
"<I"
,
l
)
v
=
stdin_read
(
l
)
return
v
exp_hello
=
b
"Hello, World!"
exp_hello
=
b
"Hello, World!"
hello
=
ser
.
read
(
len
(
exp_hello
))
hello
=
ser
.
read
(
len
(
exp_hello
))
...
@@ -167,7 +175,7 @@ def main(argv):
...
@@ -167,7 +175,7 @@ def main(argv):
c
=
struct
.
pack
(
"B"
,
action
)
c
=
struct
.
pack
(
"B"
,
action
)
uartp
.
send
(
c
)
uartp
.
send
(
c
)
ack
=
uartp
.
recv
()
ack
=
uartp
.
recv
()
if
len
(
ack
)
!=
1
or
ack
[
0
]
!=
action
:
if
len
(
ack
)
<
1
or
ack
[
0
]
!=
action
:
raise
Exception
(
"Unacknowledged variable transfer"
)
raise
Exception
(
"Unacknowledged variable transfer"
)
eprint
(
"Operation
%
c completed successfully"
%
action
)
eprint
(
"Operation
%
c completed successfully"
%
action
)
...
...
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