mirror of
https://github.com/korneliuszo/lumiax-controller.git
synced 2026-08-06 17:03:25 +02:00
Fix display (needs new zephyr)
This commit is contained in:
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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(®_data.new_sample,K_FOREVER);
|
||||
k_mutex_lock(®_data.mut, K_FOREVER);
|
||||
Reg_data::Data cached = reg_data.d;
|
||||
k_mutex_unlock(®_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(®_data.mut);
|
||||
|
||||
if(!tlay2.Init())
|
||||
return 1;
|
||||
|
||||
@@ -76,27 +103,19 @@ int main(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
k_sem_init(®_data.new_sample, 0, 1);
|
||||
|
||||
k_mutex_init(®_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(®_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(®_data.mut);
|
||||
k_sem_give(®_data.new_sample);
|
||||
printt("Read ok");
|
||||
|
||||
//k_msleep(1000);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user