Fix display (needs new zephyr)

This commit is contained in:
Korneliusz Osmenda
2022-08-22 21:58:54 +02:00
parent 3268072965
commit cdb81935ea
5 changed files with 78 additions and 31 deletions
+5 -2
View File
@@ -108,18 +108,21 @@
spi-max-frequency = <4000000>;
reg = <0>;
width = <296>;
height = <136>; // it's 128 but needs 136
height = <128>;
pp-width-bits = <8>;
pp-height-bits = <16>;
dc-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
reset-gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
busy-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
gdv = [17];
sdv = [41 00 32];
sdv = [41 B0 32];
vcom = <0x36>;
//orientation-flipped;
border-waveform = <0xC0>;
//softstart = [d7 d6 9d];
cntrl1-data = [00 80];
data-mode-2;
display-option-data = [00 00 00 00 00 40 00 00 00 00];
lut-initial = [
80 66 00 00 00 00 00 00
40 00 00 00 10 66 00 00
+10 -8
View File
@@ -30,9 +30,12 @@ int Display::Init()
void Display::blank_off()
{
k_mutex_lock(&mut, K_FOREVER);
display_blanking_off(dev);
k_mutex_unlock(&mut);
}
void Display::blank_on()
{
display_blanking_on(dev);
}
void Display::print_chr(int x, int y, char c)
@@ -52,16 +55,15 @@ void Display::print_chr(int x, int y, char c)
.height=16,
.pitch=8
};
k_mutex_lock(&mut, K_FOREVER);
display_write(dev,x,y,&desc,my_font_[idx]);
k_mutex_unlock(&mut);
}
void Display::print_str(int x, int y, const char* str)
{
while(*str)
{
print_chr(x,y,*str++);
x+=8;
}
}
+19
View File
@@ -14,8 +14,27 @@ class Display {
const struct device *dev;
k_mutex mut;
public:
class Display_lock
{
k_mutex *m;
public:
Display_lock(k_mutex *_m)
: m(_m)
{
k_mutex_lock(m, K_FOREVER);
}
~Display_lock()
{
k_mutex_unlock(m);
}
};
int Init();
Display_lock lock()
{
return Display_lock(&mut);
}
void blank_off();
void blank_on();
void print_chr(int x, int y, char c);
void print_str(int x, int y, const char* str);
};
+41 -21
View File
@@ -58,8 +58,35 @@ void bt_enabled(int err)
barrot_init();
}
#define DISPLAY_STACK_SIZE 500
K_THREAD_STACK_DEFINE(display_stack_area, DISPLAY_STACK_SIZE);
struct k_thread display_thread_data;
void display_thread(void*,void*,void*)
{
int spinner_idx=0;
char spinner[] = "/-\\|";
while(true)
{
k_sem_take(&reg_data.new_sample,K_FOREVER);
k_mutex_lock(&reg_data.mut, K_FOREVER);
Reg_data::Data cached = reg_data.d;
k_mutex_unlock(&reg_data.mut);
{
auto l = display.lock();
display.print_chr(0,0,spinner[spinner_idx++]);
display.blank_off();
}
if (!spinner[spinner_idx])
spinner_idx=0;
}
}
int main(void)
{
k_mutex_init(&reg_data.mut);
if(!tlay2.Init())
return 1;
@@ -76,27 +103,19 @@ int main(void)
return 1;
}
k_sem_init(&reg_data.new_sample, 0, 1);
k_mutex_init(&reg_data.mut);
k_thread_create(&display_thread_data, display_stack_area,
K_THREAD_STACK_SIZEOF(display_stack_area),
display_thread,
NULL, NULL, NULL,
5, 0, K_NO_WAIT);
if (init_modbus_client()) {
tlay2.printt("Modbus RTU client initialization failed");
return 1;
}
display.blank_off();
display.print_chr(32,0,'a');
display.print_chr(32,32,'a');
display.print_chr(48,48,'a');
display.print_chr(48,128,'a');
display.print_chr(32,120,'a');
while(1)
{
uint16_t holding_reg[11];
@@ -107,14 +126,15 @@ int main(void)
continue;
}
k_mutex_lock(&reg_data.mut, K_FOREVER);
reg_data.b_soc = holding_reg[0];
reg_data.b_v = holding_reg[1];
reg_data.b_a = holding_reg[2];
reg_data.l_v = holding_reg[5];
reg_data.l_a = holding_reg[6];
reg_data.s_v = holding_reg[9];
reg_data.s_a = holding_reg[10];
reg_data.d.b_soc = holding_reg[0];
reg_data.d.b_v = holding_reg[1];
reg_data.d.b_a = holding_reg[2];
reg_data.d.l_v = holding_reg[5];
reg_data.d.l_a = holding_reg[6];
reg_data.d.s_v = holding_reg[9];
reg_data.d.s_a = holding_reg[10];
k_mutex_unlock(&reg_data.mut);
k_sem_give(&reg_data.new_sample);
printt("Read ok");
//k_msleep(1000);
+3
View File
@@ -15,6 +15,7 @@
#include <zephyr/kernel.h>
struct Reg_data {
struct Data {
uint16_t b_soc;
uint16_t b_v;
int16_t b_a;
@@ -22,7 +23,9 @@ struct Reg_data {
uint16_t l_a;
uint16_t s_v;
uint16_t s_a;
} d;
k_mutex mut;
k_sem new_sample;
};
extern struct Reg_data reg_data;