Skip to content

Commit

Permalink
Add backlight settings
Browse files Browse the repository at this point in the history
  • Loading branch information
vaspa committed Mar 23, 2016
1 parent 51ce4a2 commit f623833
Show file tree
Hide file tree
Showing 13 changed files with 119 additions and 54 deletions.
2 changes: 1 addition & 1 deletion arm5/RTE/Device/nRF51822_xxAA/arm_startup_nrf51.s
Expand Up @@ -44,7 +44,7 @@ __initial_sp
IF :DEF: __HEAP_SIZE
Heap_Size EQU __HEAP_SIZE
ELSE
Heap_Size EQU 744
Heap_Size EQU 736
ENDIF

AREA HEAP, NOINIT, READWRITE, ALIGN=3
Expand Down
12 changes: 6 additions & 6 deletions arm5/ossw-firmware-s120.uvprojx
Expand Up @@ -15,8 +15,8 @@
<TargetCommonOption>
<Device>nRF51822_xxAA</Device>
<Vendor>Nordic Semiconductor</Vendor>
<PackID>NordicSemiconductor.nRF_DeviceFamilyPack.8.3.2</PackID>
<PackURL>http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/</PackURL>
<PackID>NordicSemiconductor.nRF_DeviceFamilyPack.8.5.0</PackID>
<PackURL>http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/</PackURL>
<Cpu>IROM(0x00000000,0x40000) IRAM(0x20000000,0x4000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
Expand Down Expand Up @@ -2255,16 +2255,16 @@
</file>
<file attr="config" category="source" condition="ARM Compiler" name="Device\Source\arm\arm_startup_nrf51.s" version="8.0.3">
<instance index="0">RTE\Device\nRF51822_xxAA\arm_startup_nrf51.s</instance>
<component Cclass="Device" Cgroup="Startup" Cvendor="NordicSemiconductor" Cversion="8.3.2" condition="nRF51 Series CMSIS Device"/>
<package license="License\license.txt" name="nRF_DeviceFamilyPack" schemaVersion="1.3" url="http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/" vendor="NordicSemiconductor" version="8.3.2"/>
<component Cclass="Device" Cgroup="Startup" Cvendor="NordicSemiconductor" Cversion="8.5.0" condition="nRF51 Series CMSIS Device"/>
<package license="License\license.txt" name="nRF_DeviceFamilyPack" schemaVersion="1.3" url="http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/" vendor="NordicSemiconductor" version="8.5.0"/>
<targetInfos>
<targetInfo name="nrf51822_xxaa_s120"/>
</targetInfos>
</file>
<file attr="config" category="source" name="Device\Source\system_nrf51.c" version="8.0.3">
<instance index="0">RTE\Device\nRF51822_xxAA\system_nrf51.c</instance>
<component Cclass="Device" Cgroup="Startup" Cvendor="NordicSemiconductor" Cversion="8.3.2" condition="nRF51 Series CMSIS Device"/>
<package license="License\license.txt" name="nRF_DeviceFamilyPack" schemaVersion="1.3" url="http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/" vendor="NordicSemiconductor" version="8.3.2"/>
<component Cclass="Device" Cgroup="Startup" Cvendor="NordicSemiconductor" Cversion="8.5.0" condition="nRF51 Series CMSIS Device"/>
<package license="License\license.txt" name="nRF_DeviceFamilyPack" schemaVersion="1.3" url="http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/" vendor="NordicSemiconductor" version="8.5.0"/>
<targetInfos>
<targetInfo name="nrf51822_xxaa_s120"/>
</targetInfos>
Expand Down
17 changes: 17 additions & 0 deletions config.c
Expand Up @@ -14,6 +14,7 @@
#define OFFSET_GLOBAL_ACTION_HANLDERS (OFFSET_CUSTOM_WATCHSET+(SPIFFS_OBJ_NAME_LEN*CUSTOM_WATCHSET_NUMBER))
#define OFFSET_WATCH_FACE_ACTION_HANLDERS (OFFSET_GLOBAL_ACTION_HANLDERS + (9 * 2))

static uint32_t settings;
static default_action default_global_actions[9];
static default_action default_watchface_actions[9];

Expand Down Expand Up @@ -149,3 +150,19 @@ int config_get_handler_index_from_event(uint32_t event_type, uint32_t event_para
}
return -1;
}

