Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to specify display scale/format string #328

Merged
merged 3 commits into from Nov 28, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/Makefile
Expand Up @@ -125,7 +125,8 @@ PROTO_EXTRA_OBJS := $(addprefix $(ODIR)/, $(notdir $(PROTO_EXTRA_C:.c=.o)))
SYMBOL_FILE := $(ODIR)/symbolfile
endif

HGVERSION := $(shell ../utils/get_version.pl ${TARGET})
HGVERSION ?= $(shell ../utils/get_version.pl ${TARGET})
HGVERSION := $(HGVERSION)

# Rebuild on hg version change.
# Based on http://mercurial.selenic.com/wiki/VersioningWithMake
Expand Down
17 changes: 17 additions & 0 deletions src/config/model.c
Expand Up @@ -93,6 +93,8 @@ static const char MIXER_CURVE_SMOOTH[] = "smooth";
/* Section: Channel */
static const char SECTION_CHANNEL[] = "channel";

static const char CHAN_DISPLAY_FORMAT[] = "display-format";
static const char CHAN_DISPLAY_SCALE[] = "display-scale";
static const char CHAN_LIMIT_REVERSE[] = "reverse";
static const char CHAN_LIMIT_SAFETYSW[] = "safetysw";
static const char CHAN_LIMIT_SAFETYVAL[] = "safetyval";
Expand Down Expand Up @@ -546,6 +548,7 @@ static const struct struct_map _seclimit[] = {
{CHAN_SCALAR, OFFSET(Model.limits[0], servoscale), 100},
{CHAN_SCALAR_NEG, OFFSET(Model.limits[0], servoscale_neg), 0},
{CHAN_SUBTRIM, OFFSETS(Model.limits[0], subtrim), 0},
{CHAN_DISPLAY_SCALE, OFFSETS(Model.limits[0], displayscale), DEFAULT_DISPLAY_SCALE},
};
static const struct struct_map _sectrim[] = {
{TRIM_SOURCE, OFFSET_SRC(Model.trims[0], src), 0xFFFF},
Expand Down Expand Up @@ -760,6 +763,16 @@ int assign_int(void* ptr, const struct struct_map *map, int map_size)
}
return 1;
}
if (MATCH_KEY(CHAN_DISPLAY_FORMAT)) {
strcpy(m->limits[idx].displayformat, value);
return 1;
}
if (MATCH_KEY(CHAN_DISPLAY_SCALE)) {
if (value_int) {
m->limits[idx].displayscale = value_int;
}
return 1;
}

if(assign_int(&m->limits[idx], _seclimit, MAPSIZE(_seclimit)))
return 1;
Expand Down Expand Up @@ -1215,6 +1228,10 @@ u8 CONFIG_WriteModel(u8 model_num) {
}
if(WRITE_FULL_MODEL || m->limits[idx].min != DEFAULT_SERVO_LIMIT)
fprintf(fh, "%s=%d\n", CHAN_LIMIT_MIN, -(int)m->limits[idx].min);
if(WRITE_FULL_MODEL || m->limits[idx].displayscale != DEFAULT_DISPLAY_SCALE)
fprintf(fh, "%s=%d\n", CHAN_DISPLAY_SCALE, m->limits[idx].displayscale);
if(WRITE_FULL_MODEL || strcmp(m->limits[idx].displayformat, DEFAULT_DISPLAY_FORMAT) != 0)
fprintf(fh, "%s=%s\n", CHAN_DISPLAY_FORMAT, m->limits[idx].displayformat);
if(WRITE_FULL_MODEL || m->templates[idx] != 0)
fprintf(fh, "%s=%s\n", CHAN_TEMPLATE, CHAN_TEMPLATE_VAL[m->templates[idx]]);
write_mixer(fh, m, idx);
Expand Down
12 changes: 12 additions & 0 deletions src/mixer.c
Expand Up @@ -213,6 +213,16 @@ s32 MIXER_GetChannel(unsigned channel, enum LimitMask flags)
return MIXER_ApplyLimits(channel, &Model.limits[channel], raw, Channels, flags);
}

s16 MIXER_GetChannelDisplayScale(unsigned channel)
{
return Model.limits[channel].displayscale;
}

char* MIXER_GetChannelDisplayFormat(unsigned channel)
{
return Model.limits[channel].displayformat;
}

#define REZ_SWASH_X(x) ((x) - (x)/8 - (x)/128 - (x)/512) // 1024*sin(60) ~= 886
#define REZ_SWASH_Y(x) (1*(x)) // 1024 => 1024
s32 MIXER_CreateCyclicOutput(volatile s32 *raw, unsigned cycnum)
Expand Down Expand Up @@ -863,6 +873,8 @@ void MIXER_SetDefaultLimit(struct Limit *limit)
limit->min = DEFAULT_SERVO_LIMIT;
limit->servoscale = 100;
limit->servoscale_neg = 0; //match servoscale
limit->displayscale = DEFAULT_DISPLAY_SCALE;
strcpy(limit->displayformat, DEFAULT_DISPLAY_FORMAT);
}

int MIXER_GetSourceVal(int idx, u32 opts)
Expand Down
6 changes: 6 additions & 0 deletions src/mixer.h
@@ -1,6 +1,8 @@
#ifndef _MIXER_H_
#define _MIXER_H_

#define DEFAULT_DISPLAY_FORMAT "%3d%%"
#define DEFAULT_DISPLAY_SCALE 100
#define DEFAULT_SERVO_LIMIT 150
#define SWASH_INV_ELEVATOR_MASK 1
#define SWASH_INV_AILERON_MASK 2
Expand Down Expand Up @@ -163,6 +165,8 @@ struct Limit {
s8 failsafe;
u8 speed; //measured in degrees/100msec
s16 subtrim; // need to support value greater than 250
s16 displayscale; // display scale factor
char displayformat[16];
};

struct Trim {
Expand All @@ -182,6 +186,8 @@ unsigned CURVE_NumPoints(struct Curve *curve);
/* Mixer functions */
volatile s32 *MIXER_GetInputs();
s32 MIXER_GetChannel(unsigned channel, enum LimitMask flags);
s16 MIXER_GetChannelDisplayScale(unsigned channel);
char* MIXER_GetChannelDisplayFormat(unsigned channel);

int MIXER_GetMixers(int ch, struct Mixer *mixers, int count);
int MIXER_SetMixers(struct Mixer *mixers, int count);
Expand Down
7 changes: 6 additions & 1 deletion src/pages/common/_main_page.c
Expand Up @@ -83,7 +83,12 @@ const char *show_box_cb(guiObject_t *obj, const void *data)
} else if(idx - NUM_RTC - NUM_TIMERS <= NUM_TELEM) {
TELEMETRY_GetValueStr(tempstring, idx - NUM_RTC - NUM_TIMERS);
} else {
sprintf(tempstring, "%3d%%", RANGE_TO_PCT(MIXER_GetChannel(idx - (NUM_RTC + NUM_TIMERS + NUM_TELEM + 1), APPLY_SAFETY | APPLY_SCALAR)));
unsigned channel = idx - (NUM_RTC + NUM_TIMERS + NUM_TELEM + 1);
s16 val_raw = MIXER_GetChannel(channel, APPLY_SAFETY | APPLY_SCALAR);
s16 val_scale = MIXER_GetChannelDisplayScale(channel);
const char* val_format = MIXER_GetChannelDisplayFormat(channel);

sprintf(tempstring, val_format, val_raw/val_scale);
}
return tempstring;
}
Expand Down