make MtxOrb use Brightness & OffBrightness like CFontzPacket
This commit is contained in:
@@ -19,6 +19,8 @@ v.0.5dev (ongoing development)
|
||||
* fixes to ula200 build environment and documentation (B. Walle)
|
||||
* update g15 driver to be compatible with g15daemon > 1.2 (Anthony J. Mirabella)
|
||||
* allow compiling with LDFLAG "--as-needed" (Robert Buchholz)
|
||||
* optimize MtxOrb flush()
|
||||
* make MtxOrb use Brightness and OffBrightness like CFontzPacket
|
||||
|
||||
v.0.5.1
|
||||
+ config file support in lcdproc client (Andrew Foss)
|
||||
|
||||
@@ -627,22 +627,24 @@ Device=/dev/ttyS0
|
||||
# Set the display size [default: 20x4]
|
||||
Size=20x4
|
||||
|
||||
# Switch on the backlight? [default: yes]
|
||||
# NOTE: The driver will ignore this if the display is a vfd or vkd
|
||||
# as they crash if the backlight is turned off
|
||||
Backlight=yes
|
||||
# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
|
||||
Type=lkd
|
||||
|
||||
# Set the initial contrast [default: 480]
|
||||
# NOTE: The driver will ignore this if the display
|
||||
# is a vfd or vkd as they don't have this feature
|
||||
Contrast=480
|
||||
|
||||
# Set the initial brightness [default: 1000; legal: 0 - 1000]
|
||||
Brightness=1000
|
||||
# Set the initial off-brightness [default: 0; legal: 0 - 1000]
|
||||
# This value is used when the display is normally
|
||||
# switched off in case LCDd is inactive
|
||||
OffBrightness=0
|
||||
|
||||
# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
|
||||
Speed=19200
|
||||
|
||||
# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
|
||||
Type=lkd
|
||||
|
||||
# The following table translates from MtxOrb key letters to logical key names.
|
||||
# By default no keys are mapped, meaning the keypad is not used at all.
|
||||
#KeyMap_A=Left
|
||||
|
||||
@@ -258,22 +258,22 @@ Slightly modified in order to include it in this document March 2002, Rene Wagne
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>Backlight=</command>
|
||||
<command>Type=</command>
|
||||
<arg choice="plain">
|
||||
<group choice="req">
|
||||
<arg choice="plain"><literal><emphasis>yes</emphasis></literal></arg>
|
||||
<arg choice="plain"><literal>no</literal></arg>
|
||||
<arg choice="plain"><literal><emphasis>lcd</emphasis></literal></arg>
|
||||
<arg choice="plain"><literal>lkd</literal></arg>
|
||||
<arg choice="plain"><literal>vfd</literal></arg>
|
||||
<arg choice="plain"><literal>vkd</literal></arg>
|
||||
</group>
|
||||
</arg>
|
||||
</term>
|
||||
<listitem><para>
|
||||
Switch on the backlight? [default: <literal>yes</literal>; legal: <literal>yes</literal>, <literal>no</literal>]
|
||||
</para>
|
||||
<note><para>
|
||||
The driver will ignore this setting if the display
|
||||
is a VFD or VKD as they crash if the backlight is turned off.
|
||||
</para></note>
|
||||
</listitem>
|
||||
Set the display type [default: <literal>lcd</literal>; legal: <literal>lcd</literal>,
|
||||
<literal>lkd</literal>,
|
||||
<literal>vfd</literal>,
|
||||
<literal>vkd</literal>]
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
@@ -293,6 +293,28 @@ Slightly modified in order to include it in this document March 2002, Rene Wagne
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>Brightness=</command>
|
||||
<arg choice="plain"><replaceable>BRIGHTNESS</replaceable></arg>
|
||||
</term>
|
||||
<listitem><para>
|
||||
Set the initial brightness [default: <literal>1000</literal>; legal: <literal>0</literal> - <literal>1000</literal>]
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>OffBrightness=</command>
|
||||
<arg choice="plain"><replaceable>BRIGHTNESS</replaceable></arg>
|
||||
</term>
|
||||
<listitem><para>
|
||||
Set the initial off-brightness [default: <literal>0</literal>; legal: <literal>0</literal> - <literal>1000</literal>]
|
||||
This value is used when the display is normally
|
||||
switched off in case LCDd is inactive
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>Speed=</command>
|
||||
@@ -311,26 +333,6 @@ Slightly modified in order to include it in this document March 2002, Rene Wagne
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>Type=</command>
|
||||
<arg choice="plain">
|
||||
<group choice="req">
|
||||
<arg choice="plain"><literal><emphasis>lcd</emphasis></literal></arg>
|
||||
<arg choice="plain"><literal>lkd</literal></arg>
|
||||
<arg choice="plain"><literal>vfd</literal></arg>
|
||||
<arg choice="plain"><literal>vkd</literal></arg>
|
||||
</group>
|
||||
</arg>
|
||||
</term>
|
||||
<listitem><para>
|
||||
Set the display type [default: <literal>lcd</literal>; legal: <literal>lcd</literal>,
|
||||
<literal>lkd</literal>,
|
||||
<literal>vfd</literal>,
|
||||
<literal>vkd</literal>]
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>KeyMap_<replaceable>LETTER</replaceable>=</command>
|
||||
|
||||
+80
-38
@@ -59,9 +59,9 @@
|
||||
|
||||
|
||||
/* MO displays allow 25 keys that map by default to 'A' - 'Y' */
|
||||
#define MAX_KEY_MAP 25
|
||||
// Don't forget to define key mappings in LCDd.conf: KeyMap_A=Enter, ...
|
||||
// otherwise you will not get your keypad working.
|
||||
# define MAX_KEY_MAP 25
|
||||
|
||||
#define IS_LCD_DISPLAY (p->MtxOrb_type == MTXORB_LCD)
|
||||
#define IS_LKD_DISPLAY (p->MtxOrb_type == MTXORB_LKD)
|
||||
@@ -130,8 +130,8 @@ typedef struct {
|
||||
|
||||
int output_state; /* static data from MtxOrb_output */
|
||||
int contrast; /* static data from set/get_contrast */
|
||||
int backlight_state; /* static data from MtxOrb_backlight */
|
||||
int backlightenabled;
|
||||
int brightness;
|
||||
int offbrightness;
|
||||
|
||||
MtxOrb_type_type MtxOrb_type;
|
||||
|
||||
@@ -143,6 +143,7 @@ typedef struct {
|
||||
char info[255]; /* static data from MtxOrb_get_info */
|
||||
} PrivateData;
|
||||
|
||||
|
||||
/* Vars for the server core */
|
||||
MODULE_EXPORT char *api_version = API_VERSION;
|
||||
MODULE_EXPORT int stay_in_foreground = 0;
|
||||
@@ -186,7 +187,6 @@ MtxOrb_init (Driver *drvthis)
|
||||
{
|
||||
struct termios portset;
|
||||
|
||||
int contrast = DEFAULT_CONTRAST;
|
||||
char device[256] = DEFAULT_DEVICE;
|
||||
int speed = DEFAULT_SPEED;
|
||||
char size[256] = DEFAULT_SIZE;
|
||||
@@ -214,11 +214,7 @@ MtxOrb_init (Driver *drvthis)
|
||||
p->framebuf = NULL;
|
||||
p->backingstore = NULL;
|
||||
|
||||
p->contrast = DEFAULT_CONTRAST;
|
||||
p->output_state = -1; /* static data from MtxOrb_output */
|
||||
p->backlight_state = 1; /* static data from MtxOrb_backlight */
|
||||
p->backlightenabled = DEFAULT_BACKLIGHT;
|
||||
|
||||
p->keypad_test_mode = 0;
|
||||
|
||||
debug(RPT_INFO, "MtxOrb: init(%p)", drvthis);
|
||||
@@ -250,7 +246,27 @@ MtxOrb_init (Driver *drvthis)
|
||||
drvthis->name, DEFAULT_CONTRAST);
|
||||
tmp = DEFAULT_CONTRAST;
|
||||
}
|
||||
contrast = tmp;
|
||||
p->contrast = tmp;
|
||||
|
||||
/* Which backlight brightness */
|
||||
tmp = drvthis->config_get_int(drvthis->name, "Brightness", 0, DEFAULT_BRIGHTNESS);
|
||||
debug(RPT_INFO, "%s: Brightness (in config) is '%d'", __FUNCTION__, tmp);
|
||||
if ((tmp < 0) || (tmp > 1000)) {
|
||||
report(RPT_WARNING, "%s: Brightness must be between 0 and 1000; using default %d",
|
||||
drvthis->name, DEFAULT_BRIGHTNESS);
|
||||
tmp = DEFAULT_BRIGHTNESS;
|
||||
}
|
||||
p->brightness = tmp;
|
||||
|
||||
/* Which backlight-off "brightness" */
|
||||
tmp = drvthis->config_get_int(drvthis->name, "OffBrightness", 0, DEFAULT_OFFBRIGHTNESS);
|
||||
debug(RPT_INFO, "%s: OffBrightness (in config) is '%d'", __FUNCTION__, tmp);
|
||||
if ((tmp < 0) || (tmp > 1000)) {
|
||||
report(RPT_WARNING, "%s: OffBrightness must be between 0 and 1000; using default %d",
|
||||
drvthis->name, DEFAULT_OFFBRIGHTNESS);
|
||||
tmp = DEFAULT_OFFBRIGHTNESS;
|
||||
}
|
||||
p->offbrightness = tmp;
|
||||
|
||||
/* Get speed */
|
||||
tmp = drvthis->config_get_int(drvthis->name, "Speed", 0, DEFAULT_SPEED);
|
||||
@@ -273,9 +289,6 @@ MtxOrb_init (Driver *drvthis)
|
||||
drvthis->name, tmp);
|
||||
}
|
||||
|
||||
/* Get backlight setting */
|
||||
p->backlightenabled = drvthis->config_get_bool(drvthis->name, "Backlight", 0, DEFAULT_BACKLIGHT);
|
||||
|
||||
/* Get display type */
|
||||
strncpy(buf, drvthis->config_get_string(drvthis->name, "Type", 0, DEFAULT_TYPE), sizeof(buf));
|
||||
buf[sizeof(buf)-1] = '\0';
|
||||
@@ -393,7 +406,8 @@ MtxOrb_init (Driver *drvthis)
|
||||
MtxOrb_linewrap(drvthis, DEFAULT_LINEWRAP);
|
||||
MtxOrb_autoscroll(drvthis, DEFAULT_AUTOSCROLL);
|
||||
MtxOrb_cursorblink(drvthis, DEFAULT_CURSORBLINK);
|
||||
MtxOrb_set_contrast(drvthis, contrast);
|
||||
MtxOrb_set_contrast(drvthis, p->contrast);
|
||||
MtxOrb_backlight(drvthis, DEFAULT_BACKLIGHT);
|
||||
|
||||
report(RPT_DEBUG, "%s: init() done", drvthis->name);
|
||||
|
||||
@@ -597,7 +611,7 @@ MtxOrb_flush (Driver *drvthis)
|
||||
if (modified)
|
||||
memcpy(p->backingstore, p->framebuf, p->width * p->height);
|
||||
|
||||
debug(RPT_DEBUG, "MtxOrb: framebuffer flushed");
|
||||
debug(RPT_DEBUG, "MtxOrb: frame buffer flushed");
|
||||
}
|
||||
|
||||
|
||||
@@ -679,40 +693,68 @@ MtxOrb_set_contrast (Driver *drvthis, int promille)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve brightness.
|
||||
* \param drvthis Pointer to driver structure.
|
||||
* \param state Brightness state (on/off) for which we want the value.
|
||||
* \return Stored brightness in promille.
|
||||
*/
|
||||
MODULE_EXPORT int
|
||||
MtxOrb_get_brightness(Driver *drvthis, int state)
|
||||
{
|
||||
PrivateData *p = drvthis->private_data;
|
||||
|
||||
return (state == BACKLIGHT_ON) ? p->brightness : p->offbrightness;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set on/off brightness.
|
||||
* \param drvthis Pointer to driver structure.
|
||||
* \param state Brightness state (on/off) for which we want to store the value.
|
||||
* \param promille New brightness in promille.
|
||||
*/
|
||||
MODULE_EXPORT void
|
||||
MtxOrb_set_brightness(Driver *drvthis, int state, int promille)
|
||||
{
|
||||
PrivateData *p = drvthis->private_data;
|
||||
|
||||
/* Check it */
|
||||
if (promille < 0 || promille > 1000)
|
||||
return;
|
||||
|
||||
/* store the software value since there is no get */
|
||||
if (state == BACKLIGHT_ON) {
|
||||
p->brightness = promille;
|
||||
MtxOrb_backlight(drvthis, BACKLIGHT_ON);
|
||||
}
|
||||
else {
|
||||
p->offbrightness = promille;
|
||||
MtxOrb_backlight(drvthis, BACKLIGHT_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Turn the LCD backlight on or off.
|
||||
* \param drvthis Pointer to driver structure.
|
||||
* \param on New backlight status.
|
||||
*
|
||||
* \warning on=0 switches vfd/vkd displays off entirely
|
||||
*
|
||||
* \warning There seems to be a movement afoot to add more functions than just on/off to this..
|
||||
*/
|
||||
MODULE_EXPORT void
|
||||
MtxOrb_backlight (Driver *drvthis, int on)
|
||||
{
|
||||
PrivateData *p = drvthis->private_data;
|
||||
PrivateData *p = drvthis->private_data;
|
||||
unsigned char out[5] = { '\xFE', '\x99', 0 };
|
||||
int promille = (on == BACKLIGHT_ON)
|
||||
? p->brightness
|
||||
: p->offbrightness;
|
||||
|
||||
p->backlight_state = on;
|
||||
/* map range [0, 1000] -> [0, 255] that the hardware understands */
|
||||
out[2] = (unsigned char) ((long) promille * 255 / 1000);
|
||||
|
||||
switch (on) {
|
||||
case BACKLIGHT_ON:
|
||||
debug(RPT_DEBUG, "MtxOrb: display timer set to leave display on indefinitely");
|
||||
write(p->fd, "\xFE" "B" "\0", 3); /* 0 minutes == never turn display off */
|
||||
break;
|
||||
case BACKLIGHT_OFF:
|
||||
if (IS_VKD_DISPLAY || IS_VFD_DISPLAY) {
|
||||
debug(RPT_DEBUG, "MtxOrb: backlight off ignored - not LCD or LKD display");
|
||||
; /* turns display off entirely (whoops!) */
|
||||
} else {
|
||||
debug(RPT_DEBUG, "MtxOrb: backlight turned off");
|
||||
write(p->fd, "\xFE" "F", 2);
|
||||
}
|
||||
break;
|
||||
default: /* ignored... */
|
||||
debug(RPT_DEBUG, "MtxOrb: backlight - invalid setting");
|
||||
break;
|
||||
}
|
||||
write(p->fd, out, 3);
|
||||
|
||||
debug(RPT_DEBUG, "MtxOrb: changed brightness to %d", out[2]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include "lcd.h"
|
||||
|
||||
#define DEFAULT_CONTRAST 480
|
||||
#define DEFAULT_BRIGHTNESS 1000
|
||||
#define DEFAULT_OFFBRIGHTNESS 0
|
||||
#define DEFAULT_DEVICE "/dev/lcd"
|
||||
#define DEFAULT_SPEED 19200
|
||||
#define DEFAULT_LINEWRAP 1
|
||||
@@ -37,6 +39,8 @@ MODULE_EXPORT void MtxOrb_set_char (Driver *drvthis, int n, unsigned char *dat);
|
||||
|
||||
MODULE_EXPORT int MtxOrb_get_contrast (Driver *drvthis);
|
||||
MODULE_EXPORT void MtxOrb_set_contrast (Driver *drvthis, int promille);
|
||||
MODULE_EXPORT int MtxOrb_get_brightness(Driver *drvthis, int state);
|
||||
MODULE_EXPORT void MtxOrb_set_brightness(Driver *drvthis, int state, int promille);
|
||||
MODULE_EXPORT void MtxOrb_backlight (Driver *drvthis, int on);
|
||||
MODULE_EXPORT void MtxOrb_output (Driver *drvthis, int state);
|
||||
MODULE_EXPORT const char * MtxOrb_get_info (Driver *drvthis);
|
||||
|
||||
Reference in New Issue
Block a user