bool get_settings(uint32_t mask) {
return settings & mask;
}

void settings_toggle(uint32_t mask) {
settings ^= mask;
}

void settings_on(uint32_t mask) {
settings |= mask;
}

void settings_off(uint32_t mask) {
settings &= ~mask;
}
11 changes: 11 additions & 0 deletions config.h
Expand Up @@ -5,6 +5,9 @@
#include <stdint.h>
#include "fs.h"

#define CONFIG_DISCONNECT_ALERT 1
#define CONFIG_NOTIFICATION_LIGHT 2

typedef struct {
uint8_t action_id;
uint8_t parameter;
Expand All @@ -30,4 +33,12 @@ void config_set_default_global_actions(default_action* actions);

void config_set_default_watchface_actions(default_action* actions);

bool get_settings(uint32_t mask);

void settings_toggle(uint32_t mask);

void settings_on(uint32_t mask);

void settings_off(uint32_t mask);

#endif /* CONFIGUTARION_H */
2 changes: 2 additions & 0 deletions i18n/i18n.h
Expand Up @@ -32,6 +32,8 @@
#define MESSAGE_RTC_REFRESH 47
#define MESSAGE_1_SECOND 48
#define MESSAGE_1_MINUTE 49
#define MESSAGE_SHAKE_LIGHT 50
#define MESSAGE_NOTIF_LIGHT 51

typedef struct
{
Expand Down
6 changes: 4 additions & 2 deletions i18n/messages_en.h
Expand Up @@ -50,8 +50,10 @@ static const I18N_MESSAGE messages_en[] = {
/* 45 */{"Nov"},
/* 46 */{"Dec"},
/* 47 */{"Refresh"},
/* 48 */{"1 s"},
/* 49 */{"1 min"}
/* 48 */{"1s"},
/* 49 */{"1min"},
/* 50 */{"Shake light"},
/* 51 */{"Notif light"}
};

#endif
41 changes: 20 additions & 21 deletions mlcd.c
Expand Up @@ -11,11 +11,12 @@
#include "nordic_common.h"
#include "app_scheduler.h"

#define TEMP_BL_TIMEOUT_UNIT APP_TIMER_TICKS(1000, APP_TIMER_PRESCALER)
#define SHORT_BL_TIMEOUT_UNIT APP_TIMER_TICKS(1000, APP_TIMER_PRESCALER)
#define LONG_BL_TIMEOUT_UNIT APP_TIMER_TICKS(300*1000, APP_TIMER_PRESCALER)

#define MLCD_BL_OFF 0x0
#define MLCD_BL_ON 0x1
#define MLCD_BL_ON_TEMP 0x10
#define MLCD_BL_OFF 0x00
#define MLCD_BL_LONG 0x01
#define MLCD_BL_SHORT 0x10

#define MLCD_IS_LINE_CHANGED(line_no) (fb_line_changes[line_no>>3]>>(line_no&0x7) & 0x1)
#define MLCD_SET_LINE_CHANGED(line_no) (fb_line_changes[line_no>>3]|=1<<(line_no&0x7))
Expand Down Expand Up @@ -51,10 +52,8 @@ void mlcd_off_event(void * p_event_data, uint16_t event_size)

void mlcd_bl_timeout_handler(void * p_context) {
UNUSED_PARAMETER(p_context);
if (bl_mode == MLCD_BL_ON_TEMP) {
uint32_t err_code = app_sched_event_put(NULL, NULL, mlcd_off_event);
APP_ERROR_CHECK(err_code);
}
uint32_t err_code = app_sched_event_put(NULL, NULL, mlcd_off_event);
APP_ERROR_CHECK(err_code);
}

void mlcd_init(void)
Expand Down Expand Up @@ -105,40 +104,40 @@ void mlcd_backlight_off(void)
nrf_gpio_pin_clear(LCD_BACKLIGHT);
}

void mlcd_backlight_on(void)
void mlcd_backlight_long(void)
{
app_timer_stop(mlcd_bl_timer_id);
bl_mode = MLCD_BL_ON;
bl_mode = MLCD_BL_LONG;
nrf_gpio_pin_set(LCD_BACKLIGHT);
}

void mlcd_backlight_temp_on(void) {
if (bl_mode == MLCD_BL_ON) {
void mlcd_backlight_short(void) {
if (bl_mode == MLCD_BL_LONG) {
return;
}
app_timer_stop(mlcd_bl_timer_id);
bl_mode = MLCD_BL_ON_TEMP;
bl_mode = MLCD_BL_SHORT;
nrf_gpio_pin_set(LCD_BACKLIGHT);
app_timer_start(mlcd_bl_timer_id, temp_bl_timeout * TEMP_BL_TIMEOUT_UNIT, NULL);
app_timer_start(mlcd_bl_timer_id, temp_bl_timeout * SHORT_BL_TIMEOUT_UNIT, NULL);
}

void mlcd_backlight_temp_extend(void) {
if (bl_mode == MLCD_BL_ON_TEMP) {
mlcd_backlight_temp_on();
void mlcd_backlight_extend(void) {
if (bl_mode == MLCD_BL_SHORT) {
mlcd_backlight_short();
}
}

void mlcd_backlight_toggle(void)
{
switch (bl_mode) {
case MLCD_BL_OFF:
mlcd_backlight_on();
mlcd_backlight_long();
break;
case MLCD_BL_ON:
case MLCD_BL_LONG:
mlcd_backlight_off();
break;
case MLCD_BL_ON_TEMP:
mlcd_backlight_on();
case MLCD_BL_SHORT:
mlcd_backlight_long();
break;
}
}
Expand Down
6 changes: 3 additions & 3 deletions mlcd.h
Expand Up @@ -30,15 +30,15 @@ void mlcd_display_on(void);

void mlcd_display_off(void);

void mlcd_backlight_on(void);
void mlcd_backlight_long(void);

void mlcd_backlight_off(void);

void mlcd_backlight_toggle(void);

void mlcd_backlight_temp_on(void);
void mlcd_backlight_short(void);

void mlcd_backlight_temp_extend(void);
void mlcd_backlight_extend(void);

void mlcd_temp_backlight_timeout_inc(void);

Expand Down
2 changes: 1 addition & 1 deletion pawn/amxext.c
Expand Up @@ -11,7 +11,7 @@ static cell AMX_NATIVE_CALL n_lcd_bl(AMX* amx, const cell params[])
if (params[1] == 0) {
mlcd_backlight_off();
} else {
mlcd_backlight_on();
mlcd_backlight_long();
}
return(0);
}
Expand Down
2 changes: 1 addition & 1 deletion scr_mngr.c
Expand Up @@ -207,7 +207,7 @@ void static scr_mngr_handle_event_internal(uint16_t screen_id, uint32_t event_ty

void scr_mngr_handle_event(uint32_t event_type, uint32_t event_param) {
if (event_type == SCR_EVENT_BUTTON_PRESSED || event_type == SCR_EVENT_BUTTON_LONG_PRESSED) {
mlcd_backlight_temp_extend();
mlcd_backlight_extend();
}
if (!modal_dialog) {
if (scr_alert_notification_state != SCR_ALERT_NOTIFICATION_STATE_NONE) {
Expand Down
7 changes: 5 additions & 2 deletions screens/scr_notifications.c
Expand Up @@ -7,6 +7,7 @@
#include "../mlcd.h"
#include "../ext_ram.h"
#include "../utf8.h"
#include "../config.h"
#include "../i18n/i18n.h"
#include "../ble/ble_peripheral.h"
#include <stdlib.h>
Expand Down Expand Up @@ -112,7 +113,8 @@ static void scr_notifications_draw_screen() {

char* data_ptr = (char*)(0x80000000 + read_address);
mlcd_draw_text(data_ptr, 3, 3, MLCD_XRES - 6, MLCD_YRES - 6, font, HORIZONTAL_ALIGN_LEFT | MULTILINE);
mlcd_backlight_temp_on();
if (get_settings(CONFIG_NOTIFICATION_LIGHT))
mlcd_backlight_short();
}
break;
case NOTIFICATIONS_CATEGORY_SUMMARY:
Expand All @@ -127,7 +129,8 @@ static void scr_notifications_draw_screen() {
}
mlcd_draw_digit(notification_count / 10U, MARGIN_SUMMARY, SUMMARY2_Y, SIZE_SUMMARY2_X, SIZE_SUMMARY2_Y, 11);
mlcd_draw_digit(notification_count % 10U, (MLCD_XRES>>1)+MARGIN_SUMMARY, SUMMARY2_Y, SIZE_SUMMARY2_X, SIZE_SUMMARY2_Y, 11);
mlcd_backlight_temp_on();
if (get_settings(CONFIG_NOTIFICATION_LIGHT))
mlcd_backlight_short();
}
}
break;
Expand Down
63 changes: 47 additions & 16 deletions screens/scr_settings.c
Expand Up @@ -11,14 +11,17 @@
#include "../rtc.h"
#include "../alarm.h"
#include "../ext_ram.h"
#include "../config.h"
#include "../watchset.h"
#include "dialog_select.h"

#define MARGIN_LEFT 5
#define MARGIN_LEFT 3
#define SCROLL_HEIGHT 6
#define HEADER_HEIGHT 18
#define SUMMARY_X 95
#define SUMMARY_X 100
#define MENU_ITEM_HEIGHT 20
#define MENU_ITEMS_PER_PAGE 7
#define MENU_SWITCH_PADDING_X 10

static int8_t selectedOption = 0;
static int8_t lastSelectedOption = 0xFF;
Expand Down Expand Up @@ -55,12 +58,23 @@ static void reformat() {

static void draw_alarm_switch(uint8_t x, uint8_t y) {
bool on = is_alarm_active();
draw_switch(x+10, y+2, on);
draw_switch(x+MENU_SWITCH_PADDING_X, y, on);
}

static void draw_shake_light_switch(uint8_t x, uint8_t y) {
default_action* default_actions = config_get_default_global_actions();
bool on = default_actions[8].action_id;
draw_switch(x+MENU_SWITCH_PADDING_X, y, on);
}

static void draw_notif_light_switch(uint8_t x, uint8_t y) {
bool on = get_settings(CONFIG_NOTIFICATION_LIGHT);
draw_switch(x+MENU_SWITCH_PADDING_X, y, on);
}

static void draw_colors_switch(uint8_t x, uint8_t y) {
bool on = is_mlcd_inverted();
draw_switch(x+10, y+2, on);
draw_switch(x+MENU_SWITCH_PADDING_X, y, on);
}

static void draw_interval_summary(uint8_t x, uint8_t y) {
Expand All @@ -78,6 +92,19 @@ static void rtc_refresh_toggle() {
rtc_set_refresh_interval(RTC_INTERVAL_SECOND);
}

static void notif_light_toggle() {
settings_toggle(CONFIG_NOTIFICATION_LIGHT);
}

static void shake_light_toggle() {
default_action* default_actions = config_get_default_global_actions();
if (default_actions[8].action_id == 0)
default_actions[8].action_id = WATCH_SET_FUNC_TEMPORARY_BACKLIGHT;
else
default_actions[8].action_id = 0;
config_set_default_global_actions(default_actions);
}

// TEST DIALOG
static void select_item_handler(uint8_t item) {
}
Expand All @@ -90,19 +117,26 @@ static void test_handler() {

static const MENU_OPTION settings_menu[] = {
{MESSAGE_ALARM_CLOCK, opt_handler_set_alarm, alarm_toggle, draw_alarm_switch},
{MESSAGE_DATE, opt_handler_change_date, opt_handler_change_date, NULL},
{MESSAGE_TIME, opt_handler_change_time, opt_handler_change_time, NULL},
{MESSAGE_DISPLAY, mlcd_colors_toggle, mlcd_colors_toggle, draw_colors_switch},
{MESSAGE_SHAKE_LIGHT, shake_light_toggle, shake_light_toggle, draw_shake_light_switch},
{MESSAGE_NOTIF_LIGHT, notif_light_toggle, notif_light_toggle, draw_notif_light_switch},
{MESSAGE_RTC_REFRESH, rtc_refresh_toggle, rtc_refresh_toggle, draw_interval_summary},
{MESSAGE_DATE, opt_handler_change_date, opt_handler_change_date, NULL},
{MESSAGE_TIME, opt_handler_change_time, opt_handler_change_time, NULL},
{MESSAGE_FORMAT, reformat, reformat, NULL},
{MESSAGE_RESTART, NVIC_SystemReset, NVIC_SystemReset, NULL},
{MESSAGE_ABOUT, test_handler, test_handler, NULL}
};

static const uint8_t SIZE_OF_MENU = sizeof(settings_menu)/sizeof(MENU_OPTION);

static void draw_option(const char *text, uint_fast8_t yPos) {
mlcd_draw_text(text, MARGIN_LEFT, yPos, MLCD_XRES, NULL, FONT_OPTION_NORMAL, HORIZONTAL_ALIGN_LEFT);
static void draw_option(uint_fast8_t item, uint_fast8_t yPos) {
mlcd_draw_text(I18N_TRANSLATE(settings_menu[item].message_key), MARGIN_LEFT, yPos, MLCD_XRES-MARGIN_LEFT, NULL, FONT_OPTION_NORMAL, HORIZONTAL_ALIGN_LEFT);
void (*s_drawer)(uint8_t x, uint8_t y) = settings_menu[item].summary_drawer;
if (s_drawer != NULL)
s_drawer(SUMMARY_X, yPos);
if (item == selectedOption)
fillRectangle(0, yPos-2, SUMMARY_X-MARGIN_LEFT, MENU_ITEM_HEIGHT);
}

static void scr_settings_draw_options() {
Expand All @@ -115,12 +149,7 @@ static void scr_settings_draw_options() {
else
items_no = MENU_ITEMS_PER_PAGE;
for (int i=0; i<items_no; i++) {
void (*s_drawer)(uint8_t x, uint8_t y) = settings_menu[start_item+i].summary_drawer;
draw_option(I18N_TRANSLATE(settings_menu[start_item+i].message_key), yPos);
if (start_item+i==selectedOption)
fillRectangle(0, yPos-2, SUMMARY_X-2*MARGIN_LEFT, MENU_ITEM_HEIGHT);
if (s_drawer != NULL)
s_drawer(SUMMARY_X, yPos);
draw_option(start_item+i, yPos);
yPos += MENU_ITEM_HEIGHT;
}
if (page_no > 0)
Expand Down Expand Up @@ -163,8 +192,10 @@ static void scr_settings_draw_screen() {
static void scr_refresh_summary() {
void (*s_drawer)(uint8_t, uint8_t) = settings_menu[selectedOption].summary_drawer;
if (s_drawer != NULL) {
mlcd_clear_rect(0, 2+HEADER_HEIGHT+MENU_ITEM_HEIGHT*selectedOption, MLCD_XRES, MENU_ITEM_HEIGHT);
scr_settings_draw_options();
// scr_settings_draw_options();
uint_fast8_t yPos = HEADER_HEIGHT+MENU_ITEM_HEIGHT*(selectedOption%MENU_ITEMS_PER_PAGE);
mlcd_clear_rect(0, yPos+2, MLCD_XRES, MENU_ITEM_HEIGHT);
draw_option(selectedOption, yPos+4);
}
}

Expand Down
2 changes: 1 addition & 1 deletion watchset.c
Expand Up @@ -208,7 +208,7 @@ void watchset_invoke_internal_function(uint8_t function_id, uint32_t param) {
mlcd_colors_toggle();
break;
case WATCH_SET_FUNC_TEMPORARY_BACKLIGHT:
mlcd_backlight_temp_on();
mlcd_backlight_short();
break;
case WATCH_SET_FUNC_SHOW_SETTINGS:
scr_mngr_show_screen(SCR_SETTINGS);
Expand Down

0 comments on commit f623833

Please sign in to comment.