|
|
|
@ -1,6 +1,7 @@ |
|
|
|
|
#include "max2719.h" |
|
|
|
|
#include "dotmatrix.h" |
|
|
|
|
#include "malloc_safe.h" |
|
|
|
|
#include "com/debug.h" |
|
|
|
|
|
|
|
|
|
DotMatrix_Cfg* dmtx_init(DotMatrix_Init *init) |
|
|
|
|
{ |
|
|
|
@ -37,6 +38,11 @@ void dmtx_show(DotMatrix_Cfg* dmtx) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void dmtx_clear(DotMatrix_Cfg* dmtx) |
|
|
|
|
{ |
|
|
|
|
memset(dmtx->screen, 0, dmtx->drv.chain_len*8); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void dmtx_intensity(DotMatrix_Cfg* dmtx, uint8_t intensity) |
|
|
|
|
{ |
|
|
|
|
max2719_cmd_all(&dmtx->drv, MAX2719_CMD_INTENSITY, intensity & 0x0F); |
|
|
|
@ -46,3 +52,26 @@ void dmtx_blank(DotMatrix_Cfg* dmtx, bool blank) |
|
|
|
|
{ |
|
|
|
|
max2719_cmd_all(&dmtx->drv, MAX2719_CMD_SHUTDOWN, blank & 0x01); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void dmtx_set(DotMatrix_Cfg* dmtx, int32_t x, int32_t y, bool bit) |
|
|
|
|
{ |
|
|
|
|
if (x < 0 || y < 0) return; |
|
|
|
|
if ((uint32_t)x >= dmtx->cols*8 || (uint32_t)y >= dmtx->rows*8) return; |
|
|
|
|
|
|
|
|
|
uint32_t cell_x = (uint32_t)x >> 3; |
|
|
|
|
uint8_t xd = x & 7; |
|
|
|
|
|
|
|
|
|
// resolve cell
|
|
|
|
|
uint32_t digit = y & 7; |
|
|
|
|
cell_x += ((uint32_t)y >> 3) * dmtx->cols; |
|
|
|
|
|
|
|
|
|
uint32_t cell_idx = (digit * dmtx->drv.chain_len) + cell_x; |
|
|
|
|
|
|
|
|
|
uint8_t *cell = &dmtx->screen[cell_idx]; |
|
|
|
|
|
|
|
|
|
if (bit) { |
|
|
|
|
*cell |= bit << xd; |
|
|
|
|
} else { |
|
|
|
|
*cell &= ~(bit << xd); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|