Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
11592951
Unverified
Commit
11592951
authored
Dec 07, 2018
by
Arnim Läuger
Committed by
GitHub
Dec 07, 2018
Browse files
Merge pull request #2582 from nodemcu/dev
Next master drop
parents
4095c408
61433c44
Changes
125
Hide whitespace changes
Inline
Side-by-side
app/modules/Makefile
View file @
11592951
...
@@ -44,7 +44,7 @@ INCLUDES += -I ../libc
...
@@ -44,7 +44,7 @@ INCLUDES += -I ../libc
INCLUDES
+=
-I
../coap
INCLUDES
+=
-I
../coap
INCLUDES
+=
-I
../mqtt
INCLUDES
+=
-I
../mqtt
INCLUDES
+=
-I
../u8g2lib/u8g2/src/clib
INCLUDES
+=
-I
../u8g2lib/u8g2/src/clib
INCLUDES
+=
-I
../ucglib
INCLUDES
+=
-I
../ucglib
/ucg/src/clib
INCLUDES
+=
-I
../lua
INCLUDES
+=
-I
../lua
INCLUDES
+=
-I
../pcm
INCLUDES
+=
-I
../pcm
INCLUDES
+=
-I
../platform
INCLUDES
+=
-I
../platform
...
...
app/modules/cron.c
View file @
11592951
...
@@ -32,18 +32,23 @@ static size_t cronent_count = 0;
...
@@ -32,18 +32,23 @@ static size_t cronent_count = 0;
static
uint64_t
lcron_parsepart
(
lua_State
*
L
,
char
*
str
,
char
**
end
,
uint8_t
min
,
uint8_t
max
)
{
static
uint64_t
lcron_parsepart
(
lua_State
*
L
,
char
*
str
,
char
**
end
,
uint8_t
min
,
uint8_t
max
)
{
uint64_t
res
=
0
;
uint64_t
res
=
0
;
/* Gobble whitespace before potential stars; no strtol on that path */
while
(
*
str
!=
'\0'
&&
(
*
str
==
' '
||
*
str
==
'\t'
))
{
str
++
;
}
if
(
str
[
0
]
==
'*'
)
{
if
(
str
[
0
]
==
'*'
)
{
uint32_t
each
=
1
;
uint32_t
each
=
1
;
*
end
=
str
+
1
;
*
end
=
str
+
1
;
if
(
str
[
1
]
==
'/'
)
{
if
(
str
[
1
]
==
'/'
)
{
each
=
strtol
(
str
+
2
,
end
,
10
);
each
=
strtol
(
str
+
2
,
end
,
10
);
if
(
end
!=
0
)
if
(
each
==
0
||
each
>=
max
-
min
)
{
if
(
each
==
0
||
each
>=
max
-
min
)
{
return
luaL_error
(
L
,
"invalid spec (each %d)"
,
each
);
return
luaL_error
(
L
,
"invalid spec (each %d)"
,
each
);
}
}
}
}
for
(
int
i
=
0
;
i
<=
(
max
-
min
);
i
++
)
{
for
(
int
i
=
0
;
i
<=
(
max
-
min
);
i
++
)
{
if
((
(
min
+
i
)
%
each
)
==
0
)
res
|=
(
uint64_t
)
1
<<
i
;
if
((
i
%
each
)
==
0
)
res
|=
(
uint64_t
)
1
<<
i
;
}
}
}
else
{
}
else
{
uint32_t
val
;
uint32_t
val
;
...
@@ -63,14 +68,17 @@ static uint64_t lcron_parsepart(lua_State *L, char *str, char **end, uint8_t min
...
@@ -63,14 +68,17 @@ static uint64_t lcron_parsepart(lua_State *L, char *str, char **end, uint8_t min
static
int
lcron_parsedesc
(
lua_State
*
L
,
char
*
str
,
struct
cronent_desc
*
desc
)
{
static
int
lcron_parsedesc
(
lua_State
*
L
,
char
*
str
,
struct
cronent_desc
*
desc
)
{
char
*
s
=
str
;
char
*
s
=
str
;
desc
->
min
=
lcron_parsepart
(
L
,
s
,
&
s
,
0
,
59
);
desc
->
min
=
lcron_parsepart
(
L
,
s
,
&
s
,
0
,
59
);
if
(
*
s
!=
' '
)
return
luaL_error
(
L
,
"invalid spec (separator @%d)"
,
s
-
str
);
if
(
*
s
!=
' '
&&
*
s
!=
'\t'
)
return
luaL_error
(
L
,
"invalid spec (separator @%d)"
,
s
-
str
);
desc
->
hour
=
lcron_parsepart
(
L
,
s
+
1
,
&
s
,
0
,
23
);
desc
->
hour
=
lcron_parsepart
(
L
,
s
+
1
,
&
s
,
0
,
23
);
if
(
*
s
!=
' '
)
return
luaL_error
(
L
,
"invalid spec (separator @%d)"
,
s
-
str
);
if
(
*
s
!=
' '
&&
*
s
!=
'\t'
)
return
luaL_error
(
L
,
"invalid spec (separator @%d)"
,
s
-
str
);
desc
->
dom
=
lcron_parsepart
(
L
,
s
+
1
,
&
s
,
1
,
31
);
desc
->
dom
=
lcron_parsepart
(
L
,
s
+
1
,
&
s
,
1
,
31
);
if
(
*
s
!=
' '
)
return
luaL_error
(
L
,
"invalid spec (separator @%d)"
,
s
-
str
);
if
(
*
s
!=
' '
&&
*
s
!=
'\t'
)
return
luaL_error
(
L
,
"invalid spec (separator @%d)"
,
s
-
str
);
desc
->
mon
=
lcron_parsepart
(
L
,
s
+
1
,
&
s
,
1
,
12
);
desc
->
mon
=
lcron_parsepart
(
L
,
s
+
1
,
&
s
,
1
,
12
);
if
(
*
s
!=
' '
)
return
luaL_error
(
L
,
"invalid spec (separator @%d)"
,
s
-
str
);
if
(
*
s
!=
' '
&&
*
s
!=
'\t'
)
return
luaL_error
(
L
,
"invalid spec (separator @%d)"
,
s
-
str
);
desc
->
dow
=
lcron_parsepart
(
L
,
s
+
1
,
&
s
,
0
,
6
);
desc
->
dow
=
lcron_parsepart
(
L
,
s
+
1
,
&
s
,
0
,
6
);
while
(
*
s
!=
'\0'
&&
(
*
s
==
' '
||
*
s
==
'\t'
))
{
s
++
;
}
if
(
*
s
!=
0
)
return
luaL_error
(
L
,
"invalid spec (trailing @%d)"
,
s
-
str
);
if
(
*
s
!=
0
)
return
luaL_error
(
L
,
"invalid spec (trailing @%d)"
,
s
-
str
);
return
0
;
return
0
;
}
}
...
@@ -78,6 +86,7 @@ static int lcron_parsedesc(lua_State *L, char *str, struct cronent_desc *desc) {
...
@@ -78,6 +86,7 @@ static int lcron_parsedesc(lua_State *L, char *str, struct cronent_desc *desc) {
static
int
lcron_create
(
lua_State
*
L
)
{
static
int
lcron_create
(
lua_State
*
L
)
{
// Check arguments
// Check arguments
char
*
strdesc
=
(
char
*
)
luaL_checkstring
(
L
,
1
);
char
*
strdesc
=
(
char
*
)
luaL_checkstring
(
L
,
1
);
void
*
newlist
;
luaL_checkanyfunction
(
L
,
2
);
luaL_checkanyfunction
(
L
,
2
);
// Parse description
// Parse description
struct
cronent_desc
desc
;
struct
cronent_desc
desc
;
...
@@ -93,8 +102,12 @@ static int lcron_create(lua_State *L) {
...
@@ -93,8 +102,12 @@ static int lcron_create(lua_State *L) {
// Set entry
// Set entry
ud
->
desc
=
desc
;
ud
->
desc
=
desc
;
// Store entry
// Store entry
newlist
=
os_realloc
(
cronent_list
,
sizeof
(
int
)
*
(
cronent_count
+
1
));
if
(
newlist
==
NULL
)
{
return
luaL_error
(
L
,
"out of memory"
);
}
lua_pushvalue
(
L
,
-
1
);
lua_pushvalue
(
L
,
-
1
);
cronent_list
=
os_realloc
(
cronent_list
,
sizeof
(
int
)
*
(
cronent_count
+
1
))
;
cronent_list
=
newlist
;
cronent_list
[
cronent_count
++
]
=
luaL_ref
(
L
,
LUA_REGISTRYINDEX
);
cronent_list
[
cronent_count
++
]
=
luaL_ref
(
L
,
LUA_REGISTRYINDEX
);
return
1
;
return
1
;
}
}
...
@@ -120,8 +133,13 @@ static int lcron_schedule(lua_State *L) {
...
@@ -120,8 +133,13 @@ static int lcron_schedule(lua_State *L) {
ud
->
desc
=
desc
;
ud
->
desc
=
desc
;
size_t
i
=
lcron_findindex
(
L
,
ud
);
size_t
i
=
lcron_findindex
(
L
,
ud
);
if
(
i
==
-
1
)
{
if
(
i
==
-
1
)
{
void
*
newlist
;
newlist
=
os_realloc
(
cronent_list
,
sizeof
(
int
)
*
(
cronent_count
+
1
));
if
(
newlist
==
NULL
)
{
return
luaL_error
(
L
,
"out of memory"
);
}
cronent_list
=
newlist
;
lua_pushvalue
(
L
,
1
);
lua_pushvalue
(
L
,
1
);
cronent_list
=
os_realloc
(
cronent_list
,
sizeof
(
int
)
*
(
cronent_count
+
1
));
cronent_list
[
cronent_count
++
]
=
lua_ref
(
L
,
LUA_REGISTRYINDEX
);
cronent_list
[
cronent_count
++
]
=
lua_ref
(
L
,
LUA_REGISTRYINDEX
);
}
}
return
0
;
return
0
;
...
...
app/modules/ds18b20.c
View file @
11592951
...
@@ -67,6 +67,9 @@ static int ds18b20_lua_readoutdone(void);
...
@@ -67,6 +67,9 @@ static int ds18b20_lua_readoutdone(void);
// Setup onewire bus for DS18B20 temperature sensors
// Setup onewire bus for DS18B20 temperature sensors
// Lua: ds18b20.setup(OW_BUS_PIN)
// Lua: ds18b20.setup(OW_BUS_PIN)
static
int
ds18b20_lua_setup
(
lua_State
*
L
)
{
static
int
ds18b20_lua_setup
(
lua_State
*
L
)
{
platform_print_deprecation_note
(
"ds18b20 C module superseded by Lua implementation"
,
"soon"
);
// check ow bus pin value
// check ow bus pin value
if
(
!
lua_isnumber
(
L
,
1
)
||
lua_isnumber
(
L
,
1
)
==
0
)
{
if
(
!
lua_isnumber
(
L
,
1
)
||
lua_isnumber
(
L
,
1
)
==
0
)
{
return
luaL_error
(
L
,
"wrong 1-wire pin"
);
return
luaL_error
(
L
,
"wrong 1-wire pin"
);
...
...
app/modules/file.c
View file @
11592951
...
@@ -587,7 +587,7 @@ static int file_mount( lua_State *L )
...
@@ -587,7 +587,7 @@ static int file_mount( lua_State *L )
if
(
vol
->
vol
=
vfs_mount
(
ldrv
,
num
))
{
if
(
vol
->
vol
=
vfs_mount
(
ldrv
,
num
))
{
/* set its metatable */
/* set its metatable */
luaL_getmetatable
(
L
,
"
vfs
.vol"
);
luaL_getmetatable
(
L
,
"
file
.vol"
);
lua_setmetatable
(
L
,
-
2
);
lua_setmetatable
(
L
,
-
2
);
return
1
;
return
1
;
}
else
{
}
else
{
...
...
app/modules/mqtt.c
View file @
11592951
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
#include "user_interface.h"
#include "user_interface.h"
#define MQTT_BUF_SIZE 1
024
#define MQTT_BUF_SIZE 1
460
#define MQTT_DEFAULT_KEEPALIVE 60
#define MQTT_DEFAULT_KEEPALIVE 60
#define MQTT_MAX_CLIENT_LEN 64
#define MQTT_MAX_CLIENT_LEN 64
#define MQTT_MAX_USER_LEN 64
#define MQTT_MAX_USER_LEN 64
...
@@ -46,17 +46,32 @@ typedef struct mqtt_event_data_t
...
@@ -46,17 +46,32 @@ typedef struct mqtt_event_data_t
#define RECONNECT_POSSIBLE 1
#define RECONNECT_POSSIBLE 1
#define RECONNECT_ON 2
#define RECONNECT_ON 2
typedef
enum
{
MQTT_RECV_NORMAL
,
MQTT_RECV_BUFFERING_SHORT
,
MQTT_RECV_BUFFERING
,
MQTT_RECV_SKIPPING
,
}
tReceiveState
;
typedef
struct
mqtt_state_t
typedef
struct
mqtt_state_t
{
{
uint16_t
port
;
uint16_t
port
;
uint8_t
auto_reconnect
;
// 0 is not auto_reconnect. 1 is auto reconnect, but never connected. 2 is auto reconnect, but once connected
uint8_t
auto_reconnect
;
// 0 is not auto_reconnect. 1 is auto reconnect, but never connected. 2 is auto reconnect, but once connected
mqtt_connect_info_t
*
connect_info
;
mqtt_connect_info_t
*
connect_info
;
uint16_t
message_length
;
uint16_t
message_length_read
;
mqtt_connection_t
mqtt_connection
;
mqtt_connection_t
mqtt_connection
;
msg_queue_t
*
pending_msg_q
;
msg_queue_t
*
pending_msg_q
;
uint8_t
*
recv_buffer
;
// heap buffer for multi-packet rx
uint8_t
*
recv_buffer_wp
;
// write pointer in multi-packet rx
union
{
uint16_t
recv_buffer_size
;
// size of recv_buffer
uint32_t
recv_buffer_skip
;
// number of bytes left to skip, in skipping state
};
tReceiveState
recv_buffer_state
;
}
mqtt_state_t
;
}
mqtt_state_t
;
typedef
struct
lmqtt_userdata
typedef
struct
lmqtt_userdata
{
{
struct
espconn
*
pesp_conn
;
struct
espconn
*
pesp_conn
;
...
@@ -65,6 +80,7 @@ typedef struct lmqtt_userdata
...
@@ -65,6 +80,7 @@ typedef struct lmqtt_userdata
int
cb_connect_fail_ref
;
int
cb_connect_fail_ref
;
int
cb_disconnect_ref
;
int
cb_disconnect_ref
;
int
cb_message_ref
;
int
cb_message_ref
;
int
cb_overflow_ref
;
int
cb_suback_ref
;
int
cb_suback_ref
;
int
cb_unsuback_ref
;
int
cb_unsuback_ref
;
int
cb_puback_ref
;
int
cb_puback_ref
;
...
@@ -81,6 +97,9 @@ typedef struct lmqtt_userdata
...
@@ -81,6 +97,9 @@ typedef struct lmqtt_userdata
tConnState
connState
;
tConnState
connState
;
}
lmqtt_userdata
;
}
lmqtt_userdata
;
// How large MQTT messages to accept by default
#define DEFAULT_MAX_MESSAGE_LENGTH 1024
static
sint8
socket_connect
(
struct
espconn
*
pesp_conn
);
static
sint8
socket_connect
(
struct
espconn
*
pesp_conn
);
static
void
mqtt_socket_reconnected
(
void
*
arg
,
sint8_t
err
);
static
void
mqtt_socket_reconnected
(
void
*
arg
,
sint8_t
err
);
static
void
mqtt_socket_connected
(
void
*
arg
);
static
void
mqtt_socket_connected
(
void
*
arg
);
...
@@ -110,6 +129,13 @@ static void mqtt_socket_disconnected(void *arg) // tcp only
...
@@ -110,6 +129,13 @@ static void mqtt_socket_disconnected(void *arg) // tcp only
}
}
}
}
if
(
mud
->
mqtt_state
.
recv_buffer
)
{
c_free
(
mud
->
mqtt_state
.
recv_buffer
);
mud
->
mqtt_state
.
recv_buffer
=
NULL
;
}
mud
->
mqtt_state
.
recv_buffer_size
=
0
;
mud
->
mqtt_state
.
recv_buffer_state
=
MQTT_RECV_NORMAL
;
if
(
mud
->
mqtt_state
.
auto_reconnect
==
RECONNECT_ON
)
{
if
(
mud
->
mqtt_state
.
auto_reconnect
==
RECONNECT_ON
)
{
mud
->
pesp_conn
->
reverse
=
mud
;
mud
->
pesp_conn
->
reverse
=
mud
;
mud
->
pesp_conn
->
type
=
ESPCONN_TCP
;
mud
->
pesp_conn
->
type
=
ESPCONN_TCP
;
...
@@ -178,9 +204,9 @@ static void mqtt_socket_reconnected(void *arg, sint8_t err)
...
@@ -178,9 +204,9 @@ static void mqtt_socket_reconnected(void *arg, sint8_t err)
NODE_DBG
(
"leave mqtt_socket_reconnected.
\n
"
);
NODE_DBG
(
"leave mqtt_socket_reconnected.
\n
"
);
}
}
static
void
deliver_publish
(
lmqtt_userdata
*
mud
,
uint8_t
*
message
,
int
length
)
static
void
deliver_publish
(
lmqtt_userdata
*
mud
,
uint8_t
*
message
,
u
int
16_t
length
,
uint8_t
is_overflow
)
{
{
NODE_DBG
(
"enter deliver_publish
.
\n
"
);
NODE_DBG
(
"enter deliver_publish
(len=%d, overflow=%d).
\n
"
,
length
,
is_overflow
);
if
(
mud
==
NULL
)
if
(
mud
==
NULL
)
return
;
return
;
mqtt_event_data_t
event_data
;
mqtt_event_data_t
event_data
;
...
@@ -191,13 +217,15 @@ static void deliver_publish(lmqtt_userdata * mud, uint8_t* message, int length)
...
@@ -191,13 +217,15 @@ static void deliver_publish(lmqtt_userdata * mud, uint8_t* message, int length)
event_data
.
data_length
=
length
;
event_data
.
data_length
=
length
;
event_data
.
data
=
mqtt_get_publish_data
(
message
,
&
event_data
.
data_length
);
event_data
.
data
=
mqtt_get_publish_data
(
message
,
&
event_data
.
data_length
);
if
(
mud
->
cb_message_ref
==
LUA_NOREF
)
int
cb_ref
=
!
is_overflow
?
mud
->
cb_message_ref
:
mud
->
cb_overflow_ref
;
if
(
cb_ref
==
LUA_NOREF
)
return
;
return
;
if
(
mud
->
self_ref
==
LUA_NOREF
)
if
(
mud
->
self_ref
==
LUA_NOREF
)
return
;
return
;
lua_State
*
L
=
lua_getstate
();
lua_State
*
L
=
lua_getstate
();
if
(
event_data
.
topic
&&
(
event_data
.
topic_length
>
0
)){
if
(
event_data
.
topic
&&
(
event_data
.
topic_length
>
0
)){
lua_rawgeti
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_message
_ref
);
lua_rawgeti
(
L
,
LUA_REGISTRYINDEX
,
cb
_ref
);
lua_rawgeti
(
L
,
LUA_REGISTRYINDEX
,
mud
->
self_ref
);
// pass the userdata to callback func in lua
lua_rawgeti
(
L
,
LUA_REGISTRYINDEX
,
mud
->
self_ref
);
// pass the userdata to callback func in lua
lua_pushlstring
(
L
,
event_data
.
topic
,
event_data
.
topic_length
);
lua_pushlstring
(
L
,
event_data
.
topic
,
event_data
.
topic_length
);
}
else
{
}
else
{
...
@@ -265,14 +293,15 @@ static sint8 mqtt_send_if_possible(struct espconn *pesp_conn)
...
@@ -265,14 +293,15 @@ static sint8 mqtt_send_if_possible(struct espconn *pesp_conn)
static
void
mqtt_socket_received
(
void
*
arg
,
char
*
pdata
,
unsigned
short
len
)
static
void
mqtt_socket_received
(
void
*
arg
,
char
*
pdata
,
unsigned
short
len
)
{
{
NODE_DBG
(
"enter mqtt_socket_received
.
\n
"
);
NODE_DBG
(
"enter mqtt_socket_received
(rxlen=%u).
\n
"
,
len
);
uint8_t
msg_type
;
uint8_t
msg_type
;
uint8_t
msg_qos
;
uint8_t
msg_qos
;
uint16_t
msg_id
;
uint16_t
msg_id
;
int
length
=
(
int
)
len
;
// uint8_t in_buffer[MQTT_BUF_SIZE];
uint8_t
*
in_buffer
=
(
uint8_t
*
)
pdata
;
uint8_t
*
in_buffer
=
(
uint8_t
*
)
pdata
;
uint16_t
in_buffer_length
=
len
;
uint8_t
*
continuation_buffer
=
NULL
;
uint8_t
*
temp_pdata
=
NULL
;
struct
espconn
*
pesp_conn
=
arg
;
struct
espconn
*
pesp_conn
=
arg
;
if
(
pesp_conn
==
NULL
)
if
(
pesp_conn
==
NULL
)
...
@@ -281,11 +310,109 @@ static void mqtt_socket_received(void *arg, char *pdata, unsigned short len)
...
@@ -281,11 +310,109 @@ static void mqtt_socket_received(void *arg, char *pdata, unsigned short len)
if
(
mud
==
NULL
)
if
(
mud
==
NULL
)
return
;
return
;
switch
(
mud
->
mqtt_state
.
recv_buffer_state
)
{
case
MQTT_RECV_NORMAL
:
// No previous buffer.
break
;
case
MQTT_RECV_BUFFERING_SHORT
:
// Last buffer had so few byte that we could not determine message length.
// Store in a local heap buffer and operate on this, as if was the regular pdata buffer.
// Avoids having to repeat message size/overflow logic.
temp_pdata
=
c_zalloc
(
mud
->
mqtt_state
.
recv_buffer_size
+
len
);
if
(
temp_pdata
==
NULL
)
{
NODE_DBG
(
"MQTT[buffering-short]: Failed to allocate %u bytes, disconnecting...
\n
"
,
mud
->
mqtt_state
.
recv_buffer_size
+
len
);
#ifdef CLIENT_SSL_ENABLE
if
(
mud
->
secure
)
{
espconn_secure_disconnect
(
pesp_conn
);
}
else
#endif
{
espconn_disconnect
(
pesp_conn
);
}
return
;
}
NODE_DBG
(
"MQTT[buffering-short]: Continuing with %u + %u bytes
\n
"
,
mud
->
mqtt_state
.
recv_buffer_size
,
len
);
memcpy
(
temp_pdata
,
mud
->
mqtt_state
.
recv_buffer
,
mud
->
mqtt_state
.
recv_buffer_size
);
memcpy
(
temp_pdata
+
mud
->
mqtt_state
.
recv_buffer_size
,
pdata
,
len
);
c_free
(
mud
->
mqtt_state
.
recv_buffer
);
mud
->
mqtt_state
.
recv_buffer
=
NULL
;
mud
->
mqtt_state
.
recv_buffer_state
=
MQTT_RECV_NORMAL
;
in_buffer
=
temp_pdata
;
in_buffer_length
=
mud
->
mqtt_state
.
recv_buffer_size
+
len
;
break
;
case
MQTT_RECV_BUFFERING
:
{
// safe cast: we never allow longer buffer.
uint16_t
current_length
=
(
uint16_t
)
(
mud
->
mqtt_state
.
recv_buffer_wp
-
mud
->
mqtt_state
.
recv_buffer
);
NODE_DBG
(
"MQTT[buffering]: appending %u bytes to previous recv buffer (%u out of wanted %u)
\n
"
,
in_buffer_length
,
current_length
,
mud
->
mqtt_state
.
recv_buffer_size
);
// Copy from rx buffer to heap buffer. Smallest of [remainder of pending message] and [all of buffer]
uint16_t
copy_length
=
LWIP_MIN
(
mud
->
mqtt_state
.
recv_buffer_size
-
current_length
,
in_buffer_length
);
memcpy
(
mud
->
mqtt_state
.
recv_buffer_wp
,
pdata
,
copy_length
);
mud
->
mqtt_state
.
recv_buffer_wp
+=
copy_length
;
in_buffer_length
=
(
uint16_t
)
(
mud
->
mqtt_state
.
recv_buffer_wp
-
mud
->
mqtt_state
.
recv_buffer
);
if
(
in_buffer_length
<
mud
->
mqtt_state
.
recv_buffer_size
)
{
NODE_DBG
(
"MQTT[buffering]: need %u more bytes, waiting for next rx.
\n
"
,
mud
->
mqtt_state
.
recv_buffer_size
-
in_buffer_length
);
goto
RX_PACKET_FINISHED
;
}
NODE_DBG
(
"MQTT[buffering]: Full message received (%u). remainding bytes=%u
\n
"
,
mud
->
mqtt_state
.
recv_buffer_size
,
len
-
copy_length
);
// Point continuation_buffer to any additional data in pdata.
// May become 0 bytes, but used to trigger free!
continuation_buffer
=
pdata
+
copy_length
;
len
-=
copy_length
;
// borrow len instead of having another variable..
in_buffer
=
mud
->
mqtt_state
.
recv_buffer
;
// in_buffer_length was set above
mud
->
mqtt_state
.
recv_buffer_state
=
MQTT_RECV_NORMAL
;
break
;
}
case
MQTT_RECV_SKIPPING
:
// Last rx had a message which was too large to process, skip it.
if
(
mud
->
mqtt_state
.
recv_buffer_skip
>
in_buffer_length
)
{
NODE_DBG
(
"MQTT[skipping]: skip=%u. Skipping full RX buffer (%u).
\n
"
,
mud
->
mqtt_state
.
recv_buffer_skip
,
in_buffer_length
);
mud
->
mqtt_state
.
recv_buffer_skip
-=
in_buffer_length
;
goto
RX_PACKET_FINISHED
;
}
NODE_DBG
(
"MQTT[skipping]: skip=%u. Skipping partial RX buffer, continuing at %u
\n
"
,
mud
->
mqtt_state
.
recv_buffer_skip
,
in_buffer_length
);
in_buffer
+=
mud
->
mqtt_state
.
recv_buffer_skip
;
in_buffer_length
-=
mud
->
mqtt_state
.
recv_buffer_skip
;
mud
->
mqtt_state
.
recv_buffer_skip
=
0
;
mud
->
mqtt_state
.
recv_buffer_state
=
MQTT_RECV_NORMAL
;
break
;
}
READPACKET:
READPACKET:
if
(
length
>
MQTT_BUF_SIZE
||
length
<=
0
)
if
(
in_buffer_length
<=
0
)
return
;
goto
RX_PACKET_FINISHED
;
// MQTT publish message can in theory be 256Mb, while we do not support it we need to be
// able to do math on it.
int32_t
message_length
;
//
c_memcpy(in_buffer, pdata, length);
//
temp buffer for control messages
uint8_t
temp_buffer
[
MQTT_BUF_SIZE
];
uint8_t
temp_buffer
[
MQTT_BUF_SIZE
];
mqtt_msg_init
(
&
mud
->
mqtt_state
.
mqtt_connection
,
temp_buffer
,
MQTT_BUF_SIZE
);
mqtt_msg_init
(
&
mud
->
mqtt_state
.
mqtt_connection
,
temp_buffer
,
MQTT_BUF_SIZE
);
mqtt_message_t
*
temp_msg
=
NULL
;
mqtt_message_t
*
temp_msg
=
NULL
;
...
@@ -355,19 +482,107 @@ READPACKET:
...
@@ -355,19 +482,107 @@ READPACKET:
break
;
break
;
case
MQTT_DATA
:
case
MQTT_DATA
:
mud
->
mqtt_state
.
message_length_read
=
length
;
message_length
=
mqtt_get_total_length
(
in_buffer
,
in_buffer_length
);
mud
->
mqtt_state
.
message_length
=
mqtt_get_total_length
(
in_buffer
,
mud
->
mqtt_state
.
message_length_read
);
msg_type
=
mqtt_get_type
(
in_buffer
);
msg_type
=
mqtt_get_type
(
in_buffer
);
msg_qos
=
mqtt_get_qos
(
in_buffer
);
msg_qos
=
mqtt_get_qos
(
in_buffer
);
msg_id
=
mqtt_get_id
(
in_buffer
,
mud
->
mqtt_state
.
message_length
);
msg_id
=
mqtt_get_id
(
in_buffer
,
in_buffer_length
);
NODE_DBG
(
"MQTT_DATA: msg length: %u, buffer length: %u
\r\n
"
,
message_length
,
in_buffer_length
);
if
(
message_length
>
mud
->
connect_info
.
max_message_length
)
{
// The pending message length is larger than we was configured to allow
if
(
msg_qos
>
0
&&
msg_id
==
0
)
{
NODE_DBG
(
"MQTT: msg too long, but not enough data to get msg_id: total=%u, deliver=%u
\r\n
"
,
message_length
,
in_buffer_length
);
// qos requested, but too short buffer to get a packet ID.
// Trigger the "short buffer" mode
message_length
=
-
1
;
// Drop through to partial message handling below.
}
else
{
NODE_DBG
(
"MQTT: msg too long: total=%u, deliver=%u
\r\n
"
,
message_length
,
in_buffer_length
);
if
(
msg_type
==
MQTT_MSG_TYPE_PUBLISH
)
{
// In practice we should never get any other types..
deliver_publish
(
mud
,
in_buffer
,
in_buffer_length
,
1
);
// If qos specified, we should ACK it.
// In theory it might be wrong to ack it before we received all TCP packets, but this avoids
// buffering and special code to handle this corner-case. Server will most likely have
// written all to OS socket anyway, and not be aware that we "should" not have received it all yet.
if
(
msg_qos
==
1
){
temp_msg
=
mqtt_msg_puback
(
&
mud
->
mqtt_state
.
mqtt_connection
,
msg_id
);
msg_enqueue
(
&
(
mud
->
mqtt_state
.
pending_msg_q
),
temp_msg
,
msg_id
,
MQTT_MSG_TYPE_PUBACK
,
(
int
)
mqtt_get_qos
(
temp_msg
->
data
)
);
}
else
if
(
msg_qos
==
2
){
temp_msg
=
mqtt_msg_pubrec
(
&
mud
->
mqtt_state
.
mqtt_connection
,
msg_id
);
msg_enqueue
(
&
(
mud
->
mqtt_state
.
pending_msg_q
),
temp_msg
,
msg_id
,
MQTT_MSG_TYPE_PUBREC
,
(
int
)
mqtt_get_qos
(
temp_msg
->
data
)
);
}
if
(
msg_qos
==
1
||
msg_qos
==
2
){
NODE_DBG
(
"MQTT: Queue response QoS: %d
\r\n
"
,
msg_qos
);
}
}
if
(
message_length
>
in_buffer_length
)
{
// Ignore bytes in subsequent packet(s) too.
NODE_DBG
(
"MQTT: skipping into next rx
\n
"
);
mud
->
mqtt_state
.
recv_buffer_state
=
MQTT_RECV_SKIPPING
;
mud
->
mqtt_state
.
recv_buffer_skip
=
(
uint32_t
)
message_length
-
in_buffer_length
;
break
;
}
else
{
NODE_DBG
(
"MQTT: Skipping message
\n
"
);
mud
->
mqtt_state
.
recv_buffer_state
=
MQTT_RECV_NORMAL
;
goto
RX_MESSAGE_PROCESSED
;
}
}
}
if
(
message_length
==
-
1
||
message_length
>
in_buffer_length
)
{
// Partial message in buffer, need to store on heap until next RX. Allocate size for full message directly,
// instead of potential reallocs, to avoid fragmentation.
// If message_length is indicated as -1, we do not have enough data to determine the length properly.
// Just put what we have on heap, and place in state BUFFERING_SHORT.
NODE_DBG
(
"MQTT: Partial message received (%u of %d). Buffering
\r\n
"
,
in_buffer_length
,
message_length
);
// although message_length is 32bit, it should never go above 16bit since
// max_message_length is 16bit.
uint16_t
alloc_size
=
message_length
>
0
?
(
uint16_t
)
message_length
:
in_buffer_length
;
mud
->
mqtt_state
.
recv_buffer
=
c_zalloc
(
alloc_size
);
if
(
mud
->
mqtt_state
.
recv_buffer
==
NULL
)
{
NODE_DBG
(
"MQTT: Failed to allocate %u bytes, disconnecting...
\n
"
,
alloc_size
);
#ifdef CLIENT_SSL_ENABLE
if
(
mud
->
secure
)
{
espconn_secure_disconnect
(
pesp_conn
);
}
else
#endif
{
espconn_disconnect
(
pesp_conn
);
}
return
;
}
memcpy
(
mud
->
mqtt_state
.
recv_buffer
,
in_buffer
,
in_buffer_length
);
mud
->
mqtt_state
.
recv_buffer_wp
=
mud
->
mqtt_state
.
recv_buffer
+
in_buffer_length
;
mud
->
mqtt_state
.
recv_buffer_state
=
message_length
>
0
?
MQTT_RECV_BUFFERING
:
MQTT_RECV_BUFFERING_SHORT
;
mud
->
mqtt_state
.
recv_buffer_size
=
alloc_size
;
NODE_DBG
(
"MQTT: Wait for next recv
\n
"
);
break
;
}
msg_queue_t
*
pending_msg
=
msg_peek
(
&
(
mud
->
mqtt_state
.
pending_msg_q
));
msg_queue_t
*
pending_msg
=
msg_peek
(
&
(
mud
->
mqtt_state
.
pending_msg_q
));
NODE_DBG
(
"MQTT_DATA: type: %d, qos: %d, msg_id: %d, pending_id: %d, msg length: %u, buffer length: %u
\r\n
"
,
msg_type
,
msg_qos
,
msg_id
,
(
pending_msg
)
?
pending_msg
->
msg_id
:
0
,
message_length
,
in_buffer_length
);
NODE_DBG
(
"MQTT_DATA: type: %d, qos: %d, msg_id: %d, pending_id: %d
\r\n
"
,
msg_type
,
msg_qos
,
msg_id
,
(
pending_msg
)
?
pending_msg
->
msg_id
:
0
);
switch
(
msg_type
)
switch
(
msg_type
)
{
{
case
MQTT_MSG_TYPE_SUBACK
:
case
MQTT_MSG_TYPE_SUBACK
:
...
@@ -411,7 +626,7 @@ READPACKET:
...
@@ -411,7 +626,7 @@ READPACKET:
if
(
msg_qos
==
1
||
msg_qos
==
2
){
if
(
msg_qos
==
1
||
msg_qos
==
2
){
NODE_DBG
(
"MQTT: Queue response QoS: %d
\r\n
"
,
msg_qos
);
NODE_DBG
(
"MQTT: Queue response QoS: %d
\r\n
"
,
msg_qos
);
}
}
deliver_publish
(
mud
,
in_buffer
,
mud
->
mqtt_state
.
message_length
);
deliver_publish
(
mud
,
in_buffer
,
(
uint16_t
)
message_length
,
0
);
break
;
break
;
case
MQTT_MSG_TYPE_PUBACK
:
case
MQTT_MSG_TYPE_PUBACK
:
if
(
pending_msg
&&
pending_msg
->
msg_type
==
MQTT_MSG_TYPE_PUBLISH
&&
pending_msg
->
msg_id
==
msg_id
){
if
(
pending_msg
&&
pending_msg
->
msg_type
==
MQTT_MSG_TYPE_PUBLISH
&&
pending_msg
->
msg_id
==
msg_id
){
...
@@ -472,28 +687,40 @@ READPACKET:
...
@@ -472,28 +687,40 @@ READPACKET:
NODE_DBG
(
"MQTT: PINGRESP received
\r\n
"
);
NODE_DBG
(
"MQTT: PINGRESP received
\r\n
"
);
break
;
break
;
}
}
// NOTE: this is done down here and not in the switch case above
// because the PSOCK_READBUF_LEN() won't work inside a switch
// statement due to the way protothreads resume.
if
(
msg_type
==
MQTT_MSG_TYPE_PUBLISH
)
{
length
=
mud
->
mqtt_state
.
message_length_read
;
if
(
mud
->
mqtt_state
.
message_length
<
mud
->
mqtt_state
.
message_length_read
)
RX_MESSAGE_PROCESSED:
{
if
(
continuation_buffer
!=
NULL
)
{
length
-=
mud
->
mqtt_state
.
message_length
;
NODE_DBG
(
"MQTT[buffering]: buffered message finished. Continuing with rest of rx buffer (%u)
\n
"
,
in_buffer
+=
mud
->
mqtt_state
.
message_length
;
len
);
c_free
(
mud
->
mqtt_state
.
recv_buffer
);
mud
->
mqtt_state
.
recv_buffer
=
NULL
;
in_buffer
=
continuation_buffer
;
in_buffer_length
=
len
;
continuation_buffer
=
NULL
;
}
else
{
// Message have been fully processed (or ignored). Move pointer ahead
// and continue with next message, if any.
in_buffer_length
-=
message_length
;
in_buffer
+=
message_length
;
}
NODE_DBG
(
"Get another published message
\r\n
"
);
if
(
in_buffer_length
>
0
)
goto
READPACKET
;
{
}
NODE_DBG
(
"Get another published message
\r\n
"
);
goto
READPACKET
;
}
}
break
;
break
;
}
}
RX_PACKET_FINISHED:
if
(
temp_pdata
!=
NULL
)
{
c_free
(
temp_pdata
);
}
mqtt_send_if_possible
(
pesp_conn
);
mqtt_send_if_possible
(
pesp_conn
);
NODE_DBG
(
"leave mqtt_socket_received
.
\n
"
);
NODE_DBG
(
"leave mqtt_socket_received
\n
"
);
return
;
return
;
}
}
...
@@ -580,7 +807,7 @@ static void mqtt_socket_connected(void *arg)
...
@@ -580,7 +807,7 @@ static void mqtt_socket_connected(void *arg)
mud
->
keep_alive_tick
=
0
;
mud
->
keep_alive_tick
=
0
;
mud
->
connState
=
MQTT_CONNECT_SENDING
;
mud
->
connState
=
MQTT_CONNECT_SENDING
;
NODE_DBG
(
"leave mqtt_socket_connecte
d.
\n
"
);
NODE_DBG
(
"leave mqtt_socket_connecte
t, heap = %u.
\n
"
,
system_get_free_heap_size
()
);
return
;
return
;
}
}
...
@@ -686,7 +913,7 @@ void mqtt_socket_timer(void *arg)
...
@@ -686,7 +913,7 @@ void mqtt_socket_timer(void *arg)
NODE_DBG
(
"leave mqtt_socket_timer.
\n
"
);
NODE_DBG
(
"leave mqtt_socket_timer.
\n
"
);
}
}
// Lua: mqtt.Client(clientid, keepalive, user, pass, clean_session)
// Lua: mqtt.Client(clientid, keepalive, user, pass, clean_session
, max_message_length
)
static
int
mqtt_socket_client
(
lua_State
*
L
)
static
int
mqtt_socket_client
(
lua_State
*
L
)
{
{
NODE_DBG
(
"enter mqtt_socket_client.
\n
"
);
NODE_DBG
(
"enter mqtt_socket_client.
\n
"
);
...
@@ -703,6 +930,7 @@ static int mqtt_socket_client( lua_State* L )
...
@@ -703,6 +930,7 @@ static int mqtt_socket_client( lua_State* L )
int
keepalive
=
0
;
int
keepalive
=
0
;
int
stack
=
1
;
int
stack
=
1
;
int
clean_session
=
1
;
int
clean_session
=
1
;
int
max_message_length
=
0
;
int
top
=
lua_gettop
(
L
);
int
top
=
lua_gettop
(
L
);
// create a object
// create a object
...
@@ -715,6 +943,7 @@ static int mqtt_socket_client( lua_State* L )
...
@@ -715,6 +943,7 @@ static int mqtt_socket_client( lua_State* L )
mud
->
cb_disconnect_ref
=
LUA_NOREF
;
mud
->
cb_disconnect_ref
=
LUA_NOREF
;
mud
->
cb_message_ref
=
LUA_NOREF
;
mud
->
cb_message_ref
=
LUA_NOREF
;
mud
->
cb_overflow_ref
=
LUA_NOREF
;
mud
->
cb_suback_ref
=
LUA_NOREF
;
mud
->
cb_suback_ref
=
LUA_NOREF
;
mud
->
cb_unsuback_ref
=
LUA_NOREF
;
mud
->
cb_unsuback_ref
=
LUA_NOREF
;
mud
->
cb_puback_ref
=
LUA_NOREF
;
mud
->
cb_puback_ref
=
LUA_NOREF
;
...
@@ -767,6 +996,16 @@ static int mqtt_socket_client( lua_State* L )
...
@@ -767,6 +996,16 @@ static int mqtt_socket_client( lua_State* L )
clean_session
=
1
;
clean_session
=
1
;
}
}
if
(
lua_isnumber
(
L
,
stack
))
{
max_message_length
=
luaL_checkinteger
(
L
,
stack
);
stack
++
;
}
if
(
max_message_length
==
0
)
{
max_message_length
=
DEFAULT_MAX_MESSAGE_LENGTH
;
}
// TODO: check the zalloc result.
// TODO: check the zalloc result.
mud
->
connect_info
.
client_id
=
(
uint8_t
*
)
c_zalloc
(
idl
+
1
);
mud
->
connect_info
.
client_id
=
(
uint8_t
*
)
c_zalloc
(
idl
+
1
);
mud
->
connect_info
.
username
=
(
uint8_t
*
)
c_zalloc
(
unl
+
1
);
mud
->
connect_info
.
username
=
(
uint8_t
*
)
c_zalloc
(
unl
+
1
);
...
@@ -784,7 +1023,7 @@ static int mqtt_socket_client( lua_State* L )
...
@@ -784,7 +1023,7 @@ static int mqtt_socket_client( lua_State* L )
c_free
(
mud
->
connect_info
.
password
);
c_free
(
mud
->
connect_info
.
password
);
mud
->
connect_info
.
password
=
NULL
;
mud
->
connect_info
.
password
=
NULL
;
}
}
return
luaL_error
(
L
,
"not enough memory"
);
return
luaL_error
(
L
,
"not enough memory"
);
}
}
c_memcpy
(
mud
->
connect_info
.
client_id
,
clientId
,
idl
);
c_memcpy
(
mud
->
connect_info
.
client_id
,
clientId
,
idl
);
...
@@ -800,11 +1039,15 @@ static int mqtt_socket_client( lua_State* L )
...
@@ -800,11 +1039,15 @@ static int mqtt_socket_client( lua_State* L )
mud
->
connect_info
.
will_qos
=
0
;
mud
->
connect_info
.
will_qos
=
0
;
mud
->
connect_info
.
will_retain
=
0
;
mud
->
connect_info
.
will_retain
=
0
;
mud
->
connect_info
.
keepalive
=
keepalive
;
mud
->
connect_info
.
keepalive
=
keepalive
;
mud
->
connect_info
.
max_message_length
=
max_message_length
;
mud
->
mqtt_state
.
pending_msg_q
=
NULL
;
mud
->
mqtt_state
.
pending_msg_q
=
NULL
;
mud
->
mqtt_state
.
auto_reconnect
=
RECONNECT_OFF
;
mud
->
mqtt_state
.
auto_reconnect
=
RECONNECT_OFF
;
mud
->
mqtt_state
.
port
=
1883
;
mud
->
mqtt_state
.
port
=
1883
;
mud
->
mqtt_state
.
connect_info
=
&
mud
->
connect_info
;
mud
->
mqtt_state
.
connect_info
=
&
mud
->
connect_info
;
mud
->
mqtt_state
.
recv_buffer
=
NULL
;
mud
->
mqtt_state
.
recv_buffer_size
=
0
;
mud
->
mqtt_state
.
recv_buffer_state
=
MQTT_RECV_NORMAL
;
NODE_DBG
(
"leave mqtt_socket_client.
\n
"
);
NODE_DBG
(
"leave mqtt_socket_client.
\n
"
);
return
1
;
return
1
;
...
@@ -852,6 +1095,13 @@ static int mqtt_delete( lua_State* L )
...
@@ -852,6 +1095,13 @@ static int mqtt_delete( lua_State* L )
}
}
// ----
// ----
//--------- alloc-ed in mqtt_socket_received()
if
(
mud
->
mqtt_state
.
recv_buffer
)
{
c_free
(
mud
->
mqtt_state
.
recv_buffer
);
mud
->
mqtt_state
.
recv_buffer
=
NULL
;
}
// ----
//--------- alloc-ed in mqtt_socket_client()
//--------- alloc-ed in mqtt_socket_client()
if
(
mud
->
connect_info
.
client_id
){
if
(
mud
->
connect_info
.
client_id
){
c_free
(
mud
->
connect_info
.
client_id
);
c_free
(
mud
->
connect_info
.
client_id
);
...
@@ -876,6 +1126,8 @@ static int mqtt_delete( lua_State* L )
...
@@ -876,6 +1126,8 @@ static int mqtt_delete( lua_State* L )
mud
->
cb_disconnect_ref
=
LUA_NOREF
;
mud
->
cb_disconnect_ref
=
LUA_NOREF
;
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_message_ref
);
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_message_ref
);
mud
->
cb_message_ref
=
LUA_NOREF
;
mud
->
cb_message_ref
=
LUA_NOREF
;
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_overflow_ref
);
mud
->
cb_overflow_ref
=
LUA_NOREF
;
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_suback_ref
);
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_suback_ref
);
mud
->
cb_suback_ref
=
LUA_NOREF
;
mud
->
cb_suback_ref
=
LUA_NOREF
;
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_unsuback_ref
);
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_unsuback_ref
);
...
@@ -918,7 +1170,7 @@ static sint8 socket_connect(struct espconn *pesp_conn)
...
@@ -918,7 +1170,7 @@ static sint8 socket_connect(struct espconn *pesp_conn)
os_timer_arm
(
&
mud
->
mqttTimer
,
1000
,
1
);
os_timer_arm
(
&
mud
->
mqttTimer
,
1000
,
1
);
NODE_DBG
(
"leave socket_connect
, heap = %u.
\n
"
,
system_get_free_heap_size
()
);
NODE_DBG
(
"leave socket_connect
\n
"
);
return
espconn_status
;
return
espconn_status
;
}
}
...
@@ -1225,6 +1477,9 @@ static int mqtt_socket_on( lua_State* L )
...
@@ -1225,6 +1477,9 @@ static int mqtt_socket_on( lua_State* L )
}
else
if
(
sl
==
7
&&
c_strcmp
(
method
,
"message"
)
==
0
){
}
else
if
(
sl
==
7
&&
c_strcmp
(
method
,
"message"
)
==
0
){
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_message_ref
);
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_message_ref
);
mud
->
cb_message_ref
=
luaL_ref
(
L
,
LUA_REGISTRYINDEX
);
mud
->
cb_message_ref
=
luaL_ref
(
L
,
LUA_REGISTRYINDEX
);
}
else
if
(
sl
==
8
&&
c_strcmp
(
method
,
"overflow"
)
==
0
){
luaL_unref
(
L
,
LUA_REGISTRYINDEX
,
mud
->
cb_overflow_ref
);
mud
->
cb_overflow_ref
=
luaL_ref
(
L
,
LUA_REGISTRYINDEX
);
}
else
{
}
else
{
lua_pop
(
L
,
1
);
lua_pop
(
L
,
1
);
return
luaL_error
(
L
,
"method not supported"
);
return
luaL_error
(
L
,
"method not supported"
);
...
...
app/modules/tmr.c
View file @
11592951
...
@@ -378,22 +378,6 @@ static int tmr_create( lua_State *L ) {
...
@@ -378,22 +378,6 @@ static int tmr_create( lua_State *L ) {
}
}
#if defined(ENABLE_TIMER_SUSPEND) && defined(SWTMR_DEBUG)
static
void
tmr_printRegistry
(
lua_State
*
L
){
swtmr_print_registry
();
}
static
void
tmr_printSuspended
(
lua_State
*
L
){
swtmr_print_suspended
();
}
static
void
tmr_printTimerlist
(
lua_State
*
L
){
swtmr_print_timer_list
();
}
#endif
// Module function map
// Module function map
static
const
LUA_REG_TYPE
tmr_dyn_map
[]
=
{
static
const
LUA_REG_TYPE
tmr_dyn_map
[]
=
{
...
...
app/modules/ucg.c
View file @
11592951
// Module for Ucglib
// Module for Ucglib
// Do not use the code from ucg submodule and skip the complete source here
// if the ucg module is not selected.
// Reason: The whole ucg submodule code tree might not even exist in this case.
#include "user_modules.h"
#ifdef LUA_USE_MODULES_UCG
#include "module.h"
#include "module.h"
#include "lauxlib.h"
#include "lauxlib.h"
#include "platform.h"
#include "c_stdlib.h"
#define USE_PIN_LIST
#include "ucg.h"
#include "ucg.h"
#include "ucg_nodemcu_hal.h"
#include "ucg_config.h"
#include "ucg_config.h"
struct
_lucg_userdata_t
{
ucg_t
ucg
;
ucg_dev_fnptr
dev_cb
;
#ifdef ESP_PLATFORM
ucg_dev_fnptr
ext_cb
;
// ESP32
#include "spi_common.h"
// For Print() function
#include "sdkconfig.h"
ucg_int_t
tx
,
ty
;
#endif
uint8_t
tdir
;
};
typedef
struct
_lucg_userdata_t
lucg_userdata_t
;
#ifndef CONFIG_LUA_MODULE_U8G2
// ignore unused functions if u8g2 module will be skipped anyhow
#pragma GCC diagnostic ignored "-Wunused-function"
#endif
#define delayMicroseconds os_delay_us
static
int16_t
ucg_com_esp8266_hw_spi
(
ucg_t
*
ucg
,
int16_t
msg
,
uint16_t
arg
,
uint8_t
*
data
);
typedef
struct
{
ucg_nodemcu_t
ucg
;
ucg_dev_fnptr
dev_cb
;
ucg_dev_fnptr
ext_cb
;
// For Print() function
ucg_int_t
tx
,
ty
;
uint8_t
tdir
;
int
font_ref
;
int
host_ref
;
}
ucg_ud_t
;
// shorthand macro for the ucg structure inside the userdata
#define LUCG (&(lud->ucg))
// helper function: retrieve and check userdata argument
static
lucg_userdata_t
*
get_lud
(
lua_State
*
L
)
// shorthand macro for the ucg structure inside the userdata
{
#define GET_UCG() \
lucg_userdata_t
*
lud
=
(
lucg_userdata_t
*
)
luaL_checkudata
(
L
,
1
,
"ucg.display"
);
ucg_ud_t *ud = (ucg_ud_t *)luaL_checkudata( L, 1, "ucg.display" ); \
luaL_argcheck
(
L
,
lud
,
1
,
"ucg.display expected"
);
ucg_t *ucg = (ucg_t *)(&(ud->ucg));
return
lud
;
}
// helper function: retrieve given number of integer arguments
// helper function: retrieve given number of integer arguments
static
void
lucg_get_int_args
(
lua_State
*
L
,
uint8_t
stack
,
uint8_t
num
,
ucg_int_t
*
args
)
static
void
lucg_get_int_args
(
lua_State
*
L
,
uint8_t
stack
,
uint8_t
num
,
ucg_int_t
*
args
)
{
{
while
(
num
--
>
0
)
while
(
num
--
>
0
)
{
{
*
args
++
=
luaL_checkinteger
(
L
,
stack
++
);
*
args
++
=
luaL_checkinteger
(
L
,
stack
++
);
}
}
}
}
// Lua: ucg.begin( self, fontmode )
// Lua: ucg.begin( self, fontmode )
static
int
lucg_begin
(
lua_State
*
L
)
static
int
lucg_begin
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_Init
(
ucg
,
ud
->
dev_cb
,
ud
->
ext_cb
,
ucg_com_nodemcu_hw_spi
);
return
0
;
ucg_
Init
(
LUCG
,
lud
->
dev_cb
,
lud
->
ext_cb
,
ucg_com_esp8266_hw_spi
);
ucg_
int_t
fontmode
=
luaL_checkinteger
(
L
,
2
);
ucg_
int_t
f
ont
m
ode
=
luaL_checkinteger
(
L
,
2
);
ucg_
SetF
ont
M
ode
(
ucg
,
fontmode
);
ucg_SetFontMode
(
LUCG
,
fontmode
);
return
0
;
return
0
;
}
}
// Lua: ucg.clearScreen( self )
// Lua: ucg.clearScreen( self )
static
int
lucg_clearScreen
(
lua_State
*
L
)
static
int
lucg_clearScreen
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_ClearScreen
(
ucg
);
return
0
;
ucg_ClearScreen
(
LUCG
);
return
0
;
return
0
;
}
}
// Lua: ucg.draw90Line( self, x, y, len, dir, col_idx )
// Lua: ucg.draw90Line( self, x, y, len, dir, col_idx )
static
int
lucg_draw90Line
(
lua_State
*
L
)
static
int
lucg_draw90Line
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_int_t
args
[
5
];
return
0
;
lucg_get_int_args
(
L
,
2
,
5
,
args
)
;
ucg_int_t
args
[
5
];
ucg_Draw90Line
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
]
);
lucg_get_int_args
(
L
,
2
,
5
,
args
);
ucg_Draw90Line
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawBox( self, x, y, w, h )
// Lua: ucg.drawBox( self, x, y, w, h )
static
int
lucg_drawBox
(
lua_State
*
L
)
static
int
lucg_drawBox
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
4
];
ucg_int_t
args
[
4
];
lucg_get_int_args
(
L
,
2
,
4
,
args
);
lucg_get_int_args
(
L
,
2
,
4
,
args
);
ucg_DrawBox
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
ucg_DrawBox
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawCircle( self, x0, y0, rad, option )
// Lua: ucg.drawCircle( self, x0, y0, rad, option )
static
int
lucg_drawCircle
(
lua_State
*
L
)
static
int
lucg_drawCircle
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
4
];
ucg_int_t
args
[
4
];
lucg_get_int_args
(
L
,
2
,
4
,
args
);
lucg_get_int_args
(
L
,
2
,
4
,
args
);
ucg_DrawCircle
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
ucg_DrawCircle
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawDisc( self, x0, y0, rad, option )
// Lua: ucg.drawDisc( self, x0, y0, rad, option )
static
int
lucg_drawDisc
(
lua_State
*
L
)
static
int
lucg_drawDisc
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
4
];
ucg_int_t
args
[
4
];
lucg_get_int_args
(
L
,
2
,
4
,
args
);
lucg_get_int_args
(
L
,
2
,
4
,
args
);
ucg_DrawDisc
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
ucg_DrawDisc
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawFrame( self, x, y, w, h )
// Lua: ucg.drawFrame( self, x, y, w, h )
static
int
lucg_drawFrame
(
lua_State
*
L
)
static
int
lucg_drawFrame
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
4
];
ucg_int_t
args
[
4
];
lucg_get_int_args
(
L
,
2
,
4
,
args
);
lucg_get_int_args
(
L
,
2
,
4
,
args
);
ucg_DrawFrame
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
ucg_DrawFrame
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawGradientBox( self, x, y, w, h )
// Lua: ucg.drawGradientBox( self, x, y, w, h )
static
int
lucg_drawGradientBox
(
lua_State
*
L
)
static
int
lucg_drawGradientBox
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
4
];
ucg_int_t
args
[
4
];
lucg_get_int_args
(
L
,
2
,
4
,
args
);
lucg_get_int_args
(
L
,
2
,
4
,
args
);
ucg_DrawGradientBox
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
ucg_DrawGradientBox
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
return
0
;
return
0
;
}
}
// Lua: width = ucg.drawGlyph( self, x, y, dir, encoding )
// Lua: width = ucg.drawGlyph( self, x, y, dir, encoding )
static
int
lucg_drawGlyph
(
lua_State
*
L
)
static
int
lucg_drawGlyph
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
3
];
ucg_int_t
args
[
3
];
lucg_get_int_args
(
L
,
2
,
3
,
args
);
lucg_get_int_args
(
L
,
2
,
3
,
args
);
const
char
*
c
=
luaL_checkstring
(
L
,
(
1
+
3
)
+
1
);
const
char
*
c
=
luaL_checkstring
(
L
,
(
1
+
3
)
+
1
);
if
(
c
==
NULL
)
if
(
c
==
NULL
)
return
0
;
return
0
;
lua_pushinteger
(
L
,
ucg_DrawGlyph
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
*
c
)
);
lua_pushinteger
(
L
,
ucg_DrawGlyph
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
*
c
)
);
return
1
;
return
1
;
}
}
// Lua: ucg.drawGradientLine( self, x, y, len, dir )
// Lua: ucg.drawGradientLine( self, x, y, len, dir )
static
int
lucg_drawGradientLine
(
lua_State
*
L
)
static
int
lucg_drawGradientLine
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_int_t
args
[
4
];
return
0
;
lucg_get_int_args
(
L
,
2
,
4
,
args
)
;
ucg_int_t
args
[
4
];
ucg_DrawGradientLine
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
lucg_get_int_args
(
L
,
2
,
4
,
args
);
ucg_DrawGradientLine
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawHLine( self, x, y, len )
// Lua: ucg.drawHLine( self, x, y, len )
static
int
lucg_drawHLine
(
lua_State
*
L
)
static
int
lucg_drawHLine
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_int_t
args
[
3
];
return
0
;
lucg_get_int_args
(
L
,
2
,
3
,
args
)
;
ucg_int_t
args
[
3
];
ucg_DrawHLine
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
]
);
lucg_get_int_args
(
L
,
2
,
3
,
args
);
ucg_DrawHLine
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawLine( self, x1, y1, x2, y2 )
// Lua: ucg.drawLine( self, x1, y1, x2, y2 )
static
int
lucg_drawLine
(
lua_State
*
L
)
static
int
lucg_drawLine
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
4
];
ucg_int_t
args
[
4
];
lucg_get_int_args
(
L
,
2
,
4
,
args
);
lucg_get_int_args
(
L
,
2
,
4
,
args
);
ucg_DrawLine
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
ucg_DrawLine
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawPixel( self, x, y )
// Lua: ucg.drawPixel( self, x, y )
static
int
lucg_drawPixel
(
lua_State
*
L
)
static
int
lucg_drawPixel
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
2
];
ucg_int_t
args
[
2
];
lucg_get_int_args
(
L
,
2
,
2
,
args
);
lucg_get_int_args
(
L
,
2
,
2
,
args
);
ucg_DrawPixel
(
LUCG
,
args
[
0
],
args
[
1
]
);
ucg_DrawPixel
(
ucg
,
args
[
0
],
args
[
1
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawRBox( self, x, y, w, h, r )
// Lua: ucg.drawRBox( self, x, y, w, h, r )
static
int
lucg_drawRBox
(
lua_State
*
L
)
static
int
lucg_drawRBox
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
5
];
ucg_int_t
args
[
5
];
lucg_get_int_args
(
L
,
2
,
5
,
args
);
lucg_get_int_args
(
L
,
2
,
5
,
args
);
ucg_DrawRBox
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
]
);
ucg_DrawRBox
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawRFrame( self, x, y, w, h, r )
// Lua: ucg.drawRFrame( self, x, y, w, h, r )
static
int
lucg_drawRFrame
(
lua_State
*
L
)
static
int
lucg_drawRFrame
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
5
];
ucg_int_t
args
[
5
];
lucg_get_int_args
(
L
,
2
,
5
,
args
);
lucg_get_int_args
(
L
,
2
,
5
,
args
);
ucg_DrawRFrame
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
]
);
ucg_DrawRFrame
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
]
);
return
0
;
return
0
;
}
}
// Lua: width = ucg.drawString( self, x, y, dir, str )
// Lua: width = ucg.drawString( self, x, y, dir, str )
static
int
lucg_drawString
(
lua_State
*
L
)
static
int
lucg_drawString
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
3
];
ucg_int_t
args
[
3
];
lucg_get_int_args
(
L
,
2
,
3
,
args
);
lucg_get_int_args
(
L
,
2
,
3
,
args
);
const
char
*
s
=
luaL_checkstring
(
L
,
(
1
+
3
)
+
1
);
const
char
*
s
=
luaL_checkstring
(
L
,
(
1
+
3
)
+
1
);
if
(
s
==
NULL
)
if
(
s
==
NULL
)
return
0
;
return
0
;
lua_pushinteger
(
L
,
ucg_DrawString
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
s
)
);
lua_pushinteger
(
L
,
ucg_DrawString
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
s
)
);
return
1
;
return
1
;
}
}
// Lua: ucg.drawTetragon( self, x0, y0, x1, y1, x2, y2, x3, y3 )
// Lua: ucg.drawTetragon( self, x0, y0, x1, y1, x2, y2, x3, y3 )
static
int
lucg_drawTetragon
(
lua_State
*
L
)
static
int
lucg_drawTetragon
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_int_t
args
[
8
];
return
0
;
lucg_get_int_args
(
L
,
2
,
8
,
args
)
;
ucg_int_t
args
[
8
];
ucg_DrawTetragon
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
],
args
[
5
],
args
[
6
],
args
[
7
]
);
lucg_get_int_args
(
L
,
2
,
8
,
args
);
ucg_DrawTetragon
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
],
args
[
5
],
args
[
6
],
args
[
7
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawTriangle( self, x0, y0, x1, y1, x2, y2 )
// Lua: ucg.drawTriangle( self, x0, y0, x1, y1, x2, y2 )
static
int
lucg_drawTriangle
(
lua_State
*
L
)
static
int
lucg_drawTriangle
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_int_t
args
[
6
];
return
0
;
lucg_get_int_args
(
L
,
2
,
6
,
args
)
;
ucg_int_t
args
[
6
];
ucg_DrawTriangle
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
],
args
[
5
]
);
lucg_get_int_args
(
L
,
2
,
6
,
args
);
ucg_DrawTriangle
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
],
args
[
4
],
args
[
5
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.drawVLine( self, x, y, len )
// Lua: ucg.drawVLine( self, x, y, len )
static
int
lucg_drawVLine
(
lua_State
*
L
)
static
int
lucg_drawVLine
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_int_t
args
[
3
];
return
0
;
lucg_get_int_args
(
L
,
2
,
3
,
args
)
;
ucg_int_t
args
[
3
];
ucg_DrawVLine
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
]
);
lucg_get_int_args
(
L
,
2
,
3
,
args
);
ucg_DrawVLine
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
]
);
return
0
;
return
0
;
}
}
// Lua: height = ucg.getFontAscent( self )
// Lua: height = ucg.getFontAscent( self )
static
int
lucg_getFontAscent
(
lua_State
*
L
)
static
int
lucg_getFontAscent
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
lua_pushinteger
(
L
,
ucg_GetFontAscent
(
ucg
)
);
return
0
;
lua_pushinteger
(
L
,
ucg_GetFontAscent
(
LUCG
)
);
return
1
;
return
1
;
}
}
// Lua: height = ucg.getFontDescent( self )
// Lua: height = ucg.getFontDescent( self )
static
int
lucg_getFontDescent
(
lua_State
*
L
)
static
int
lucg_getFontDescent
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
lua_pushinteger
(
L
,
ucg_GetFontDescent
(
ucg
)
);
return
0
;
lua_pushinteger
(
L
,
ucg_GetFontDescent
(
LUCG
)
);
return
1
;
return
1
;
}
}
// Lua: height = ucg.getHeight( self )
// Lua: height = ucg.getHeight( self )
static
int
lucg_getHeight
(
lua_State
*
L
)
static
int
lucg_getHeight
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
lua_pushinteger
(
L
,
ucg_GetHeight
(
ucg
)
);
return
0
;
lua_pushinteger
(
L
,
ucg_GetHeight
(
LUCG
)
);
return
1
;
return
1
;
}
}
// Lua: width = ucg.getStrWidth( self, string )
// Lua: width = ucg.getStrWidth( self, string )
static
int
lucg_getStrWidth
(
lua_State
*
L
)
static
int
lucg_getStrWidth
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
const
char
*
s
=
luaL_checkstring
(
L
,
2
);
return
0
;
if
(
s
==
NULL
)
return
0
;
const
char
*
s
=
luaL_checkstring
(
L
,
2
);
if
(
s
==
NULL
)
return
0
;
lua_pushinteger
(
L
,
ucg_GetStrWidth
(
LUCG
,
s
)
);
lua_pushinteger
(
L
,
ucg_GetStrWidth
(
ucg
,
s
)
);
return
1
;
return
1
;
}
}
// Lua: width = ucg.getWidth( self )
// Lua: width = ucg.getWidth( self )
static
int
lucg_getWidth
(
lua_State
*
L
)
static
int
lucg_getWidth
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
lua_pushinteger
(
L
,
ucg_GetWidth
(
LUCG
)
);
lua_pushinteger
(
L
,
ucg_GetWidth
(
ucg
)
);
return
1
;
return
1
;
}
}
// Lua: ucg.setClipRange( self, x, y, w, h )
// Lua: ucg.setClipRange( self, x, y, w, h )
static
int
lucg_setClipRange
(
lua_State
*
L
)
static
int
lucg_setClipRange
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
4
];
ucg_int_t
args
[
4
];
lucg_get_int_args
(
L
,
2
,
4
,
args
);
lucg_get_int_args
(
L
,
2
,
4
,
args
);
ucg_SetClipRange
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
ucg_SetClipRange
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
args
[
3
]
);
return
0
;
return
0
;
}
}
// Lua: ucg.setColor( self, [idx], r, g, b )
// Lua: ucg.setColor( self, [idx], r, g, b )
static
int
lucg_setColor
(
lua_State
*
L
)
static
int
lucg_setColor
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
3
];
ucg_int_t
args
[
3
];
lucg_get_int_args
(
L
,
2
,
3
,
args
);
lucg_get_int_args
(
L
,
2
,
3
,
args
);
ucg_int_t
opt
=
luaL_optint
(
L
,
(
1
+
3
)
+
1
,
-
1
);
ucg_int_t
opt
=
luaL_optint
(
L
,
(
1
+
3
)
+
1
,
-
1
);
if
(
opt
<
0
)
if
(
opt
<
0
)
{
ucg_SetColor
(
LUCG
,
0
,
args
[
0
],
args
[
1
],
args
[
2
]
);
ucg_SetColor
(
ucg
,
0
,
args
[
0
],
args
[
1
],
args
[
2
]
);
else
}
else
{
ucg_SetColor
(
LUCG
,
args
[
0
],
args
[
1
],
args
[
2
],
opt
);
ucg_SetColor
(
ucg
,
args
[
0
],
args
[
1
],
args
[
2
],
opt
);
}
return
0
;
return
0
;
}
}
...
@@ -472,358 +406,193 @@ static int lucg_setColor( lua_State *L )
...
@@ -472,358 +406,193 @@ static int lucg_setColor( lua_State *L )
// Lua: ucg.setFont( self, font )
// Lua: ucg.setFont( self, font )
static
int
lucg_setFont
(
lua_State
*
L
)
static
int
lucg_setFont
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_fntpgm_uint8_t
*
font
=
(
ucg_fntpgm_uint8_t
*
)
lua_touserdata
(
L
,
2
);
ucg_fntpgm_uint8_t
*
font
=
(
ucg_fntpgm_uint8_t
*
)
lua_touserdata
(
L
,
2
);
if
(
font
!=
NULL
)
if
(
font
!=
NULL
)
ucg_SetFont
(
LUCG
,
font
);
ucg_SetFont
(
ucg
,
font
);
else
else
luaL_argerror
(
L
,
2
,
"font data expected"
);
luaL_argerror
(
L
,
2
,
"font data expected"
);
return
0
;
return
0
;
}
}
// Lua: ucg.print( self, str )
// Lua: ucg.print( self, str )
static
int
lucg_print
(
lua_State
*
L
)
static
int
lucg_print
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
const
char
*
s
=
luaL_checkstring
(
L
,
2
);
if
(
s
==
NULL
)
return
0
;
while
(
*
s
)
{
ucg_int_t
delta
;
delta
=
ucg_DrawGlyph
(
LUCG
,
lud
->
tx
,
lud
->
ty
,
lud
->
tdir
,
*
(
s
++
));
switch
(
lud
->
tdir
)
{
case
0
:
lud
->
tx
+=
delta
;
break
;
case
1
:
lud
->
ty
+=
delta
;
break
;
case
2
:
lud
->
tx
-=
delta
;
break
;
default:
case
3
:
lud
->
ty
-=
delta
;
break
;
}
}
const
char
*
s
=
luaL_checkstring
(
L
,
2
);
if
(
s
==
NULL
)
return
0
;
return
0
;
while
(
*
s
)
{
ucg_int_t
delta
;
delta
=
ucg_DrawGlyph
(
ucg
,
ud
->
tx
,
ud
->
ty
,
ud
->
tdir
,
*
(
s
++
));
switch
(
ud
->
tdir
)
{
case
0
:
ud
->
tx
+=
delta
;
break
;
case
1
:
ud
->
ty
+=
delta
;
break
;
case
2
:
ud
->
tx
-=
delta
;
break
;
default:
case
3
:
ud
->
ty
-=
delta
;
break
;
}
}
return
0
;
}
}
// Lua: ucg.setFontMode( self, fontmode )
// Lua: ucg.setFontMode( self, fontmode )
static
int
lucg_setFontMode
(
lua_State
*
L
)
static
int
lucg_setFontMode
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_int_t
fontmode
=
luaL_checkinteger
(
L
,
2
);
return
0
;
ucg_
int_t
f
ont
m
ode
=
luaL_checkinteger
(
L
,
2
);
ucg_
SetF
ont
M
ode
(
ucg
,
fontmode
);
ucg_SetFontMode
(
LUCG
,
fontmode
);
return
0
;
return
0
;
}
}
// Lua: ucg.setFontPosBaseline( self )
// Lua: ucg.setFontPosBaseline( self )
static
int
lucg_setFontPosBaseline
(
lua_State
*
L
)
static
int
lucg_setFontPosBaseline
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_SetFontPosBaseline
(
ucg
);
return
0
;
ucg_SetFontPosBaseline
(
LUCG
);
return
0
;
return
0
;
}
}
// Lua: ucg.setFontPosBottom( self )
// Lua: ucg.setFontPosBottom( self )
static
int
lucg_setFontPosBottom
(
lua_State
*
L
)
static
int
lucg_setFontPosBottom
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_SetFontPosBottom
(
ucg
);
return
0
;
ucg_SetFontPosBottom
(
LUCG
);
return
0
;
return
0
;
}
}
// Lua: ucg.setFontPosCenter( self )
// Lua: ucg.setFontPosCenter( self )
static
int
lucg_setFontPosCenter
(
lua_State
*
L
)
static
int
lucg_setFontPosCenter
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_SetFontPosCenter
(
ucg
);
return
0
;
ucg_SetFontPosCenter
(
LUCG
);
return
0
;
return
0
;
}
}
// Lua: ucg.setFontPosTop( self )
// Lua: ucg.setFontPosTop( self )
static
int
lucg_setFontPosTop
(
lua_State
*
L
)
static
int
lucg_setFontPosTop
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
()
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
ucg_SetFontPosTop
(
ucg
);
return
0
;
ucg_SetFontPosTop
(
LUCG
);
return
0
;
return
0
;
}
}
// Lua: ucg.setMaxClipRange( self )
// Lua: ucg.setMaxClipRange( self )
static
int
lucg_setMaxClipRange
(
lua_State
*
L
)
static
int
lucg_setMaxClipRange
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_SetMaxClipRange
(
LUCG
);
ucg_SetMaxClipRange
(
ucg
);
return
0
;
return
0
;
}
}
// Lua: ucg.setPrintPos( self, x, y )
// Lua: ucg.setPrintPos( self, x, y )
static
int
lucg_setPrintPos
(
lua_State
*
L
)
static
int
lucg_setPrintPos
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
(
void
)
ucg
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_int_t
args
[
2
];
ucg_int_t
args
[
2
];
lucg_get_int_args
(
L
,
2
,
2
,
args
);
lucg_get_int_args
(
L
,
2
,
2
,
args
);
l
ud
->
tx
=
args
[
0
];
ud
->
tx
=
args
[
0
];
l
ud
->
ty
=
args
[
1
];
ud
->
ty
=
args
[
1
];
return
0
;
return
0
;
}
}
// Lua: ucg.setPrintDir( self, dir )
// Lua: ucg.setPrintDir( self, dir )
static
int
lucg_setPrintDir
(
lua_State
*
L
)
static
int
lucg_setPrintDir
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
(
void
)
ucg
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
l
ud
->
tdir
=
luaL_checkinteger
(
L
,
2
);
ud
->
tdir
=
luaL_checkinteger
(
L
,
2
);
return
0
;
return
0
;
}
}
// Lua: ucg.setRotate90( self )
// Lua: ucg.setRotate90( self )
static
int
lucg_setRotate90
(
lua_State
*
L
)
static
int
lucg_setRotate90
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_SetRotate90
(
LUCG
);
ucg_SetRotate90
(
ucg
);
return
0
;
return
0
;
}
}
// Lua: ucg.setRotate180( self )
// Lua: ucg.setRotate180( self )
static
int
lucg_setRotate180
(
lua_State
*
L
)
static
int
lucg_setRotate180
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_SetRotate180
(
LUCG
);
ucg_SetRotate180
(
ucg
);
return
0
;
return
0
;
}
}
// Lua: ucg.setRotate270( self )
// Lua: ucg.setRotate270( self )
static
int
lucg_setRotate270
(
lua_State
*
L
)
static
int
lucg_setRotate270
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_SetRotate270
(
LUCG
);
ucg_SetRotate270
(
ucg
);
return
0
;
return
0
;
}
}
// Lua: ucg.setScale2x2( self )
// Lua: ucg.setScale2x2( self )
static
int
lucg_setScale2x2
(
lua_State
*
L
)
static
int
lucg_setScale2x2
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_SetScale2x2
(
LUCG
);
ucg_SetScale2x2
(
ucg
);
return
0
;
return
0
;
}
}
// Lua: ucg.undoRotate( self )
// Lua: ucg.undoRotate( self )
static
int
lucg_undoRotate
(
lua_State
*
L
)
static
int
lucg_undoRotate
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_UndoRotate
(
LUCG
);
ucg_UndoRotate
(
ucg
);
return
0
;
return
0
;
}
}
// Lua: ucg.undoScale( self )
// Lua: ucg.undoScale( self )
static
int
lucg_undoScale
(
lua_State
*
L
)
static
int
lucg_undoScale
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
GET_UCG
();
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
ucg_UndoScale
(
LUCG
);
ucg_UndoScale
(
ucg
);
return
0
;
return
0
;
}
}
spi_data_type
cache
;
uint8_t
cached
;
#define CACHED_TRANSFER(dat, num) cache = cached = 0; \
while( arg > 0 ) { \
if (cached == 4) { \
platform_spi_transaction( 1, 0, 0, 32, cache, 0, 0, 0 ); \
cache = cached = 0; \
} \
cache = (cache << num*8) | dat; \
cached += num; \
arg--; \
} \
if (cached > 0) { \
platform_spi_transaction( 1, 0, 0, cached * 8, cache, 0, 0, 0 ); \
}
static
int16_t
ucg_com_esp8266_hw_spi
(
ucg_t
*
ucg
,
int16_t
msg
,
uint16_t
arg
,
uint8_t
*
data
)
{
switch
(
msg
)
{
case
UCG_COM_MSG_POWER_UP
:
/* "data" is a pointer to ucg_com_info_t structure with the following information: */
/* ((ucg_com_info_t *)data)->serial_clk_speed value in nanoseconds */
/* ((ucg_com_info_t *)data)->parallel_clk_speed value in nanoseconds */
/* setup pins */
// we assume that the SPI interface was already initialized
// just care for the /CS and D/C pins
//platform_gpio_write( ucg->pin_list[0], value );
if
(
ucg
->
pin_list
[
UCG_PIN_RST
]
!=
UCG_PIN_VAL_NONE
)
platform_gpio_mode
(
ucg
->
pin_list
[
UCG_PIN_RST
],
PLATFORM_GPIO_OUTPUT
,
PLATFORM_GPIO_FLOAT
);
platform_gpio_mode
(
ucg
->
pin_list
[
UCG_PIN_CD
],
PLATFORM_GPIO_OUTPUT
,
PLATFORM_GPIO_FLOAT
);
if
(
ucg
->
pin_list
[
UCG_PIN_CS
]
!=
UCG_PIN_VAL_NONE
)
platform_gpio_mode
(
ucg
->
pin_list
[
UCG_PIN_CS
],
PLATFORM_GPIO_OUTPUT
,
PLATFORM_GPIO_FLOAT
);
break
;
case
UCG_COM_MSG_POWER_DOWN
:
break
;
case
UCG_COM_MSG_DELAY
:
delayMicroseconds
(
arg
);
break
;
case
UCG_COM_MSG_CHANGE_RESET_LINE
:
if
(
ucg
->
pin_list
[
UCG_PIN_RST
]
!=
UCG_PIN_VAL_NONE
)
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_RST
],
arg
);
break
;
case
UCG_COM_MSG_CHANGE_CS_LINE
:
if
(
ucg
->
pin_list
[
UCG_PIN_CS
]
!=
UCG_PIN_VAL_NONE
)
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_CS
],
arg
);
break
;
case
UCG_COM_MSG_CHANGE_CD_LINE
:
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_CD
],
arg
);
break
;
case
UCG_COM_MSG_SEND_BYTE
:
platform_spi_send
(
1
,
8
,
arg
);
break
;
case
UCG_COM_MSG_REPEAT_1_BYTE
:
CACHED_TRANSFER
(
data
[
0
],
1
);
break
;
case
UCG_COM_MSG_REPEAT_2_BYTES
:
CACHED_TRANSFER
((
data
[
0
]
<<
8
)
|
data
[
1
],
2
);
break
;
case
UCG_COM_MSG_REPEAT_3_BYTES
:
while
(
arg
>
0
)
{
platform_spi_transaction
(
1
,
0
,
0
,
24
,
(
data
[
0
]
<<
16
)
|
(
data
[
1
]
<<
8
)
|
data
[
2
],
0
,
0
,
0
);
arg
--
;
}
break
;
case
UCG_COM_MSG_SEND_STR
:
CACHED_TRANSFER
(
*
data
++
,
1
);
break
;
case
UCG_COM_MSG_SEND_CD_DATA_SEQUENCE
:
while
(
arg
>
0
)
{
if
(
*
data
!=
0
)
{
/* set the data line directly, ignore the setting from UCG_CFG_CD */
if
(
*
data
==
1
)
{
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_CD
],
0
);
}
else
{
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_CD
],
1
);
}
}
data
++
;
platform_spi_send
(
1
,
8
,
*
data
);
data
++
;
arg
--
;
}
break
;
}
return
1
;
}
// device destructor
// device destructor
static
int
lucg_close_display
(
lua_State
*
L
)
static
int
lucg_close_display
(
lua_State
*
L
)
{
{
lucg_userdata_t
*
lud
;
if
((
lud
=
get_lud
(
L
))
==
NULL
)
return
0
;
return
0
;
return
0
;
}
}
...
@@ -832,44 +601,86 @@ static int lucg_close_display( lua_State *L )
...
@@ -832,44 +601,86 @@ static int lucg_close_display( lua_State *L )
// Device constructors
// Device constructors
//
//
//
//
static
int
ldisplay_hw_spi
(
lua_State
*
L
,
ucg_dev_fnptr
device
,
ucg_dev_fnptr
extension
)
{
int
stack
=
0
;
#ifndef ESP_PLATFORM
// ESP8266
typedef
struct
{
int
host
;
}
lspi_host_t
;
lspi_host_t
host_elem
;
lspi_host_t
*
host
=
&
host_elem
;
#else
// ESP32
lspi_host_t
*
host
=
NULL
;
#endif
int
host_ref
=
LUA_NOREF
;
int
cs
=
-
1
;
int
dc
=
-
1
;
int
res
=
-
1
;
int
get_spi_pins
;
if
(
lua_type
(
L
,
++
stack
)
==
LUA_TUSERDATA
)
{
host
=
(
lspi_host_t
*
)
luaL_checkudata
(
L
,
stack
,
"spi.master"
);
/* reference host object to avoid automatic gc */
lua_pushvalue
(
L
,
stack
);
host_ref
=
luaL_ref
(
L
,
LUA_REGISTRYINDEX
);
get_spi_pins
=
1
;
}
else
if
(
lua_type
(
L
,
stack
)
==
LUA_TNUMBER
)
{
host
->
host
=
luaL_checkint
(
L
,
stack
);
get_spi_pins
=
1
;
}
else
{
get_spi_pins
=
0
;
stack
--
;
}
if
(
get_spi_pins
)
{
cs
=
luaL_checkint
(
L
,
++
stack
);
dc
=
luaL_checkint
(
L
,
++
stack
);
res
=
luaL_optint
(
L
,
++
stack
,
-
1
);
}
ucg_ud_t
*
ud
=
(
ucg_ud_t
*
)
lua_newuserdata
(
L
,
sizeof
(
ucg_ud_t
)
);
ucg_nodemcu_t
*
ext_ucg
=
&
(
ud
->
ucg
);
ud
->
font_ref
=
LUA_NOREF
;
ud
->
host_ref
=
host_ref
;
ext_ucg
->
hal
=
host
?
(
void
*
)(
host
->
host
)
:
NULL
;
ucg_t
*
ucg
=
(
ucg_t
*
)
ext_ucg
;
/* do a dummy init so that something usefull is part of the ucg structure */
ucg_Init
(
ucg
,
ucg_dev_default_cb
,
ucg_ext_none
,
(
ucg_com_fnptr
)
0
);
/* reset cursor position */
ud
->
tx
=
0
;
ud
->
ty
=
0
;
ud
->
tdir
=
0
;
/* default direction */
uint8_t
i
;
for
(
i
=
0
;
i
<
UCG_PIN_COUNT
;
i
++
)
ucg
->
pin_list
[
i
]
=
UCG_PIN_VAL_NONE
;
ud
->
dev_cb
=
device
;
ud
->
ext_cb
=
extension
;
if
(
res
>=
0
)
ucg
->
pin_list
[
UCG_PIN_RST
]
=
res
;
ucg
->
pin_list
[
UCG_PIN_CD
]
=
dc
;
ucg
->
pin_list
[
UCG_PIN_CS
]
=
cs
;
/* set its metatable */
luaL_getmetatable
(
L
,
"ucg.display"
);
lua_setmetatable
(
L
,
-
2
);
return
1
;
}
#undef UCG_DISPLAY_TABLE_ENTRY
#undef UCG_DISPLAY_TABLE_ENTRY
#define UCG_DISPLAY_TABLE_ENTRY(binding, device, extension) \
#define UCG_DISPLAY_TABLE_ENTRY(binding, device, extension) \
static int lucg_ ## binding( lua_State *L ) \
static int l ## binding( lua_State *L ) \
{ \
{ \
unsigned cs = luaL_checkinteger( L, 1 ); \
return ldisplay_hw_spi( L, device, extension ); \
if (cs == 0) \
}
return luaL_error( L, "CS pin required" ); \
unsigned dc = luaL_checkinteger( L, 2 ); \
if (dc == 0) \
return luaL_error( L, "D/C pin required" ); \
unsigned res = luaL_optinteger( L, 3, UCG_PIN_VAL_NONE ); \
\
lucg_userdata_t *lud = (lucg_userdata_t *) lua_newuserdata( L, sizeof( lucg_userdata_t ) ); \
\
/* do a dummy init so that something usefull is part of the ucg structure */
\
ucg_Init( LUCG, ucg_dev_default_cb, ucg_ext_none, (ucg_com_fnptr)0 ); \
\
/* reset cursor position */
\
lud->tx = 0; \
lud->ty = 0; \
lud->tdir = 0;
/* default direction */
\
\
uint8_t i; \
for( i = 0; i < UCG_PIN_COUNT; i++ ) \
lud->ucg.pin_list[i] = UCG_PIN_VAL_NONE; \
\
lud->dev_cb = device; \
lud->ext_cb = extension; \
lud->ucg.pin_list[UCG_PIN_RST] = res; \
lud->ucg.pin_list[UCG_PIN_CD] = dc; \
lud->ucg.pin_list[UCG_PIN_CS] = cs; \
\
/* set its metatable */
\
luaL_getmetatable(L, "ucg.display"); \
lua_setmetatable(L, -2); \
\
return 1; \
}
//
//
// Unroll the display table and insert binding functions.
// Unroll the display table and insert binding functions.
UCG_DISPLAY_TABLE
UCG_DISPLAY_TABLE
...
@@ -881,79 +692,79 @@ UCG_DISPLAY_TABLE
...
@@ -881,79 +692,79 @@ UCG_DISPLAY_TABLE
// Module function map
// Module function map
static
const
LUA_REG_TYPE
lucg_display_map
[]
=
static
const
LUA_REG_TYPE
lucg_display_map
[]
=
{
{
{
LSTRKEY
(
"begin"
),
LFUNCVAL
(
lucg_begin
)
},
{
LSTRKEY
(
"begin"
),
LFUNCVAL
(
lucg_begin
)
},
{
LSTRKEY
(
"clearScreen"
),
LFUNCVAL
(
lucg_clearScreen
)
},
{
LSTRKEY
(
"clearScreen"
),
LFUNCVAL
(
lucg_clearScreen
)
},
{
LSTRKEY
(
"draw90Line"
),
LFUNCVAL
(
lucg_draw90Line
)
},
{
LSTRKEY
(
"draw90Line"
),
LFUNCVAL
(
lucg_draw90Line
)
},
{
LSTRKEY
(
"drawBox"
),
LFUNCVAL
(
lucg_drawBox
)
},
{
LSTRKEY
(
"drawBox"
),
LFUNCVAL
(
lucg_drawBox
)
},
{
LSTRKEY
(
"drawCircle"
),
LFUNCVAL
(
lucg_drawCircle
)
},
{
LSTRKEY
(
"drawCircle"
),
LFUNCVAL
(
lucg_drawCircle
)
},
{
LSTRKEY
(
"drawDisc"
),
LFUNCVAL
(
lucg_drawDisc
)
},
{
LSTRKEY
(
"drawDisc"
),
LFUNCVAL
(
lucg_drawDisc
)
},
{
LSTRKEY
(
"drawFrame"
),
LFUNCVAL
(
lucg_drawFrame
)
},
{
LSTRKEY
(
"drawFrame"
),
LFUNCVAL
(
lucg_drawFrame
)
},
{
LSTRKEY
(
"drawGlyph"
),
LFUNCVAL
(
lucg_drawGlyph
)
},
{
LSTRKEY
(
"drawGlyph"
),
LFUNCVAL
(
lucg_drawGlyph
)
},
{
LSTRKEY
(
"drawGradientBox"
),
LFUNCVAL
(
lucg_drawGradientBox
)
},
{
LSTRKEY
(
"drawGradientBox"
),
LFUNCVAL
(
lucg_drawGradientBox
)
},
{
LSTRKEY
(
"drawGradientLine"
),
LFUNCVAL
(
lucg_drawGradientLine
)
},
{
LSTRKEY
(
"drawGradientLine"
),
LFUNCVAL
(
lucg_drawGradientLine
)
},
{
LSTRKEY
(
"drawHLine"
),
LFUNCVAL
(
lucg_drawHLine
)
},
{
LSTRKEY
(
"drawHLine"
),
LFUNCVAL
(
lucg_drawHLine
)
},
{
LSTRKEY
(
"drawLine"
),
LFUNCVAL
(
lucg_drawLine
)
},
{
LSTRKEY
(
"drawLine"
),
LFUNCVAL
(
lucg_drawLine
)
},
{
LSTRKEY
(
"drawPixel"
),
LFUNCVAL
(
lucg_drawPixel
)
},
{
LSTRKEY
(
"drawPixel"
),
LFUNCVAL
(
lucg_drawPixel
)
},
{
LSTRKEY
(
"drawRBox"
),
LFUNCVAL
(
lucg_drawRBox
)
},
{
LSTRKEY
(
"drawRBox"
),
LFUNCVAL
(
lucg_drawRBox
)
},
{
LSTRKEY
(
"drawRFrame"
),
LFUNCVAL
(
lucg_drawRFrame
)
},
{
LSTRKEY
(
"drawRFrame"
),
LFUNCVAL
(
lucg_drawRFrame
)
},
{
LSTRKEY
(
"drawString"
),
LFUNCVAL
(
lucg_drawString
)
},
{
LSTRKEY
(
"drawString"
),
LFUNCVAL
(
lucg_drawString
)
},
{
LSTRKEY
(
"drawTetragon"
),
LFUNCVAL
(
lucg_drawTetragon
)
},
{
LSTRKEY
(
"drawTetragon"
),
LFUNCVAL
(
lucg_drawTetragon
)
},
{
LSTRKEY
(
"drawTriangle"
),
LFUNCVAL
(
lucg_drawTriangle
)
},
{
LSTRKEY
(
"drawTriangle"
),
LFUNCVAL
(
lucg_drawTriangle
)
},
{
LSTRKEY
(
"drawVLine"
),
LFUNCVAL
(
lucg_drawVLine
)
},
{
LSTRKEY
(
"drawVLine"
),
LFUNCVAL
(
lucg_drawVLine
)
},
{
LSTRKEY
(
"getFontAscent"
),
LFUNCVAL
(
lucg_getFontAscent
)
},
{
LSTRKEY
(
"getFontAscent"
),
LFUNCVAL
(
lucg_getFontAscent
)
},
{
LSTRKEY
(
"getFontDescent"
),
LFUNCVAL
(
lucg_getFontDescent
)
},
{
LSTRKEY
(
"getFontDescent"
),
LFUNCVAL
(
lucg_getFontDescent
)
},
{
LSTRKEY
(
"getHeight"
),
LFUNCVAL
(
lucg_getHeight
)
},
{
LSTRKEY
(
"getHeight"
),
LFUNCVAL
(
lucg_getHeight
)
},
{
LSTRKEY
(
"getStrWidth"
),
LFUNCVAL
(
lucg_getStrWidth
)
},
{
LSTRKEY
(
"getStrWidth"
),
LFUNCVAL
(
lucg_getStrWidth
)
},
{
LSTRKEY
(
"getWidth"
),
LFUNCVAL
(
lucg_getWidth
)
},
{
LSTRKEY
(
"getWidth"
),
LFUNCVAL
(
lucg_getWidth
)
},
{
LSTRKEY
(
"print"
),
LFUNCVAL
(
lucg_print
)
},
{
LSTRKEY
(
"print"
),
LFUNCVAL
(
lucg_print
)
},
{
LSTRKEY
(
"setClipRange"
),
LFUNCVAL
(
lucg_setClipRange
)
},
{
LSTRKEY
(
"setClipRange"
),
LFUNCVAL
(
lucg_setClipRange
)
},
{
LSTRKEY
(
"setColor"
),
LFUNCVAL
(
lucg_setColor
)
},
{
LSTRKEY
(
"setColor"
),
LFUNCVAL
(
lucg_setColor
)
},
{
LSTRKEY
(
"setFont"
),
LFUNCVAL
(
lucg_setFont
)
},
{
LSTRKEY
(
"setFont"
),
LFUNCVAL
(
lucg_setFont
)
},
{
LSTRKEY
(
"setFontMode"
),
LFUNCVAL
(
lucg_setFontMode
)
},
{
LSTRKEY
(
"setFontMode"
),
LFUNCVAL
(
lucg_setFontMode
)
},
{
LSTRKEY
(
"setFontPosBaseline"
),
LFUNCVAL
(
lucg_setFontPosBaseline
)
},
{
LSTRKEY
(
"setFontPosBaseline"
),
LFUNCVAL
(
lucg_setFontPosBaseline
)
},
{
LSTRKEY
(
"setFontPosBottom"
),
LFUNCVAL
(
lucg_setFontPosBottom
)
},
{
LSTRKEY
(
"setFontPosBottom"
),
LFUNCVAL
(
lucg_setFontPosBottom
)
},
{
LSTRKEY
(
"setFontPosCenter"
),
LFUNCVAL
(
lucg_setFontPosCenter
)
},
{
LSTRKEY
(
"setFontPosCenter"
),
LFUNCVAL
(
lucg_setFontPosCenter
)
},
{
LSTRKEY
(
"setFontPosTop"
),
LFUNCVAL
(
lucg_setFontPosTop
)
},
{
LSTRKEY
(
"setFontPosTop"
),
LFUNCVAL
(
lucg_setFontPosTop
)
},
{
LSTRKEY
(
"setMaxClipRange"
),
LFUNCVAL
(
lucg_setMaxClipRange
)
},
{
LSTRKEY
(
"setMaxClipRange"
),
LFUNCVAL
(
lucg_setMaxClipRange
)
},
{
LSTRKEY
(
"setPrintDir"
),
LFUNCVAL
(
lucg_setPrintDir
)
},
{
LSTRKEY
(
"setPrintDir"
),
LFUNCVAL
(
lucg_setPrintDir
)
},
{
LSTRKEY
(
"setPrintPos"
),
LFUNCVAL
(
lucg_setPrintPos
)
},
{
LSTRKEY
(
"setPrintPos"
),
LFUNCVAL
(
lucg_setPrintPos
)
},
{
LSTRKEY
(
"setRotate90"
),
LFUNCVAL
(
lucg_setRotate90
)
},
{
LSTRKEY
(
"setRotate90"
),
LFUNCVAL
(
lucg_setRotate90
)
},
{
LSTRKEY
(
"setRotate180"
),
LFUNCVAL
(
lucg_setRotate180
)
},
{
LSTRKEY
(
"setRotate180"
),
LFUNCVAL
(
lucg_setRotate180
)
},
{
LSTRKEY
(
"setRotate270"
),
LFUNCVAL
(
lucg_setRotate270
)
},
{
LSTRKEY
(
"setRotate270"
),
LFUNCVAL
(
lucg_setRotate270
)
},
{
LSTRKEY
(
"setScale2x2"
),
LFUNCVAL
(
lucg_setScale2x2
)
},
{
LSTRKEY
(
"setScale2x2"
),
LFUNCVAL
(
lucg_setScale2x2
)
},
{
LSTRKEY
(
"undoClipRange"
),
LFUNCVAL
(
lucg_setMaxClipRange
)
},
{
LSTRKEY
(
"undoClipRange"
),
LFUNCVAL
(
lucg_setMaxClipRange
)
},
{
LSTRKEY
(
"undoRotate"
),
LFUNCVAL
(
lucg_undoRotate
)
},
{
LSTRKEY
(
"undoRotate"
),
LFUNCVAL
(
lucg_undoRotate
)
},
{
LSTRKEY
(
"undoScale"
),
LFUNCVAL
(
lucg_undoScale
)
},
{
LSTRKEY
(
"undoScale"
),
LFUNCVAL
(
lucg_undoScale
)
},
{
LSTRKEY
(
"__gc"
),
LFUNCVAL
(
lucg_close_display
)
},
{
LSTRKEY
(
"__gc"
),
LFUNCVAL
(
lucg_close_display
)
},
{
LSTRKEY
(
"__index"
),
LROVAL
(
lucg_display_map
)
},
{
LSTRKEY
(
"__index"
),
LROVAL
(
lucg_display_map
)
},
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
static
const
LUA_REG_TYPE
lucg_map
[]
=
static
const
LUA_REG_TYPE
lucg_map
[]
=
{
{
#undef UCG_DISPLAY_TABLE_ENTRY
#undef UCG_DISPLAY_TABLE_ENTRY
#define UCG_DISPLAY_TABLE_ENTRY(binding, device, extension) { LSTRKEY( #binding ), LFUNCVAL ( l
ucg_
##binding ) },
#define UCG_DISPLAY_TABLE_ENTRY(binding, device, extension) { LSTRKEY( #binding ), LFUNCVAL ( l ##
binding ) },
UCG_DISPLAY_TABLE
UCG_DISPLAY_TABLE
// Register fonts
// Register fonts
#undef UCG_FONT_TABLE_ENTRY
#undef UCG_FONT_TABLE_ENTRY
#define UCG_FONT_TABLE_ENTRY(font) { LSTRKEY( #font ), LUDATA( (void *)(ucg_ ## font) ) },
#define UCG_FONT_TABLE_ENTRY(font) { LSTRKEY( #font ), LUDATA( (void *)(ucg_ ## font) ) },
UCG_FONT_TABLE
UCG_FONT_TABLE
// Font modes
// Font modes
{
LSTRKEY
(
"FONT_MODE_TRANSPARENT"
),
LNUMVAL
(
UCG_FONT_MODE_TRANSPARENT
)
},
{
LSTRKEY
(
"FONT_MODE_TRANSPARENT"
),
LNUMVAL
(
UCG_FONT_MODE_TRANSPARENT
)
},
{
LSTRKEY
(
"FONT_MODE_SOLID"
),
LNUMVAL
(
UCG_FONT_MODE_SOLID
)
},
{
LSTRKEY
(
"FONT_MODE_SOLID"
),
LNUMVAL
(
UCG_FONT_MODE_SOLID
)
},
// Options for circle/ disc drawing
// Options for circle/ disc drawing
{
LSTRKEY
(
"DRAW_UPPER_RIGHT"
),
LNUMVAL
(
UCG_DRAW_UPPER_RIGHT
)
},
{
LSTRKEY
(
"DRAW_UPPER_RIGHT"
),
LNUMVAL
(
UCG_DRAW_UPPER_RIGHT
)
},
{
LSTRKEY
(
"DRAW_UPPER_LEFT"
),
LNUMVAL
(
UCG_DRAW_UPPER_LEFT
)
},
{
LSTRKEY
(
"DRAW_UPPER_LEFT"
),
LNUMVAL
(
UCG_DRAW_UPPER_LEFT
)
},
{
LSTRKEY
(
"DRAW_LOWER_RIGHT"
),
LNUMVAL
(
UCG_DRAW_LOWER_RIGHT
)
},
{
LSTRKEY
(
"DRAW_LOWER_RIGHT"
),
LNUMVAL
(
UCG_DRAW_LOWER_RIGHT
)
},
{
LSTRKEY
(
"DRAW_LOWER_LEFT"
),
LNUMVAL
(
UCG_DRAW_LOWER_LEFT
)
},
{
LSTRKEY
(
"DRAW_LOWER_LEFT"
),
LNUMVAL
(
UCG_DRAW_LOWER_LEFT
)
},
{
LSTRKEY
(
"DRAW_ALL"
),
LNUMVAL
(
UCG_DRAW_ALL
)
},
{
LSTRKEY
(
"DRAW_ALL"
),
LNUMVAL
(
UCG_DRAW_ALL
)
},
{
LSTRKEY
(
"__metatable"
),
LROVAL
(
lucg_map
)
},
{
LSTRKEY
(
"__metatable"
),
LROVAL
(
lucg_map
)
},
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
int
luaopen_ucg
(
lua_State
*
L
)
int
luaopen_ucg
(
lua_State
*
L
)
...
@@ -963,3 +774,5 @@ int luaopen_ucg( lua_State *L )
...
@@ -963,3 +774,5 @@ int luaopen_ucg( lua_State *L )
}
}
NODEMCU_MODULE
(
UCG
,
"ucg"
,
lucg_map
,
luaopen_ucg
);
NODEMCU_MODULE
(
UCG
,
"ucg"
,
lucg_map
,
luaopen_ucg
);
#endif
/* LUA_USE_MODULES_UCG */
app/modules/wifi_monitor.c
View file @
11592951
...
@@ -570,9 +570,9 @@ static int packet_map_lookup(lua_State *L) {
...
@@ -570,9 +570,9 @@ static int packet_map_lookup(lua_State *L) {
}
}
// Now search the packet function map
// Now search the packet function map
const
TValue
*
res
=
luaR_findentry
(
(
void
*
)
packet_function_map
,
field
,
0
,
NULL
);
lua_pushrotable
(
L
,
(
void
*
)
packet_function_map
);
if
(
res
)
{
lua_getfield
(
L
,
-
1
,
field
);
luaA_pushobject
(
L
,
res
);
if
(
!
lua_isnil
(
L
,
-
1
))
{
return
1
;
return
1
;
}
}
}
}
...
...
app/mqtt/mqtt_msg.c
View file @
11592951
...
@@ -126,12 +126,16 @@ void mqtt_msg_init(mqtt_connection_t* connection, uint8_t* buffer, uint16_t buff
...
@@ -126,12 +126,16 @@ void mqtt_msg_init(mqtt_connection_t* connection, uint8_t* buffer, uint16_t buff
connection
->
buffer_length
=
buffer_length
;
connection
->
buffer_length
=
buffer_length
;
}
}
int
mqtt_get_total_length
(
uint8_t
*
buffer
,
uint16_t
length
)
// Returns total length of message, or -1 if not enough bytes are available
int32_t
mqtt_get_total_length
(
uint8_t
*
buffer
,
uint16_t
buffer_length
)
{
{
int
i
;
int
i
;
int
totlen
=
0
;
int
totlen
=
0
;
for
(
i
=
1
;
i
<
length
;
++
i
)
if
(
buffer_length
==
1
)
return
-
1
;
for
(
i
=
1
;
i
<
buffer_length
;
++
i
)
{
{
totlen
+=
(
buffer
[
i
]
&
0x7f
)
<<
(
7
*
(
i
-
1
));
totlen
+=
(
buffer
[
i
]
&
0x7f
)
<<
(
7
*
(
i
-
1
));
if
((
buffer
[
i
]
&
0x80
)
==
0
)
if
((
buffer
[
i
]
&
0x80
)
==
0
)
...
@@ -139,19 +143,23 @@ int mqtt_get_total_length(uint8_t* buffer, uint16_t length)
...
@@ -139,19 +143,23 @@ int mqtt_get_total_length(uint8_t* buffer, uint16_t length)
++
i
;
++
i
;
break
;
break
;
}
}
if
(
i
==
buffer_length
)
return
-
1
;
}
}
totlen
+=
i
;
totlen
+=
i
;
return
totlen
;
return
totlen
;
}
}
const
char
*
mqtt_get_publish_topic
(
uint8_t
*
buffer
,
uint16_t
*
length
)
const
char
*
mqtt_get_publish_topic
(
uint8_t
*
buffer
,
uint16_t
*
buffer_
length
)
{
{
int
i
;
int
i
;
int
totlen
=
0
;
int
totlen
=
0
;
int
topiclen
;
int
topiclen
;
for
(
i
=
1
;
i
<
*
length
;
++
i
)
for
(
i
=
1
;
i
<
*
buffer_
length
;
++
i
)
{
{
totlen
+=
(
buffer
[
i
]
&
0x7f
)
<<
(
7
*
(
i
-
1
));
totlen
+=
(
buffer
[
i
]
&
0x7f
)
<<
(
7
*
(
i
-
1
));
if
((
buffer
[
i
]
&
0x80
)
==
0
)
if
((
buffer
[
i
]
&
0x80
)
==
0
)
...
@@ -162,25 +170,25 @@ const char* mqtt_get_publish_topic(uint8_t* buffer, uint16_t* length)
...
@@ -162,25 +170,25 @@ const char* mqtt_get_publish_topic(uint8_t* buffer, uint16_t* length)
}
}
totlen
+=
i
;
totlen
+=
i
;
if
(
i
+
2
>
*
length
)
if
(
i
+
2
>
*
buffer_
length
)
return
NULL
;
return
NULL
;
topiclen
=
buffer
[
i
++
]
<<
8
;
topiclen
=
buffer
[
i
++
]
<<
8
;
topiclen
|=
buffer
[
i
++
];
topiclen
|=
buffer
[
i
++
];
if
(
i
+
topiclen
>
*
length
)
if
(
i
+
topiclen
>
*
buffer_
length
)
return
NULL
;
return
NULL
;
*
length
=
topiclen
;
*
buffer_
length
=
topiclen
;
return
(
const
char
*
)(
buffer
+
i
);
return
(
const
char
*
)(
buffer
+
i
);
}
}
const
char
*
mqtt_get_publish_data
(
uint8_t
*
buffer
,
uint16_t
*
length
)
const
char
*
mqtt_get_publish_data
(
uint8_t
*
buffer
,
uint16_t
*
buffer_
length
)
{
{
int
i
;
int
i
;
int
totlen
=
0
;
int
totlen
=
0
;
int
topiclen
;
int
topiclen
;
for
(
i
=
1
;
i
<
*
length
;
++
i
)
for
(
i
=
1
;
i
<
*
buffer_
length
;
++
i
)
{
{
totlen
+=
(
buffer
[
i
]
&
0x7f
)
<<
(
7
*
(
i
-
1
));
totlen
+=
(
buffer
[
i
]
&
0x7f
)
<<
(
7
*
(
i
-
1
));
if
((
buffer
[
i
]
&
0x80
)
==
0
)
if
((
buffer
[
i
]
&
0x80
)
==
0
)
...
@@ -191,20 +199,20 @@ const char* mqtt_get_publish_data(uint8_t* buffer, uint16_t* length)
...
@@ -191,20 +199,20 @@ const char* mqtt_get_publish_data(uint8_t* buffer, uint16_t* length)
}
}
totlen
+=
i
;
totlen
+=
i
;
if
(
i
+
2
>
*
length
)
if
(
i
+
2
>
*
buffer_
length
)
return
NULL
;
return
NULL
;
topiclen
=
buffer
[
i
++
]
<<
8
;
topiclen
=
buffer
[
i
++
]
<<
8
;
topiclen
|=
buffer
[
i
++
];
topiclen
|=
buffer
[
i
++
];
if
(
i
+
topiclen
>
*
length
){
if
(
i
+
topiclen
>
*
buffer_
length
){
*
length
=
0
;
*
buffer_
length
=
0
;
return
NULL
;
return
NULL
;
}
}
i
+=
topiclen
;
i
+=
topiclen
;
if
(
mqtt_get_qos
(
buffer
)
>
0
)
if
(
mqtt_get_qos
(
buffer
)
>
0
)
{
{
if
(
i
+
2
>
*
length
)
if
(
i
+
2
>
*
buffer_
length
)
return
NULL
;
return
NULL
;
i
+=
2
;
i
+=
2
;
}
}
...
@@ -212,16 +220,16 @@ const char* mqtt_get_publish_data(uint8_t* buffer, uint16_t* length)
...
@@ -212,16 +220,16 @@ const char* mqtt_get_publish_data(uint8_t* buffer, uint16_t* length)
if
(
totlen
<
i
)
if
(
totlen
<
i
)
return
NULL
;
return
NULL
;
if
(
totlen
<=
*
length
)
if
(
totlen
<=
*
buffer_
length
)
*
length
=
totlen
-
i
;
*
buffer_
length
=
totlen
-
i
;
else
else
*
length
=
*
length
-
i
;
*
buffer_
length
=
*
buffer_
length
-
i
;
return
(
const
char
*
)(
buffer
+
i
);
return
(
const
char
*
)(
buffer
+
i
);
}
}
uint16_t
mqtt_get_id
(
uint8_t
*
buffer
,
uint16_t
length
)
uint16_t
mqtt_get_id
(
uint8_t
*
buffer
,
uint16_t
buffer_
length
)
{
{
if
(
length
<
1
)
if
(
buffer_
length
<
1
)
return
0
;
return
0
;
switch
(
mqtt_get_type
(
buffer
))
switch
(
mqtt_get_type
(
buffer
))
...
@@ -234,7 +242,7 @@ uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length)
...
@@ -234,7 +242,7 @@ uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length)
if
(
mqtt_get_qos
(
buffer
)
<=
0
)
if
(
mqtt_get_qos
(
buffer
)
<=
0
)
return
0
;
return
0
;
for
(
i
=
1
;
i
<
length
;
++
i
)
for
(
i
=
1
;
i
<
buffer_
length
;
++
i
)
{
{
if
((
buffer
[
i
]
&
0x80
)
==
0
)
if
((
buffer
[
i
]
&
0x80
)
==
0
)
{
{
...
@@ -243,16 +251,16 @@ uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length)
...
@@ -243,16 +251,16 @@ uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length)
}
}
}
}
if
(
i
+
2
>
length
)
if
(
i
+
2
>
buffer_
length
)
return
0
;
return
0
;
topiclen
=
buffer
[
i
++
]
<<
8
;
topiclen
=
buffer
[
i
++
]
<<
8
;
topiclen
|=
buffer
[
i
++
];
topiclen
|=
buffer
[
i
++
];
if
(
i
+
topiclen
>
length
)
if
(
i
+
topiclen
>
buffer_
length
)
return
0
;
return
0
;
i
+=
topiclen
;
i
+=
topiclen
;
if
(
i
+
2
>
length
)
if
(
i
+
2
>
buffer_
length
)
return
0
;
return
0
;
return
(
buffer
[
i
]
<<
8
)
|
buffer
[
i
+
1
];
return
(
buffer
[
i
]
<<
8
)
|
buffer
[
i
+
1
];
...
@@ -267,7 +275,7 @@ uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length)
...
@@ -267,7 +275,7 @@ uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length)
{
{
// This requires the remaining length to be encoded in 1 byte,
// This requires the remaining length to be encoded in 1 byte,
// which it should be.
// which it should be.
if
(
length
>=
4
&&
(
buffer
[
1
]
&
0x80
)
==
0
)
if
(
buffer_
length
>=
4
&&
(
buffer
[
1
]
&
0x80
)
==
0
)
return
(
buffer
[
2
]
<<
8
)
|
buffer
[
3
];
return
(
buffer
[
2
]
<<
8
)
|
buffer
[
3
];
else
else
return
0
;
return
0
;
...
...
app/mqtt/mqtt_msg.h
View file @
11592951
...
@@ -108,21 +108,22 @@ typedef struct mqtt_connect_info
...
@@ -108,21 +108,22 @@ typedef struct mqtt_connect_info
int
will_qos
;
int
will_qos
;
int
will_retain
;
int
will_retain
;
int
clean_session
;
int
clean_session
;
uint16_t
max_message_length
;
}
mqtt_connect_info_t
;
}
mqtt_connect_info_t
;
static
inline
int
mqtt_get_type
(
uint8_t
*
buffer
)
{
return
(
buffer
[
0
]
&
0xf0
)
>>
4
;
}
static
inline
u
int
8_t
mqtt_get_type
(
uint8_t
*
buffer
)
{
return
(
buffer
[
0
]
&
0xf0
)
>>
4
;
}
static
inline
int
mqtt_get_dup
(
uint8_t
*
buffer
)
{
return
(
buffer
[
0
]
&
0x08
)
>>
3
;
}
static
inline
u
int
8_t
mqtt_get_dup
(
uint8_t
*
buffer
)
{
return
(
buffer
[
0
]
&
0x08
)
>>
3
;
}
static
inline
int
mqtt_get_qos
(
uint8_t
*
buffer
)
{
return
(
buffer
[
0
]
&
0x06
)
>>
1
;
}
static
inline
u
int
8_t
mqtt_get_qos
(
uint8_t
*
buffer
)
{
return
(
buffer
[
0
]
&
0x06
)
>>
1
;
}
static
inline
int
mqtt_get_retain
(
uint8_t
*
buffer
)
{
return
(
buffer
[
0
]
&
0x01
);
}
static
inline
u
int
8_t
mqtt_get_retain
(
uint8_t
*
buffer
)
{
return
(
buffer
[
0
]
&
0x01
);
}
static
inline
int
mqtt_get_connect_ret_code
(
uint8_t
*
buffer
)
{
return
(
buffer
[
3
]);
}
static
inline
u
int
8_t
mqtt_get_connect_ret_code
(
uint8_t
*
buffer
)
{
return
(
buffer
[
3
]);
}
void
mqtt_msg_init
(
mqtt_connection_t
*
connection
,
uint8_t
*
buffer
,
uint16_t
buffer_length
);
void
mqtt_msg_init
(
mqtt_connection_t
*
connection
,
uint8_t
*
buffer
,
uint16_t
buffer_length
);
int
mqtt_get_total_length
(
uint8_t
*
buffer
,
uint16_t
length
);
int
32_t
mqtt_get_total_length
(
uint8_t
*
buffer
,
uint16_t
buffer_
length
);
const
char
*
mqtt_get_publish_topic
(
uint8_t
*
buffer
,
uint16_t
*
length
);
const
char
*
mqtt_get_publish_topic
(
uint8_t
*
buffer
,
uint16_t
*
buffer_
length
);
const
char
*
mqtt_get_publish_data
(
uint8_t
*
buffer
,
uint16_t
*
length
);
const
char
*
mqtt_get_publish_data
(
uint8_t
*
buffer
,
uint16_t
*
buffer_
length
);
uint16_t
mqtt_get_id
(
uint8_t
*
buffer
,
uint16_t
length
);
uint16_t
mqtt_get_id
(
uint8_t
*
buffer
,
uint16_t
buffer_
length
);
mqtt_message_t
*
mqtt_msg_connect
(
mqtt_connection_t
*
connection
,
mqtt_connect_info_t
*
info
);
mqtt_message_t
*
mqtt_msg_connect
(
mqtt_connection_t
*
connection
,
mqtt_connect_info_t
*
info
);
mqtt_message_t
*
mqtt_msg_publish
(
mqtt_connection_t
*
connection
,
const
char
*
topic
,
const
char
*
data
,
int
data_length
,
int
qos
,
int
retain
,
uint16_t
*
message_id
);
mqtt_message_t
*
mqtt_msg_publish
(
mqtt_connection_t
*
connection
,
const
char
*
topic
,
const
char
*
data
,
int
data_length
,
int
qos
,
int
retain
,
uint16_t
*
message_id
);
...
...
app/platform/Makefile
View file @
11592951
...
@@ -44,6 +44,7 @@ INCLUDES += -I ../spiffs
...
@@ -44,6 +44,7 @@ INCLUDES += -I ../spiffs
INCLUDES
+=
-I
../libc
INCLUDES
+=
-I
../libc
INCLUDES
+=
-I
../lua
INCLUDES
+=
-I
../lua
INCLUDES
+=
-I
../u8g2lib/u8g2/src/clib
INCLUDES
+=
-I
../u8g2lib/u8g2/src/clib
INCLUDES
+=
-I
../ucglib/ucg/src/clib
PDIR
:=
../
$(PDIR)
PDIR
:=
../
$(PDIR)
sinclude
$(PDIR)Makefile
sinclude
$(PDIR)Makefile
app/platform/u8x8_nodemcu_hal.c
View file @
11592951
...
@@ -13,6 +13,42 @@
...
@@ -13,6 +13,42 @@
#define U8X8_USE_PINS
#define U8X8_USE_PINS
#include "u8x8_nodemcu_hal.h"
#include "u8x8_nodemcu_hal.h"
// static variables containing info about the i2c link
// TODO: move to user space in u8x8_t once available
typedef
struct
{
uint8_t
id
;
}
hal_i2c_t
;
// static variables containing info about the spi link
// TODO: move to user space in u8x8_t once available
typedef
struct
{
uint8_t
host
;
//spi_device_handle_t device;
uint8_t
last_dc
;
struct
{
uint8_t
*
data
;
size_t
size
,
used
;
}
buffer
;
}
hal_spi_t
;
static
void
flush_buffer_spi
(
hal_spi_t
*
hal
)
{
if
(
hal
->
buffer
.
data
&&
hal
->
buffer
.
used
>
0
)
{
platform_spi_blkwrite
(
hal
->
host
,
hal
->
buffer
.
used
,
hal
->
buffer
.
data
);
hal
->
buffer
.
used
=
0
;
}
}
static
void
force_flush_buffer
(
u8x8_t
*
u8x8
)
{
// spi hal has a buffer that can be flushed
if
(
u8x8
->
byte_cb
==
u8x8_byte_nodemcu_spi
)
{
hal_spi_t
*
hal
=
((
u8g2_nodemcu_t
*
)
u8x8
)
->
hal
;
flush_buffer_spi
(
hal
);
}
}
uint8_t
u8x8_gpio_and_delay_nodemcu
(
u8x8_t
*
u8x8
,
uint8_t
msg
,
uint8_t
arg_int
,
void
*
arg_ptr
)
uint8_t
u8x8_gpio_and_delay_nodemcu
(
u8x8_t
*
u8x8
,
uint8_t
msg
,
uint8_t
arg_int
,
void
*
arg_ptr
)
{
{
...
@@ -35,24 +71,30 @@ uint8_t u8x8_gpio_and_delay_nodemcu(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int,
...
@@ -35,24 +71,30 @@ uint8_t u8x8_gpio_and_delay_nodemcu(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int,
break
;
break
;
case
U8X8_MSG_DELAY_NANO
:
// delay arg_int * 1 nano second
case
U8X8_MSG_DELAY_NANO
:
// delay arg_int * 1 nano second
force_flush_buffer
(
u8x8
);
os_delay_us
(
1
);
os_delay_us
(
1
);
break
;
break
;
case
U8X8_MSG_DELAY_100NANO
:
// delay arg_int * 100 nano seconds
case
U8X8_MSG_DELAY_100NANO
:
// delay arg_int * 100 nano seconds
force_flush_buffer
(
u8x8
);
temp
=
arg_int
*
100
;
temp
=
arg_int
*
100
;
temp
/=
1000
;
temp
/=
1000
;
os_delay_us
(
temp
>
0
?
temp
:
1
);
os_delay_us
(
temp
>
0
?
temp
:
1
);
break
;
break
;
case
U8X8_MSG_DELAY_10MICRO
:
// delay arg_int * 10 micro seconds
case
U8X8_MSG_DELAY_10MICRO
:
// delay arg_int * 10 micro seconds
force_flush_buffer
(
u8x8
);
os_delay_us
(
arg_int
*
10
);
os_delay_us
(
arg_int
*
10
);
break
;
break
;
case
U8X8_MSG_DELAY_MILLI
:
// delay arg_int * 1 milli second
case
U8X8_MSG_DELAY_MILLI
:
// delay arg_int * 1 milli second
force_flush_buffer
(
u8x8
);
os_delay_us
(
arg_int
*
1000
);
os_delay_us
(
arg_int
*
1000
);
system_soft_wdt_feed
();
break
;
break
;
case
U8X8_MSG_DELAY_I2C
:
// arg_int is the I2C speed in 100KHz, e.g. 4 = 400 KHz
case
U8X8_MSG_DELAY_I2C
:
// arg_int is the I2C speed in 100KHz, e.g. 4 = 400 KHz
force_flush_buffer
(
u8x8
);
temp
=
5000
/
arg_int
;
// arg_int=1: delay by 5us, arg_int = 4: delay by 1.25us
temp
=
5000
/
arg_int
;
// arg_int=1: delay by 5us, arg_int = 4: delay by 1.25us
temp
/=
1000
;
temp
/=
1000
;
os_delay_us
(
temp
>
0
?
temp
:
1
);
os_delay_us
(
temp
>
0
?
temp
:
1
);
...
@@ -119,12 +161,6 @@ uint8_t u8x8_gpio_and_delay_nodemcu(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int,
...
@@ -119,12 +161,6 @@ uint8_t u8x8_gpio_and_delay_nodemcu(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int,
}
}
// static variables containing info about the i2c link
// TODO: move to user space in u8x8_t once available
typedef
struct
{
uint8_t
id
;
}
hal_i2c_t
;
uint8_t
u8x8_byte_nodemcu_i2c
(
u8x8_t
*
u8x8
,
uint8_t
msg
,
uint8_t
arg_int
,
void
*
arg_ptr
)
uint8_t
u8x8_byte_nodemcu_i2c
(
u8x8_t
*
u8x8
,
uint8_t
msg
,
uint8_t
arg_int
,
void
*
arg_ptr
)
{
{
uint8_t
*
data
;
uint8_t
*
data
;
...
@@ -132,11 +168,11 @@ uint8_t u8x8_byte_nodemcu_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
...
@@ -132,11 +168,11 @@ uint8_t u8x8_byte_nodemcu_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
switch
(
msg
)
{
switch
(
msg
)
{
case
U8X8_MSG_BYTE_SEND
:
case
U8X8_MSG_BYTE_SEND
:
if
(
hal
->
id
==
0
)
{
if
(
hal
->
id
<
NUM_I2C
)
{
data
=
(
uint8_t
*
)
arg_ptr
;
data
=
(
uint8_t
*
)
arg_ptr
;
while
(
arg_int
>
0
)
{
while
(
arg_int
>
0
)
{
platform_i2c_send_byte
(
0
,
*
data
);
platform_i2c_send_byte
(
hal
->
id
,
*
data
);
data
++
;
data
++
;
arg_int
--
;
arg_int
--
;
}
}
...
@@ -163,9 +199,9 @@ uint8_t u8x8_byte_nodemcu_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
...
@@ -163,9 +199,9 @@ uint8_t u8x8_byte_nodemcu_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
break
;
break
;
case
U8X8_MSG_BYTE_START_TRANSFER
:
case
U8X8_MSG_BYTE_START_TRANSFER
:
if
(
hal
->
id
==
0
)
{
if
(
hal
->
id
<
NUM_I2C
)
{
platform_i2c_send_start
(
0
);
platform_i2c_send_start
(
hal
->
id
);
platform_i2c_send_address
(
0
,
u8x8_GetI2CAddress
(
u8x8
),
PLATFORM_I2C_DIRECTION_TRANSMITTER
);
platform_i2c_send_address
(
hal
->
id
,
u8x8_GetI2CAddress
(
u8x8
),
PLATFORM_I2C_DIRECTION_TRANSMITTER
);
}
else
{
}
else
{
// invalid id
// invalid id
...
@@ -174,8 +210,8 @@ uint8_t u8x8_byte_nodemcu_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
...
@@ -174,8 +210,8 @@ uint8_t u8x8_byte_nodemcu_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
break
;
break
;
case
U8X8_MSG_BYTE_END_TRANSFER
:
case
U8X8_MSG_BYTE_END_TRANSFER
:
if
(
hal
->
id
==
0
)
{
if
(
hal
->
id
<
NUM_I2C
)
{
platform_i2c_send_stop
(
0
);
platform_i2c_send_stop
(
hal
->
id
);
}
else
{
}
else
{
// invalid id
// invalid id
...
@@ -191,27 +227,6 @@ uint8_t u8x8_byte_nodemcu_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
...
@@ -191,27 +227,6 @@ uint8_t u8x8_byte_nodemcu_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
}
}
// static variables containing info about the spi link
// TODO: move to user space in u8x8_t once available
typedef
struct
{
uint8_t
host
;
//spi_device_handle_t device;
uint8_t
last_dc
;
struct
{
uint8_t
*
data
;
size_t
size
,
used
;
}
buffer
;
}
hal_spi_t
;
static
void
flush_buffer_spi
(
hal_spi_t
*
hal
)
{
if
(
hal
->
buffer
.
used
>
0
)
{
platform_spi_blkwrite
(
hal
->
host
,
hal
->
buffer
.
used
,
hal
->
buffer
.
data
);
hal
->
buffer
.
used
=
0
;
}
}
uint8_t
u8x8_byte_nodemcu_spi
(
u8x8_t
*
u8x8
,
uint8_t
msg
,
uint8_t
arg_int
,
void
*
arg_ptr
)
uint8_t
u8x8_byte_nodemcu_spi
(
u8x8_t
*
u8x8
,
uint8_t
msg
,
uint8_t
arg_int
,
void
*
arg_ptr
)
{
{
hal_spi_t
*
hal
=
((
u8g2_nodemcu_t
*
)
u8x8
)
->
hal
;
hal_spi_t
*
hal
=
((
u8g2_nodemcu_t
*
)
u8x8
)
->
hal
;
...
@@ -228,6 +243,7 @@ uint8_t u8x8_byte_nodemcu_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
...
@@ -228,6 +243,7 @@ uint8_t u8x8_byte_nodemcu_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
return
0
;
return
0
;
hal
->
host
=
host
;
hal
->
host
=
host
;
((
u8g2_nodemcu_t
*
)
u8x8
)
->
hal
=
hal
;
((
u8g2_nodemcu_t
*
)
u8x8
)
->
hal
=
hal
;
hal
->
buffer
.
data
=
NULL
;
hal
->
last_dc
=
0
;
hal
->
last_dc
=
0
;
}
}
...
@@ -279,6 +295,7 @@ uint8_t u8x8_byte_nodemcu_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
...
@@ -279,6 +295,7 @@ uint8_t u8x8_byte_nodemcu_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *
u8x8_gpio_SetCS
(
u8x8
,
u8x8
->
display_info
->
chip_disable_level
);
u8x8_gpio_SetCS
(
u8x8
,
u8x8
->
display_info
->
chip_disable_level
);
c_free
(
hal
->
buffer
.
data
);
c_free
(
hal
->
buffer
.
data
);
hal
->
buffer
.
data
=
NULL
;
break
;
break
;
default:
default:
...
...
app/platform/ucg_nodemcu_hal.c
0 → 100644
View file @
11592951
// Do not use the code from ucg submodule and skip the complete source here
// if the ucg module is not selected.
// Reason: The whole ucg submodule code tree might not even exist in this case.
#include "user_modules.h"
#ifdef LUA_USE_MODULES_UCG
#include <string.h>
#include "c_stdlib.h"
#include "platform.h"
#define USE_PIN_LIST
#include "ucg_nodemcu_hal.h"
#define delayMicroseconds os_delay_us
static
spi_data_type
cache
;
static
uint8_t
cached
;
#define CACHED_TRANSFER(dat, num) cache = cached = 0; \
while( arg > 0 ) { \
if (cached == 4) { \
platform_spi_transaction( 1, 0, 0, 32, cache, 0, 0, 0 ); \
cache = cached = 0; \
} \
cache = (cache << num*8) | dat; \
cached += num; \
arg--; \
} \
if (cached > 0) { \
platform_spi_transaction( 1, 0, 0, cached * 8, cache, 0, 0, 0 ); \
}
int16_t
ucg_com_nodemcu_hw_spi
(
ucg_t
*
ucg
,
int16_t
msg
,
uint16_t
arg
,
uint8_t
*
data
)
{
switch
(
msg
)
{
case
UCG_COM_MSG_POWER_UP
:
/* "data" is a pointer to ucg_com_info_t structure with the following information: */
/* ((ucg_com_info_t *)data)->serial_clk_speed value in nanoseconds */
/* ((ucg_com_info_t *)data)->parallel_clk_speed value in nanoseconds */
/* setup pins */
// we assume that the SPI interface was already initialized
// just care for the /CS and D/C pins
//platform_gpio_write( ucg->pin_list[0], value );
if
(
ucg
->
pin_list
[
UCG_PIN_RST
]
!=
UCG_PIN_VAL_NONE
)
platform_gpio_mode
(
ucg
->
pin_list
[
UCG_PIN_RST
],
PLATFORM_GPIO_OUTPUT
,
PLATFORM_GPIO_FLOAT
);
platform_gpio_mode
(
ucg
->
pin_list
[
UCG_PIN_CD
],
PLATFORM_GPIO_OUTPUT
,
PLATFORM_GPIO_FLOAT
);
if
(
ucg
->
pin_list
[
UCG_PIN_CS
]
!=
UCG_PIN_VAL_NONE
)
platform_gpio_mode
(
ucg
->
pin_list
[
UCG_PIN_CS
],
PLATFORM_GPIO_OUTPUT
,
PLATFORM_GPIO_FLOAT
);
break
;
case
UCG_COM_MSG_POWER_DOWN
:
break
;
case
UCG_COM_MSG_DELAY
:
delayMicroseconds
(
arg
);
break
;
case
UCG_COM_MSG_CHANGE_RESET_LINE
:
if
(
ucg
->
pin_list
[
UCG_PIN_RST
]
!=
UCG_PIN_VAL_NONE
)
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_RST
],
arg
);
break
;
case
UCG_COM_MSG_CHANGE_CS_LINE
:
if
(
ucg
->
pin_list
[
UCG_PIN_CS
]
!=
UCG_PIN_VAL_NONE
)
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_CS
],
arg
);
break
;
case
UCG_COM_MSG_CHANGE_CD_LINE
:
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_CD
],
arg
);
break
;
case
UCG_COM_MSG_SEND_BYTE
:
platform_spi_send
(
1
,
8
,
arg
);
break
;
case
UCG_COM_MSG_REPEAT_1_BYTE
:
CACHED_TRANSFER
(
data
[
0
],
1
);
break
;
case
UCG_COM_MSG_REPEAT_2_BYTES
:
CACHED_TRANSFER
((
data
[
0
]
<<
8
)
|
data
[
1
],
2
);
break
;
case
UCG_COM_MSG_REPEAT_3_BYTES
:
while
(
arg
>
0
)
{
platform_spi_transaction
(
1
,
0
,
0
,
24
,
(
data
[
0
]
<<
16
)
|
(
data
[
1
]
<<
8
)
|
data
[
2
],
0
,
0
,
0
);
arg
--
;
}
break
;
case
UCG_COM_MSG_SEND_STR
:
CACHED_TRANSFER
(
*
data
++
,
1
);
break
;
case
UCG_COM_MSG_SEND_CD_DATA_SEQUENCE
:
while
(
arg
>
0
)
{
if
(
*
data
!=
0
)
{
/* set the data line directly, ignore the setting from UCG_CFG_CD */
if
(
*
data
==
1
)
{
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_CD
],
0
);
}
else
{
platform_gpio_write
(
ucg
->
pin_list
[
UCG_PIN_CD
],
1
);
}
}
data
++
;
platform_spi_send
(
1
,
8
,
*
data
);
data
++
;
arg
--
;
}
break
;
}
return
1
;
}
#endif
/* LUA_USE_MODULES_UCG */
app/platform/ucg_nodemcu_hal.h
0 → 100644
View file @
11592951
#ifndef _UCG_NODEMCU_HAL_H
#define _UCG_NODEMCU_HAL_H
#include "ucg.h"
// extend standard ucg_t struct with info that's needed in the communication callbacks
typedef
struct
{
ucg_t
ucg
;
void
*
hal
;
}
ucg_nodemcu_t
;
int16_t
ucg_com_nodemcu_hw_spi
(
ucg_t
*
ucg
,
int16_t
msg
,
uint16_t
arg
,
uint8_t
*
data
);
#endif
/* _UCG_NODEMCU_HAL_H */
u8g2
@
d4da8254
Compare
7f2fc42a
...
d4da8254
Subproject commit
7f2fc42af3d01fdfe2cc19320bdcfe693dd2b20d
Subproject commit
d4da8254220adf39db44faa52a0842967095d230
app/ucglib/Makefile
View file @
11592951
...
@@ -24,7 +24,7 @@ STD_CFLAGS=-std=gnu11 -Wimplicit
...
@@ -24,7 +24,7 @@ STD_CFLAGS=-std=gnu11 -Wimplicit
# makefile at its root level - these are then overridden
# makefile at its root level - these are then overridden
# for a subtree within the makefile rooted therein
# for a subtree within the makefile rooted therein
#
#
#
DEFINES +=
DEFINES
+=
-DUSE_PIN_LIST
#############################################################
#############################################################
# Recursion Magic - Don't touch this!!
# Recursion Magic - Don't touch this!!
...
@@ -38,7 +38,10 @@ STD_CFLAGS=-std=gnu11 -Wimplicit
...
@@ -38,7 +38,10 @@ STD_CFLAGS=-std=gnu11 -Wimplicit
# Required for each makefile to inherit from the parent
# Required for each makefile to inherit from the parent
#
#
CSRCS
:=
$(
wildcard
ucg/src/clib/
*
.c
*
.c
)
INCLUDES
:=
$(INCLUDES)
-I
$(PDIR)
include
INCLUDES
:=
$(INCLUDES)
-I
$(PDIR)
include
INCLUDES
+=
-I
ucg/src/clib
INCLUDES
+=
-I
./
INCLUDES
+=
-I
./
INCLUDES
+=
-I
../libc
INCLUDES
+=
-I
../libc
PDIR
:=
../
$(PDIR)
PDIR
:=
../
$(PDIR)
...
...
ucg
@
e21641a6
Subproject commit e21641a6c1ddb0e71f7b9e01501fa739786c68b1
app/ucglib/ucg.h
deleted
100644 → 0
View file @
4095c408
/*
ucg.h
ucglib = universal color graphics library
ucglib = micro controller graphics library
Universal uC Color Graphics Library
Copyright (c) 2013, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SW layers
High Level Procedures
[ hline, init message interface ]
display callback procedure
[Calls to]
device dev cb
[calls to COM API]
com callback
font data:
offset bytes description
0 1 glyph_cnt number of glyphs
1 1 bbx_mode 0: proportional, 1: common height, 2: monospace, 3: multiple of 8
2 1 bits_per_0 glyph rle parameter
3 1 bits_per_1 glyph rle parameter
4 1 bits_per_char_width glyph rle parameter
5 1 bits_per_char_height glyph rle parameter
6 1 bits_per_char_x glyph rle parameter
7 1 bits_per_char_y glyph rle parameter
8 1 bits_per_delta_x glyph rle parameter
9 1 max_char_width
10 1 max_char_height
11 1 x offset
12 1 y offset (descent)
13 1 ascent (capital A)
14 1 descent (lower g)
15 1 ascent '('
16 1 descent ')'
17 1 start pos 'A' high byte
18 1 start pos 'A' low byte
19 1 start pos 'a' high byte
20 1 start pos 'a' low byte
*/
#ifndef _UCG_H
#define _UCG_H
#if defined(__XTENSA__)
# include <c_types.h>
#else
# include <stdint.h>
#endif
#include <stddef.h>
#ifdef __cplusplus
extern
"C"
{
#endif
#if defined(ARDUINO) || defined(__XTENSA__)
#ifndef USE_PIN_LIST
#define USE_PIN_LIST
#endif
#endif
#ifdef __GNUC__
# define UCG_NOINLINE __attribute__((noinline))
# define UCG_SECTION(name) __attribute__ ((section (name)))
# if defined(__MSPGCC__)
/* mspgcc does not have .progmem sections. Use -fdata-sections. */
# define UCG_FONT_SECTION(name)
# elif defined(__AVR__)
# define UCG_FONT_SECTION(name) UCG_SECTION(".progmem." name)
# elif defined(__XTENSA__)
# define UCG_FONT_SECTION(name)
# else
# define UCG_FONT_SECTION(name)
# endif
#else
# define UCG_NOINLINE
# define UCG_SECTION(name)
# define UCG_FONT_SECTION(name)
#endif
#if defined(__AVR__)
#include <avr/pgmspace.h>
/* UCG_PROGMEM is used by the XBM example */
#define UCG_PROGMEM UCG_SECTION(".progmem.data")
typedef
uint8_t
PROGMEM
ucg_pgm_uint8_t
;
typedef
uint8_t
ucg_fntpgm_uint8_t
;
#define ucg_pgm_read(adr) pgm_read_byte_near(adr)
#define UCG_PSTR(s) ((ucg_pgm_uint8_t *)PSTR(s))
#elif defined(__XTENSA__)
#define UCG_PROGMEM
#define PROGMEM
typedef
uint8_t
ucg_pgm_uint8_t
;
typedef
uint8_t
ucg_fntpgm_uint8_t
;
#define ucg_pgm_read(adr) (*(const ucg_pgm_uint8_t *)(adr))
#define UCG_PSTR(s) ((ucg_pgm_uint8_t *)(s))
#else
#define UCG_PROGMEM
#define PROGMEM
typedef
uint8_t
ucg_pgm_uint8_t
;
typedef
uint8_t
ucg_fntpgm_uint8_t
;
#define ucg_pgm_read(adr) (*(const ucg_pgm_uint8_t *)(adr))
#define UCG_PSTR(s) ((ucg_pgm_uint8_t *)(s))
#endif
/*================================================*/
/* several type and forward definitions */
typedef
int16_t
ucg_int_t
;
typedef
struct
_ucg_t
ucg_t
;
typedef
struct
_ucg_xy_t
ucg_xy_t
;
typedef
struct
_ucg_wh_t
ucg_wh_t
;
typedef
struct
_ucg_box_t
ucg_box_t
;
typedef
struct
_ucg_color_t
ucg_color_t
;
typedef
struct
_ucg_ccs_t
ucg_ccs_t
;
typedef
struct
_ucg_pixel_t
ucg_pixel_t
;
typedef
struct
_ucg_arg_t
ucg_arg_t
;
typedef
struct
_ucg_com_info_t
ucg_com_info_t
;
typedef
ucg_int_t
(
*
ucg_dev_fnptr
)(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
typedef
int16_t
(
*
ucg_com_fnptr
)(
ucg_t
*
ucg
,
int16_t
msg
,
uint16_t
arg
,
uint8_t
*
data
);
typedef
ucg_int_t
(
*
ucg_font_calc_vref_fnptr
)(
ucg_t
*
ucg
);
//typedef ucg_int_t (*ucg_font_mode_fnptr)(ucg_t *ucg, ucg_int_t x, ucg_int_t y, uint8_t dir, uint8_t encoding);
/*================================================*/
/* list of supported display modules */
ucg_int_t
ucg_dev_ssd1351_18x128x128_ilsoft
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ssd1351_18x128x128_ft
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ili9325_18x240x320_itdb02
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ili9325_spi_18x240x320
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
/* 1 May 2014: Currently, this is not working */
ucg_int_t
ucg_dev_ili9341_18x240x320
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ili9163_18x128x128
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_st7735_18x128x160
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_pcf8833_16x132x132
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ld50t6160_18x160x128_samsung
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ssd1331_18x96x64_univision
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_seps225_16x128x128_univision
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
/*================================================*/
/*
list of extensions for the controllers
each module can have the "none" extension (ucg_ext_none) or the specific
extensions, that matches the controller name and color depth.
example: for the module ucg_dev_ssd1351_18x128x128_ilsoft
valid extensions are:
ucg_ext_none
ucg_ext_ssd1351_18
*/
ucg_int_t
ucg_ext_none
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_ssd1351_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_ili9325_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_ili9325_spi_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_ili9341_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_ili9163_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_st7735_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_pcf8833_16
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_ld50t6160_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_ssd1331_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_ext_seps225_16
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
/*================================================*/
/* list of supported display controllers */
ucg_int_t
ucg_dev_ic_ssd1351_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ic_ili9325_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ic_ili9325_spi_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ic_ili9341_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ic_ili9163_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ic_st7735_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ic_pcf8833_16
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ic_ld50t6160_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_dev_ic_ssd1331_18
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
/* actually this display only has 65k colors */
ucg_int_t
ucg_dev_ic_seps225_16
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
/* this display could do 262k colors, but only 65k are supported via SPI */
/*================================================*/
/* struct declarations */
struct
_ucg_xy_t
{
ucg_int_t
x
;
ucg_int_t
y
;
};
struct
_ucg_wh_t
{
ucg_int_t
w
;
ucg_int_t
h
;
};
struct
_ucg_box_t
{
ucg_xy_t
ul
;
ucg_wh_t
size
;
};
struct
_ucg_color_t
{
uint8_t
color
[
3
];
/* 0: Red, 1: Green, 2: Blue */
};
struct
_ucg_ccs_t
{
uint8_t
current
;
/* contains the current color component */
uint8_t
start
;
ucg_int_t
dir
;
/* 1 if start < end or -1 if start > end */
ucg_int_t
num
;
ucg_int_t
quot
;
ucg_int_t
den
;
ucg_int_t
rem
;
ucg_int_t
frac
;
};
struct
_ucg_pixel_t
{
ucg_xy_t
pos
;
ucg_color_t
rgb
;
};
struct
_ucg_arg_t
{
ucg_pixel_t
pixel
;
ucg_int_t
len
;
ucg_int_t
dir
;
ucg_int_t
offset
;
/* calculated offset from the inital point to the start of the clip window (ucg_clip_l90fx) */
ucg_int_t
scale
;
/* upscale factor, used by UCG_MSG_DRAW_L90BF */
const
unsigned
char
*
bitmap
;
ucg_int_t
pixel_skip
;
/* within the "bitmap" skip the specified number of pixel with the bit. pixel_skip is always <= 7 */
ucg_color_t
rgb
[
4
];
/* start and end color for L90SE , two more colors for the gradient box */
ucg_ccs_t
ccs_line
[
3
];
/* color component sliders used by L90SE */
};
#define UCG_FONT_HEIGHT_MODE_TEXT 0
#define UCG_FONT_HEIGHT_MODE_XTEXT 1
#define UCG_FONT_HEIGHT_MODE_ALL 2
struct
_ucg_com_info_t
{
uint16_t
serial_clk_speed
;
uint16_t
parallel_clk_speed
;
};
struct
_ucg_font_info_t
{
/* offset 0 */
uint8_t
glyph_cnt
;
uint8_t
bbx_mode
;
uint8_t
bits_per_0
;
uint8_t
bits_per_1
;
/* offset 4 */
uint8_t
bits_per_char_width
;
uint8_t
bits_per_char_height
;
uint8_t
bits_per_char_x
;
uint8_t
bits_per_char_y
;
uint8_t
bits_per_delta_x
;
/* offset 9 */
int8_t
max_char_width
;
int8_t
max_char_height
;
/* overall height, NOT ascent. Instead ascent = max_char_height + y_offset */
int8_t
x_offset
;
int8_t
y_offset
;
/* offset 13 */
int8_t
ascent_A
;
int8_t
descent_g
;
int8_t
ascent_para
;
int8_t
descent_para
;
/* offset 17 */
uint16_t
start_pos_upper_A
;
uint16_t
start_pos_lower_a
;
};
typedef
struct
_ucg_font_info_t
ucg_font_info_t
;
struct
_ucg_font_decode_t
{
const
uint8_t
*
decode_ptr
;
/* pointer to the compressed data */
ucg_int_t
target_x
;
ucg_int_t
target_y
;
int8_t
x
;
/* local coordinates, (0,0) is upper left */
int8_t
y
;
int8_t
glyph_width
;
int8_t
glyph_height
;
uint8_t
decode_bit_pos
;
/* bitpos inside a byte of the compressed data */
uint8_t
is_transparent
;
uint8_t
dir
;
/* direction */
};
typedef
struct
_ucg_font_decode_t
ucg_font_decode_t
;
#ifdef USE_PIN_LIST
#define UCG_PIN_RST 0
#define UCG_PIN_CD 1
#define UCG_PIN_CS 2
#define UCG_PIN_SCL 3
#define UCG_PIN_WR 3
#define UCG_PIN_SDA 4
#define UCG_PIN_D0 5
#define UCG_PIN_D1 6
#define UCG_PIN_D2 7
#define UCG_PIN_D3 8
#define UCG_PIN_D4 9
#define UCG_PIN_D5 10
#define UCG_PIN_D6 11
#define UCG_PIN_D7 12
#define UCG_PIN_COUNT 13
#define UCG_PIN_VAL_NONE 255
#endif
struct
_ucg_t
{
unsigned
is_power_up
:
1
;
/* the dimension of the display */
ucg_wh_t
dimension
;
/* display callback procedure to handle display specific code */
//ucg_dev_fnptr display_cb;
/* controller and device specific code, high level procedure will call this */
ucg_dev_fnptr
device_cb
;
/* name of the extension cb. will be called by device_cb if required */
ucg_dev_fnptr
ext_cb
;
/* if rotation is applied, than this cb is called after rotation */
ucg_dev_fnptr
rotate_chain_device_cb
;
ucg_wh_t
rotate_dimension
;
/* if rotation is applied, than this cb is called by the scale device */
ucg_dev_fnptr
scale_chain_device_cb
;
/* communication interface */
ucg_com_fnptr
com_cb
;
/* offset, that is additionally added to UCG_VARX/UCG_VARY */
/* seems to be required for the Nokia display */
// ucg_xy_t display_offset;
/* data which is passed to the cb procedures */
/* can be modified by the cb procedures (rotation, clipping, etc) */
ucg_arg_t
arg
;
/* current window to which all drawing is clipped */
/* should be modified via UCG_MSG_SET_CLIP_BOX by a device callback. */
/* by default this is done by ucg_dev_default_cb */
ucg_box_t
clip_box
;
/* information about the current font */
const
unsigned
char
*
font
;
/* current font for all text procedures */
ucg_font_calc_vref_fnptr
font_calc_vref
;
//ucg_font_mode_fnptr font_mode; /* OBSOLETE?? UCG_FONT_MODE_TRANSPARENT, UCG_FONT_MODE_SOLID, UCG_FONT_MODE_NONE */
ucg_font_decode_t
font_decode
;
/* new font decode structure */
ucg_font_info_t
font_info
;
/* new font info structure */
int8_t
glyph_dx
;
/* OBSOLETE */
int8_t
glyph_x
;
/* OBSOLETE */
int8_t
glyph_y
;
/* OBSOLETE */
uint8_t
glyph_width
;
/* OBSOLETE */
uint8_t
glyph_height
;
/* OBSOLETE */
uint8_t
font_height_mode
;
int8_t
font_ref_ascent
;
int8_t
font_ref_descent
;
/* only for Arduino/C++ Interface */
#ifdef USE_PIN_LIST
uint8_t
pin_list
[
UCG_PIN_COUNT
];
#ifdef __AVR__
volatile
uint8_t
*
data_port
[
UCG_PIN_COUNT
];
uint8_t
data_mask
[
UCG_PIN_COUNT
];
#endif
#endif
/*
Small amount of RAM for the com interface (com_cb).
Might be unused on unix systems, where the com sub system is
not required, but should be usefull for all uC projects.
*/
uint8_t
com_initial_change_sent
;
/* Bit 0: CD/A0 Line Status, Bit 1: CS Line Status, Bit 2: Reset Line Status */
uint8_t
com_status
;
/* Bit 0: CD/A0 Line Status, Bit 1: CS Line Status, Bit 2: Reset Line Status, Bit 3: 1 for power up */
uint8_t
com_cfg_cd
;
/* Bit 0: Argument Level, Bit 1: Command Level */
};
#define ucg_GetWidth(ucg) ((ucg)->dimension.w)
#define ucg_GetHeight(ucg) ((ucg)->dimension.h)
#define UCG_MSG_DEV_POWER_UP 10
#define UCG_MSG_DEV_POWER_DOWN 11
#define UCG_MSG_SET_CLIP_BOX 12
#define UCG_MSG_GET_DIMENSION 15
/* draw pixel with color from idx 0 */
#define UCG_MSG_DRAW_PIXEL 20
#define UCG_MSG_DRAW_L90FX 21
/* draw bit pattern, transparent and draw color (idx 0) color */
//#define UCG_MSG_DRAW_L90TC 22 /* can be commented, used by ucg_DrawTransparentBitmapLine */
#define UCG_MSG_DRAW_L90SE 23
/* this part of the extension */
//#define UCG_MSG_DRAW_L90RL 24 /* not yet implemented */
/* draw bit pattern with foreground (idx 1) and background (idx 0) color */
//#define UCG_MSG_DRAW_L90BF 25 /* can be commented, used by ucg_DrawBitmapLine */
#define UCG_COM_STATUS_MASK_POWER 8
#define UCG_COM_STATUS_MASK_RESET 4
#define UCG_COM_STATUS_MASK_CS 2
#define UCG_COM_STATUS_MASK_CD 1
/*
arg: 0
data: ucg_com_info_t *
return: 0 for error
note:
- power up is the first command, which is sent
*/
#define UCG_COM_MSG_POWER_UP 10
/*
note: power down my be followed only by power up command
*/
#define UCG_COM_MSG_POWER_DOWN 11
/*
arg: delay in microseconds (0..4095)
*/
#define UCG_COM_MSG_DELAY 12
/*
ucg->com_status contains previous status of reset line
arg: new logic level for reset line
*/
#define UCG_COM_MSG_CHANGE_RESET_LINE 13
/*
ucg->com_status contains previous status of cs line
arg: new logic level for cs line
*/
#define UCG_COM_MSG_CHANGE_CS_LINE 14
/*
ucg->com_status contains previous status of cd line
arg: new logic level for cd line
*/
#define UCG_COM_MSG_CHANGE_CD_LINE 15
/*
ucg->com_status current status of Reset, CS and CD line (ucg->com_status)
arg: byte for display
*/
#define UCG_COM_MSG_SEND_BYTE 16
/*
ucg->com_status current status of Reset, CS and CD line (ucg->com_status)
arg: how often to repeat the 2/3 byte sequence
data: pointer to two or three bytes
*/
#define UCG_COM_MSG_REPEAT_1_BYTE 17
#define UCG_COM_MSG_REPEAT_2_BYTES 18
#define UCG_COM_MSG_REPEAT_3_BYTES 19
/*
ucg->com_status current status of Reset, CS and CD line (ucg->com_status)
arg: length of string
data: string
*/
#define UCG_COM_MSG_SEND_STR 20
/*
ucg->com_status current status of Reset, CS and CD line (ucg->com_status)
arg: number of cd_info and data pairs (half value of total byte cnt)
data: uint8_t with CD and data information
cd_info data cd_info data cd_info data cd_info data ... cd_info data cd_info data
cd_info is the level, which is directly applied to the CD line. This means,
information applied to UCG_CFG_CD is not relevant.
*/
#define UCG_COM_MSG_SEND_CD_DATA_SEQUENCE 21
/*================================================*/
/* interrupt safe code */
#define UCG_INTERRUPT_SAFE
#if defined(UCG_INTERRUPT_SAFE)
# if defined(__AVR__)
extern
uint8_t
global_SREG_backup
;
/* ucg_init.c */
# define UCG_ATOMIC_START() do { global_SREG_backup = SREG; cli(); } while(0)
# define UCG_ATOMIC_END() SREG = global_SREG_backup
# define UCG_ATOMIC_OR(ptr, val) do { uint8_t tmpSREG = SREG; cli(); (*(ptr) |= (val)); SREG = tmpSREG; } while(0)
# define UCG_ATOMIC_AND(ptr, val) do { uint8_t tmpSREG = SREG; cli(); (*(ptr) &= (val)); SREG = tmpSREG; } while(0)
# else
# define UCG_ATOMIC_OR(ptr, val) (*(ptr) |= (val))
# define UCG_ATOMIC_AND(ptr, val) (*(ptr) &= (val))
# define UCG_ATOMIC_START()
# define UCG_ATOMIC_END()
# endif
/* __AVR__ */
#else
# define UCG_ATOMIC_OR(ptr, val) (*(ptr) |= (val))
# define UCG_ATOMIC_AND(ptr, val) (*(ptr) &= (val))
# define UCG_ATOMIC_START()
# define UCG_ATOMIC_END()
#endif
/* UCG_INTERRUPT_SAFE */
/*================================================*/
/* ucg_dev_msg_api.c */
void
ucg_PowerDown
(
ucg_t
*
ucg
);
ucg_int_t
ucg_PowerUp
(
ucg_t
*
ucg
);
void
ucg_SetClipBox
(
ucg_t
*
ucg
,
ucg_box_t
*
clip_box
);
void
ucg_SetClipRange
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
);
void
ucg_SetMaxClipRange
(
ucg_t
*
ucg
);
void
ucg_GetDimension
(
ucg_t
*
ucg
);
void
ucg_DrawPixelWithArg
(
ucg_t
*
ucg
);
void
ucg_DrawL90FXWithArg
(
ucg_t
*
ucg
);
void
ucg_DrawL90TCWithArg
(
ucg_t
*
ucg
);
void
ucg_DrawL90BFWithArg
(
ucg_t
*
ucg
);
void
ucg_DrawL90SEWithArg
(
ucg_t
*
ucg
);
/* void ucg_DrawL90RLWithArg(ucg_t *ucg); */
/*================================================*/
/* ucg_init.c */
ucg_int_t
ucg_Init
(
ucg_t
*
ucg
,
ucg_dev_fnptr
device_cb
,
ucg_dev_fnptr
ext_cb
,
ucg_com_fnptr
com_cb
);
/*================================================*/
/* ucg_dev_sdl.c */
ucg_int_t
ucg_sdl_dev_cb
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
/*================================================*/
/* ucg_pixel.c */
void
ucg_SetColor
(
ucg_t
*
ucg
,
uint8_t
idx
,
uint8_t
r
,
uint8_t
g
,
uint8_t
b
);
void
ucg_DrawPixel
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
);
/*================================================*/
/* ucg_line.c */
void
ucg_Draw90Line
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
len
,
ucg_int_t
dir
,
ucg_int_t
col_idx
);
void
ucg_DrawHLine
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
len
);
void
ucg_DrawVLine
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
len
);
void
ucg_DrawHRLine
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
len
);
void
ucg_DrawLine
(
ucg_t
*
ucg
,
ucg_int_t
x1
,
ucg_int_t
y1
,
ucg_int_t
x2
,
ucg_int_t
y2
);
/* the following procedure is only available with the extended callback */
void
ucg_DrawGradientLine
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
len
,
ucg_int_t
dir
);
/*================================================*/
/* ucg_box.c */
void
ucg_DrawBox
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
);
void
ucg_ClearScreen
(
ucg_t
*
ucg
);
void
ucg_DrawRBox
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
,
ucg_int_t
r
);
void
ucg_DrawGradientBox
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
);
void
ucg_DrawFrame
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
);
void
ucg_DrawRFrame
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
,
ucg_int_t
r
);
/*================================================*/
/* ucg_circle.c */
#define UCG_DRAW_UPPER_RIGHT 0x01
#define UCG_DRAW_UPPER_LEFT 0x02
#define UCG_DRAW_LOWER_LEFT 0x04
#define UCG_DRAW_LOWER_RIGHT 0x08
#define UCG_DRAW_ALL (UCG_DRAW_UPPER_RIGHT|UCG_DRAW_UPPER_LEFT|UCG_DRAW_LOWER_RIGHT|UCG_DRAW_LOWER_LEFT)
void
ucg_DrawDisc
(
ucg_t
*
ucg
,
ucg_int_t
x0
,
ucg_int_t
y0
,
ucg_int_t
rad
,
uint8_t
option
);
void
ucg_DrawCircle
(
ucg_t
*
ucg
,
ucg_int_t
x0
,
ucg_int_t
y0
,
ucg_int_t
rad
,
uint8_t
option
);
/*================================================*/
/* ucg_bitmap.c */
void
ucg_DrawTransparentBitmapLine
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
dir
,
ucg_int_t
len
,
const
unsigned
char
*
bitmap
);
void
ucg_DrawBitmapLine
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
dir
,
ucg_int_t
len
,
const
unsigned
char
*
bitmap
);
/* void ucg_DrawRLBitmap(ucg_t *ucg, ucg_int_t x, ucg_int_t y, ucg_int_t dir, const unsigned char *rl_bitmap); */
/*================================================*/
/* ucg_rotate.c */
void
ucg_UndoRotate
(
ucg_t
*
ucg
);
void
ucg_SetRotate90
(
ucg_t
*
ucg
);
void
ucg_SetRotate180
(
ucg_t
*
ucg
);
void
ucg_SetRotate270
(
ucg_t
*
ucg
);
/*================================================*/
/* ucg_scale.c */
void
ucg_UndoScale
(
ucg_t
*
ucg
);
void
ucg_SetScale2x2
(
ucg_t
*
ucg
);
/*================================================*/
/* ucg_polygon.c */
typedef
int16_t
pg_word_t
;
#define PG_NOINLINE UCG_NOINLINE
struct
pg_point_struct
{
pg_word_t
x
;
pg_word_t
y
;
};
typedef
struct
_pg_struct
pg_struct
;
/* forward declaration */
struct
pg_edge_struct
{
pg_word_t
x_direction
;
/* 1, if x2 is greater than x1, -1 otherwise */
pg_word_t
height
;
pg_word_t
current_x_offset
;
pg_word_t
error_offset
;
/* --- line loop --- */
pg_word_t
current_y
;
pg_word_t
max_y
;
pg_word_t
current_x
;
pg_word_t
error
;
/* --- outer loop --- */
uint8_t
(
*
next_idx_fn
)(
pg_struct
*
pg
,
uint8_t
i
);
uint8_t
curr_idx
;
};
/* maximum number of points in the polygon */
/* can be redefined, but highest possible value is 254 */
#define PG_MAX_POINTS 4
/* index numbers for the pge structures below */
#define PG_LEFT 0
#define PG_RIGHT 1
struct
_pg_struct
{
struct
pg_point_struct
list
[
PG_MAX_POINTS
];
uint8_t
cnt
;
uint8_t
is_min_y_not_flat
;
pg_word_t
total_scan_line_cnt
;
struct
pg_edge_struct
pge
[
2
];
/* left and right line draw structures */
};
void
pg_ClearPolygonXY
(
pg_struct
*
pg
);
void
pg_AddPolygonXY
(
pg_struct
*
pg
,
ucg_t
*
ucg
,
int16_t
x
,
int16_t
y
);
void
pg_DrawPolygon
(
pg_struct
*
pg
,
ucg_t
*
ucg
);
void
ucg_ClearPolygonXY
(
void
);
void
ucg_AddPolygonXY
(
ucg_t
*
ucg
,
int16_t
x
,
int16_t
y
);
void
ucg_DrawPolygon
(
ucg_t
*
ucg
);
void
ucg_DrawTriangle
(
ucg_t
*
ucg
,
int16_t
x0
,
int16_t
y0
,
int16_t
x1
,
int16_t
y1
,
int16_t
x2
,
int16_t
y2
);
/* the polygon procedure only works for convex tetragons (http://en.wikipedia.org/wiki/Convex_polygon) */
void
ucg_DrawTetragon
(
ucg_t
*
ucg
,
int16_t
x0
,
int16_t
y0
,
int16_t
x1
,
int16_t
y1
,
int16_t
x2
,
int16_t
y2
,
int16_t
x3
,
int16_t
y3
);
/*================================================*/
/* ucg_font.c */
//ucg_int_t ucg_draw_transparent_glyph(ucg_t *ucg, ucg_int_t x, ucg_int_t y, uint8_t dir, uint8_t encoding);
//ucg_int_t ucg_draw_solid_glyph(ucg_t *ucg, ucg_int_t x, ucg_int_t y, uint8_t dir, uint8_t encoding);
// old font procedures
//#define UCG_FONT_MODE_TRANSPARENT ucg_draw_transparent_glyph
//#define UCG_FONT_MODE_SOLID ucg_draw_solid_glyph
//#define UCG_FONT_MODE_NONE ((ucg_font_mode_fnptr)0)
// new font procedures
#define UCG_FONT_MODE_TRANSPARENT 1
#define UCG_FONT_MODE_SOLID 0
#define UCG_FONT_MODE_NONE 1
/* Information on a specific given font */
uint8_t
ucg_font_GetFontStartEncoding
(
const
void
*
font
);
uint8_t
ucg_font_GetFontEndEncoding
(
const
void
*
font
);
uint8_t
ucg_font_GetCapitalAHeight
(
const
void
*
font
);
int8_t
ucg_font_GetFontAscent
(
const
void
*
font
);
int8_t
ucg_font_GetFontDescent
(
const
void
*
font
);
int8_t
ucg_font_GetFontXAscent
(
const
void
*
font
);
int8_t
ucg_font_GetFontXDescent
(
const
void
*
font
);
size_t
ucg_font_GetSize
(
const
void
*
font
);
/* Information on the current font */
uint8_t
ucg_GetFontBBXWidth
(
ucg_t
*
ucg
);
uint8_t
ucg_GetFontBBXHeight
(
ucg_t
*
ucg
);
uint8_t
ucg_GetFontCapitalAHeight
(
ucg_t
*
ucg
)
UCG_NOINLINE
;
uint8_t
ucg_IsGlyph
(
ucg_t
*
ucg
,
uint8_t
requested_encoding
);
int8_t
ucg_GetGlyphWidth
(
ucg_t
*
ucg
,
uint8_t
requested_encoding
);
#define ucg_GetFontAscent(ucg) ((ucg)->font_ref_ascent)
#define ucg_GetFontDescent(ucg) ((ucg)->font_ref_descent)
/* Drawing procedures */
ucg_int_t
ucg_DrawGlyph
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
uint8_t
dir
,
uint8_t
encoding
);
ucg_int_t
ucg_DrawString
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
uint8_t
dir
,
const
char
*
str
);
/* Mode selection/Font assignment */
void
ucg_SetFontRefHeightText
(
ucg_t
*
ucg
);
void
ucg_SetFontRefHeightExtendedText
(
ucg_t
*
ucg
);
void
ucg_SetFontRefHeightAll
(
ucg_t
*
ucg
);
void
ucg_SetFontPosBaseline
(
ucg_t
*
ucg
)
UCG_NOINLINE
;
void
ucg_SetFontPosBottom
(
ucg_t
*
ucg
);
void
ucg_SetFontPosTop
(
ucg_t
*
ucg
);
void
ucg_SetFontPosCenter
(
ucg_t
*
ucg
);
void
ucg_SetFont
(
ucg_t
*
ucg
,
const
ucg_fntpgm_uint8_t
*
font
);
//void ucg_SetFontMode(ucg_t *ucg, ucg_font_mode_fnptr font_mode);
void
ucg_SetFontMode
(
ucg_t
*
ucg
,
uint8_t
is_transparent
);
ucg_int_t
ucg_GetStrWidth
(
ucg_t
*
ucg
,
const
char
*
s
);
/*================================================*/
/* LOW LEVEL PROCEDRUES, ONLY CALLED BY DEV CB */
/*================================================*/
/* ucg_clip.c */
ucg_int_t
ucg_clip_is_pixel_visible
(
ucg_t
*
ucg
);
ucg_int_t
ucg_clip_l90fx
(
ucg_t
*
ucg
);
ucg_int_t
ucg_clip_l90tc
(
ucg_t
*
ucg
);
ucg_int_t
ucg_clip_l90se
(
ucg_t
*
ucg
);
/*================================================*/
/* ucg_ccs.c */
void
ucg_ccs_init
(
ucg_ccs_t
*
ccs
,
uint8_t
start
,
uint8_t
end
,
ucg_int_t
steps
);
void
ucg_ccs_step
(
ucg_ccs_t
*
ccs
);
void
ucg_ccs_seek
(
ucg_ccs_t
*
ccs
,
ucg_int_t
pos
);
/*================================================*/
/* ucg_dev_default_cb.c */
ucg_int_t
ucg_dev_default_cb
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
ucg_int_t
ucg_handle_l90fx
(
ucg_t
*
ucg
,
ucg_dev_fnptr
dev_cb
);
ucg_int_t
ucg_handle_l90tc
(
ucg_t
*
ucg
,
ucg_dev_fnptr
dev_cb
);
ucg_int_t
ucg_handle_l90se
(
ucg_t
*
ucg
,
ucg_dev_fnptr
dev_cb
);
ucg_int_t
ucg_handle_l90bf
(
ucg_t
*
ucg
,
ucg_dev_fnptr
dev_cb
);
void
ucg_handle_l90rl
(
ucg_t
*
ucg
,
ucg_dev_fnptr
dev_cb
);
/*================================================*/
/* ucg_com_msg_api.c */
/* send command bytes and optional arguments */
#define UCG_C10(c0) 0x010, (c0)
#define UCG_C20(c0,c1) 0x020, (c0),(c1)
#define UCG_C11(c0,a0) 0x011, (c0),(a0)
#define UCG_C21(c0,c1,a0) 0x021, (c0),(c1),(a0)
#define UCG_C12(c0,a0,a1) 0x012, (c0),(a0),(a1)
#define UCG_C22(c0,c1,a0,a1) 0x022, (c0),(c1),(a0),(a1)
#define UCG_C13(c0,a0,a1,a2) 0x013, (c0),(a0),(a1),(a2)
#define UCG_C23(c0,c1,a0,a1,a2) 0x023, (c0),(c1),(a0),(a1),(a2)
#define UCG_C14(c0,a0,a1,a2,a3) 0x014, (c0),(a0),(a1),(a2),(a3)
#define UCG_C24(c0,c1,a0,a1,a2,a3) 0x024, (c0),(c1),(a0),(a1),(a2),(a3)
#define UCG_C15(c0,a0,a1,a2,a3,a4) 0x015, (c0),(a0),(a1),(a2),(a3),(a4)
/* send one or more argument bytes */
#define UCG_A1(d0) 0x061, (d0)
#define UCG_A2(d0,d1) 0x062, (d0),(d1)
#define UCG_A3(d0,d1,d2) 0x063, (d0),(d1),(d2)
#define UCG_A4(d0,d1,d2,d3) 0x064, (d0),(d1),(d2),(d3)
#define UCG_A5(d0,d1,d2,d3,d4) 0x065, (d0),(d1),(d2),(d3),(d4)
#define UCG_A6(d0,d1,d2,d3,d4,d5) 0x066, (d0),(d1),(d2),(d3),(d4),(d5)
#define UCG_A7(d0,d1,d2,d3,d4,d5,d6) 0x067, (d0),(d1),(d2),(d3),(d4),(d5),(d6)
#define UCG_A8(d0,d1,d2,d3,d4,d5,d6,d7) 0x068, (d0),(d1),(d2),(d3),(d4),(d5),(d6),(d7)
/* force data mode on CD line */
#define UCG_DATA() 0x070
/* send one or more data bytes */
#define UCG_D1(d0) 0x071, (d0)
#define UCG_D2(d0,d1) 0x072, (d0),(d1)
#define UCG_D3(d0,d1,d2) 0x073, (d0),(d1),(d2)
#define UCG_D4(d0,d1,d2,d3) 0x074, (d0),(d1),(d2),(d3)
#define UCG_D5(d0,d1,d2,d3,d4) 0x075, (d0),(d1),(d2),(d3),(d4)
#define UCG_D6(d0,d1,d2,d3,d4,d5) 0x076, (d0),(d1),(d2),(d3),(d4),(d5)
/* delay by specified value. t = [0..4095] */
#define UCG_DLY_MS(t) 0x080 | (((t)>>8)&15), (t)&255
#define UCG_DLY_US(t) 0x090 | (((t)>>8)&15), (t)&255
/* access procedures to ucg->arg.pixel.pos.x und ucg->arg.pixel.pos.y */
#define UCG_VARX(s,a,o) 0x0a0 | ((s)&15), (a), (o)
#define UCG_VARY(s,a,o) 0x0b0 | ((s)&15), (a), (o)
/* force specific level on RST und CS */
#define UCG_RST(level) 0x0f0 | ((level)&1)
#define UCG_CS(level) 0x0f4 | ((level)&1)
/* Configure CD line for command, arguments and data */
/* Configure CMD/DATA line: "c" logic level CMD, "a" logic level CMD Args */
#define UCG_CFG_CD(c,a) 0x0fc | (((c)&1)<<1) | ((a)&1)
/* Termination byte */
#define UCG_END() 0x00
/*
#define ucg_com_SendByte(ucg, byte) \
(ucg)->com_cb((ucg), UCG_COM_MSG_SEND_BYTE, (byte), NULL)
*/
#define ucg_com_SendRepeat3Bytes(ucg, cnt, byte_ptr) \
(ucg)->com_cb((ucg), UCG_COM_MSG_REPEAT_3_BYTES, (cnt), (byte_ptr))
void
ucg_com_PowerDown
(
ucg_t
*
ucg
);
int16_t
ucg_com_PowerUp
(
ucg_t
*
ucg
,
uint16_t
serial_clk_speed
,
uint16_t
parallel_clk_speed
);
/* values are nano seconds */
void
ucg_com_SetLineStatus
(
ucg_t
*
ucg
,
uint8_t
level
,
uint8_t
mask
,
uint8_t
msg
)
UCG_NOINLINE
;
void
ucg_com_SetResetLineStatus
(
ucg_t
*
ucg
,
uint8_t
level
);
void
ucg_com_SetCSLineStatus
(
ucg_t
*
ucg
,
uint8_t
level
);
void
ucg_com_SetCDLineStatus
(
ucg_t
*
ucg
,
uint8_t
level
);
void
ucg_com_DelayMicroseconds
(
ucg_t
*
ucg
,
uint16_t
delay
)
UCG_NOINLINE
;
void
ucg_com_DelayMilliseconds
(
ucg_t
*
ucg
,
uint16_t
delay
)
UCG_NOINLINE
;
#ifndef ucg_com_SendByte
void
ucg_com_SendByte
(
ucg_t
*
ucg
,
uint8_t
byte
);
#endif
void
ucg_com_SendRepeatByte
(
ucg_t
*
ucg
,
uint16_t
cnt
,
uint8_t
byte
);
void
ucg_com_SendRepeat2Bytes
(
ucg_t
*
ucg
,
uint16_t
cnt
,
uint8_t
*
byte_ptr
);
#ifndef ucg_com_SendRepeat3Bytes
void
ucg_com_SendRepeat3Bytes
(
ucg_t
*
ucg
,
uint16_t
cnt
,
uint8_t
*
byte_ptr
);
#endif
void
ucg_com_SendString
(
ucg_t
*
ucg
,
uint16_t
cnt
,
const
uint8_t
*
byte_ptr
);
void
ucg_com_SendCmdDataSequence
(
ucg_t
*
ucg
,
uint16_t
cnt
,
const
uint8_t
*
byte_ptr
,
uint8_t
cd_line_status_at_end
);
void
ucg_com_SendCmdSeq
(
ucg_t
*
ucg
,
const
ucg_pgm_uint8_t
*
data
);
/*================================================*/
/* ucg_dev_tga.c */
int
tga_init
(
uint16_t
w
,
uint16_t
h
);
void
tga_save
(
const
char
*
name
);
ucg_int_t
ucg_dev_tga
(
ucg_t
*
ucg
,
ucg_int_t
msg
,
void
*
data
);
/*================================================*/
#ifdef OLD_FONTS
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03b
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03b"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03bn
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03bn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03br
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03br"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03n
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03r
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24n
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24r
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_75r
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20
[]
UCG_FONT_SECTION
(
"ucg_font_10x20"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20r
[]
UCG_FONT_SECTION
(
"ucg_font_10x20r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_4x6
[]
UCG_FONT_SECTION
(
"ucg_font_4x6"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_4x6r
[]
UCG_FONT_SECTION
(
"ucg_font_4x6r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x7
[]
UCG_FONT_SECTION
(
"ucg_font_5x7"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x7r
[]
UCG_FONT_SECTION
(
"ucg_font_5x7r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x8
[]
UCG_FONT_SECTION
(
"ucg_font_5x8"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x8r
[]
UCG_FONT_SECTION
(
"ucg_font_5x8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x10
[]
UCG_FONT_SECTION
(
"ucg_font_6x10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x10r
[]
UCG_FONT_SECTION
(
"ucg_font_6x10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_75r
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12
[]
UCG_FONT_SECTION
(
"ucg_font_6x12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12r
[]
UCG_FONT_SECTION
(
"ucg_font_6x12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_75r
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13B
[]
UCG_FONT_SECTION
(
"ucg_font_6x13B"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13Br
[]
UCG_FONT_SECTION
(
"ucg_font_6x13Br"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13
[]
UCG_FONT_SECTION
(
"ucg_font_6x13"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13O
[]
UCG_FONT_SECTION
(
"ucg_font_6x13O"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13Or
[]
UCG_FONT_SECTION
(
"ucg_font_6x13Or"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13r
[]
UCG_FONT_SECTION
(
"ucg_font_6x13r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_7x13_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13_75r
[]
UCG_FONT_SECTION
(
"ucg_font_7x13_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13B
[]
UCG_FONT_SECTION
(
"ucg_font_7x13B"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13Br
[]
UCG_FONT_SECTION
(
"ucg_font_7x13Br"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13
[]
UCG_FONT_SECTION
(
"ucg_font_7x13"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13O
[]
UCG_FONT_SECTION
(
"ucg_font_7x13O"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13Or
[]
UCG_FONT_SECTION
(
"ucg_font_7x13Or"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13r
[]
UCG_FONT_SECTION
(
"ucg_font_7x13r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14B
[]
UCG_FONT_SECTION
(
"ucg_font_7x14B"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14Br
[]
UCG_FONT_SECTION
(
"ucg_font_7x14Br"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14
[]
UCG_FONT_SECTION
(
"ucg_font_7x14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14r
[]
UCG_FONT_SECTION
(
"ucg_font_7x14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_8x13_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13_75r
[]
UCG_FONT_SECTION
(
"ucg_font_8x13_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13B
[]
UCG_FONT_SECTION
(
"ucg_font_8x13B"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13Br
[]
UCG_FONT_SECTION
(
"ucg_font_8x13Br"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13
[]
UCG_FONT_SECTION
(
"ucg_font_8x13"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13O
[]
UCG_FONT_SECTION
(
"ucg_font_8x13O"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13Or
[]
UCG_FONT_SECTION
(
"ucg_font_8x13Or"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13r
[]
UCG_FONT_SECTION
(
"ucg_font_8x13r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_75r
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15B
[]
UCG_FONT_SECTION
(
"ucg_font_9x15B"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15Br
[]
UCG_FONT_SECTION
(
"ucg_font_9x15Br"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15
[]
UCG_FONT_SECTION
(
"ucg_font_9x15"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15r
[]
UCG_FONT_SECTION
(
"ucg_font_9x15r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_75r
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18B
[]
UCG_FONT_SECTION
(
"ucg_font_9x18B"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18Br
[]
UCG_FONT_SECTION
(
"ucg_font_9x18Br"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18
[]
UCG_FONT_SECTION
(
"ucg_font_9x18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18r
[]
UCG_FONT_SECTION
(
"ucg_font_9x18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_baby
[]
UCG_FONT_SECTION
(
"ucg_font_baby"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_babyn
[]
UCG_FONT_SECTION
(
"ucg_font_babyn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_babyr
[]
UCG_FONT_SECTION
(
"ucg_font_babyr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07n
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07r
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikita
[]
UCG_FONT_SECTION
(
"ucg_font_chikita"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikitan
[]
UCG_FONT_SECTION
(
"ucg_font_chikitan"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikitar
[]
UCG_FONT_SECTION
(
"ucg_font_chikitar"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB08
[]
UCG_FONT_SECTION
(
"ucg_font_courB08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB08r
[]
UCG_FONT_SECTION
(
"ucg_font_courB08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB10
[]
UCG_FONT_SECTION
(
"ucg_font_courB10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB10r
[]
UCG_FONT_SECTION
(
"ucg_font_courB10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB12
[]
UCG_FONT_SECTION
(
"ucg_font_courB12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB12r
[]
UCG_FONT_SECTION
(
"ucg_font_courB12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB14
[]
UCG_FONT_SECTION
(
"ucg_font_courB14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB14r
[]
UCG_FONT_SECTION
(
"ucg_font_courB14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB18
[]
UCG_FONT_SECTION
(
"ucg_font_courB18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB18r
[]
UCG_FONT_SECTION
(
"ucg_font_courB18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24
[]
UCG_FONT_SECTION
(
"ucg_font_courB24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24r
[]
UCG_FONT_SECTION
(
"ucg_font_courB24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24n
[]
UCG_FONT_SECTION
(
"ucg_font_courB24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR08
[]
UCG_FONT_SECTION
(
"ucg_font_courR08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR08r
[]
UCG_FONT_SECTION
(
"ucg_font_courR08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR10
[]
UCG_FONT_SECTION
(
"ucg_font_courR10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR10r
[]
UCG_FONT_SECTION
(
"ucg_font_courR10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR12
[]
UCG_FONT_SECTION
(
"ucg_font_courR12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR12r
[]
UCG_FONT_SECTION
(
"ucg_font_courR12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR14
[]
UCG_FONT_SECTION
(
"ucg_font_courR14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR14r
[]
UCG_FONT_SECTION
(
"ucg_font_courR14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR18
[]
UCG_FONT_SECTION
(
"ucg_font_courR18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR18r
[]
UCG_FONT_SECTION
(
"ucg_font_courR18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24
[]
UCG_FONT_SECTION
(
"ucg_font_courR24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24n
[]
UCG_FONT_SECTION
(
"ucg_font_courR24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24r
[]
UCG_FONT_SECTION
(
"ucg_font_courR24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cu12_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_cu12_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cu12_75r
[]
UCG_FONT_SECTION
(
"ucg_font_cu12_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cu12
[]
UCG_FONT_SECTION
(
"ucg_font_cu12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cursor
[]
UCG_FONT_SECTION
(
"ucg_font_cursor"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cursorr
[]
UCG_FONT_SECTION
(
"ucg_font_cursorr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0n
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0r
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_freedoomr10r
[]
UCG_FONT_SECTION
(
"ucg_font_freedoomr10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_freedoomr25n
[]
UCG_FONT_SECTION
(
"ucg_font_freedoomr25n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB08
[]
UCG_FONT_SECTION
(
"ucg_font_helvB08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB08r
[]
UCG_FONT_SECTION
(
"ucg_font_helvB08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB10
[]
UCG_FONT_SECTION
(
"ucg_font_helvB10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB10r
[]
UCG_FONT_SECTION
(
"ucg_font_helvB10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB12
[]
UCG_FONT_SECTION
(
"ucg_font_helvB12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB12r
[]
UCG_FONT_SECTION
(
"ucg_font_helvB12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB14
[]
UCG_FONT_SECTION
(
"ucg_font_helvB14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB14r
[]
UCG_FONT_SECTION
(
"ucg_font_helvB14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB18
[]
UCG_FONT_SECTION
(
"ucg_font_helvB18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB18r
[]
UCG_FONT_SECTION
(
"ucg_font_helvB18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24n
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24r
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR08
[]
UCG_FONT_SECTION
(
"ucg_font_helvR08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR08r
[]
UCG_FONT_SECTION
(
"ucg_font_helvR08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR10
[]
UCG_FONT_SECTION
(
"ucg_font_helvR10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR10r
[]
UCG_FONT_SECTION
(
"ucg_font_helvR10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR12
[]
UCG_FONT_SECTION
(
"ucg_font_helvR12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR12r
[]
UCG_FONT_SECTION
(
"ucg_font_helvR12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR14
[]
UCG_FONT_SECTION
(
"ucg_font_helvR14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR14r
[]
UCG_FONT_SECTION
(
"ucg_font_helvR14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR18
[]
UCG_FONT_SECTION
(
"ucg_font_helvR18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR18r
[]
UCG_FONT_SECTION
(
"ucg_font_helvR18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24n
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24r
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternate
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternate"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternaten
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternaten"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternater
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternater"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_m2icon_5
[]
UCG_FONT_SECTION
(
"ucg_font_m2icon_5"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_m2icon_7
[]
UCG_FONT_SECTION
(
"ucg_font_m2icon_7"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_m2icon_9
[]
UCG_FONT_SECTION
(
"ucg_font_m2icon_9"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_micro
[]
UCG_FONT_SECTION
(
"ucg_font_micro"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB08
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB08r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB10
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB10r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB12
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB12r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB14
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB14r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB18
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB18r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24n
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR08
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR08r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR10
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR10r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR12
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR12r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR14
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR14r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR18
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR18r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24n
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24r
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01n
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01r
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01type
[]
UCG_FONT_SECTION
(
"ucg_font_p01type"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01typen
[]
UCG_FONT_SECTION
(
"ucg_font_p01typen"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01typer
[]
UCG_FONT_SECTION
(
"ucg_font_p01typer"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micro
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micro"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micron
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micron"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micror
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micror"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont10
[]
UCG_FONT_SECTION
(
"ucg_font_profont10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont10r
[]
UCG_FONT_SECTION
(
"ucg_font_profont10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont11
[]
UCG_FONT_SECTION
(
"ucg_font_profont11"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont11r
[]
UCG_FONT_SECTION
(
"ucg_font_profont11r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont12
[]
UCG_FONT_SECTION
(
"ucg_font_profont12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont12r
[]
UCG_FONT_SECTION
(
"ucg_font_profont12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont15
[]
UCG_FONT_SECTION
(
"ucg_font_profont15"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont15r
[]
UCG_FONT_SECTION
(
"ucg_font_profont15r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont17
[]
UCG_FONT_SECTION
(
"ucg_font_profont17"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont17r
[]
UCG_FONT_SECTION
(
"ucg_font_profont17r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22
[]
UCG_FONT_SECTION
(
"ucg_font_profont22"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22n
[]
UCG_FONT_SECTION
(
"ucg_font_profont22n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22r
[]
UCG_FONT_SECTION
(
"ucg_font_profont22r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29
[]
UCG_FONT_SECTION
(
"ucg_font_profont29"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29n
[]
UCG_FONT_SECTION
(
"ucg_font_profont29n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29r
[]
UCG_FONT_SECTION
(
"ucg_font_profont29r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niro
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niro"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niron
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niron"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niror
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niror"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb08
[]
UCG_FONT_SECTION
(
"ucg_font_symb08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb08r
[]
UCG_FONT_SECTION
(
"ucg_font_symb08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb10
[]
UCG_FONT_SECTION
(
"ucg_font_symb10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb10r
[]
UCG_FONT_SECTION
(
"ucg_font_symb10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb12
[]
UCG_FONT_SECTION
(
"ucg_font_symb12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb12r
[]
UCG_FONT_SECTION
(
"ucg_font_symb12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb14
[]
UCG_FONT_SECTION
(
"ucg_font_symb14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb14r
[]
UCG_FONT_SECTION
(
"ucg_font_symb14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb18
[]
UCG_FONT_SECTION
(
"ucg_font_symb18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb18r
[]
UCG_FONT_SECTION
(
"ucg_font_symb18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb24
[]
UCG_FONT_SECTION
(
"ucg_font_symb24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb24r
[]
UCG_FONT_SECTION
(
"ucg_font_symb24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB08
[]
UCG_FONT_SECTION
(
"ucg_font_timB08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB08r
[]
UCG_FONT_SECTION
(
"ucg_font_timB08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB10
[]
UCG_FONT_SECTION
(
"ucg_font_timB10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB10r
[]
UCG_FONT_SECTION
(
"ucg_font_timB10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB12
[]
UCG_FONT_SECTION
(
"ucg_font_timB12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB12r
[]
UCG_FONT_SECTION
(
"ucg_font_timB12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB14
[]
UCG_FONT_SECTION
(
"ucg_font_timB14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB14r
[]
UCG_FONT_SECTION
(
"ucg_font_timB14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB18
[]
UCG_FONT_SECTION
(
"ucg_font_timB18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB18r
[]
UCG_FONT_SECTION
(
"ucg_font_timB18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24
[]
UCG_FONT_SECTION
(
"ucg_font_timB24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24n
[]
UCG_FONT_SECTION
(
"ucg_font_timB24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24r
[]
UCG_FONT_SECTION
(
"ucg_font_timB24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR08
[]
UCG_FONT_SECTION
(
"ucg_font_timR08"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR08r
[]
UCG_FONT_SECTION
(
"ucg_font_timR08r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR10
[]
UCG_FONT_SECTION
(
"ucg_font_timR10"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR10r
[]
UCG_FONT_SECTION
(
"ucg_font_timR10r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR12
[]
UCG_FONT_SECTION
(
"ucg_font_timR12"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR12r
[]
UCG_FONT_SECTION
(
"ucg_font_timR12r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR14
[]
UCG_FONT_SECTION
(
"ucg_font_timR14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR14r
[]
UCG_FONT_SECTION
(
"ucg_font_timR14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR18
[]
UCG_FONT_SECTION
(
"ucg_font_timR18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR18r
[]
UCG_FONT_SECTION
(
"ucg_font_timR18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24
[]
UCG_FONT_SECTION
(
"ucg_font_timR24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24n
[]
UCG_FONT_SECTION
(
"ucg_font_timR24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24r
[]
UCG_FONT_SECTION
(
"ucg_font_timR24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssb
[]
UCG_FONT_SECTION
(
"ucg_font_tpssb"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssbn
[]
UCG_FONT_SECTION
(
"ucg_font_tpssbn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssbr
[]
UCG_FONT_SECTION
(
"ucg_font_tpssbr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpss
[]
UCG_FONT_SECTION
(
"ucg_font_tpss"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssn
[]
UCG_FONT_SECTION
(
"ucg_font_tpssn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssr
[]
UCG_FONT_SECTION
(
"ucg_font_tpssr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_square
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_square"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_squaren
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_squaren"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_squarer
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_squarer"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_u8glib_4
[]
UCG_FONT_SECTION
(
"ucg_font_u8glib_4"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_u8glib_4r
[]
UCG_FONT_SECTION
(
"ucg_font_u8glib_4r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_0_8
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_0_8"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_12_13
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_12_13"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_18_19
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_18_19"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_2_3
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_2_3"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_4_5
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_4_5"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_72_73
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_72_73"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_75r
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_75r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_76
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_76"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_77
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_77"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_86
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_86"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_8_9
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_8_9"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont
[]
UCG_FONT_SECTION
(
"ucg_font_unifont"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifontr
[]
UCG_FONT_SECTION
(
"ucg_font_unifontr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11
[]
UCG_FONT_SECTION
(
"ucg_font_fub11"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11n
[]
UCG_FONT_SECTION
(
"ucg_font_fub11n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11r
[]
UCG_FONT_SECTION
(
"ucg_font_fub11r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14
[]
UCG_FONT_SECTION
(
"ucg_font_fub14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14n
[]
UCG_FONT_SECTION
(
"ucg_font_fub14n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14r
[]
UCG_FONT_SECTION
(
"ucg_font_fub14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17
[]
UCG_FONT_SECTION
(
"ucg_font_fub17"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17n
[]
UCG_FONT_SECTION
(
"ucg_font_fub17n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17r
[]
UCG_FONT_SECTION
(
"ucg_font_fub17r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20
[]
UCG_FONT_SECTION
(
"ucg_font_fub20"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20n
[]
UCG_FONT_SECTION
(
"ucg_font_fub20n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20r
[]
UCG_FONT_SECTION
(
"ucg_font_fub20r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25
[]
UCG_FONT_SECTION
(
"ucg_font_fub25"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25n
[]
UCG_FONT_SECTION
(
"ucg_font_fub25n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25r
[]
UCG_FONT_SECTION
(
"ucg_font_fub25r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30
[]
UCG_FONT_SECTION
(
"ucg_font_fub30"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30n
[]
UCG_FONT_SECTION
(
"ucg_font_fub30n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30r
[]
UCG_FONT_SECTION
(
"ucg_font_fub30r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub35n
[]
UCG_FONT_SECTION
(
"ucg_font_fub35n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub42n
[]
UCG_FONT_SECTION
(
"ucg_font_fub42n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub49n
[]
UCG_FONT_SECTION
(
"ucg_font_fub49n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11
[]
UCG_FONT_SECTION
(
"ucg_font_fur11"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11n
[]
UCG_FONT_SECTION
(
"ucg_font_fur11n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11r
[]
UCG_FONT_SECTION
(
"ucg_font_fur11r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14
[]
UCG_FONT_SECTION
(
"ucg_font_fur14"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14n
[]
UCG_FONT_SECTION
(
"ucg_font_fur14n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14r
[]
UCG_FONT_SECTION
(
"ucg_font_fur14r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17
[]
UCG_FONT_SECTION
(
"ucg_font_fur17"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17n
[]
UCG_FONT_SECTION
(
"ucg_font_fur17n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17r
[]
UCG_FONT_SECTION
(
"ucg_font_fur17r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20
[]
UCG_FONT_SECTION
(
"ucg_font_fur20"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20n
[]
UCG_FONT_SECTION
(
"ucg_font_fur20n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20r
[]
UCG_FONT_SECTION
(
"ucg_font_fur20r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25
[]
UCG_FONT_SECTION
(
"ucg_font_fur25"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25n
[]
UCG_FONT_SECTION
(
"ucg_font_fur25n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25r
[]
UCG_FONT_SECTION
(
"ucg_font_fur25r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30
[]
UCG_FONT_SECTION
(
"ucg_font_fur30"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30n
[]
UCG_FONT_SECTION
(
"ucg_font_fur30n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30r
[]
UCG_FONT_SECTION
(
"ucg_font_fur30r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur35n
[]
UCG_FONT_SECTION
(
"ucg_font_fur35n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur42n
[]
UCG_FONT_SECTION
(
"ucg_font_fur42n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur49n
[]
UCG_FONT_SECTION
(
"ucg_font_fur49n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso30
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso30"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso30n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso30n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso30r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso30r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso32
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso32"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso32n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso32n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso32r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso32r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso34
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso34"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso34n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso34n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso34r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso34r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso38
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso38"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso38n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso38n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso38r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso38r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso42
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso42"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso42n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso42n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso42r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso42r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso46n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso46n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso46r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso46r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso50n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso50n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso50r
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso50r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso54n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso54n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso58n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso58n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso62n
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso62n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18
[]
UCG_FONT_SECTION
(
"ucg_font_osb18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18n
[]
UCG_FONT_SECTION
(
"ucg_font_osb18n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18r
[]
UCG_FONT_SECTION
(
"ucg_font_osb18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21
[]
UCG_FONT_SECTION
(
"ucg_font_osb21"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21n
[]
UCG_FONT_SECTION
(
"ucg_font_osb21n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21r
[]
UCG_FONT_SECTION
(
"ucg_font_osb21r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26
[]
UCG_FONT_SECTION
(
"ucg_font_osb26"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26n
[]
UCG_FONT_SECTION
(
"ucg_font_osb26n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26r
[]
UCG_FONT_SECTION
(
"ucg_font_osb26r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29
[]
UCG_FONT_SECTION
(
"ucg_font_osb29"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29n
[]
UCG_FONT_SECTION
(
"ucg_font_osb29n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29r
[]
UCG_FONT_SECTION
(
"ucg_font_osb29r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35
[]
UCG_FONT_SECTION
(
"ucg_font_osb35"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35n
[]
UCG_FONT_SECTION
(
"ucg_font_osb35n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35r
[]
UCG_FONT_SECTION
(
"ucg_font_osb35r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18
[]
UCG_FONT_SECTION
(
"ucg_font_osr18"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18n
[]
UCG_FONT_SECTION
(
"ucg_font_osr18n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18r
[]
UCG_FONT_SECTION
(
"ucg_font_osr18r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21
[]
UCG_FONT_SECTION
(
"ucg_font_osr21"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21n
[]
UCG_FONT_SECTION
(
"ucg_font_osr21n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21r
[]
UCG_FONT_SECTION
(
"ucg_font_osr21r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26
[]
UCG_FONT_SECTION
(
"ucg_font_osr26"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26n
[]
UCG_FONT_SECTION
(
"ucg_font_osr26n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26r
[]
UCG_FONT_SECTION
(
"ucg_font_osr26r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29
[]
UCG_FONT_SECTION
(
"ucg_font_osr29"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29n
[]
UCG_FONT_SECTION
(
"ucg_font_osr29n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29r
[]
UCG_FONT_SECTION
(
"ucg_font_osr29r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35
[]
UCG_FONT_SECTION
(
"ucg_font_osr35"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35n
[]
UCG_FONT_SECTION
(
"ucg_font_osr35n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35r
[]
UCG_FONT_SECTION
(
"ucg_font_osr35r"
);
#else
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03b_hf
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03b_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03b_hn
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03b_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03b_hr
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03b_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03b_tf
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03b_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03b_tn
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03b_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03b_tr
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03b_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03_hf
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03_hn
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03_hr
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03_tf
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03_tn
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_03_tr
[]
UCG_FONT_SECTION
(
"ucg_font_04b_03_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24_hf
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24_hn
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24_hr
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_04b_24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_04b_24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_mf
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_mr
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_tf
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_10x20_tr
[]
UCG_FONT_SECTION
(
"ucg_font_10x20_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_4x6_mf
[]
UCG_FONT_SECTION
(
"ucg_font_4x6_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_4x6_mr
[]
UCG_FONT_SECTION
(
"ucg_font_4x6_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_4x6_tf
[]
UCG_FONT_SECTION
(
"ucg_font_4x6_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_4x6_tr
[]
UCG_FONT_SECTION
(
"ucg_font_4x6_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x7_8f
[]
UCG_FONT_SECTION
(
"ucg_font_5x7_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x7_8r
[]
UCG_FONT_SECTION
(
"ucg_font_5x7_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x7_mf
[]
UCG_FONT_SECTION
(
"ucg_font_5x7_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x7_mr
[]
UCG_FONT_SECTION
(
"ucg_font_5x7_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x7_tf
[]
UCG_FONT_SECTION
(
"ucg_font_5x7_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x7_tr
[]
UCG_FONT_SECTION
(
"ucg_font_5x7_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x8_8f
[]
UCG_FONT_SECTION
(
"ucg_font_5x8_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x8_8r
[]
UCG_FONT_SECTION
(
"ucg_font_5x8_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x8_mf
[]
UCG_FONT_SECTION
(
"ucg_font_5x8_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x8_mr
[]
UCG_FONT_SECTION
(
"ucg_font_5x8_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x8_tf
[]
UCG_FONT_SECTION
(
"ucg_font_5x8_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_5x8_tr
[]
UCG_FONT_SECTION
(
"ucg_font_5x8_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x10_mf
[]
UCG_FONT_SECTION
(
"ucg_font_6x10_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x10_mr
[]
UCG_FONT_SECTION
(
"ucg_font_6x10_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_6x10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_6x10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_75
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_mf
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_mr
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_6x12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13B_tf
[]
UCG_FONT_SECTION
(
"ucg_font_6x13B_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13B_tr
[]
UCG_FONT_SECTION
(
"ucg_font_6x13B_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_mf
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_mr
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13O_tf
[]
UCG_FONT_SECTION
(
"ucg_font_6x13O_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13O_tr
[]
UCG_FONT_SECTION
(
"ucg_font_6x13O_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_tf
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_6x13_tr
[]
UCG_FONT_SECTION
(
"ucg_font_6x13_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_7x13_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_7x13_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13B_tf
[]
UCG_FONT_SECTION
(
"ucg_font_7x13B_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13B_tr
[]
UCG_FONT_SECTION
(
"ucg_font_7x13B_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13_mf
[]
UCG_FONT_SECTION
(
"ucg_font_7x13_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13_mr
[]
UCG_FONT_SECTION
(
"ucg_font_7x13_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13O_tf
[]
UCG_FONT_SECTION
(
"ucg_font_7x13O_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13O_tr
[]
UCG_FONT_SECTION
(
"ucg_font_7x13O_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13_tf
[]
UCG_FONT_SECTION
(
"ucg_font_7x13_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x13_tr
[]
UCG_FONT_SECTION
(
"ucg_font_7x13_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14B_mf
[]
UCG_FONT_SECTION
(
"ucg_font_7x14B_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14B_mr
[]
UCG_FONT_SECTION
(
"ucg_font_7x14B_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14B_tf
[]
UCG_FONT_SECTION
(
"ucg_font_7x14B_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14B_tr
[]
UCG_FONT_SECTION
(
"ucg_font_7x14B_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14_mf
[]
UCG_FONT_SECTION
(
"ucg_font_7x14_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14_mr
[]
UCG_FONT_SECTION
(
"ucg_font_7x14_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_7x14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_7x14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_7x14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_8x13_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13B_mf
[]
UCG_FONT_SECTION
(
"ucg_font_8x13B_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13B_mr
[]
UCG_FONT_SECTION
(
"ucg_font_8x13B_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13B_tf
[]
UCG_FONT_SECTION
(
"ucg_font_8x13B_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13B_tr
[]
UCG_FONT_SECTION
(
"ucg_font_8x13B_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13_mf
[]
UCG_FONT_SECTION
(
"ucg_font_8x13_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13_mr
[]
UCG_FONT_SECTION
(
"ucg_font_8x13_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13O_mf
[]
UCG_FONT_SECTION
(
"ucg_font_8x13O_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13O_mr
[]
UCG_FONT_SECTION
(
"ucg_font_8x13O_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13O_tf
[]
UCG_FONT_SECTION
(
"ucg_font_8x13O_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13O_tr
[]
UCG_FONT_SECTION
(
"ucg_font_8x13O_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13_tf
[]
UCG_FONT_SECTION
(
"ucg_font_8x13_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_8x13_tr
[]
UCG_FONT_SECTION
(
"ucg_font_8x13_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15B_mf
[]
UCG_FONT_SECTION
(
"ucg_font_9x15B_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15B_mr
[]
UCG_FONT_SECTION
(
"ucg_font_9x15B_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15B_tf
[]
UCG_FONT_SECTION
(
"ucg_font_9x15B_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15B_tr
[]
UCG_FONT_SECTION
(
"ucg_font_9x15B_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_mf
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_mr
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_tf
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x15_tr
[]
UCG_FONT_SECTION
(
"ucg_font_9x15_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18B_mf
[]
UCG_FONT_SECTION
(
"ucg_font_9x18B_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18B_mr
[]
UCG_FONT_SECTION
(
"ucg_font_9x18B_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18B_tf
[]
UCG_FONT_SECTION
(
"ucg_font_9x18B_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18B_tr
[]
UCG_FONT_SECTION
(
"ucg_font_9x18B_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_mf
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_mr
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_9x18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_9x18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_amstrad_cpc_8f
[]
UCG_FONT_SECTION
(
"ucg_font_amstrad_cpc_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_amstrad_cpc_8r
[]
UCG_FONT_SECTION
(
"ucg_font_amstrad_cpc_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_baby_hf
[]
UCG_FONT_SECTION
(
"ucg_font_baby_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_baby_hn
[]
UCG_FONT_SECTION
(
"ucg_font_baby_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_baby_hr
[]
UCG_FONT_SECTION
(
"ucg_font_baby_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_baby_tf
[]
UCG_FONT_SECTION
(
"ucg_font_baby_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_baby_tn
[]
UCG_FONT_SECTION
(
"ucg_font_baby_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_baby_tr
[]
UCG_FONT_SECTION
(
"ucg_font_baby_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07_hf
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07_hn
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07_hr
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07_tf
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07_tn
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_blipfest_07_tr
[]
UCG_FONT_SECTION
(
"ucg_font_blipfest_07_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikita_hf
[]
UCG_FONT_SECTION
(
"ucg_font_chikita_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikita_hn
[]
UCG_FONT_SECTION
(
"ucg_font_chikita_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikita_hr
[]
UCG_FONT_SECTION
(
"ucg_font_chikita_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikita_tf
[]
UCG_FONT_SECTION
(
"ucg_font_chikita_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikita_tn
[]
UCG_FONT_SECTION
(
"ucg_font_chikita_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_chikita_tr
[]
UCG_FONT_SECTION
(
"ucg_font_chikita_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB08_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courB08_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB08_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courB08_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courB08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courB08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB10_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courB10_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB10_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courB10_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courB10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courB10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB12_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courB12_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB12_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courB12_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courB12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courB12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB14_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courB14_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB14_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courB14_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courB14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courB14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB18_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courB18_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB18_mn
[]
UCG_FONT_SECTION
(
"ucg_font_courB18_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB18_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courB18_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courB18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB18_tn
[]
UCG_FONT_SECTION
(
"ucg_font_courB18_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courB18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courB24_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24_mn
[]
UCG_FONT_SECTION
(
"ucg_font_courB24_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courB24_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courB24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_courB24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courB24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courB24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR08_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courR08_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR08_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courR08_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courR08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courR08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR10_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courR10_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR10_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courR10_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courR10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courR10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR12_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courR12_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR12_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courR12_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courR12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courR12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR14_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courR14_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR14_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courR14_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courR14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courR14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR18_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courR18_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR18_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courR18_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courR18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courR18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24_mf
[]
UCG_FONT_SECTION
(
"ucg_font_courR24_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24_mn
[]
UCG_FONT_SECTION
(
"ucg_font_courR24_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24_mr
[]
UCG_FONT_SECTION
(
"ucg_font_courR24_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_courR24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_courR24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_courR24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_courR24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cu12_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_cu12_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cu12_75
[]
UCG_FONT_SECTION
(
"ucg_font_cu12_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cu12_hf
[]
UCG_FONT_SECTION
(
"ucg_font_cu12_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cu12_mf
[]
UCG_FONT_SECTION
(
"ucg_font_cu12_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cu12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_cu12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cursor_tf
[]
UCG_FONT_SECTION
(
"ucg_font_cursor_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_cursor_tr
[]
UCG_FONT_SECTION
(
"ucg_font_cursor_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0_mr
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fixed_v0_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fixed_v0_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_freedoomr10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_freedoomr10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_freedoomr25_tn
[]
UCG_FONT_SECTION
(
"ucg_font_freedoomr25_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB08_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB08_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB08_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB08_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB10_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB10_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB10_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB10_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB12_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB12_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB12_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB12_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB14_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB14_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB14_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB14_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24_hn
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvB24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvB24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR08_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR08_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR08_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR08_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR10_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR10_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR10_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR10_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR12_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR12_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR12_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR12_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR14_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR14_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR14_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR14_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24_hf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24_hn
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24_hr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_helvR24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_helvR24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternate_hf
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternate_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternate_hn
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternate_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternate_hr
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternate_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternate_tf
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternate_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternate_tn
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternate_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_lucasfont_alternate_tr
[]
UCG_FONT_SECTION
(
"ucg_font_lucasfont_alternate_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_m2icon_5
[]
UCG_FONT_SECTION
(
"ucg_font_m2icon_5"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_m2icon_7
[]
UCG_FONT_SECTION
(
"ucg_font_m2icon_7"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_m2icon_9
[]
UCG_FONT_SECTION
(
"ucg_font_m2icon_9"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_micro_mf
[]
UCG_FONT_SECTION
(
"ucg_font_micro_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_micro_tf
[]
UCG_FONT_SECTION
(
"ucg_font_micro_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB08_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB08_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB08_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB08_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB10_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB10_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB10_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB10_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB12_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB12_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB12_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB12_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB14_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB14_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB14_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB14_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24_hn
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenB24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenB24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR08_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR08_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR08_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR08_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR10_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR10_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR10_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR10_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR12_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR12_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR12_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR12_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR14_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR14_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR14_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR14_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24_hf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24_hn
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24_hr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_ncenR24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_ncenR24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01_hf
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01_hn
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01_hr
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01_tf
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01_tn
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_orgv01_tr
[]
UCG_FONT_SECTION
(
"ucg_font_orgv01_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01type_hf
[]
UCG_FONT_SECTION
(
"ucg_font_p01type_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01type_hn
[]
UCG_FONT_SECTION
(
"ucg_font_p01type_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01type_hr
[]
UCG_FONT_SECTION
(
"ucg_font_p01type_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01type_tf
[]
UCG_FONT_SECTION
(
"ucg_font_p01type_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01type_tn
[]
UCG_FONT_SECTION
(
"ucg_font_p01type_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_p01type_tr
[]
UCG_FONT_SECTION
(
"ucg_font_p01type_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micro_hf
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micro_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micro_hn
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micro_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micro_hr
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micro_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micro_tf
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micro_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micro_tn
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micro_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_pixelle_micro_tr
[]
UCG_FONT_SECTION
(
"ucg_font_pixelle_micro_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont10_8f
[]
UCG_FONT_SECTION
(
"ucg_font_profont10_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont10_8r
[]
UCG_FONT_SECTION
(
"ucg_font_profont10_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont10_mf
[]
UCG_FONT_SECTION
(
"ucg_font_profont10_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont10_mr
[]
UCG_FONT_SECTION
(
"ucg_font_profont10_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont11_8f
[]
UCG_FONT_SECTION
(
"ucg_font_profont11_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont11_8r
[]
UCG_FONT_SECTION
(
"ucg_font_profont11_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont11_mf
[]
UCG_FONT_SECTION
(
"ucg_font_profont11_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont11_mr
[]
UCG_FONT_SECTION
(
"ucg_font_profont11_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont12_8f
[]
UCG_FONT_SECTION
(
"ucg_font_profont12_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont12_8r
[]
UCG_FONT_SECTION
(
"ucg_font_profont12_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont12_mf
[]
UCG_FONT_SECTION
(
"ucg_font_profont12_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont12_mr
[]
UCG_FONT_SECTION
(
"ucg_font_profont12_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont15_8f
[]
UCG_FONT_SECTION
(
"ucg_font_profont15_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont15_8r
[]
UCG_FONT_SECTION
(
"ucg_font_profont15_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont15_mf
[]
UCG_FONT_SECTION
(
"ucg_font_profont15_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont15_mr
[]
UCG_FONT_SECTION
(
"ucg_font_profont15_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont17_8f
[]
UCG_FONT_SECTION
(
"ucg_font_profont17_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont17_8r
[]
UCG_FONT_SECTION
(
"ucg_font_profont17_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont17_mf
[]
UCG_FONT_SECTION
(
"ucg_font_profont17_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont17_mr
[]
UCG_FONT_SECTION
(
"ucg_font_profont17_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22_8f
[]
UCG_FONT_SECTION
(
"ucg_font_profont22_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22_8n
[]
UCG_FONT_SECTION
(
"ucg_font_profont22_8n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22_8r
[]
UCG_FONT_SECTION
(
"ucg_font_profont22_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22_mf
[]
UCG_FONT_SECTION
(
"ucg_font_profont22_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22_mn
[]
UCG_FONT_SECTION
(
"ucg_font_profont22_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont22_mr
[]
UCG_FONT_SECTION
(
"ucg_font_profont22_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29_8f
[]
UCG_FONT_SECTION
(
"ucg_font_profont29_8f"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29_8n
[]
UCG_FONT_SECTION
(
"ucg_font_profont29_8n"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29_8r
[]
UCG_FONT_SECTION
(
"ucg_font_profont29_8r"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29_mf
[]
UCG_FONT_SECTION
(
"ucg_font_profont29_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29_mn
[]
UCG_FONT_SECTION
(
"ucg_font_profont29_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_profont29_mr
[]
UCG_FONT_SECTION
(
"ucg_font_profont29_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niro_hf
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niro_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niro_hn
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niro_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niro_hr
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niro_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niro_tf
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niro_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niro_tn
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niro_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_robot_de_niro_tr
[]
UCG_FONT_SECTION
(
"ucg_font_robot_de_niro_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_symb08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_symb08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_symb10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_symb10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_symb12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_symb12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_symb14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_symb14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_symb18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_symb18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_symb24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_symb24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_symb24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB08_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timB08_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB08_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timB08_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timB08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timB08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB10_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timB10_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB10_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timB10_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timB10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timB10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB12_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timB12_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB12_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timB12_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timB12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timB12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB14_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timB14_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB14_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timB14_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timB14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timB14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timB18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timB18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timB18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timB18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timB24_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24_hn
[]
UCG_FONT_SECTION
(
"ucg_font_timB24_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timB24_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timB24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_timB24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timB24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timB24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR08_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timR08_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR08_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timR08_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR08_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timR08_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR08_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timR08_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR10_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timR10_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR10_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timR10_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR10_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timR10_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR10_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timR10_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR12_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timR12_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR12_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timR12_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR12_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timR12_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR12_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timR12_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR14_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timR14_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR14_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timR14_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timR14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timR14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timR18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timR18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timR18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timR18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24_hf
[]
UCG_FONT_SECTION
(
"ucg_font_timR24_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24_hn
[]
UCG_FONT_SECTION
(
"ucg_font_timR24_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24_hr
[]
UCG_FONT_SECTION
(
"ucg_font_timR24_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_timR24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_timR24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_timR24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_timR24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssb_hf
[]
UCG_FONT_SECTION
(
"ucg_font_tpssb_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssb_hn
[]
UCG_FONT_SECTION
(
"ucg_font_tpssb_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssb_hr
[]
UCG_FONT_SECTION
(
"ucg_font_tpssb_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssb_tf
[]
UCG_FONT_SECTION
(
"ucg_font_tpssb_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssb_tn
[]
UCG_FONT_SECTION
(
"ucg_font_tpssb_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpssb_tr
[]
UCG_FONT_SECTION
(
"ucg_font_tpssb_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpss_hf
[]
UCG_FONT_SECTION
(
"ucg_font_tpss_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpss_hn
[]
UCG_FONT_SECTION
(
"ucg_font_tpss_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpss_hr
[]
UCG_FONT_SECTION
(
"ucg_font_tpss_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpss_tf
[]
UCG_FONT_SECTION
(
"ucg_font_tpss_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpss_tn
[]
UCG_FONT_SECTION
(
"ucg_font_tpss_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_tpss_tr
[]
UCG_FONT_SECTION
(
"ucg_font_tpss_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_square_hf
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_square_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_square_hn
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_square_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_square_hr
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_square_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_square_tf
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_square_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_square_tn
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_square_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_trixel_square_tr
[]
UCG_FONT_SECTION
(
"ucg_font_trixel_square_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_u8glib_4_hf
[]
UCG_FONT_SECTION
(
"ucg_font_u8glib_4_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_u8glib_4_hr
[]
UCG_FONT_SECTION
(
"ucg_font_u8glib_4_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_u8glib_4_tf
[]
UCG_FONT_SECTION
(
"ucg_font_u8glib_4_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_u8glib_4_tr
[]
UCG_FONT_SECTION
(
"ucg_font_u8glib_4_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_0_8
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_0_8"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_12_13
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_12_13"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_18_19
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_18_19"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_2_3
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_2_3"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_4_5
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_4_5"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_67_75
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_67_75"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_72_73
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_72_73"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_78_79
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_78_79"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_8_9
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_8_9"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_mf
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_mr
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_tf
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_unifont_tr
[]
UCG_FONT_SECTION
(
"ucg_font_unifont_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fub11_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub11_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fub11_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fub11_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub11_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub11_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fub11_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fub14_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub14_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fub14_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fub14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub14_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fub14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fub17_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub17_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fub17_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fub17_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub17_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub17_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fub17_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fub20_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub20_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fub20_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fub20_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub20_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub20_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fub20_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fub25_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub25_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fub25_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fub25_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub25_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub25_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fub25_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fub30_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub30_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fub30_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fub30_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub30_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub30_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fub30_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub35_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fub35_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub35_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub35_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub35_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fub35_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub35_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fub35_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub35_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub35_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub35_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fub35_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub42_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fub42_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub42_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub42_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub42_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fub42_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub42_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fub42_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub42_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub42_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub42_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fub42_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub49_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fub49_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fub49_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fub49_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fur11_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur11_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fur11_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fur11_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur11_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur11_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur11_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fur14_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur14_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fur14_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fur14_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur14_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur14_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur14_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fur17_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur17_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fur17_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fur17_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur17_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur17_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur17_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fur20_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur20_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fur20_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fur20_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur20_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur20_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur20_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fur25_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur25_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fur25_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fur25_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur25_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur25_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur25_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fur30_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur30_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fur30_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fur30_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur30_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur30_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur30_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur35_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fur35_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur35_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur35_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur35_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fur35_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur35_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fur35_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur35_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur35_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur35_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur35_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur42_hf
[]
UCG_FONT_SECTION
(
"ucg_font_fur42_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur42_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur42_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur42_hr
[]
UCG_FONT_SECTION
(
"ucg_font_fur42_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur42_tf
[]
UCG_FONT_SECTION
(
"ucg_font_fur42_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur42_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur42_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur42_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur42_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur49_hn
[]
UCG_FONT_SECTION
(
"ucg_font_fur49_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur49_tn
[]
UCG_FONT_SECTION
(
"ucg_font_fur49_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_fur49_tr
[]
UCG_FONT_SECTION
(
"ucg_font_fur49_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb16_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb16_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb16_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb16_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb16_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb16_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb16_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb16_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb16_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb16_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb16_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb16_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb19_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb19_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb19_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb19_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb19_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb19_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb19_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb19_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb19_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb19_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb19_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb19_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb21_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb21_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb21_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb21_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb21_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb21_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb21_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb21_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb21_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb21_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb21_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb21_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb24_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb24_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb24_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb24_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb24_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb24_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb27_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb27_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb27_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb27_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb27_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb27_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb27_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb27_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb27_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb27_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb27_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb27_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb30_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb30_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb30_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb30_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb30_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb30_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb30_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb30_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb30_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb30_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb30_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb30_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb33_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb33_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb33_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb33_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb33_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb33_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb33_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb33_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb33_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb33_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb33_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb33_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb38_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb38_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb38_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb38_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb38_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb38_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb38_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb38_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb38_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb38_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb38_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb38_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb42_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb42_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb42_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb42_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb42_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb42_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb42_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb42_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb42_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb42_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb42_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb42_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb46_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb46_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb46_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb46_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb46_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb46_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb46_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb46_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb46_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb46_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb46_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb46_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb49_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb49_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb49_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb49_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb49_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb49_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb49_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb49_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb49_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb49_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb49_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb49_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb53_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb53_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb53_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb53_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb53_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb53_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb53_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb53_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb53_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb53_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb53_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb53_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb57_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inb57_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb57_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb57_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb57_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inb57_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb57_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb57_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb57_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb57_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb57_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb57_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb63_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inb63_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb63_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inb63_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb63_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inb63_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inb63_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inb63_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr16_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr16_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr16_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr16_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr16_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr16_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr16_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr16_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr16_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr16_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr16_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr16_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr19_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr19_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr19_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr19_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr19_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr19_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr19_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr19_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr19_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr19_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr19_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr19_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr21_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr21_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr21_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr21_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr21_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr21_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr21_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr21_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr21_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr21_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr21_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr21_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr24_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr24_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr24_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr24_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr24_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr24_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr27_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr27_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr27_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr27_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr27_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr27_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr27_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr27_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr27_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr27_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr27_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr27_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr30_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr30_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr30_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr30_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr30_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr30_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr30_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr30_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr30_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr30_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr30_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr30_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr33_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr33_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr33_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr33_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr33_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr33_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr33_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr33_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr33_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr33_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr33_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr33_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr38_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr38_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr38_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr38_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr38_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr38_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr38_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr38_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr38_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr38_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr38_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr38_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr42_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr42_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr42_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr42_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr42_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr42_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr42_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr42_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr42_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr42_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr42_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr42_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr46_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr46_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr46_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr46_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr46_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr46_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr46_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr46_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr46_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr46_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr46_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr46_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr49_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr49_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr49_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr49_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr49_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr49_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr49_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr49_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr49_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr49_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr49_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr49_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr53_mf
[]
UCG_FONT_SECTION
(
"ucg_font_inr53_mf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr53_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr53_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr53_mr
[]
UCG_FONT_SECTION
(
"ucg_font_inr53_mr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr53_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr53_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr53_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr53_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr53_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr53_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr57_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr57_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr57_tf
[]
UCG_FONT_SECTION
(
"ucg_font_inr57_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr57_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr57_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr57_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr57_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr62_mn
[]
UCG_FONT_SECTION
(
"ucg_font_inr62_mn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr62_tn
[]
UCG_FONT_SECTION
(
"ucg_font_inr62_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_inr62_tr
[]
UCG_FONT_SECTION
(
"ucg_font_inr62_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16_hf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16_hn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16_hr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso16_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso16_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18_hn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20_hf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20_hn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20_hr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso20_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso20_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22_hf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22_hn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22_hr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso22_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso22_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24_hf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24_hn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24_hr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso24_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso24_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26_hf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26_hn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26_hr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso26_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso26_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28_hf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28_hn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28_hr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso28_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso28_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso30_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso30_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso30_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso30_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso30_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso30_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso32_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso32_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso32_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso32_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso32_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso32_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso34_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso34_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso34_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso34_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso34_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso34_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso38_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso38_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso38_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso38_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso38_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso38_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso42_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso42_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso42_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso42_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso42_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso42_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso46_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso46_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso46_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso46_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso46_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso46_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso50_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso50_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso50_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso50_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso50_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso50_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso54_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso54_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso54_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso54_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso54_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso54_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso58_tf
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso58_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso58_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso58_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso58_tr
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso58_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_logisoso62_tn
[]
UCG_FONT_SECTION
(
"ucg_font_logisoso62_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osb18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osb18_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osb18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osb18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osb18_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osb18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osb21_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osb21_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osb21_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osb21_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osb21_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb21_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osb21_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osb26_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osb26_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osb26_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osb26_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osb26_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb26_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osb26_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osb29_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osb29_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osb29_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osb29_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osb29_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb29_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osb29_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osb35_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osb35_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osb35_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osb35_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osb35_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb35_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osb35_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb41_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osb41_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb41_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osb41_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb41_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osb41_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb41_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osb41_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb41_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osb41_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osb41_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osb41_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osr18_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osr18_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osr18_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osr18_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osr18_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr18_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osr18_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osr21_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osr21_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osr21_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osr21_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osr21_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr21_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osr21_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osr26_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osr26_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osr26_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osr26_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osr26_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr26_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osr26_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osr29_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osr29_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osr29_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osr29_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osr29_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr29_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osr29_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osr35_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osr35_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osr35_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osr35_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osr35_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr35_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osr35_tr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr41_hf
[]
UCG_FONT_SECTION
(
"ucg_font_osr41_hf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr41_hn
[]
UCG_FONT_SECTION
(
"ucg_font_osr41_hn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr41_hr
[]
UCG_FONT_SECTION
(
"ucg_font_osr41_hr"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr41_tf
[]
UCG_FONT_SECTION
(
"ucg_font_osr41_tf"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr41_tn
[]
UCG_FONT_SECTION
(
"ucg_font_osr41_tn"
);
extern
const
ucg_fntpgm_uint8_t
ucg_font_osr41_tr
[]
UCG_FONT_SECTION
(
"ucg_font_osr41_tr"
);
#endif
#ifdef __cplusplus
}
#endif
#endif
/* _UCG_H */
app/ucglib/ucg_bitmap.c
deleted
100644 → 0
View file @
4095c408
/*
ucg_bitmap.c
Universal uC Color Graphics Library
Copyright (c) 2013, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "ucg.h"
#ifdef UCG_MSG_DRAW_L90TC
void
ucg_DrawTransparentBitmapLine
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
dir
,
ucg_int_t
len
,
const
unsigned
char
*
bitmap
)
{
ucg
->
arg
.
pixel
.
rgb
.
color
[
0
]
=
ucg
->
arg
.
rgb
[
0
].
color
[
0
];
ucg
->
arg
.
pixel
.
rgb
.
color
[
1
]
=
ucg
->
arg
.
rgb
[
0
].
color
[
1
];
ucg
->
arg
.
pixel
.
rgb
.
color
[
2
]
=
ucg
->
arg
.
rgb
[
0
].
color
[
2
];
ucg
->
arg
.
pixel
.
pos
.
x
=
x
;
ucg
->
arg
.
pixel
.
pos
.
y
=
y
;
ucg
->
arg
.
dir
=
dir
;
ucg
->
arg
.
len
=
len
;
ucg
->
arg
.
bitmap
=
bitmap
;
ucg
->
arg
.
pixel_skip
=
0
;
ucg_DrawL90TCWithArg
(
ucg
);
}
#endif
/* UCG_MSG_DRAW_L90TC */
#ifdef UCG_MSG_DRAW_L90BF
void
ucg_DrawBitmapLine
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
dir
,
ucg_int_t
len
,
const
unsigned
char
*
bitmap
)
{
/*
ucg->arg.pixel.rgb.color[0] = ucg->arg.rgb[0].color[0];
ucg->arg.pixel.rgb.color[1] = ucg->arg.rgb[0].color[1];
ucg->arg.pixel.rgb.color[2] = ucg->arg.rgb[0].color[2];
*/
ucg
->
arg
.
pixel
.
pos
.
x
=
x
;
ucg
->
arg
.
pixel
.
pos
.
y
=
y
;
ucg
->
arg
.
dir
=
dir
;
ucg
->
arg
.
len
=
len
;
ucg
->
arg
.
bitmap
=
bitmap
;
ucg
->
arg
.
pixel_skip
=
0
;
//ucg->arg.scale = 0;
ucg_DrawL90BFWithArg
(
ucg
);
}
#endif
/* UCG_MSG_DRAW_L90BF */
#ifdef ON_HOLD
void
ucg_DrawRLBitmap
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
dir
,
const
unsigned
char
*
rl_bitmap
)
{
ucg
->
arg
.
pixel
.
rgb
.
color
[
0
]
=
ucg
->
arg
.
rgb
[
0
].
color
[
0
];
ucg
->
arg
.
pixel
.
rgb
.
color
[
1
]
=
ucg
->
arg
.
rgb
[
0
].
color
[
1
];
ucg
->
arg
.
pixel
.
rgb
.
color
[
2
]
=
ucg
->
arg
.
rgb
[
0
].
color
[
2
];
ucg
->
arg
.
pixel
.
pos
.
x
=
x
;
ucg
->
arg
.
pixel
.
pos
.
y
=
y
;
ucg
->
arg
.
dir
=
dir
;
ucg
->
arg
.
len
=
0
;
ucg
->
arg
.
bitmap
=
rl_bitmap
;
ucg_DrawL90RLWithArg
(
ucg
);
}
#endif
app/ucglib/ucg_box.c
deleted
100644 → 0
View file @
4095c408
/*
ucg_box.c
Universal uC Color Graphics Library
Copyright (c) 2013, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "ucg.h"
void
ucg_DrawBox
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
)
{
while
(
h
>
0
)
{
ucg_DrawHLine
(
ucg
,
x
,
y
,
w
);
h
--
;
y
++
;
}
}
/*
- clear the screen with black color
- reset clip range to max
- set draw color to white
*/
void
ucg_ClearScreen
(
ucg_t
*
ucg
)
{
ucg_SetColor
(
ucg
,
0
,
0
,
0
,
0
);
ucg_SetMaxClipRange
(
ucg
);
ucg_DrawBox
(
ucg
,
0
,
0
,
ucg_GetWidth
(
ucg
),
ucg_GetHeight
(
ucg
));
ucg_SetColor
(
ucg
,
0
,
255
,
255
,
255
);
}
void
ucg_DrawRBox
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
,
ucg_int_t
r
)
{
ucg_int_t
xl
,
yu
;
ucg_int_t
yl
,
xr
;
xl
=
x
;
xl
+=
r
;
yu
=
y
;
yu
+=
r
;
xr
=
x
;
xr
+=
w
;
xr
-=
r
;
xr
-=
1
;
yl
=
y
;
yl
+=
h
;
yl
-=
r
;
yl
-=
1
;
ucg_DrawDisc
(
ucg
,
xl
,
yu
,
r
,
UCG_DRAW_UPPER_LEFT
);
ucg_DrawDisc
(
ucg
,
xr
,
yu
,
r
,
UCG_DRAW_UPPER_RIGHT
);
ucg_DrawDisc
(
ucg
,
xl
,
yl
,
r
,
UCG_DRAW_LOWER_LEFT
);
ucg_DrawDisc
(
ucg
,
xr
,
yl
,
r
,
UCG_DRAW_LOWER_RIGHT
);
{
ucg_int_t
ww
,
hh
;
ww
=
w
;
ww
-=
r
;
ww
-=
r
;
ww
-=
2
;
hh
=
h
;
hh
-=
r
;
hh
-=
r
;
hh
-=
2
;
xl
++
;
yu
++
;
h
--
;
ucg_DrawBox
(
ucg
,
xl
,
y
,
ww
,
r
+
1
);
ucg_DrawBox
(
ucg
,
xl
,
yl
,
ww
,
r
+
1
);
ucg_DrawBox
(
ucg
,
x
,
yu
,
w
,
hh
);
}
}
ucg_ccs_t
ucg_ccs_box
[
6
];
/* color component sliders used by GradientBox */
void
ucg_DrawGradientBox
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
)
{
uint8_t
i
;
/* Setup ccs for l90se. This will be updated by ucg_clip_l90se if required */
/* 8. Jan 2014: correct? */
//printf("%d %d %d\n", ucg->arg.rgb[3].color[0], ucg->arg.rgb[3].color[1], ucg->arg.rgb[3].color[2]);
for
(
i
=
0
;
i
<
3
;
i
++
)
{
ucg_ccs_init
(
ucg_ccs_box
+
i
,
ucg
->
arg
.
rgb
[
0
].
color
[
i
],
ucg
->
arg
.
rgb
[
2
].
color
[
i
],
h
);
ucg_ccs_init
(
ucg_ccs_box
+
i
+
3
,
ucg
->
arg
.
rgb
[
1
].
color
[
i
],
ucg
->
arg
.
rgb
[
3
].
color
[
i
],
h
);
}
while
(
h
>
0
)
{
ucg
->
arg
.
rgb
[
0
].
color
[
0
]
=
ucg_ccs_box
[
0
].
current
;
ucg
->
arg
.
rgb
[
0
].
color
[
1
]
=
ucg_ccs_box
[
1
].
current
;
ucg
->
arg
.
rgb
[
0
].
color
[
2
]
=
ucg_ccs_box
[
2
].
current
;
ucg
->
arg
.
rgb
[
1
].
color
[
0
]
=
ucg_ccs_box
[
3
].
current
;
ucg
->
arg
.
rgb
[
1
].
color
[
1
]
=
ucg_ccs_box
[
4
].
current
;
ucg
->
arg
.
rgb
[
1
].
color
[
2
]
=
ucg_ccs_box
[
5
].
current
;
//printf("%d %d %d\n", ucg_ccs_box[0].current, ucg_ccs_box[1].current, ucg_ccs_box[2].current);
//printf("%d %d %d\n", ucg_ccs_box[3].current, ucg_ccs_box[4].current, ucg_ccs_box[5].current);
ucg
->
arg
.
pixel
.
pos
.
x
=
x
;
ucg
->
arg
.
pixel
.
pos
.
y
=
y
;
ucg
->
arg
.
len
=
w
;
ucg
->
arg
.
dir
=
0
;
ucg_DrawL90SEWithArg
(
ucg
);
for
(
i
=
0
;
i
<
6
;
i
++
)
ucg_ccs_step
(
ucg_ccs_box
+
i
);
h
--
;
y
++
;
}
}
/* restrictions: w > 0 && h > 0 */
void
ucg_DrawFrame
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
)
{
ucg_int_t
xtmp
=
x
;
ucg_DrawHLine
(
ucg
,
x
,
y
,
w
);
ucg_DrawVLine
(
ucg
,
x
,
y
,
h
);
x
+=
w
;
x
--
;
ucg_DrawVLine
(
ucg
,
x
,
y
,
h
);
y
+=
h
;
y
--
;
ucg_DrawHLine
(
ucg
,
xtmp
,
y
,
w
);
}
void
ucg_DrawRFrame
(
ucg_t
*
ucg
,
ucg_int_t
x
,
ucg_int_t
y
,
ucg_int_t
w
,
ucg_int_t
h
,
ucg_int_t
r
)
{
ucg_int_t
xl
,
yu
;
xl
=
x
;
xl
+=
r
;
yu
=
y
;
yu
+=
r
;
{
ucg_int_t
yl
,
xr
;
xr
=
x
;
xr
+=
w
;
xr
-=
r
;
xr
-=
1
;
yl
=
y
;
yl
+=
h
;
yl
-=
r
;
yl
-=
1
;
ucg_DrawCircle
(
ucg
,
xl
,
yu
,
r
,
UCG_DRAW_UPPER_LEFT
);
ucg_DrawCircle
(
ucg
,
xr
,
yu
,
r
,
UCG_DRAW_UPPER_RIGHT
);
ucg_DrawCircle
(
ucg
,
xl
,
yl
,
r
,
UCG_DRAW_LOWER_LEFT
);
ucg_DrawCircle
(
ucg
,
xr
,
yl
,
r
,
UCG_DRAW_LOWER_RIGHT
);
}
{
ucg_int_t
ww
,
hh
;
ww
=
w
;
ww
-=
r
;
ww
-=
r
;
ww
-=
2
;
hh
=
h
;
hh
-=
r
;
hh
-=
r
;
hh
-=
2
;
xl
++
;
yu
++
;
h
--
;
w
--
;
ucg_DrawHLine
(
ucg
,
xl
,
y
,
ww
);
ucg_DrawHLine
(
ucg
,
xl
,
y
+
h
,
ww
);
ucg_DrawVLine
(
ucg
,
x
,
yu
,
hh
);
ucg_DrawVLine
(
ucg
,
x
+
w
,
yu
,
hh
);
}
}
Prev
1
2
3
4
5
6
7
Next
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