1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-26 17:55:19 +03:00

[X9D] Full use of the 16 grayscales.

[X9D] BMP 4bits support
[X9D] Debug driver
This commit is contained in:
bsongis 2013-01-14 20:08:34 +00:00
parent 2e747a1663
commit e41aa9fbd6
28 changed files with 325 additions and 182 deletions

View file

@ -496,7 +496,7 @@ ifeq ($(PCB), X9D)
EEPROMSRC = eeprom_avr.cpp # TODO later eeprom_conversions.cpp EEPROMSRC = eeprom_avr.cpp # TODO later eeprom_conversions.cpp
PULSESSRC = pulses_arm.cpp PULSESSRC = pulses_arm.cpp
CPPSRC += sky9x/audio.cpp CPPSRC += sky9x/audio.cpp
CPPSRC += x9d/pwr_driver.cpp x9d/eeprom_driver.cpp x9d/pulses_driver.cpp x9d/keys_driver.cpp x9d/adc_driver.cpp x9d/trainer_driver.cpp x9d/audio_driver.cpp x9d/delays.cpp x9d/uart.cpp CPPSRC += x9d/pwr_driver.cpp x9d/eeprom_driver.cpp x9d/pulses_driver.cpp x9d/keys_driver.cpp x9d/adc_driver.cpp x9d/trainer_driver.cpp x9d/audio_driver.cpp x9d/delays.cpp
CPPSRC += bmp.cpp monitors_views.cpp CPPSRC += bmp.cpp monitors_views.cpp
SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/system_stm32f2xx.c SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F2xx/Source/Templates/system_stm32f2xx.c
SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c SRC += x9d/STM32F2xx_StdPeriph_Lib_V1.1.0/Libraries/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c
@ -517,6 +517,12 @@ ifeq ($(PCB), X9D)
CPPDEFS += -DRTCLOCK CPPDEFS += -DRTCLOCK
CPPSRC += rtc.cpp x9d/rtc_driver.cpp CPPSRC += rtc.cpp x9d/rtc_driver.cpp
endif endif
ifeq ($(DEBUG), YES)
CPPSRC += debug.cpp
CPPSRC += x9d/debug_driver.cpp
SRC += sky9x/syscalls.c
endif
endif endif
ifeq ($(PCB), SKY9X) ifeq ($(PCB), SKY9X)
@ -554,7 +560,8 @@ ifeq ($(PCB), SKY9X)
endif endif
ifeq ($(DEBUG), YES) ifeq ($(DEBUG), YES)
CPPSRC += sky9x/debug.cpp CPPSRC += debug.cpp
CPPSRC += sky9x/debug_driver.cpp
SRC += sky9x/syscalls.c SRC += sky9x/syscalls.c
endif endif
endif endif

View file

