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:
parent
2e747a1663
commit
e41aa9fbd6
28 changed files with 325 additions and 182 deletions
11
src/Makefile
11
src/Makefile
|
@ -496,7 +496,7 @@ ifeq ($(PCB), X9D)
|
|||
EEPROMSRC = eeprom_avr.cpp # TODO later eeprom_conversions.cpp
|
||||
PULSESSRC = pulses_arm.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
|
||||
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
|
||||
|
@ -517,6 +517,12 @@ ifeq ($(PCB), X9D)
|
|||
CPPDEFS += -DRTCLOCK
|
||||
CPPSRC += rtc.cpp x9d/rtc_driver.cpp
|
||||
endif
|
||||
|
||||
ifeq ($(DEBUG), YES)
|
||||
CPPSRC += debug.cpp
|
||||
CPPSRC += x9d/debug_driver.cpp
|
||||
SRC += sky9x/syscalls.c
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(PCB), SKY9X)
|
||||
|
@ -554,7 +560,8 @@ ifeq ($(PCB), SKY9X)
|
|||
endif
|
||||
|
||||
ifeq ($(DEBUG), YES)
|
||||
CPPSRC += sky9x/debug.cpp
|
||||
CPPSRC += debug.cpp
|
||||
CPPSRC += sky9x/debug_driver.cpp
|
||||
SRC += sky9x/syscalls.c
|
||||
endif
|
||||
endif
|
||||
|
|
114
src/bmp.cpp
114
src/bmp.cpp
|
@ -34,13 +34,16 @@
|
|||
|
||||
#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;
|
||||
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];
|
||||
|
||||
assert(width <= 64);
|
||||
|
||||
FRESULT result = f_open(&bmpFile, filename, FA_OPEN_EXISTING | FA_READ);
|
||||
if (result != FR_OK) {
|
||||
return SDCARD_ERROR(result);
|
||||
|
@ -90,7 +93,7 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename)
|
|||
return STR_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
uint32_t width, height;
|
||||
uint32_t w, h;
|
||||
|
||||
switch (ihsize){
|
||||
case 40: // windib
|
||||
|
@ -98,13 +101,13 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename)
|
|||
case 64: // OS/2 v2
|
||||
case 108: // windib v4
|
||||
case 124: // windib v5
|
||||
width = *((uint32_t *)&buf[4]);
|
||||
height = *((uint32_t *)&buf[8]);
|
||||
w = *((uint32_t *)&buf[4]);
|
||||
h = *((uint32_t *)&buf[8]);
|
||||
buf += 12;
|
||||
break;
|
||||
case 12: // OS/2 v1
|
||||
width = *((uint16_t *)&buf[4]);
|
||||
height = *((uint16_t *)&buf[6]);
|
||||
w = *((uint16_t *)&buf[4]);
|
||||
h = *((uint16_t *)&buf[6]);
|
||||
buf += 8;
|
||||
break;
|
||||
default:
|
||||
|
@ -117,59 +120,86 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename)
|
|||
return STR_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
if (width > MODEL_BITMAP_WIDTH || height > MODEL_BITMAP_HEIGHT) {
|
||||
if (w > width || h > height) {
|
||||
f_close(&bmpFile);
|
||||
return STR_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
uint16_t depth = *((uint16_t *)&buf[2]);
|
||||
|
||||
buf = &bmpBuf[0];
|
||||
|
||||
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++ = height;
|
||||
*dest++ = w;
|
||||
*dest++ = h;
|
||||
|
||||
memset(dest, 0, w*(h/8)*4);
|
||||
|
||||
uint32_t n;
|
||||
buf = &bmpBuf[0];
|
||||
|
||||
switch (depth) {
|
||||
case 1:
|
||||
n = width/8;
|
||||
for (uint32_t i=0; i<height; i+=8) {
|
||||
n = w/8;
|
||||
for (uint32_t i=0; i<h; i+=8) {
|
||||
result = f_read(&bmpFile, buf, n*8, &read);
|
||||
if (result != FR_OK || read != n*8) {
|
||||
f_close(&bmpFile);
|
||||
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++) {
|
||||
*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));
|
||||
*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));
|
||||
*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));
|
||||
*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));
|
||||
*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));
|
||||
*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));
|
||||
*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));
|
||||
*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));
|
||||
#define PUSH_4BYTES(x) *dst = *(dst+1) = *(dst+2) = *(dst+3) = (x); dst += 4
|
||||
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)));
|
||||
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)));
|
||||
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)));
|
||||
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)));
|
||||
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)));
|
||||
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)));
|
||||
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;
|
||||
|
||||
/* case 4:
|
||||
for (uint32_t i=0; i<height; i++) {
|
||||
int j;
|
||||
for (j = 0; j < n; j++){
|
||||
ptr[j*2+0] = (buf[j] >> 4) & 0xF;
|
||||
ptr[j*2+1] = buf[j] & 0xF;
|
||||
case 4:
|
||||
n = w/8;
|
||||
for (int32_t i=h-1; i>=0; i--) {
|
||||
result = f_read(&bmpFile, buf, w/2, &read);
|
||||
if (result != FR_OK || read != w/2) {
|
||||
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;
|
||||
*/
|
||||
|
||||
default:
|
||||
f_close(&bmpFile);
|
||||
|
@ -179,3 +209,25 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename)
|
|||
f_close(&bmpFile);
|
||||
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
85
src/debug.cpp
Normal 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
|
|
@ -60,9 +60,6 @@ void dump(unsigned char *data, unsigned int size);
|
|||
#define TRACE_ERROR(...) debugPuts("-E- " __VA_ARGS__)
|
||||
#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);
|
||||
|
||||
#else
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
volatile uint32_t Spi_complete; // TODO in the driver ?
|
||||
uint8_t s_eeDirtyMsk;
|
||||
uint16_t s_eeDirtyTime10ms;
|
||||
tmr10ms_t s_eeDirtyTime10ms;
|
||||
|
||||
// Logic for storing to EEPROM/loading from EEPROM
|
||||
// If main needs to wait for the eeprom, call mainsequence without actioning menus
|
||||
|
|
|
@ -20,14 +20,16 @@
|
|||
#include <inttypes.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef REV0
|
||||
#define WRITE_DELAY_10MS 100
|
||||
#if defined(SIMU)
|
||||
#define WRITE_DELAY_10MS 200
|
||||
#elif defined(PCBSKY9X) && defined(REV0)
|
||||
#define WRITE_DELAY_10MS 200
|
||||
#else
|
||||
#define WRITE_DELAY_10MS 500
|
||||
#endif
|
||||
|
||||
extern uint8_t s_eeDirtyMsk;
|
||||
extern uint16_t s_eeDirtyTime10ms;
|
||||
extern tmr10ms_t s_eeDirtyTime10ms;
|
||||
|
||||
// States in Eeprom32_process_state
|
||||
#define E32_IDLE 1
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
uint8_t s_write_err = 0; // error reasons
|
||||
uint8_t s_eeDirtyMsk;
|
||||
uint16_t s_eeDirtyTime10ms;
|
||||
tmr10ms_t s_eeDirtyTime10ms;
|
||||
|
||||
RlcFile theFile; //used for any file operation
|
||||
EeFs eeFs;
|
||||
|
|
|
@ -37,14 +37,18 @@
|
|||
|
||||
#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
|
||||
#else
|
||||
#define WRITE_DELAY_10MS 200
|
||||
#endif
|
||||
|
||||
extern uint8_t s_eeDirtyMsk;
|
||||
extern uint16_t s_eeDirtyTime10ms;
|
||||
extern tmr10ms_t s_eeDirtyTime10ms;
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define blkid_t uint16_t
|
||||
|
|
41
src/lcd.cpp
41
src/lcd.cpp
|
@ -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);
|
||||
#if defined(PCBX9D)
|
||||
uint8_t val = inv ? ~b : b;
|
||||
if (!(att & GREY1))
|
||||
if (!(att & GREY(1)))
|
||||
*p = val;
|
||||
if (!(att & GREY2))
|
||||
if (!(att & GREY(2)))
|
||||
*(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++;
|
||||
#else
|
||||
*p++ = inv ? ~b : b;
|
||||
|
@ -79,10 +83,14 @@ uint8_t lcdLastPos;
|
|||
#if defined(PCBX9D)
|
||||
#define LCD_BYTE_FILTER(p, keep, add) \
|
||||
do { \
|
||||
if (!(flags & GREY1)) \
|
||||
if (!(flags & GREY(1))) \
|
||||
*(p) = ((*(p)) & (keep)) | (add); \
|
||||
if (!(flags & GREY2)) \
|
||||
if (!(flags & GREY(2))) \
|
||||
*(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)
|
||||
#else
|
||||
#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);
|
||||
|
||||
if (!(att & GREY1)) {
|
||||
if (!(att & GREY(1))) {
|
||||
if (att & FORCE)
|
||||
*p |= mask;
|
||||
else if (att & ERASE)
|
||||
|
@ -472,9 +480,28 @@ void lcd_mask(uint8_t *p, uint8_t mask, LcdFlags att)
|
|||
*p ^= mask;
|
||||
}
|
||||
|
||||
if (!(att & GREY2)) {
|
||||
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)
|
||||
*p |= mask;
|
||||
else if (att & ERASE)
|
||||
|
@ -625,6 +652,8 @@ void lcd_invert_line(int8_t y)
|
|||
for (xcoord_t x=0; x<DISPLAY_W; x++) {
|
||||
ASSERT_IN_DISPLAY(p);
|
||||
#if defined(PCBX9D)
|
||||
*(p+3*DISPLAY_PLAN_SIZE) ^= 0xff;
|
||||
*(p+2*DISPLAY_PLAN_SIZE) ^= 0xff;
|
||||
*(p+DISPLAY_PLAN_SIZE) ^= 0xff;
|
||||
#endif
|
||||
*p++ ^= 0xff;
|
||||
|
|
|
@ -104,8 +104,8 @@
|
|||
#define MIDSIZE 0x0100
|
||||
#define SMLSIZE 0x0200
|
||||
#define TINSIZE 0x0400
|
||||
#define GREY1 0x1000
|
||||
#define GREY2 0x2000
|
||||
#define GREY(x) ((x)*0x1000)
|
||||
#define GREY_MASK(x) ((x) & 0xF000)
|
||||
#else
|
||||
#define MIDSIZE DBLSIZE
|
||||
#define SMLSIZE 0x00
|
||||
|
@ -121,7 +121,7 @@
|
|||
#define DISPLAY_PLAN_SIZE (DISPLAY_W*((DISPLAY_H+7)/8))
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define DISPLAY_BUF_SIZE (2*DISPLAY_PLAN_SIZE)
|
||||
#define DISPLAY_BUF_SIZE (4*DISPLAY_PLAN_SIZE)
|
||||
#else
|
||||
#define DISPLAY_BUF_SIZE DISPLAY_PLAN_SIZE
|
||||
#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);
|
||||
|
||||
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 lcdInit();
|
||||
extern void lcd_clear();
|
||||
|
@ -224,7 +225,7 @@ extern void lcdSetContrast();
|
|||
extern void lcdRefresh();
|
||||
|
||||
#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
|
||||
|
||||
#define BLINK_ON_PHASE (g_blinkTmr10ms & (1<<6))
|
||||
|
|
|
@ -433,8 +433,8 @@ void menuMainView(uint8_t event)
|
|||
displaySliders();
|
||||
|
||||
#if defined(PCBX9D)
|
||||
// Model Bitmap
|
||||
lcd_img(BITMAP_X, BITMAP_Y, modelBitmap, 0, 0);
|
||||
// Model bitmap
|
||||
lcd_bmp(BITMAP_X, BITMAP_Y, modelBitmap);
|
||||
#endif
|
||||
|
||||
// Switches
|
||||
|
|
|
@ -223,7 +223,7 @@ void check_rotary_encoder(uint8_t & event)
|
|||
|
||||
// TODO remove later...
|
||||
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;
|
||||
}
|
||||
#elif defined(ROTARY_ENCODERS)
|
||||
|
|
|
@ -55,7 +55,7 @@ OS_TID btTaskId;
|
|||
OS_STK btStack[BT_STACK_SIZE];
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG)
|
||||
#if defined(PCBSKY9X) && defined(DEBUG)
|
||||
OS_TID debugTaskId;
|
||||
OS_STK debugStack[DEBUG_STACK_SIZE];
|
||||
#endif
|
||||
|
@ -102,7 +102,7 @@ void loadModelBitmap()
|
|||
strncpy(lfn+sizeof(BITMAPS_PATH), g_model.bitmap, sizeof(g_model.bitmap));
|
||||
lfn[sizeof(BITMAPS_PATH)+sizeof(g_model.bitmap)] = '\0';
|
||||
strcat(lfn+sizeof(BITMAPS_PATH), BITMAPS_EXT);
|
||||
bmpLoad(modelBitmap, lfn);
|
||||
bmpLoad(modelBitmap, lfn, MODEL_BITMAP_WIDTH, MODEL_BITMAP_HEIGHT);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -2549,11 +2549,7 @@ void perOut(uint8_t mode, uint8_t tick10ms)
|
|||
mixWarning = lv_mixWarning;
|
||||
}
|
||||
|
||||
#if defined(SIMU)
|
||||
#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
|
||||
#define TIME_TO_WRITE() (s_eeDirtyMsk && (tmr10ms_t)(get_tmr10ms() - s_eeDirtyTime10ms) >= (tmr10ms_t)WRITE_DELAY_10MS)
|
||||
|
||||
#ifdef BOLD_FONT
|
||||
ACTIVE_MIXES_TYPE activeMixes;
|
||||
|
@ -2927,16 +2923,16 @@ void perMain()
|
|||
#if defined(PCBSKY9X)
|
||||
if (Eeprom32_process_state != E32_IDLE)
|
||||
ee32_process();
|
||||
else if (TIME_TO_WRITE)
|
||||
else if (TIME_TO_WRITE())
|
||||
eeCheck();
|
||||
#elif defined(CPUARM)
|
||||
if (TIME_TO_WRITE)
|
||||
if (TIME_TO_WRITE())
|
||||
eeCheck();
|
||||
#else
|
||||
if (!eeprom_buffer_size) {
|
||||
if (theFile.isWriting())
|
||||
theFile.nextWriteStep();
|
||||
else if (TIME_TO_WRITE)
|
||||
else if (TIME_TO_WRITE())
|
||||
eeCheck();
|
||||
}
|
||||
#endif
|
||||
|
@ -3665,7 +3661,7 @@ int main(void)
|
|||
|
||||
CoInitOS();
|
||||
|
||||
#if defined(DEBUG)
|
||||
#if defined(PCBSKY9X) && defined(DEBUG)
|
||||
debugTaskId = CoCreateTaskEx(debugTask, NULL, 10, &debugStack[DEBUG_STACK_SIZE-1], DEBUG_STACK_SIZE, 1, false);
|
||||
#endif
|
||||
|
||||
|
|
42
src/open9x.h
42
src/open9x.h
|
@ -172,6 +172,10 @@
|
|||
#include "stock/board_stock.h"
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM) && defined(DEBUG)
|
||||
#include "debug.h"
|
||||
#endif
|
||||
|
||||
#if defined(SIMU)
|
||||
#include "simpgmspace.h"
|
||||
#elif defined(CPUARM)
|
||||
|
@ -222,6 +226,24 @@ extern void boardInit();
|
|||
extern char modelNames[MAX_MODELS][sizeof(g_model.name)];
|
||||
#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
|
||||
#if defined(PCBSKY9X)
|
||||
#include "eeprom_arm.h"
|
||||
|
@ -238,7 +260,7 @@ extern char modelNames[MAX_MODELS][sizeof(g_model.name)];
|
|||
#if defined(PCBX9D)
|
||||
#define MODEL_BITMAP_WIDTH 64
|
||||
#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];
|
||||
void loadModelBitmap();
|
||||
#define LOAD_MODEL_BITMAP() loadModelBitmap()
|
||||
|
@ -1075,24 +1097,6 @@ extern int16_t calc1000toRESX(int16_t x);
|
|||
extern int16_t calcRESXto1000(int16_t x);
|
||||
#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
|
||||
|
||||
extern const char stamp1[];
|
||||
|
|
46
src/simu.cpp
46
src/simu.cpp
|
@ -381,7 +381,13 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*)
|
|||
#else
|
||||
static FXuint keys2[]={KEY_F8, KEY_F7, KEY_F4, KEY_F3, KEY_F6, KEY_F5, KEY_F1, KEY_F2 };
|
||||
#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);
|
||||
PIOB->PIO_PDSR |= (0x00000050);
|
||||
PIOC->PIO_PDSR |= (0x10000000 | 0x00000400 | 0x00000200);
|
||||
|
@ -393,7 +399,8 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*)
|
|||
|
||||
for(unsigned i=0; i<DIM(keys2);i++){
|
||||
if(getApp()->getKeyState(keys2[i])) {
|
||||
#if defined(PCBSKY9X)
|
||||
#if defined(PCBX9D)
|
||||
#elif defined(PCBSKY9X)
|
||||
switch(i) {
|
||||
case 6:
|
||||
PIOA->PIO_PDSR &= ~0x00800000;
|
||||
|
@ -498,32 +505,25 @@ void Open9xSim::refreshDiplay()
|
|||
if (lcd_refresh) {
|
||||
lcd_refresh = false;
|
||||
FXColor offColor = IS_BACKLIGHT_ON() ? BL_COLOR : FXRGB(200,200,200);
|
||||
#if !defined(PCBX9D)
|
||||
FXColor onColor = FXRGB(0,0,0);
|
||||
#if defined(PCBX9D)
|
||||
FXColor grey1Color = FXRGB(0xC0,0xC0,0xC0);
|
||||
FXColor grey2Color = FXRGB(0xA0,0xA0,0xA0);
|
||||
#endif
|
||||
|
||||
for (int x=0;x<W;x++) {
|
||||
for (int y=0; y<H; y++) {
|
||||
#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)))) {
|
||||
bmp->setPixel(2*x, 2*y, onColor);
|
||||
bmp->setPixel(2*x+1, 2*y, onColor);
|
||||
bmp->setPixel(2*x, 2*y+1, onColor);
|
||||
bmp->setPixel(2*x+1, 2*y+1, onColor);
|
||||
}
|
||||
else if (lcd_buf[DISPLAY_PLAN_SIZE+x+(y/8)*W] & (1<<(y%8))) {
|
||||
bmp->setPixel(2*x, 2*y, grey1Color);
|
||||
bmp->setPixel(2*x+1, 2*y, grey1Color);
|
||||
bmp->setPixel(2*x, 2*y+1, grey1Color);
|
||||
bmp->setPixel(2*x+1, 2*y+1, grey1Color);
|
||||
}
|
||||
else if (lcd_buf[x+(y/8)*W] & (1<<(y%8))) {
|
||||
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);
|
||||
#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))
|
||||
uint8_t mask = (1 << (y%8));
|
||||
uint32_t z = PALETTE_IDX(lcd_buf, (y/8)*W+x, mask);
|
||||
if (z) {
|
||||
FXColor color;
|
||||
if (IS_BACKLIGHT_ON())
|
||||
color = FXRGB(47-(z*47)/15, 123-(z*123)/15, 227-(z*227)/15);
|
||||
else
|
||||
color = FXRGB(200-(z*200)/15, 200-(z*200)/15, 200-(z*200)/15);
|
||||
bmp->setPixel(2*x, 2*y, color);
|
||||
bmp->setPixel(2*x+1, 2*y, color);
|
||||
bmp->setPixel(2*x, 2*y+1, color);
|
||||
bmp->setPixel(2*x+1, 2*y+1, color);
|
||||
}
|
||||
#else
|
||||
if (lcd_buf[x+(y/8)*W] & (1<<(y%8))) {
|
||||
|
|
|
@ -144,7 +144,7 @@ bool isAudioFileAvailable(uint32_t i, char * filename)
|
|||
{
|
||||
uint8_t category = (i >> 24);
|
||||
|
||||
#if defined(SIMU)
|
||||
#if 0
|
||||
printf("isAudioFileAvailable(%08x)\n", i); fflush(stdout);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
*/
|
||||
|
||||
#include "../open9x.h"
|
||||
#include "fifo.h"
|
||||
#include "../fifo.h"
|
||||
|
||||
void btSetBaudrate(uint32_t index)
|
||||
{
|
||||
|
|
|
@ -36,6 +36,8 @@
|
|||
|
||||
void pwrInit();
|
||||
void eepromInit();
|
||||
void DEBUG_UART_Configure( uint32_t baudrate, uint32_t masterClock);
|
||||
void DEBUG_UART_Stop();
|
||||
|
||||
uint32_t Master_frequency ;
|
||||
volatile uint32_t Tenms ;
|
||||
|
|
|
@ -39,7 +39,6 @@
|
|||
#include "board.h"
|
||||
#include "audio_driver.h"
|
||||
#include "haptic_driver.h"
|
||||
#include "debug.h"
|
||||
|
||||
#if defined(BLUETOOTH)
|
||||
#include "bluetooth.h"
|
||||
|
|
|
@ -37,6 +37,8 @@
|
|||
|
||||
#if !defined(SIMU)
|
||||
|
||||
extern Fifo32 debugFifo;
|
||||
|
||||
/*
|
||||
* Outputs a character on the UART line.
|
||||
*
|
||||
|
@ -54,37 +56,6 @@ void debugPutc(const char 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.
|
||||
*
|
||||
|
@ -128,22 +99,9 @@ void DEBUG_UART_Stop()
|
|||
NVIC_DisableIRQ(UART0_IRQn) ;
|
||||
}
|
||||
|
||||
Fifo32 debugFifo;
|
||||
|
||||
extern "C" void UART0_IRQHandler()
|
||||
{
|
||||
debugFifo.push(CONSOLE_USART->UART_RHR);
|
||||
}
|
||||
|
||||
void debugTask(void* pdata)
|
||||
{
|
||||
uint8_t rxchar ;
|
||||
|
||||
for (;;) {
|
||||
while (!debugFifo.pop(rxchar))
|
||||
CoTickDelay(5); // 10ms
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -39,7 +39,7 @@
|
|||
*----------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#include "board.h"
|
||||
// #include "board.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
|
|
|
@ -172,6 +172,9 @@ void boardInit()
|
|||
adcInit();
|
||||
delaysInit();
|
||||
audioInit();
|
||||
#if defined(DEBUG)
|
||||
debugInit();
|
||||
#endif
|
||||
|
||||
// TODO init_ppm() ;
|
||||
|
||||
|
@ -184,7 +187,6 @@ void boardInit()
|
|||
__enable_irq() ;
|
||||
|
||||
eepromInit();
|
||||
uartInit();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -124,6 +124,7 @@ void eepromInit(); // TODO check it's not in another include
|
|||
void delaysInit();
|
||||
void adcInit();
|
||||
void audioInit();
|
||||
void debugInit();
|
||||
|
||||
void adcRead();
|
||||
void init_trainer_ppm();
|
||||
|
|
|
@ -34,16 +34,7 @@
|
|||
|
||||
#include "../open9x.h"
|
||||
|
||||
void uartSendChar(uint8_t c)
|
||||
{
|
||||
USART_SendData(UART_DEBUG, c);
|
||||
|
||||
/* Wait for end of previous transfer */
|
||||
while (USART_GetFlagStatus(UART_DEBUG, USART_FLAG_TC) == RESET);
|
||||
}
|
||||
|
||||
|
||||
void uartInit(void)
|
||||
void debugInit(void)
|
||||
{
|
||||
USART_InitTypeDef USART_InitStructure;
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
@ -72,3 +63,10 @@ void uartInit(void)
|
|||
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);
|
||||
}
|
|
@ -85,6 +85,8 @@ uint32_t readTrims()
|
|||
if (~c & PIN_TRIM_RH_R)
|
||||
result |= 0x80; // RH_R
|
||||
|
||||
// printf("readTrims(): %x %x => %x\n", c, e, result); fflush(stdout);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -105,14 +107,12 @@ void readKeysAndTrims()
|
|||
++enuk;
|
||||
}
|
||||
|
||||
#if !defined(SIMU)
|
||||
in = readTrims();
|
||||
|
||||
for (i = 1; i < 256; i <<= 1) {
|
||||
keys[enuk].input(in & i, (EnumKeys)enuk);
|
||||
++enuk;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
uint32_t keyState(EnumKeys enuk)
|
||||
|
|
|
@ -23,6 +23,9 @@ void Set_Address(u8 x, u8 y)
|
|||
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()
|
||||
{
|
||||
for (uint8_t y=0; y<DISPLAY_H; y++) {
|
||||
|
@ -31,8 +34,11 @@ void lcdRefresh()
|
|||
Set_Address(0, y);
|
||||
AspiCmd(0xAF);
|
||||
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);
|
||||
#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
|
||||
// this code shows the 16 grey tones...
|
||||
uint8_t data = (x * 16) / 212;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue