establish delay as event to trigger flushing of spi buffer (#2517)
This commit is contained in:
parent
1c6894eb02
commit
46671928c0
|
@ -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,25 +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();
|
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 );
|
||||||
|
@ -120,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;
|
||||||
|
@ -192,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;
|
||||||
|
@ -229,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;
|
||||||
}
|
}
|
||||||
|
@ -280,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:
|
||||||
|
|
Loading…
Reference in New Issue