@ -34,13 +34,16 @@
#include "open9x.h" #include "open9x.h"
const pm_char * bmpLoad(uint8_t *dest, const char *filename) const pm_char * bmpLoad(uint8_t *dest, const char *filename, const xcoord_t width, const uint8_t height)
{ {
FIL bmpFile; FIL bmpFile;
UINT read; UINT read;
uint8_t bmpBuf[64]; /* maximum with 64px for 1-bit bitmaps */ uint8_t palette[16];
uint8_t bmpBuf[64]; /* maximum with 64px */
uint8_t *buf = &bmpBuf[0]; uint8_t *buf = &bmpBuf[0];
assert(width <= 64);
FRESULT result = f_open(&bmpFile, filename, FA_OPEN_EXISTING | FA_READ); FRESULT result = f_open(&bmpFile, filename, FA_OPEN_EXISTING | FA_READ);
if (result != FR_OK) { if (result != FR_OK) {
return SDCARD_ERROR(result); return SDCARD_ERROR(result);
@ -90,7 +93,7 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename)
return STR_INCOMPATIBLE; return STR_INCOMPATIBLE;
} }
uint32_t width, height; uint32_t w, h;
switch (ihsize){ switch (ihsize){
case 40: // windib case 40: // windib
@ -98,13 +101,13 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename)
case 64: // OS/2 v2 case 64: // OS/2 v2
case 108: // windib v4 case 108: // windib v4
case 124: // windib v5 case 124: // windib v5
width = *((uint32_t *)&buf[4]); w = *((uint32_t *)&buf[4]);
height = *((uint32_t *)&buf[8]); h = *((uint32_t *)&buf[8]);
buf += 12; buf += 12;
break; break;
case 12: // OS/2 v1 case 12: // OS/2 v1
width = *((uint16_t *)&buf[4]); w = *((uint16_t *)&buf[4]);
height = *((uint16_t *)&buf[6]); h = *((uint16_t *)&buf[6]);
buf += 8; buf += 8;
break; break;
default: default:
@ -117,59 +120,86 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename)
return STR_INCOMPATIBLE; return STR_INCOMPATIBLE;
} }
if (width > MODEL_BITMAP_WIDTH || height > MODEL_BITMAP_HEIGHT) { if (w > width || h > height) {
f_close(&bmpFile); f_close(&bmpFile);
return STR_INCOMPATIBLE; return STR_INCOMPATIBLE;
} }
uint16_t depth = *((uint16_t *)&buf[2]); uint16_t depth = *((uint16_t *)&buf[2]);
if (f_lseek(&bmpFile, hsize) != FR_OK) { buf = &bmpBuf[0];
f_close(&bmpFile);
return SDCARD_ERROR(result); if (depth == 4) {
if (f_lseek(&bmpFile, hsize-64) != FR_OK || f_read(&bmpFile, buf, 64, &read) != FR_OK || read != 64) {
f_close(&bmpFile);
return SDCARD_ERROR(result);
}
for (uint8_t i=0; i<16; i++) {
palette[i] = buf[4*i] >> 4;
}
}
else {
if (f_lseek(&bmpFile, hsize) != FR_OK) {
f_close(&bmpFile);
return SDCARD_ERROR(result);
}
} }
*dest++ = width; *dest++ = w;
*dest++ = height; *dest++ = h;
memset(dest, 0, w*(h/8)*4);
uint32_t n; uint32_t n;
buf = &bmpBuf[0];
switch (depth) { switch (depth) {
case 1: case 1:
n = width/8; n = w/8;
for (uint32_t i=0; i<height; i+=8) { for (uint32_t i=0; i<h; i+=8) {
result = f_read(&bmpFile, buf, n*8, &read); result = f_read(&bmpFile, buf, n*8, &read);
if (result != FR_OK || read != n*8) { if (result != FR_OK || read != n*8) {
f_close(&bmpFile); f_close(&bmpFile);
return SDCARD_ERROR(result); return SDCARD_ERROR(result);
} }
uint8_t * dst = dest + ((height-i-8)/8 * width); uint8_t * dst = dest + 4*((h-i-8)/8 * w);
for (uint32_t j=0; j<n; j++) { for (uint32_t j=0; j<n; j++) {
*dst++ = ~(((buf[j+0*n] >> 7) << 7) + ((buf[j+1*n] >> 7) << 6) + ((buf[j+2*n] >> 7) << 5) + ((buf[j+3*n] >> 7) << 4) + ((buf[j+4*n] >> 7) << 3) + ((buf[j+5*n] >> 7) << 2) + ((buf[j+6*n] >> 7) << 1) + ((buf[j+7*n] >> 7) << 0)); #define PUSH_4BYTES(x) *dst = *(dst+1) = *(dst+2) = *(dst+3) = (x); dst += 4
*dst++ = ~((((buf[j+0*n] >> 6) & 1) << 7) + (((buf[j+1*n] >> 6) & 1) << 6) + (((buf[j+2*n] >> 6) & 1) << 5) + (((buf[j+3*n] >> 6) & 1) << 4) + (((buf[j+4*n] >> 6) & 1) << 3) + (((buf[j+5*n] >> 6) & 1) << 2) + (((buf[j+6*n] >> 6) & 1) << 1) + (((buf[j+7*n] >> 6) & 1) << 0)); PUSH_4BYTES(~(((buf[j+0*n] >> 7) << 7) + ((buf[j+1*n] >> 7) << 6) + ((buf[j+2*n] >> 7) << 5) + ((buf[j+3*n] >> 7) << 4) + ((buf[j+4*n] >> 7) << 3) + ((buf[j+5*n] >> 7) << 2) + ((buf[j+6*n] >> 7) << 1) + ((buf[j+7*n] >> 7) << 0)));
*dst++ = ~((((buf[j+0*n] >> 5) & 1) << 7) + (((buf[j+1*n] >> 5) & 1) << 6) + (((buf[j+2*n] >> 5) & 1) << 5) + (((buf[j+3*n] >> 5) & 1) << 4) + (((buf[j+4*n] >> 5) & 1) << 3) + (((buf[j+5*n] >> 5) & 1) << 2) + (((buf[j+6*n] >> 5) & 1) << 1) + (((buf[j+7*n] >> 5) & 1) << 0)); PUSH_4BYTES(~((((buf[j+0*n] >> 6) & 1) << 7) + (((buf[j+1*n] >> 6) & 1) << 6) + (((buf[j+2*n] >> 6) & 1) << 5) + (((buf[j+3*n] >> 6) & 1) << 4) + (((buf[j+4*n] >> 6) & 1) << 3) + (((buf[j+5*n] >> 6) & 1) << 2) + (((buf[j+6*n] >> 6) & 1) << 1) + (((buf[j+7*n] >> 6) & 1) << 0)));
*dst++ = ~((((buf[j+0*n] >> 4) & 1) << 7) + (((buf[j+1*n] >> 4) & 1) << 6) + (((buf[j+2*n] >> 4) & 1) << 5) + (((buf[j+3*n] >> 4) & 1) << 4) + (((buf[j+4*n] >> 4) & 1) << 3) + (((buf[j+5*n] >> 4) & 1) << 2) + (((buf[j+6*n] >> 4) & 1) << 1) + (((buf[j+7*n] >> 4) & 1) << 0)); PUSH_4BYTES(~((((buf[j+0*n] >> 5) & 1) << 7) + (((buf[j+1*n] >> 5) & 1) << 6) + (((buf[j+2*n] >> 5) & 1) << 5) + (((buf[j+3*n] >> 5) & 1) << 4) + (((buf[j+4*n] >> 5) & 1) << 3) + (((buf[j+5*n] >> 5) & 1) << 2) + (((buf[j+6*n] >> 5) & 1) << 1) + (((buf[j+7*n] >> 5) & 1) << 0)));
*dst++ = ~((((buf[j+0*n] >> 3) & 1) << 7) + (((buf[j+1*n] >> 3) & 1) << 6) + (((buf[j+2*n] >> 3) & 1) << 5) + (((buf[j+3*n] >> 3) & 1) << 4) + (((buf[j+4*n] >> 3) & 1) << 3) + (((buf[j+5*n] >> 3) & 1) << 2) + (((buf[j+6*n] >> 3) & 1) << 1) + (((buf[j+7*n] >> 3) & 1) << 0)); PUSH_4BYTES(~((((buf[j+0*n] >> 4) & 1) << 7) + (((buf[j+1*n] >> 4) & 1) << 6) + (((buf[j+2*n] >> 4) & 1) << 5) + (((buf[j+3*n] >> 4) & 1) << 4) + (((buf[j+4*n] >> 4) & 1) << 3) + (((buf[j+5*n] >> 4) & 1) << 2) + (((buf[j+6*n] >> 4) & 1) << 1) + (((buf[j+7*n] >> 4) & 1) << 0)));
*dst++ = ~((((buf[j+0*n] >> 2) & 1) << 7) + (((buf[j+1*n] >> 2) & 1) << 6) + (((buf[j+2*n] >> 2) & 1) << 5) + (((buf[j+3*n] >> 2) & 1) << 4) + (((buf[j+4*n] >> 2) & 1) << 3) + (((buf[j+5*n] >> 2) & 1) << 2) + (((buf[j+6*n] >> 2) & 1) << 1) + (((buf[j+7*n] >> 2) & 1) << 0)); PUSH_4BYTES(~((((buf[j+0*n] >> 3) & 1) << 7) + (((buf[j+1*n] >> 3) & 1) << 6) + (((buf[j+2*n] >> 3) & 1) << 5) + (((buf[j+3*n] >> 3) & 1) << 4) + (((buf[j+4*n] >> 3) & 1) << 3) + (((buf[j+5*n] >> 3) & 1) << 2) + (((buf[j+6*n] >> 3) & 1) << 1) + (((buf[j+7*n] >> 3) & 1) << 0)));
*dst++ = ~((((buf[j+0*n] >> 1) & 1) << 7) + (((buf[j+1*n] >> 1) & 1) << 6) + (((buf[j+2*n] >> 1) & 1) << 5) + (((buf[j+3*n] >> 1) & 1) << 4) + (((buf[j+4*n] >> 1) & 1) << 3) + (((buf[j+5*n] >> 1) & 1) << 2) + (((buf[j+6*n] >> 1) & 1) << 1) + (((buf[j+7*n] >> 1) & 1) << 0)); PUSH_4BYTES(~((((buf[j+0*n] >> 2) & 1) << 7) + (((buf[j+1*n] >> 2) & 1) << 6) + (((buf[j+2*n] >> 2) & 1) << 5) + (((buf[j+3*n] >> 2) & 1) << 4) + (((buf[j+4*n] >> 2) & 1) << 3) + (((buf[j+5*n] >> 2) & 1) << 2) + (((buf[j+6*n] >> 2) & 1) << 1) + (((buf[j+7*n] >> 2) & 1) << 0)));
*dst++ = ~((((buf[j+0*n] >> 0) & 1) << 7) + (((buf[j+1*n] >> 0) & 1) << 6) + (((buf[j+2*n] >> 0) & 1) << 5) + (((buf[j+3*n] >> 0) & 1) << 4) + (((buf[j+4*n] >> 0) & 1) << 3) + (((buf[j+5*n] >> 0) & 1) << 2) + (((buf[j+6*n] >> 0) & 1) << 1) + (((buf[j+7*n] >> 0) & 1) << 0)); PUSH_4BYTES(~((((buf[j+0*n] >> 1) & 1) << 7) + (((buf[j+1*n] >> 1) & 1) << 6) + (((buf[j+2*n] >> 1) & 1) << 5) + (((buf[j+3*n] >> 1) & 1) << 4) + (((buf[j+4*n] >> 1) & 1) << 3) + (((buf[j+5*n] >> 1) & 1) << 2) + (((buf[j+6*n] >> 1) & 1) << 1) + (((buf[j+7*n] >> 1) & 1) << 0)));
PUSH_4BYTES(~((((buf[j+0*n] >> 0) & 1) << 7) + (((buf[j+1*n] >> 0) & 1) << 6) + (((buf[j+2*n] >> 0) & 1) << 5) + (((buf[j+3*n] >> 0) & 1) << 4) + (((buf[j+4*n] >> 0) & 1) << 3) + (((buf[j+5*n] >> 0) & 1) << 2) + (((buf[j+6*n] >> 0) & 1) << 1) + (((buf[j+7*n] >> 0) & 1) << 0)));
} }
} }
break; break;
/* case 4: case 4:
for (uint32_t i=0; i<height; i++) { n = w/8;
int j; for (int32_t i=h-1; i>=0; i--) {
for (j = 0; j < n; j++){ result = f_read(&bmpFile, buf, w/2, &read);
ptr[j*2+0] = (buf[j] >> 4) & 0xF; if (result != FR_OK || read != w/2) {
ptr[j*2+1] = buf[j] & 0xF; f_close(&bmpFile);
return SDCARD_ERROR(result);
}
uint8_t mask = 1 << (i%8);
for (uint32_t j=0; j<w/2; j++) {
uint8_t * dst = dest + (i/8)*w*4 + j*8;
uint8_t val = palette[(buf[j] >> 4) & 0x0F];
*(dst+0) = ((*(dst+0)) & (~mask)) + ((val & 0x1) ? 0 : mask);
*(dst+1) = ((*(dst+1)) & (~mask)) + ((val & 0x2) ? 0 : mask);
*(dst+2) = ((*(dst+2)) & (~mask)) + ((val & 0x4) ? 0 : mask);
*(dst+3) = ((*(dst+3)) & (~mask)) + ((val & 0x8) ? 0 : mask);
val = palette[buf[j] & 0x0F];
*(dst+4) = ((*(dst+4)) & (~mask)) + ((val & 0x1) ? 0 : mask);
*(dst+5) = ((*(dst+5)) & (~mask)) + ((val & 0x2) ? 0 : mask);
*(dst+6) = ((*(dst+6)) & (~mask)) + ((val & 0x4) ? 0 : mask);
*(dst+7) = ((*(dst+7)) & (~mask)) + ((val & 0x8) ? 0 : mask);
} }
buf += n;
ptr += linesize;
} }
break; break;
*/
default: default:
f_close(&bmpFile); f_close(&bmpFile);
@ -179,3 +209,25 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename)
f_close(&bmpFile); f_close(&bmpFile);
return 0; return 0;
} }
void lcd_bmp(xcoord_t x, uint8_t y, const pm_uchar * img)
{
const pm_uchar *q = img;
#if LCD >= 260
xcoord_t w = pgm_read_byte(q++);
if (w == 255) w += pgm_read_byte(q++);
#else
uint8_t w = pgm_read_byte(q++);
#endif
uint8_t hb = (pgm_read_byte(q++)+7)/8;
for (uint8_t yb = 0; yb < hb; yb++) {
uint8_t *p = &displayBuf[ (y / 8 + yb) * DISPLAY_W + x ];
for (xcoord_t i=0; i<w; i++){
*(p+0*DISPLAY_PLAN_SIZE) = pgm_read_byte(q++);
*(p+1*DISPLAY_PLAN_SIZE) = pgm_read_byte(q++);
*(p+2*DISPLAY_PLAN_SIZE) = pgm_read_byte(q++);
*(p+3*DISPLAY_PLAN_SIZE) = pgm_read_byte(q++);
p++;
}
}
}

