[all] New helper for filling MixData::weight in templates

This commit is contained in:
bsongis
2013-03-11 13:46:40 +00:00
parent a81d77b364
commit d6543f6c55
5 changed files with 38 additions and 36 deletions
+14 -6
View File
@@ -212,7 +212,7 @@ const pm_char * bmpLoad(uint8_t *dest, const char *filename, const xcoord_t widt
return 0;
}
void lcd_bmp(xcoord_t x, uint8_t y, const pm_uchar * img)
void lcd_bmp(xcoord_t x, uint8_t y, const pm_uchar * img, uint8_t offset, uint8_t width)
{
const pm_uchar *q = img;
#if LCD_W >= 260
@@ -221,14 +221,22 @@ void lcd_bmp(xcoord_t x, uint8_t y, const pm_uchar * img)
#else
uint8_t w = pgm_read_byte(q++);
#endif
if (!width) width = w;
uint8_t hb = (pgm_read_byte(q++)+7)/8;
q += 4*offset;
for (uint8_t yb = 0; yb < hb; yb++) {
uint8_t *p = &displayBuf[ (y / 8 + yb) * LCD_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++);
for (xcoord_t i=0; i<width; i++) {
for (uint8_t plan=0; plan<4; plan++) {
uint8_t b = pgm_read_byte(q++);
uint8_t ym8 = (y & 0x07);
uint8_t *pp = p + plan*DISPLAY_PLAN_SIZE;
LCD_BYTE_FILTER_PLAN(pp, ~(0xff << ym8), b << ym8);
if (ym8) {
uint8_t *r = pp + LCD_W;
LCD_BYTE_FILTER_PLAN(r, ~(0xff >> (8-ym8)), b >> (8-ym8));
}
}
p++;
}
}
+2 -1
View File
@@ -941,7 +941,8 @@ void resetTelemetry()
#ifdef SIMU
frskyData.analog[0].set(120, UNIT_VOLTS);
frskyData.analog[1].set(240, UNIT_VOLTS);
frskyData.rssi[0].set(75);
frskyData.rssi[0].value = 75;
frskyData.rssi[1].value = 75;
frskyData.hub.fuelLevel = 75;
frskyData.hub.rpm = 12000;
+4 -14
View File
@@ -2157,15 +2157,10 @@ enum MixFields {
void gvarWeightItem(xcoord_t x, uint8_t y, MixData *md, uint8_t attr, uint8_t event)
{
// #if defined(CPUARM) || !defined(GVARS)
// md->weight = gvarMenuItem(x, y, md->weight, -125, 125, attr, event);
// #else
// @@@ open.20.fsguruh
u_int8int16_t weight;
MD_GETWEIGHT(weight,md);
MD_WEIGHT_TO_UNION(md, weight);
weight.word = gvarMenuItem(x, y, weight.word, GV_RANGELARGE_NEG, GV_RANGELARGE, attr, event);
MD_SETWEIGHT(weight,md);
//#endif
MD_UNION_TO_WEIGHT(weight, md);
}
void menuModelMixOne(uint8_t event)
@@ -2240,15 +2235,10 @@ void menuModelMixOne(uint8_t event)
case MIX_FIELD_OFFSET:
{
lcd_putsColumnLeft(COLUMN_X, y, NO_INDENT(STR_OFFSET));
// #if defined(GVARS)
// @@@ open.20.fsguruh
u_int8int16_t offset;
MD_GETOFFSET(offset,md2);
MD_OFFSET_TO_UNION(md2, offset);
offset.word = gvarMenuItem(COLUMN_X+MIXES_2ND_COLUMN, y, offset.word, GV_RANGELARGE_NEG, GV_RANGELARGE, attr|LEFT, event);
MD_SETOFFSET(offset,md2);
// #else
// md2->offset = gvarMenuItem(COLUMN_X+MIXES_2ND_COLUMN, y, md2->offset, -125, 125, attr|LEFT, event);
// #endif
MD_UNION_TO_OFFSET(offset, md2);
break;
}
case MIX_FIELD_TRIM:
+17 -14
View File
@@ -113,6 +113,7 @@ PACK(typedef struct t_FrSkyRSSIAlarm {
#if defined(PCBX9D) || defined(PCBACT)
enum MainViews {
VIEW_TIMERS,
VIEW_INPUTS,
VIEW_SWITCHES,
VIEW_COUNT
@@ -318,21 +319,22 @@ PACK(typedef struct t_MixData {
}) MixData;
#define MD_WEIGHT(md) (md->weight)
#define MD_GETWEIGHT(var,md) var.word=md->weight
#define MD_SETWEIGHT(var,md) md->weight=var.word
#define MD_WEIGHT_TO_UNION(md, var) var.word = md->weight
#define MD_UNION_TO_WEIGHT(var, md) md->weight = var.word
#define MD_SETWEIGHT(md, val) md->weight = val
PACK( union u_int8int16_t {
struct {
int8_t lo;
uint8_t hi;
uint8_t hi;
} bytes_t;
int16_t word;
});
#define MD_OFFSET(md) (md->offset)
#define MD_GETOFFSET(var,md) var.word=md->offset;
#define MD_SETOFFSET(var,md) md->offset=var.word;
#define MD_OFFSET_TO_UNION(md, var) var.word = md->offset
#define MD_UNION_TO_OFFSET(var, md) md->offset = var.word
#define MD_SETOFFSET(md, val) md->offset = val
#else
#define DELAY_STEP 2
@@ -379,18 +381,19 @@ private:
PACK( union u_int8int16_t {
struct {
int8_t lo;
uint8_t hi;
uint8_t hi;
} bytes_t;
int16_t word;
});
#define MD_GETWEIGHT(var,md) var.bytes_t.lo=md->weight; var.bytes_t.hi=md->weightMode?255:0
#define MD_SETWEIGHT(var,md) md->weight = var.bytes_t.lo; \
if (var.word<0) md->weightMode=1; else md->weightMode=0 // set negative sign
#define MD_WEIGHT_TO_UNION(md, var) var.bytes_t.lo=md->weight; var.bytes_t.hi=md->weightMode?255:0
#define MD_UNION_TO_WEIGHT(var, md) md->weight=var.bytes_t.lo; md->weightMode=(var.word<0) /* set negative sign */
#define MD_SETWEIGHT(md, val) md->weight=val; md->weightMode=(val<0)
#define MD_OFFSET(md) (u_gvarint_t(md->offset,md->offsetMode).word)
#define MD_GETOFFSET(var,md) var.bytes_t.lo=md->offset; var.bytes_t.hi=md->offsetMode?255:0
#define MD_SETOFFSET(var,md) md->offset = var.bytes_t.lo; \
if (var.word<0) md->offsetMode=1; else md->offsetMode=0 // set negative sign
#define MD_OFFSET_TO_UNION(var, md) var.bytes_t.lo=md->offset; var.bytes_t.hi=md->offsetMode?255:0
#define MD_UNION_TO_OFFSET(md, var) md->offset=var.bytes_t.lo; md->offsetMode=(var.word<0) /* set negative sign */
#define MD_SETOFFSET(md, val) md->offset=val; md->offsetMode=(val<0)
#endif
+1 -1
View File
@@ -150,7 +150,7 @@ void applyTemplate(uint8_t idx)
// Sticky-T-Cut
case TMPL_STI_THR_CUT:
md=setDest(ICC(STK_THR), MIXSRC_MAX); md->weight=-100; md->swtch=SWSRC_SWC; md->mltpx=MLTPX_REP;
md=setDest(ICC(STK_THR), MIXSRC_MAX); MD_SETWEIGHT(md, -100); md->swtch=SWSRC_SWC; md->mltpx=MLTPX_REP;
md=setDest(13, MIXSRC_CH14); md->weight= 100;
md=setDest(13, MIXSRC_MAX); md->weight=-100; md->swtch=SWSRC_SWB; md->mltpx=MLTPX_REP;
md=setDest(13, MIXSRC_MAX); md->weight= 100; md->swtch=SWSRC_THR; md->mltpx=MLTPX_REP;