|
|
@@ -23,6 +23,15 @@ static uint8_t i2c_id;
|
|
|
static uint8_t i2c_addr = 0x3C;
|
|
|
//static uint8_t spi_id;
|
|
|
|
|
|
+/*
|
|
|
+u8g2显示屏初始化
|
|
|
+@api u8g2.begin("ssd1306")
|
|
|
+@string 配置信息
|
|
|
+@return int 正常初始化1,已经初始化过2,内存不够3,初始化失败返回4
|
|
|
+@usage
|
|
|
+-- 初始化i2c1的ssd1306
|
|
|
+u8g2.begin("ssd1306")
|
|
|
+*/
|
|
|
static int l_u8g2_begin(lua_State *L) {
|
|
|
if (u8g2 != NULL) {
|
|
|
LLOGW("disp is aready inited");
|
|
|
@@ -137,6 +146,13 @@ static int l_u8g2_begin(lua_State *L) {
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+关闭显示屏
|
|
|
+@api u8g2.close()
|
|
|
+@usage
|
|
|
+-- 关闭disp,再次使用disp相关API的话,需要重新初始化
|
|
|
+u8g2.close()
|
|
|
+*/
|
|
|
static int l_u8g2_close(lua_State *L) {
|
|
|
if (u8g2_lua_ref != 0) {
|
|
|
lua_geti(L, LUA_REGISTRYINDEX, u8g2_lua_ref);
|
|
|
@@ -150,18 +166,41 @@ static int l_u8g2_close(lua_State *L) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+清屏
|
|
|
+@api u8g2.ClearBuffer() 清除内存帧缓冲区中的所有像素。
|
|
|
+@usage
|
|
|
+-- 清屏
|
|
|
+u8g2.ClearBuffer()
|
|
|
+*/
|
|
|
static int l_u8g2_ClearBuffer(lua_State *L) {
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_ClearBuffer(u8g2);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+将数据更新到屏幕
|
|
|
+@api u8g2.SendBuffer() 将存储器帧缓冲区的内容发送到显示器。
|
|
|
+@usage
|
|
|
+-- 把显示数据更新到屏幕
|
|
|
+u8g2.SendBuffer()
|
|
|
+*/
|
|
|
static int l_u8g2_SendBuffer(lua_State *L) {
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_SendBuffer(u8g2);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+在显示屏上画一段文字
|
|
|
+@api u8g2.DrawUTF8(str, x, y) 在显示屏上画一段文字,要调用u8g2.SendBuffer()才会更新到屏幕
|
|
|
+@string 文件内容
|
|
|
+@int 横坐标
|
|
|
+@int 竖坐标
|
|
|
+@usage
|
|
|
+u8g2.DrawUTF8("wifi is ready", 10, 20)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawUTF8(lua_State *L) {
|
|
|
if (u8g2 == NULL) {
|
|
|
LLOGW("disp not init yet!!!");
|
|
|
@@ -178,10 +217,13 @@ static int l_u8g2_DrawUTF8(lua_State *L) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-#if defined USE_CHINESE_WQY12_FONT
|
|
|
-#include "u8g2_wqy.h"
|
|
|
-#endif
|
|
|
-
|
|
|
+/*
|
|
|
+设置字体模式
|
|
|
+@api u8g2.SetFontMode(mode)
|
|
|
+@int mode字体模式,启用(1)或禁用(0)透明模式
|
|
|
+@usage
|
|
|
+u8g2.SetFontMode(1)
|
|
|
+*/
|
|
|
static int l_u8g2_SetFontMode(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
int font_mode = luaL_checkinteger(L, 1);
|
|
|
@@ -192,25 +234,33 @@ static int l_u8g2_SetFontMode(lua_State *L){
|
|
|
lua_pushboolean(L, 1);
|
|
|
return 1;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+设置字体
|
|
|
+@api u8g2.SetFont(font)
|
|
|
+@string font, "u8g2_font_ncenB08_tr"为纯英文8x8字节,"u8g2_font_wqy12_t_gb2312"为12x12全中文,"u8g2_font_unifont_t_symbols"为符号.
|
|
|
+@usage
|
|
|
+-- 设置为中文字体,对之后的drawStr有效,使用中文字体需在luat_base.h开启#define USE_U8G2_WQY12_T_GB2312
|
|
|
+u8g2.setFont("u8g2_font_wqy12_t_gb2312")
|
|
|
+*/
|
|
|
static int l_u8g2_SetFont(lua_State *L) {
|
|
|
if (u8g2 == NULL) {
|
|
|
LLOGI("disp not init yet!!!");
|
|
|
lua_pushboolean(L, 0);
|
|
|
return 1;
|
|
|
}
|
|
|
-
|
|
|
size_t len;
|
|
|
- size_t x, y;
|
|
|
const char* font = luaL_checklstring(L, 1, &len);
|
|
|
-
|
|
|
if (strcmp("u8g2_font_ncenB08_tr", font) == 0) {
|
|
|
u8g2_SetFont(u8g2, u8g2_font_ncenB08_tr);
|
|
|
lua_pushboolean(L, 1);
|
|
|
}
|
|
|
+#if defined USE_U8G2_WQY12_T_GB2312
|
|
|
else if (strcmp("u8g2_font_wqy12_t_gb2312", font) == 0) {
|
|
|
u8g2_SetFont(u8g2, u8g2_font_wqy12_t_gb2312);
|
|
|
lua_pushboolean(L, 1);
|
|
|
}
|
|
|
+#endif
|
|
|
else if (strcmp("u8g2_font_unifont_t_symbols", font) == 0) {
|
|
|
u8g2_SetFont(u8g2, u8g2_font_unifont_t_symbols);
|
|
|
lua_pushboolean(L, 1);
|
|
|
@@ -220,83 +270,241 @@ static int l_u8g2_SetFont(lua_State *L) {
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+获取显示屏高度
|
|
|
+@api u8g2.GetDisplayHeight()
|
|
|
+@return int 显示屏高度
|
|
|
+@usage
|
|
|
+u8g2.GetDisplayHeight()
|
|
|
+*/
|
|
|
static int l_u8g2_GetDisplayHeight(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
lua_pushinteger(L, u8g2_GetDisplayHeight(u8g2));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+获取显示屏宽度
|
|
|
+@api u8g2.GetDisplayWidth()
|
|
|
+@return int 显示屏宽度
|
|
|
+@usage
|
|
|
+u8g2.GetDisplayWidth()
|
|
|
+*/
|
|
|
static int l_u8g2_GetDisplayWidth(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
lua_pushinteger(L, u8g2_GetDisplayWidth(u8g2));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+在两点之间画一条线.
|
|
|
+@api u8g2.DrawLine(x0,y0,x1,y1)
|
|
|
+@int 第一个点的X位置.
|
|
|
+@int 第一个点的Y位置.
|
|
|
+@int 第二个点的X位置.
|
|
|
+@int 第二个点的Y位置.
|
|
|
+@usage
|
|
|
+u8g2.DrawLine(20, 5, 5, 32)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawLine(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawLine(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+在x,y位置画一个半径为rad的空心圆.
|
|
|
+@api u8g2.DrawCircle(x0,y0,rad,opt)
|
|
|
+@int 圆心位置
|
|
|
+@int 圆心位置
|
|
|
+@int 圆半径.
|
|
|
+@int 选择圆的部分或全部.
|
|
|
+右上: 0x01
|
|
|
+左上: 0x02
|
|
|
+左下: 0x04
|
|
|
+右下: 0x08
|
|
|
+完整圆: (0x01|0x02|0x04|0x08)
|
|
|
+@usage
|
|
|
+u8g2.DrawCircle(60,30,8,15)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawCircle(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawCircle(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+/*
|
|
|
+在x,y位置画一个半径为rad的实心圆.
|
|
|
+@api u8g2.DrawDisc(x0,y0,rad,opt)
|
|
|
+@int 圆心位置
|
|
|
+@int 圆心位置
|
|
|
+@int 圆半径.
|
|
|
+@int 选择圆的部分或全部.
|
|
|
+右上: 0x01
|
|
|
+左上: 0x02
|
|
|
+左下: 0x04
|
|
|
+右下: 0x08
|
|
|
+完整圆: (0x01|0x02|0x04|0x08)
|
|
|
+@usage
|
|
|
+u8g2.DrawDisc(60,30,8,15)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawDisc(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawDisc(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+在x,y位置画一个半径为rad的空心椭圆.
|
|
|
+@api u8g2.DrawEllipse(x0,y0,rx,ry,opt)
|
|
|
+@int 圆心位置
|
|
|
+@int 圆心位置
|
|
|
+@int 椭圆大小
|
|
|
+@int 椭圆大小
|
|
|
+@int 选择圆的部分或全部.
|
|
|
+右上: 0x01
|
|
|
+左上: 0x02
|
|
|
+左下: 0x04
|
|
|
+右下: 0x08
|
|
|
+完整圆: (0x01|0x02|0x04|0x08)
|
|
|
+@usage
|
|
|
+u8g2.DrawEllipse(60,30,8,15)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawEllipse(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawEllipse(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4),luaL_checkinteger(L, 5));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+在x,y位置画一个半径为rad的实心椭圆.
|
|
|
+@api u8g2.DrawFilledEllipse(x0,y0,rx,ry,opt)
|
|
|
+@int 圆心位置
|
|
|
+@int 圆心位置
|
|
|
+@int 椭圆大小
|
|
|
+@int 椭圆大小
|
|
|
+@int 选择圆的部分或全部.
|
|
|
+右上: 0x01
|
|
|
+左上: 0x02
|
|
|
+左下: 0x04
|
|
|
+右下: 0x08
|
|
|
+完整圆: (0x01|0x02|0x04|0x08)
|
|
|
+@usage
|
|
|
+u8g2.DrawFilledEllipse(60,30,8,15)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawFilledEllipse(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawFilledEllipse(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4),luaL_checkinteger(L, 5));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+从x / y位置(左上边缘)开始绘制一个框(填充的框).
|
|
|
+@api u8g2.DrawBox(x,y,w,h)
|
|
|
+@int 左上边缘的X位置
|
|
|
+@int 左上边缘的Y位置
|
|
|
+@int 盒子的宽度
|
|
|
+@int 盒子的高度
|
|
|
+@usage
|
|
|
+u8g2.DrawBox(3,7,25,15)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawBox(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawBox(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+从x / y位置(左上边缘)开始绘制一个框(空框).
|
|
|
+@api u8g2.DrawFrame(x,y,w,h)
|
|
|
+@int 左上边缘的X位置
|
|
|
+@int 左上边缘的Y位置
|
|
|
+@int 盒子的宽度
|
|
|
+@int 盒子的高度
|
|
|
+@usage
|
|
|
+u8g2.DrawFrame(3,7,25,15)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawFrame(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawFrame(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4));
|
|
|
return 1;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+绘制一个从x / y位置(左上边缘)开始具有圆形边缘的填充框/框架.
|
|
|
+@api u8g2.DrawRBox(x,y,w,h,r)
|
|
|
+@int 左上边缘的X位置
|
|
|
+@int 左上边缘的Y位置
|
|
|
+@int 盒子的宽度
|
|
|
+@int 盒子的高度
|
|
|
+@int 四个边缘的半径
|
|
|
+@usage
|
|
|
+u8g2.DrawRBox(3,7,25,15)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawRBox(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawRBox(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4),luaL_checkinteger(L, 5));
|
|
|
return 1;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+绘制一个从x / y位置(左上边缘)开始具有圆形边缘的空框/框架.
|
|
|
+@api u8g2.DrawRFrame(x,y,w,h,r)
|
|
|
+@int 左上边缘的X位置
|
|
|
+@int 左上边缘的Y位置
|
|
|
+@int 盒子的宽度
|
|
|
+@int 盒子的高度
|
|
|
+@int 四个边缘的半径
|
|
|
+@usage
|
|
|
+u8g2.DrawRFrame(3,7,25,15)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawRFrame(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawRFrame(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4),luaL_checkinteger(L, 5));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+绘制一个图形字符。字符放置在指定的像素位置x和y.
|
|
|
+@api u8g2.DrawGlyph(x,y,encoding)
|
|
|
+@int 字符在显示屏上的位置
|
|
|
+@int 字符在显示屏上的位置
|
|
|
+@int 字符的Unicode值
|
|
|
+@usage
|
|
|
+u8g2.SetFont(u8g2_font_unifont_t_symbols)
|
|
|
+u8g2.DrawGlyph(5, 20, 0x2603) -- dec 9731/hex 2603 Snowman
|
|
|
+*/
|
|
|
static int l_u8g2_DrawGlyph(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawGlyph(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+绘制一个三角形(实心多边形).
|
|
|
+@api u8g2.DrawTriangle(x0,y0,x1,y1,x2,y2)
|
|
|
+@int 点0X位置
|
|
|
+@int 点0Y位置
|
|
|
+@int 点1X位置
|
|
|
+@int 点1Y位置
|
|
|
+@int 点2X位置
|
|
|
+@int 点2Y位置
|
|
|
+@usage
|
|
|
+u8g2.DrawTriangle(20,5, 27,50, 5,32)
|
|
|
+*/
|
|
|
static int l_u8g2_DrawTriangle(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_DrawTriangle(u8g2,luaL_checkinteger(L, 1),luaL_checkinteger(L, 2),luaL_checkinteger(L, 3),luaL_checkinteger(L, 4),luaL_checkinteger(L, 5),luaL_checkinteger(L, 6));
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+定义位图函数是否将写入背景色
|
|
|
+@api u8g2.SetBitmapMode(mode)
|
|
|
+@int mode字体模式,启用(1)或禁用(0)透明模式
|
|
|
+@usage
|
|
|
+u8g2.SetBitmapMode(1)
|
|
|
+*/
|
|
|
static int l_u8g2_SetBitmapMode(lua_State *L){
|
|
|
if (u8g2 == NULL) return 0;
|
|
|
u8g2_SetBitmapMode(u8g2,luaL_checkinteger(L, 1));
|