85
src/debug.cpp Normal file
View file

@ -0,0 +1,85 @@
/*
* Authors (alphabetical order)
* - Andre Bernet <bernet.andre@gmail.com>
* - Bertrand Songis <bsongis@gmail.com>
* - Bryan J. Rentoul (Gruvin) <gruvin@gmail.com>
* - Cameron Weeks <th9xer@gmail.com>
* - Erez Raviv
* - Jean-Pierre Parisy
* - Karl Szmutny <shadow@privy.de>
* - Michael Blandford
* - Michal Hlavinka
* - Pat Mackenzie
* - Philip Moss
* - Rob Thomson
* - Romolo Manfredini <romolo.manfredini@gmail.com>
* - Thomas Husterer
*
* open9x is based on code named
* gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/,
* er9x by Erez Raviv: http://code.google.com/p/er9x/,
* and the original (and ongoing) project by
* Thomas Husterer, th9x: http://code.google.com/p/th9x/
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include "../open9x.h"
#include <stdarg.h>
#include "fifo.h"
#if !defined(SIMU)
Fifo32 debugFifo;
// Outputs a string to the UART
void debugPuts(const char *format, ...)
{
va_list arglist;
char tmp[256];
va_start(arglist, format);
vsnprintf(tmp, 256, format, arglist);
va_end(arglist);
const char *t = tmp;
while (*t) {
debugPutc(*t++);
}
}
void dump(unsigned char *data, unsigned int size)
{
debugPuts("DUMP %d bytes ...\n\r", size);
unsigned int i = 0, j=0;
while (i*32+j < size) {
debugPuts("%.2X ", data[i*32+j]);
j++;
if (j==32) {
i++; j=0;
debugPuts("\n\r");
}
}
debugPuts("\n\r");
}
void debugTask(void* pdata)
{
uint8_t rxchar ;
for (;;) {
while (!debugFifo.pop(rxchar))
CoTickDelay(5); // 10ms
}
}
#endif

View file

@ -60,9 +60,6 @@ void dump(unsigned char *data, unsigned int size);
#define TRACE_ERROR(...) debugPuts("-E- " __VA_ARGS__) #define TRACE_ERROR(...) debugPuts("-E- " __VA_ARGS__)
#define DUMP(data, size) dump(data, size) #define DUMP(data, size) dump(data, size)
void DEBUG_UART_Configure( uint32_t baudrate, uint32_t masterClock);
void DEBUG_UART_Stop();
void debugTask(void* pdata); void debugTask(void* pdata);
#else #else

View file

@ -37,9 +37,9 @@
#include "inttypes.h" #include "inttypes.h"
#include "string.h" #include "string.h"
volatile uint32_t Spi_complete; // TODO in the driver ? volatile uint32_t Spi_complete; // TODO in the driver ?
uint8_t s_eeDirtyMsk; uint8_t s_eeDirtyMsk;
uint16_t s_eeDirtyTime10ms; tmr10ms_t s_eeDirtyTime10ms;
// Logic for storing to EEPROM/loading from EEPROM // Logic for storing to EEPROM/loading from EEPROM
// If main needs to wait for the eeprom, call mainsequence without actioning menus // If main needs to wait for the eeprom, call mainsequence without actioning menus

View file

@ -20,14 +20,16 @@
#include <inttypes.h> #include <inttypes.h>
#include <stdint.h> #include <stdint.h>
#ifdef REV0 #if defined(SIMU)
#define WRITE_DELAY_10MS 100 #define WRITE_DELAY_10MS 200
#elif defined(PCBSKY9X) && defined(REV0)
#define WRITE_DELAY_10MS 200
#else #else
#define WRITE_DELAY_10MS 500 #define WRITE_DELAY_10MS 500
#endif #endif
extern uint8_t s_eeDirtyMsk; extern uint8_t s_eeDirtyMsk;
extern uint16_t s_eeDirtyTime10ms; extern tmr10ms_t s_eeDirtyTime10ms;
// States in Eeprom32_process_state // States in Eeprom32_process_state
#define E32_IDLE 1 #define E32_IDLE 1

View file

@ -37,9 +37,9 @@
#include "inttypes.h" #include "inttypes.h"
#include "string.h" #include "string.h"
uint8_t s_write_err = 0; // error reasons uint8_t s_write_err = 0; // error reasons
uint8_t s_eeDirtyMsk; uint8_t s_eeDirtyMsk;
uint16_t s_eeDirtyTime10ms; tmr10ms_t s_eeDirtyTime10ms;
RlcFile theFile; //used for any file operation RlcFile theFile; //used for any file operation
EeFs eeFs; EeFs eeFs;

View file

@ -37,14 +37,18 @@
#include <inttypes.h> #include <inttypes.h>
#if defined(PCBGRUVIN9X) && !defined(REV0) #if defined(SIMU)
#define WRITE_DELAY_10MS 200
#elif defined(PCBX9D)
#define WRITE_DELAY_10MS 1000
#elif defined(PCBGRUVIN9X) && !defined(REV0)
#define WRITE_DELAY_10MS 500 #define WRITE_DELAY_10MS 500
#else #else
#define WRITE_DELAY_10MS 200 #define WRITE_DELAY_10MS 200
#endif #endif
extern uint8_t s_eeDirtyMsk; extern uint8_t s_eeDirtyMsk;
extern uint16_t s_eeDirtyTime10ms; extern tmr10ms_t s_eeDirtyTime10ms;
#if defined(CPUARM) #if defined(CPUARM)
#define blkid_t uint16_t #define blkid_t uint16_t

View file

@ -62,10 +62,14 @@ void lcd_img(xcoord_t x, uint8_t y, const pm_uchar * img, uint8_t idx, LcdFlags
ASSERT_IN_DISPLAY(p); ASSERT_IN_DISPLAY(p);
#if defined(PCBX9D) #if defined(PCBX9D)
uint8_t val = inv ? ~b : b; uint8_t val = inv ? ~b : b;
if (!(att & GREY1)) if (!(att & GREY(1)))
*p = val; *p = val;
if (!(att & GREY2)) if (!(att & GREY(2)))
*(p+DISPLAY_PLAN_SIZE) = val; *(p+DISPLAY_PLAN_SIZE) = val;
if (!(att & GREY(4)))
*(p+2*DISPLAY_PLAN_SIZE) = val;
if (!(att & GREY(8)))
*(p+3*DISPLAY_PLAN_SIZE) = val;
p++; p++;
#else #else
*p++ = inv ? ~b : b; *p++ = inv ? ~b : b;
@ -79,10 +83,14 @@ uint8_t lcdLastPos;
#if defined(PCBX9D) #if defined(PCBX9D)
#define LCD_BYTE_FILTER(p, keep, add) \ #define LCD_BYTE_FILTER(p, keep, add) \
do { \ do { \
if (!(flags & GREY1)) \ if (!(flags & GREY(1))) \
*(p) = ((*(p)) & (keep)) | (add); \ *(p) = ((*(p)) & (keep)) | (add); \
if (!(flags & GREY2)) \ if (!(flags & GREY(2))) \
*(p+DISPLAY_PLAN_SIZE) = ((*(p+DISPLAY_PLAN_SIZE)) & (keep)) | (add); \ *(p+DISPLAY_PLAN_SIZE) = ((*(p+DISPLAY_PLAN_SIZE)) & (keep)) | (add); \
if (!(flags & GREY(4))) \
*(p+2*DISPLAY_PLAN_SIZE) = ((*(p+2*DISPLAY_PLAN_SIZE)) & (keep)) | (add); \
if (!(flags & GREY(8))) \
*(p+3*DISPLAY_PLAN_SIZE) = ((*(p+3*DISPLAY_PLAN_SIZE)) & (keep)) | (add); \
} while (0) } while (0)
#else #else
#define LCD_BYTE_FILTER(p, keep, add) *(p) = (*(p) & (keep)) | (add) #define LCD_BYTE_FILTER(p, keep, add) *(p) = (*(p) & (keep)) | (add)
@ -463,7 +471,7 @@ void lcd_mask(uint8_t *p, uint8_t mask, LcdFlags att)
{ {
ASSERT_IN_DISPLAY(p); ASSERT_IN_DISPLAY(p);
if (!(att & GREY1)) { if (!(att & GREY(1))) {
if (att & FORCE) if (att & FORCE)
*p |= mask; *p |= mask;
else if (att & ERASE) else if (att & ERASE)
@ -472,9 +480,28 @@ void lcd_mask(uint8_t *p, uint8_t mask, LcdFlags att)
*p ^= mask; *p ^= mask;
} }
if (!(att & GREY2)) { p += DISPLAY_PLAN_SIZE;
p += DISPLAY_PLAN_SIZE; if (!(att & GREY(2))) {
if (att & FORCE)
*p |= mask;
else if (att & ERASE)
*p &= ~mask;
else
*p ^= mask;
}
p += DISPLAY_PLAN_SIZE;
if (!(att & GREY(4))) {
if (att & FORCE)
*p |= mask;
else if (att & ERASE)
*p &= ~mask;
else
*p ^= mask;
}
p += DISPLAY_PLAN_SIZE;
if (!(att & GREY(8))) {
if (att & FORCE) if (att & FORCE)
*p |= mask; *p |= mask;
else if (att & ERASE) else if (att & ERASE)
@ -625,6 +652,8 @@ void lcd_invert_line(int8_t y)
for (xcoord_t x=0; x<DISPLAY_W; x++) { for (xcoord_t x=0; x<DISPLAY_W; x++) {
ASSERT_IN_DISPLAY(p); ASSERT_IN_DISPLAY(p);
#if defined(PCBX9D) #if defined(PCBX9D)
*(p+3*DISPLAY_PLAN_SIZE) ^= 0xff;
*(p+2*DISPLAY_PLAN_SIZE) ^= 0xff;
*(p+DISPLAY_PLAN_SIZE) ^= 0xff; *(p+DISPLAY_PLAN_SIZE) ^= 0xff;
#endif #endif
*p++ ^= 0xff; *p++ ^= 0xff;

View file

@ -104,8 +104,8 @@
#define MIDSIZE 0x0100 #define MIDSIZE 0x0100
#define SMLSIZE 0x0200 #define SMLSIZE 0x0200
#define TINSIZE 0x0400 #define TINSIZE 0x0400
#define GREY1 0x1000 #define GREY(x) ((x)*0x1000)
#define GREY2 0x2000 #define GREY_MASK(x) ((x) & 0xF000)
#else #else
#define MIDSIZE DBLSIZE #define MIDSIZE DBLSIZE
#define SMLSIZE 0x00 #define SMLSIZE 0x00
@ -121,7 +121,7 @@
#define DISPLAY_PLAN_SIZE (DISPLAY_W*((DISPLAY_H+7)/8)) #define DISPLAY_PLAN_SIZE (DISPLAY_W*((DISPLAY_H+7)/8))
#if defined(PCBX9D) #if defined(PCBX9D)
#define DISPLAY_BUF_SIZE (2*DISPLAY_PLAN_SIZE) #define DISPLAY_BUF_SIZE (4*DISPLAY_PLAN_SIZE)
#else #else
#define DISPLAY_BUF_SIZE DISPLAY_PLAN_SIZE #define DISPLAY_BUF_SIZE DISPLAY_PLAN_SIZE
#endif #endif
@ -216,6 +216,7 @@ inline void lcd_square(xcoord_t x, uint8_t y, xcoord_t w, LcdFlags att=0) { lcd_
lcd_vline(x+5, y+8, 2); lcd_vline(x+5, y+8, 2);
extern void lcd_img(xcoord_t x, uint8_t y, const pm_uchar * img, uint8_t idx, LcdFlags att=0); extern void lcd_img(xcoord_t x, uint8_t y, const pm_uchar * img, uint8_t idx, LcdFlags att=0);
extern void lcd_bmp(xcoord_t x, uint8_t y, const pm_uchar * img);
extern void lcdSetRefVolt(unsigned char val); extern void lcdSetRefVolt(unsigned char val);
extern void lcdInit(); extern void lcdInit();
extern void lcd_clear(); extern void lcd_clear();
@ -224,7 +225,7 @@ extern void lcdSetContrast();
extern void lcdRefresh(); extern void lcdRefresh();
#if defined(PCBX9D) #if defined(PCBX9D)
const pm_char * bmpLoad(uint8_t *dest, const char *filename); const pm_char * bmpLoad(uint8_t *dest, const char *filename, const xcoord_t width, const uint8_t height);
#endif #endif
#define BLINK_ON_PHASE (g_blinkTmr10ms & (1<<6)) #define BLINK_ON_PHASE (g_blinkTmr10ms & (1<<6))

View file

@ -433,8 +433,8 @@ void menuMainView(uint8_t event)
displaySliders(); displaySliders();
#if defined(PCBX9D) #if defined(PCBX9D)
// Model Bitmap // Model bitmap
lcd_img(BITMAP_X, BITMAP_Y, modelBitmap, 0, 0); lcd_bmp(BITMAP_X, BITMAP_Y, modelBitmap);
#endif #endif
// Switches // Switches

View file

@ -223,7 +223,7 @@ void check_rotary_encoder(uint8_t & event)
// TODO remove later... // TODO remove later...
uint8_t key = event & EVT_KEY_MASK; uint8_t key = event & EVT_KEY_MASK;
if (key==KEY_LEFT || key==KEY_RIGHT) if (key==KEY_MOVE_UP || key==KEY_MOVE_DOWN)
event = 0; event = 0;
} }
#elif defined(ROTARY_ENCODERS) #elif defined(ROTARY_ENCODERS)

View file

@ -55,7 +55,7 @@ OS_TID btTaskId;
OS_STK btStack[BT_STACK_SIZE]; OS_STK btStack[BT_STACK_SIZE];
#endif #endif
#if defined(DEBUG) #if defined(PCBSKY9X) && defined(DEBUG)
OS_TID debugTaskId; OS_TID debugTaskId;
OS_STK debugStack[DEBUG_STACK_SIZE]; OS_STK debugStack[DEBUG_STACK_SIZE];
#endif #endif
@ -102,7 +102,7 @@ void loadModelBitmap()
strncpy(lfn+sizeof(BITMAPS_PATH), g_model.bitmap, sizeof(g_model.bitmap)); strncpy(lfn+sizeof(BITMAPS_PATH), g_model.bitmap, sizeof(g_model.bitmap));
lfn[sizeof(BITMAPS_PATH)+sizeof(g_model.bitmap)] = '\0'; lfn[sizeof(BITMAPS_PATH)+sizeof(g_model.bitmap)] = '\0';
strcat(lfn+sizeof(BITMAPS_PATH), BITMAPS_EXT); strcat(lfn+sizeof(BITMAPS_PATH), BITMAPS_EXT);
bmpLoad(modelBitmap, lfn); bmpLoad(modelBitmap, lfn, MODEL_BITMAP_WIDTH, MODEL_BITMAP_HEIGHT);
} }
#endif #endif
@ -2549,11 +2549,7 @@ void perOut(uint8_t mode, uint8_t tick10ms)
mixWarning = lv_mixWarning; mixWarning = lv_mixWarning;
} }
#if defined(SIMU) #define TIME_TO_WRITE() (s_eeDirtyMsk && (tmr10ms_t)(get_tmr10ms() - s_eeDirtyTime10ms) >= (tmr10ms_t)WRITE_DELAY_10MS)
#define TIME_TO_WRITE s_eeDirtyMsk
#else
#define TIME_TO_WRITE (s_eeDirtyMsk && (tmr10ms_t)(get_tmr10ms() - s_eeDirtyTime10ms) >= (tmr10ms_t)WRITE_DELAY_10MS)
#endif
#ifdef BOLD_FONT #ifdef BOLD_FONT
ACTIVE_MIXES_TYPE activeMixes; ACTIVE_MIXES_TYPE activeMixes;
@ -2927,16 +2923,16 @@ void perMain()
#if defined(PCBSKY9X) #if defined(PCBSKY9X)
if (Eeprom32_process_state != E32_IDLE) if (Eeprom32_process_state != E32_IDLE)
ee32_process(); ee32_process();
else if (TIME_TO_WRITE) else if (TIME_TO_WRITE())
eeCheck(); eeCheck();
#elif defined(CPUARM) #elif defined(CPUARM)
if (TIME_TO_WRITE) if (TIME_TO_WRITE())
eeCheck(); eeCheck();
#else #else
if (!eeprom_buffer_size) { if (!eeprom_buffer_size) {
if (theFile.isWriting()) if (theFile.isWriting())
theFile.nextWriteStep(); theFile.nextWriteStep();
else if (TIME_TO_WRITE) else if (TIME_TO_WRITE())
eeCheck(); eeCheck();
} }
#endif #endif
@ -3665,7 +3661,7 @@ int main(void)
CoInitOS(); CoInitOS();
#if defined(DEBUG) #if defined(PCBSKY9X) && defined(DEBUG)
debugTaskId = CoCreateTaskEx(debugTask, NULL, 10, &debugStack[DEBUG_STACK_SIZE-1], DEBUG_STACK_SIZE, 1, false); debugTaskId = CoCreateTaskEx(debugTask, NULL, 10, &debugStack[DEBUG_STACK_SIZE-1], DEBUG_STACK_SIZE, 1, false);
#endif #endif

View file

@ -172,6 +172,10 @@
#include "stock/board_stock.h" #include "stock/board_stock.h"
#endif #endif
#if defined(CPUARM) && defined(DEBUG)
#include "debug.h"
#endif
#if defined(SIMU) #if defined(SIMU)
#include "simpgmspace.h" #include "simpgmspace.h"
#elif defined(CPUARM) #elif defined(CPUARM)
@ -222,6 +226,24 @@ extern void boardInit();
extern char modelNames[MAX_MODELS][sizeof(g_model.name)]; extern char modelNames[MAX_MODELS][sizeof(g_model.name)];
#endif #endif
#if defined(CPUARM)
// This doesn't need protection on this processor
#define tmr10ms_t uint32_t
extern volatile tmr10ms_t g_tmr10ms;
#define get_tmr10ms() g_tmr10ms
#else
#define tmr10ms_t uint16_t
extern volatile tmr10ms_t g_tmr10ms;
extern inline uint16_t get_tmr10ms()
{
uint16_t time ;
cli();
time = g_tmr10ms ;
sei();
return time ;
}
#endif
// TODO try to merge the 2 include files // TODO try to merge the 2 include files
#if defined(PCBSKY9X) #if defined(PCBSKY9X)
#include "eeprom_arm.h" #include "eeprom_arm.h"
@ -238,7 +260,7 @@ extern char modelNames[MAX_MODELS][sizeof(g_model.name)];
#if defined(PCBX9D) #if defined(PCBX9D)
#define MODEL_BITMAP_WIDTH 64 #define MODEL_BITMAP_WIDTH 64
#define MODEL_BITMAP_HEIGHT 32 #define MODEL_BITMAP_HEIGHT 32
#define MODEL_BITMAP_SIZE (2+MODEL_BITMAP_WIDTH*MODEL_BITMAP_HEIGHT/8) #define MODEL_BITMAP_SIZE (2+4*(MODEL_BITMAP_WIDTH*MODEL_BITMAP_HEIGHT/8))
extern uint8_t modelBitmap[MODEL_BITMAP_SIZE]; extern uint8_t modelBitmap[MODEL_BITMAP_SIZE];
void loadModelBitmap(); void loadModelBitmap();
#define LOAD_MODEL_BITMAP() loadModelBitmap() #define LOAD_MODEL_BITMAP() loadModelBitmap()
@ -1075,24 +1097,6 @@ extern int16_t calc1000toRESX(int16_t x);
extern int16_t calcRESXto1000(int16_t x); extern int16_t calcRESXto1000(int16_t x);
#endif #endif
#if defined(CPUARM)
// This doesn't need protection on this processor
#define tmr10ms_t uint32_t
extern volatile tmr10ms_t g_tmr10ms;
#define get_tmr10ms() g_tmr10ms
#else
#define tmr10ms_t uint16_t
extern volatile tmr10ms_t g_tmr10ms;
extern inline uint16_t get_tmr10ms()
{
uint16_t time ;
cli();
time = g_tmr10ms ;
sei();
return time ;
}
#endif
#define TMR_VAROFS 5 #define TMR_VAROFS 5
extern const char stamp1[]; extern const char stamp1[];

View file

@ -381,7 +381,13 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*)
#else #else
static FXuint keys2[]={KEY_F8, KEY_F7, KEY_F4, KEY_F3, KEY_F6, KEY_F5, KEY_F1, KEY_F2 }; static FXuint keys2[]={KEY_F8, KEY_F7, KEY_F4, KEY_F3, KEY_F6, KEY_F5, KEY_F1, KEY_F2 };
#endif #endif
#if defined(PCBSKY9X) #if defined(PCBX9D)
GPIOE->IDR |= PIN_TRIM_LH_L | PIN_TRIM_LH_R | PIN_TRIM_LV_DN | PIN_TRIM_LV_UP;
GPIOC->IDR |= PIN_TRIM_RV_DN | PIN_TRIM_RV_UP | PIN_TRIM_RH_L | PIN_TRIM_RH_R;
GPIOE->IDR |= 0xFFFFFFFF;
GPIOB->IDR |= 0xFFFFFFFF;
GPIOC->IDR |= 0xFFFFFFFF;
#elif defined(PCBSKY9X)
PIOA->PIO_PDSR |= (0x00800000 | 0x01000000 | 0x00000002 | 0x00000001); PIOA->PIO_PDSR |= (0x00800000 | 0x01000000 | 0x00000002 | 0x00000001);
PIOB->PIO_PDSR |= (0x00000050); PIOB->PIO_PDSR |= (0x00000050);
PIOC->PIO_PDSR |= (0x10000000 | 0x00000400 | 0x00000200); PIOC->PIO_PDSR |= (0x10000000 | 0x00000400 | 0x00000200);
@ -393,7 +399,8 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*)
for(unsigned i=0; i<DIM(keys2);i++){ for(unsigned i=0; i<DIM(keys2);i++){
if(getApp()->getKeyState(keys2[i])) { if(getApp()->getKeyState(keys2[i])) {
#if defined(PCBSKY9X) #if defined(PCBX9D)
#elif defined(PCBSKY9X)
switch(i) { switch(i) {
case 6: case 6:
PIOA->PIO_PDSR &= ~0x00800000; PIOA->PIO_PDSR &= ~0x00800000;
@ -498,32 +505,25 @@ void Open9xSim::refreshDiplay()
if (lcd_refresh) { if (lcd_refresh) {
lcd_refresh = false; lcd_refresh = false;
FXColor offColor = IS_BACKLIGHT_ON() ? BL_COLOR : FXRGB(200,200,200); FXColor offColor = IS_BACKLIGHT_ON() ? BL_COLOR : FXRGB(200,200,200);
#if !defined(PCBX9D)
FXColor onColor = FXRGB(0,0,0); FXColor onColor = FXRGB(0,0,0);
#if defined(PCBX9D)
FXColor grey1Color = FXRGB(0xC0,0xC0,0xC0);
FXColor grey2Color = FXRGB(0xA0,0xA0,0xA0);
#endif #endif
for (int x=0;x<W;x++) { for (int x=0;x<W;x++) {
for (int y=0; y<H; y++) { for (int y=0; y<H; y++) {
#if defined(PCBX9D) #if defined(PCBX9D)
if ((lcd_buf[x+(y/8)*W] & (1<<(y%8))) && (lcd_buf[DISPLAY_PLAN_SIZE+x+(y/8)*W] & (1<<(y%8)))) { #define PALETTE_IDX(p, x, mask) ((((p)[(x)] & (mask)) ? 0x1 : 0) + (((p)[DISPLAY_PLAN_SIZE+(x)] & (mask)) ? 0x2 : 0) + (((p)[2*DISPLAY_PLAN_SIZE+(x)] & (mask)) ? 0x4 : 0) + (((p)[3*DISPLAY_PLAN_SIZE+(x)] & (mask)) ? 0x8 : 0))
bmp->setPixel(2*x, 2*y, onColor); uint8_t mask = (1 << (y%8));
bmp->setPixel(2*x+1, 2*y, onColor); uint32_t z = PALETTE_IDX(lcd_buf, (y/8)*W+x, mask);
bmp->setPixel(2*x, 2*y+1, onColor); if (z) {
bmp->setPixel(2*x+1, 2*y+1, onColor); FXColor color;
} if (IS_BACKLIGHT_ON())
else if (lcd_buf[DISPLAY_PLAN_SIZE+x+(y/8)*W] & (1<<(y%8))) { color = FXRGB(47-(z*47)/15, 123-(z*123)/15, 227-(z*227)/15);
bmp->setPixel(2*x, 2*y, grey1Color); else
bmp->setPixel(2*x+1, 2*y, grey1Color); color = FXRGB(200-(z*200)/15, 200-(z*200)/15, 200-(z*200)/15);
bmp->setPixel(2*x, 2*y+1, grey1Color); bmp->setPixel(2*x, 2*y, color);
bmp->setPixel(2*x+1, 2*y+1, grey1Color); bmp->setPixel(2*x+1, 2*y, color);
} bmp->setPixel(2*x, 2*y+1, color);
else if (lcd_buf[x+(y/8)*W] & (1<<(y%8))) { bmp->setPixel(2*x+1, 2*y+1, color);
bmp->setPixel(2*x, 2*y, grey2Color);
bmp->setPixel(2*x+1, 2*y, grey2Color);
bmp->setPixel(2*x, 2*y+1, grey2Color);
bmp->setPixel(2*x+1, 2*y+1, grey2Color);
} }
#else #else
if (lcd_buf[x+(y/8)*W] & (1<<(y%8))) { if (lcd_buf[x+(y/8)*W] & (1<<(y%8))) {

View file

@ -144,7 +144,7 @@ bool isAudioFileAvailable(uint32_t i, char * filename)
{ {
uint8_t category = (i >> 24); uint8_t category = (i >> 24);
#if defined(SIMU) #if 0
printf("isAudioFileAvailable(%08x)\n", i); fflush(stdout); printf("isAudioFileAvailable(%08x)\n", i); fflush(stdout);
#endif #endif

View file

@ -33,7 +33,7 @@
*/ */
#include "../open9x.h" #include "../open9x.h"
#include "fifo.h" #include "../fifo.h"
void btSetBaudrate(uint32_t index) void btSetBaudrate(uint32_t index)
{ {

View file

@ -36,6 +36,8 @@
void pwrInit(); void pwrInit();
void eepromInit(); void eepromInit();
void DEBUG_UART_Configure( uint32_t baudrate, uint32_t masterClock);
void DEBUG_UART_Stop();
uint32_t Master_frequency ; uint32_t Master_frequency ;
volatile uint32_t Tenms ; volatile uint32_t Tenms ;

View file

@ -39,7 +39,6 @@
#include "board.h" #include "board.h"
#include "audio_driver.h" #include "audio_driver.h"
#include "haptic_driver.h" #include "haptic_driver.h"
#include "debug.h"
#if defined(BLUETOOTH) #if defined(BLUETOOTH)
#include "bluetooth.h" #include "bluetooth.h"

View file

@ -37,6 +37,8 @@
#if !defined(SIMU) #if !defined(SIMU)
extern Fifo32 debugFifo;
/* /*
* Outputs a character on the UART line. * Outputs a character on the UART line.
* *
@ -54,37 +56,6 @@ void debugPutc(const char c)
pUart->UART_THR = c; pUart->UART_THR = c;
} }
// Outputs a string to the UART
void debugPuts(const char *format, ...)
{
va_list arglist;
char tmp[256];
va_start(arglist, format);
vsnprintf(tmp, 256, format, arglist);
va_end(arglist);
const char *t = tmp;
while (*t) {
debugPutc(*t++);
}
}
void dump(unsigned char *data, unsigned int size)
{
debugPuts("DUMP %d bytes ...\n\r", size);
unsigned int i = 0, j=0;
while (i*32+j < size) {
debugPuts("%.2X ", data[i*32+j]);
j++;
if (j==32) {
i++; j=0;
debugPuts("\n\r");
}
}
debugPuts("\n\r");
}
/** /**
* Configures a UART peripheral with the specified parameters. * Configures a UART peripheral with the specified parameters.
* *
@ -128,22 +99,9 @@ void DEBUG_UART_Stop()
NVIC_DisableIRQ(UART0_IRQn) ; NVIC_DisableIRQ(UART0_IRQn) ;
} }
Fifo32 debugFifo;
extern "C" void UART0_IRQHandler() extern "C" void UART0_IRQHandler()
{ {
debugFifo.push(CONSOLE_USART->UART_RHR); debugFifo.push(CONSOLE_USART->UART_RHR);
} }
void debugTask(void* pdata)
{
uint8_t rxchar ;
for (;;) {
while (!debugFifo.pop(rxchar))
CoTickDelay(5); // 10ms
}
}
#endif #endif

View file

@ -39,7 +39,7 @@
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#include "board.h" // #include "board.h"
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>

View file

@ -172,6 +172,9 @@ void boardInit()
adcInit(); adcInit();
delaysInit(); delaysInit();
audioInit(); audioInit();
#if defined(DEBUG)
debugInit();
#endif
// TODO init_ppm() ; // TODO init_ppm() ;
@ -184,7 +187,6 @@ void boardInit()
__enable_irq() ; __enable_irq() ;
eepromInit(); eepromInit();
uartInit();
} }
#endif #endif

View file

@ -124,6 +124,7 @@ void eepromInit(); // TODO check it's not in another include
void delaysInit(); void delaysInit();
void adcInit(); void adcInit();
void audioInit(); void audioInit();
void debugInit();
void adcRead(); void adcRead();
void init_trainer_ppm(); void init_trainer_ppm();

View file

@ -34,16 +34,7 @@
#include "../open9x.h" #include "../open9x.h"
void uartSendChar(uint8_t c) void debugInit(void)
{
USART_SendData(UART_DEBUG, c);
/* Wait for end of previous transfer */
while (USART_GetFlagStatus(UART_DEBUG, USART_FLAG_TC) == RESET);
}
void uartInit(void)
{ {
USART_InitTypeDef USART_InitStructure; USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
@ -72,3 +63,10 @@ void uartInit(void)
USART_Cmd(UART_DEBUG, ENABLE); USART_Cmd(UART_DEBUG, ENABLE);
} }
void debugPutc(const char c)
{
USART_SendData(UART_DEBUG, c);
/* Wait for end of previous transfer */
while (USART_GetFlagStatus(UART_DEBUG, USART_FLAG_TC) == RESET);
}

View file

@ -26,7 +26,7 @@
#define PIN_TRIM_LV_UP GPIO_Pin_5 //PE.05 #define PIN_TRIM_LV_UP GPIO_Pin_5 //PE.05
// Switchs // Switchs
#define PIN_SW_F GPIO_Pin_14 //PE.14 #define PIN_SW_F GPIO_Pin_14 //PE.14
#define PIN_SW_E_L GPIO_Pin_3 //PB.03 #define PIN_SW_E_L GPIO_Pin_3 //PB.03
#define PIN_SW_E_H GPIO_Pin_4 //PB.04 #define PIN_SW_E_H GPIO_Pin_4 //PB.04
#define PIN_SW_B_H GPIO_Pin_5 //PB.05 #define PIN_SW_B_H GPIO_Pin_5 //PB.05

View file

@ -85,6 +85,8 @@ uint32_t readTrims()
if (~c & PIN_TRIM_RH_R) if (~c & PIN_TRIM_RH_R)
result |= 0x80; // RH_R result |= 0x80; // RH_R
// printf("readTrims(): %x %x => %x\n", c, e, result); fflush(stdout);
return result; return result;
} }
@ -105,14 +107,12 @@ void readKeysAndTrims()
++enuk; ++enuk;
} }
#if !defined(SIMU)
in = readTrims(); in = readTrims();
for (i = 1; i < 256; i <<= 1) { for (i = 1; i < 256; i <<= 1) {
keys[enuk].input(in & i, (EnumKeys)enuk); keys[enuk].input(in & i, (EnumKeys)enuk);
++enuk; ++enuk;
} }
#endif
} }
uint32_t keyState(EnumKeys enuk) uint32_t keyState(EnumKeys enuk)

