Move to Native SPI implementations of ILI9341 and STMPE610
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
#include "backlight.h"
|
||||
#include "stmpe610.h"
|
||||
#include "mgos_stmpe610.h"
|
||||
|
||||
static float backlight_duty;
|
||||
static float backlight_target_duty;
|
||||
|
27
src/main.c
27
src/main.c
@ -3,25 +3,16 @@
|
||||
|
||||
#include "mgos.h"
|
||||
#include "mgos_pwm.h"
|
||||
#include "tft.h"
|
||||
#include "stmpe610.h"
|
||||
#include "mongoose-touch.h"
|
||||
#include "fonts/FreeMonoBold9pt7b.h"
|
||||
|
||||
struct screen_t *screen = NULL;
|
||||
|
||||
static long map(long x, long in_min, long in_max, long out_min, long out_max) {
|
||||
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||
}
|
||||
|
||||
static void touch_handler(struct mgos_stmpe610_event_data *ed) {
|
||||
uint16_t x, y;
|
||||
struct widget_t *widget;
|
||||
|
||||
if (!ed) return;
|
||||
|
||||
x = map(ed->x, 0, 4095, 0, _width-1);
|
||||
y = map(ed->y, 0, 4095, 0, _height-1);
|
||||
LOG(LL_INFO, ("Touch %s at (%d,%d) pressure=%d, length=%d", ed->direction==TOUCH_UP?"UP":"DOWN", x, y, ed->z, ed->length));
|
||||
LOG(LL_INFO, ("Touch %s at (%d,%d) pressure=%d, length=%d", ed->direction==TOUCH_UP?"UP":"DOWN", ed->x, ed->y, ed->z, ed->length));
|
||||
|
||||
// If the backlight is inactive, grab the TOUCH_DOWN and TOUCH_UP events.
|
||||
// Do nothing on TOUCH_DOWN, but reactivate the backlight by calling
|
||||
@ -39,7 +30,7 @@ static void touch_handler(struct mgos_stmpe610_event_data *ed) {
|
||||
|
||||
backlight_keepalive();
|
||||
|
||||
widget = screen_widget_find_by_xy(screen, x, y);
|
||||
widget = screen_widget_find_by_xy(screen, ed->x, ed->y);
|
||||
|
||||
if (ed->direction==TOUCH_DOWN) {
|
||||
widget_network_recv();
|
||||
@ -56,10 +47,14 @@ void tft_demo(void)
|
||||
{
|
||||
struct widget_t *w;
|
||||
|
||||
mgos_ili9341_setRotation(mgos_sys_config_get_tft_orientation());
|
||||
// mgos_ili9341_setRotation(mgos_sys_config_get_tft_orientation());
|
||||
mgos_stmpe610_set_rotation(mgos_sys_config_get_tft_orientation());
|
||||
mgos_ili9341_setGammaCurve(DEFAULT_GAMMA_CURVE);
|
||||
mgos_ili9341_setFont(DEFAULT_FONT, NULL);
|
||||
mgos_stmpe610_set_handler(touch_handler);
|
||||
mgos_stmpe610_set_dimensions(320, 240);
|
||||
|
||||
mgos_ili9341_set_font(&FreeMonoBold9pt7b);
|
||||
mgos_ili9341_set_fgcolor(0,0,0);
|
||||
mgos_ili9341_fillScreen();
|
||||
|
||||
screen = screen_create_from_file("/screen_main.json", widget_default_ev, NULL);
|
||||
if (!screen) {
|
||||
@ -101,8 +96,6 @@ enum mgos_app_init_result mgos_app_init(void)
|
||||
{
|
||||
backlight_init();
|
||||
|
||||
mgos_stmpe610_set_handler(touch_handler);
|
||||
|
||||
tft_demo();
|
||||
|
||||
return MGOS_APP_INIT_SUCCESS;
|
||||
|
@ -1,7 +1,6 @@
|
||||
#include "mgos.h"
|
||||
#include "mgos_adc.h"
|
||||
#include "mgos_config.h"
|
||||
#include "tft.h"
|
||||
#include "mongoose-touch.h"
|
||||
#include "mgos_prometheus_metrics.h"
|
||||
|
||||
@ -22,13 +21,13 @@ static int widget_battery_getvoltage() {
|
||||
|
||||
static void widget_battery_render(struct widget_t *w, void *ev_data) {
|
||||
int mvolts;
|
||||
color_t color;
|
||||
uint16_t color;
|
||||
int h;
|
||||
|
||||
if (!w)
|
||||
return;
|
||||
|
||||
mgos_ili9341_setclipwin(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_set_window(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
|
||||
mvolts=widget_battery_getvoltage();
|
||||
color=ILI9341_RED;
|
||||
@ -39,11 +38,11 @@ static void widget_battery_render(struct widget_t *w, void *ev_data) {
|
||||
if (h<0) h=0;
|
||||
if (h>12) h=12;
|
||||
|
||||
mgos_ili9341_drawFastHLine(5, 2, 3, color);
|
||||
mgos_ili9341_fillRect(2, 4, 9, 14, color);
|
||||
mgos_ili9341_set_fgcolor565(color);
|
||||
mgos_ili9341_drawLine(5, 2, 8, 4);
|
||||
mgos_ili9341_fillRect(2, 4, 9, 14);
|
||||
if (h>0)
|
||||
mgos_ili9341_fillRect(3, 5, 7, h, ILI9341_BLACK);
|
||||
mgos_ili9341_resetclipwin();
|
||||
mgos_ili9341_fillRect(3, 5, 7, h);
|
||||
|
||||
(void) ev_data;
|
||||
}
|
||||
|
@ -1,16 +1,18 @@
|
||||
#include "mgos.h"
|
||||
#include "tft.h"
|
||||
#include "mongoose-touch.h"
|
||||
|
||||
static void widget_default_draw(struct widget_t *w, color_t color) {
|
||||
static void widget_default_draw(struct widget_t *w, uint16_t color) {
|
||||
if (!w)
|
||||
return;
|
||||
mgos_ili9341_setclipwin(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_set_window(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
|
||||
mgos_ili9341_drawRoundRect(0, 0, w->w, w->h, 8, color);
|
||||
mgos_ili9341_set_fgcolor565(color);
|
||||
mgos_ili9341_drawRoundRect(0, 0, w->w, w->h, 8);
|
||||
|
||||
/*
|
||||
if (w->img)
|
||||
mgos_ili9341_png(0, 0, w->img);
|
||||
*/
|
||||
}
|
||||
|
||||
void widget_default_ev(int ev, struct widget_t *w, void *ev_data) {
|
||||
|
@ -2,7 +2,6 @@
|
||||
#include "mgos_config.h"
|
||||
#include "mgos_wifi.h"
|
||||
#include "mgos_net.h"
|
||||
#include "tft.h"
|
||||
#include "mongoose-touch.h"
|
||||
|
||||
#define WIDGET_NAME_NAME 0
|
||||
@ -55,11 +54,11 @@ static void widget_name_render(struct widget_t *w, void *ev_data) {
|
||||
sprintf(namestring, "%-20s",mgos_sys_config_get_app_hostname());
|
||||
}
|
||||
|
||||
mgos_ili9341_setclipwin(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_fillRect(0, 0, w->w, w->h, ILI9341_BLACK);
|
||||
mgos_ili9341_set_fg(&ILI9341_GREEN);
|
||||
mgos_ili9341_print(namestring, 2, 4);
|
||||
mgos_ili9341_resetclipwin();
|
||||
mgos_ili9341_set_window(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_set_fgcolor565(ILI9341_BLACK);
|
||||
mgos_ili9341_fillRect(0, 0, w->w, w->h);
|
||||
mgos_ili9341_set_fgcolor565(ILI9341_GREEN);
|
||||
mgos_ili9341_print(2, 4, namestring);
|
||||
|
||||
(void) ev_data;
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
#include "mgos.h"
|
||||
#include "mgos_timers.h"
|
||||
#include "tft.h"
|
||||
#include "mongoose-touch.h"
|
||||
|
||||
static mgos_timer_id send_timer = 0;
|
||||
@ -8,15 +7,16 @@ static mgos_timer_id recv_timer = 0;
|
||||
static struct widget_t *widget_network = NULL;
|
||||
|
||||
static void widget_network_render(struct widget_t *w, void *ev_data) {
|
||||
mgos_ili9341_setclipwin(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_set_window(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
// Send
|
||||
mgos_ili9341_fillTriangle(2, 10, 10, 10, 6, 2, send_timer?ILI9341_YELLOW:ILI9341_DARKGREY);
|
||||
mgos_ili9341_fillRect(5, 10, 3, 8, send_timer?ILI9341_YELLOW:ILI9341_DARKGREY);
|
||||
mgos_ili9341_set_fgcolor565(send_timer?ILI9341_YELLOW:ILI9341_DARKGREY);
|
||||
mgos_ili9341_fillTriangle(2, 10, 10, 10, 6, 2);
|
||||
mgos_ili9341_fillRect(5, 10, 3, 8);
|
||||
|
||||
// Recv
|
||||
mgos_ili9341_fillTriangle(12, 10, 20, 10, 16, 18, recv_timer?ILI9341_YELLOW:ILI9341_DARKGREY);
|
||||
mgos_ili9341_fillRect(15, 2, 3, 8, recv_timer?ILI9341_YELLOW:ILI9341_DARKGREY);
|
||||
mgos_ili9341_resetclipwin();
|
||||
mgos_ili9341_set_fgcolor565(recv_timer?ILI9341_YELLOW:ILI9341_DARKGREY);
|
||||
mgos_ili9341_fillTriangle(12, 10, 20, 10, 16, 18);
|
||||
mgos_ili9341_fillRect(15, 2, 3, 8);
|
||||
|
||||
(void) ev_data;
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
#include "mgos.h"
|
||||
#include "tft.h"
|
||||
#include "mongoose-touch.h"
|
||||
|
||||
static void widget_time_render(struct widget_t *w, void *ev_data) {
|
||||
@ -11,11 +10,10 @@ static void widget_time_render(struct widget_t *w, void *ev_data) {
|
||||
if (!w)
|
||||
return;
|
||||
|
||||
mgos_ili9341_set_fg(&ILI9341_YELLOW);
|
||||
sprintf(tmp_buff, " %02d:%02d:%02d", tm_info->tm_hour, tm_info->tm_min, tm_info->tm_sec);
|
||||
mgos_ili9341_setclipwin(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_print(tmp_buff, 2, 4);
|
||||
mgos_ili9341_resetclipwin();
|
||||
mgos_ili9341_set_fgcolor565(ILI9341_YELLOW);
|
||||
sprintf(tmp_buff, " %02d:%02d", tm_info->tm_hour, tm_info->tm_min);
|
||||
mgos_ili9341_set_window(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_print(2, 4, tmp_buff);
|
||||
|
||||
(void) ev_data;
|
||||
}
|
||||
|
@ -1,14 +1,13 @@
|
||||
#include "mgos.h"
|
||||
#include "tft.h"
|
||||
#include "mongoose-touch.h"
|
||||
|
||||
static void widget_topbar_render(struct widget_t *w, void *ev_data) {
|
||||
if (!w)
|
||||
return;
|
||||
|
||||
mgos_ili9341_setclipwin(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_fillRect(0, 0, w->w, w->h, ILI9341_WHITE);
|
||||
mgos_ili9341_resetclipwin();
|
||||
mgos_ili9341_set_window(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_set_fgcolor565(ILI9341_WHITE);
|
||||
mgos_ili9341_fillRect(0, 0, w->w, w->h);
|
||||
|
||||
(void) ev_data;
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
#include "mgos.h"
|
||||
#include "tft.h"
|
||||
#include "mongoose-touch.h"
|
||||
#include <esp_wifi.h>
|
||||
|
||||
@ -25,22 +24,25 @@ static uint8_t widget_wifi_signal() {
|
||||
static void widget_wifi_render(struct widget_t *w, void *ev_data) {
|
||||
uint8_t x, signal;
|
||||
|
||||
mgos_ili9341_setclipwin(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
mgos_ili9341_set_window(w->x, w->y, w->x+w->w, w->y+w->h);
|
||||
|
||||
mgos_ili9341_fillTriangle(2, 18, 18, 18, 18, 2, ILI9341_DARKGREY);
|
||||
mgos_ili9341_set_fgcolor565(ILI9341_DARKGREY);
|
||||
mgos_ili9341_fillTriangle(2, 18, 18, 18, 18, 2);
|
||||
|
||||
// Map signal strength from [0..100] to [0..16]
|
||||
signal = widget_wifi_signal();
|
||||
x = map(signal, 0, 100, 0, 16);
|
||||
if (x>0)
|
||||
mgos_ili9341_fillTriangle(2, 18, 2+x, 18, 2+x, 18-x, ILI9341_WHITE);
|
||||
if (x>0) {
|
||||
mgos_ili9341_set_fgcolor565(ILI9341_WHITE);
|
||||
mgos_ili9341_fillTriangle(2, 18, 2+x, 18, 2+x, 18-x);
|
||||
}
|
||||
|
||||
// Draw an X in the corner if we don't have an IP address.
|
||||
if (mgos_wifi_get_status() != MGOS_WIFI_IP_ACQUIRED) {
|
||||
mgos_ili9341_drawLine(11, 11, 16, 16, ILI9341_RED);
|
||||
mgos_ili9341_drawLine(11, 16, 16, 11, ILI9341_RED);
|
||||
mgos_ili9341_set_fgcolor565(ILI9341_RED);
|
||||
mgos_ili9341_drawLine(11, 11, 16, 16);
|
||||
mgos_ili9341_drawLine(11, 16, 16, 11);
|
||||
}
|
||||
mgos_ili9341_resetclipwin();
|
||||
|
||||
(void) ev_data;
|
||||
}
|
||||
|
Reference in New Issue
Block a user