View file

@ -23,6 +23,9 @@ void Set_Address(u8 x, u8 y)
WriteCommand(((y>>4)&0x0F)|0x70); //Set Row Address MSB RA [7:4] WriteCommand(((y>>4)&0x0F)|0x70); //Set Row Address MSB RA [7:4]
} }
#define PALETTE_IDX(p, x, mask) (((p[x] & mask) ? 0x1 : 0) + ((p[DISPLAY_PLAN_SIZE+x] & mask) ? 0x2 : 0) + ((p[2*DISPLAY_PLAN_SIZE+x] & mask) ? 0x4 : 0) + ((p[3*DISPLAY_PLAN_SIZE+x] & mask) ? 0x8 : 0))
const uint8_t lcdPalette[4] = { 0, 0x03, 0x06, 0x0F };
void lcdRefresh() void lcdRefresh()
{ {
for (uint8_t y=0; y<DISPLAY_H; y++) { for (uint8_t y=0; y<DISPLAY_H; y++) {
@ -31,8 +34,11 @@ void lcdRefresh()
Set_Address(0, y); Set_Address(0, y);
AspiCmd(0xAF); AspiCmd(0xAF);
for (uint8_t x=0; x<DISPLAY_W; x+=2) { for (uint8_t x=0; x<DISPLAY_W; x+=2) {
#if 1 #if 0
uint8_t data = (p[x] & mask ? 0x80 : 0) + (p[x+1] & mask ? 0x08 : 0) + (p[DISPLAY_PLAN_SIZE+x] & mask ? 0x40 : 0) + (p[DISPLAY_PLAN_SIZE+x+1] & mask ? 0x04 : 0); uint8_t data = (p[x] & mask ? 0x80 : 0) + (p[x+1] & mask ? 0x08 : 0) + (p[DISPLAY_PLAN_SIZE+x] & mask ? 0x40 : 0) + (p[DISPLAY_PLAN_SIZE+x+1] & mask ? 0x04 : 0);
#elif 1
uint8_t data = (PALETTE_IDX(p, x, mask) << 4) + (PALETTE_IDX(p, x+1, mask));
//uint8_t data = (lcdPalette(PALETTE_IDX(p, x, mask)) << 4) + lcdPalette(PALETTE_IDX(p, x+1, mask));
#else #else
// this code shows the 16 grey tones... // this code shows the 16 grey tones...
uint8_t data = (x * 16) / 212; uint8_t data = (x * 16) / 212;