Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mkapp/app/setting.ini
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ warning_type=2
cell_count_mode=0
cell_count = 2
osd_display_mode = 0
power_ana_rx = 1
external_analog_power_auto = 1

[source]
analog_channel=32
Expand Down
2 changes: 2 additions & 0 deletions src/core/app_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ void app_switch_to_analog(bool is_av_in) {

if (is_av_in) {
rtc6715.init(0, 0);
} else if (g_setting.source.analog_module == SETTING_SOURCES_ANALOG_MODULE_EXTERNAL) {
rtc6715.init(0, 0);
} else {
rtc6715.init(1, g_setting.record.audio_source == SETTING_RECORD_AUDIO_SOURCE_AV_IN);
rtc6715.set_ch(g_setting.source.analog_channel - 1);
Expand Down
10 changes: 9 additions & 1 deletion src/core/ht.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
#include "ui/page_common.h"
#include "util/math.h"

uint8_t oled_is_sleep = 0;

// #define FAST_SIM
typedef enum {
OLED_MD_DETECTING, // regular operation, oled on
Expand Down Expand Up @@ -108,6 +110,7 @@ static void detect_motion(bool is_moving) {
cnt++;

if (cnt == MOTION_DUR_1MINUTE) { // 1-min
oled_is_sleep = 1;
LOGI("OLED OFF for protection.");
beep();
hw_screen_on(0); // Turn of display
Expand Down Expand Up @@ -143,9 +146,14 @@ static void detect_motion(bool is_moving) {
DM6302_SetChannel(g_setting.source.hdzero_band, ch & 0x7F);
}
if (g_hw_stat.source_mode == SOURCE_MODE_AV) {
rtc6715.init(1, g_setting.record.audio_source == SETTING_RECORD_AUDIO_SOURCE_AV_IN);
if (g_setting.source.analog_module == SETTING_SOURCES_ANALOG_MODULE_INTERNAL) {
rtc6715.init(1, g_setting.record.audio_source == SETTING_RECORD_AUDIO_SOURCE_AV_IN);
rtc6715.set_ch(g_setting.source.analog_channel - 1);
} else {
}
}

oled_is_sleep = 0;
LOGI("OLED ON from protection.");

screen.brightness(g_setting.image.oled);
Expand Down
2 changes: 2 additions & 0 deletions src/core/ht.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ void ht_set_center_position();
int16_t *ht_get_channels();
void head_alarm_init();

extern uint8_t oled_is_sleep;

#ifdef __cplusplus
}
#endif
3 changes: 0 additions & 3 deletions src/core/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,6 @@ int main(int argc, char *argv[]) {
// 8. Synthetic counter for gif refresh
gif_cnt = 0;

// 8.1 set initial analog module power state
Analog_Module_Power(0);

// Head alarm
head_alarm_init();

Expand Down
11 changes: 9 additions & 2 deletions src/core/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const setting_t g_setting_defaults = {
.cell_count_mode = SETTING_POWER_CELL_COUNT_MODE_AUTO,
.cell_count = 2,
.osd_display_mode = SETTING_POWER_OSD_DISPLAY_MODE_TOTAL,
.power_ana = false,
.external_analog_power_auto = true,
.calibration_offset = 0,
},
.record = {
Expand Down Expand Up @@ -226,6 +226,12 @@ const setting_t g_setting_defaults = {
},
.source = {
.analog_channel = 33, // R1
#ifdef HDZGOGGLE
// Note Goggle V1 doesn't support internal analog module
.analog_module = SETTING_SOURCES_ANALOG_MODULE_EXTERNAL,
#else
.analog_module = SETTING_SOURCES_ANALOG_MODULE_INTERNAL,
#endif
.analog_format = SETTING_SOURCES_ANALOG_FORMAT_NTSC,
.analog_ratio = SETTING_SOURCES_ANALOG_RATIO_4_3,
.hdzero_band = SETTING_SOURCES_HDZERO_BAND_RACEBAND,
Expand Down Expand Up @@ -353,6 +359,7 @@ void settings_load(void) {

// source
g_setting.source.analog_format = ini_getl("source", "analog_format", g_setting_defaults.source.analog_format, SETTING_INI);
g_setting.source.analog_module = ini_getl("source", "analog_module", g_setting_defaults.source.analog_module, SETTING_INI);
g_setting.source.analog_ratio = ini_getl("source", "analog_ratio", g_setting_defaults.source.analog_ratio, SETTING_INI);
g_setting.source.hdzero_band = ini_getl("source", "hdzero_band", g_setting_defaults.source.hdzero_band, SETTING_INI);
g_setting.source.hdzero_bw = ini_getl("source", "hdzero_bw", g_setting_defaults.source.hdzero_bw, SETTING_INI);
Expand Down Expand Up @@ -414,7 +421,7 @@ void settings_load(void) {
g_setting.power.cell_count_mode = ini_getl("power", "cell_count_mode", g_setting_defaults.power.cell_count_mode, SETTING_INI);
g_setting.power.cell_count = ini_getl("power", "cell_count", g_setting_defaults.power.cell_count, SETTING_INI);
g_setting.power.osd_display_mode = ini_getl("power", "osd_display_mode", g_setting_defaults.power.osd_display_mode, SETTING_INI);
g_setting.power.power_ana = ini_getl("power", "power_ana_rx", g_setting_defaults.power.power_ana, SETTING_INI);
g_setting.power.external_analog_power_auto = ini_getl("power", "external_analog_power_auto", g_setting_defaults.power.external_analog_power_auto, SETTING_INI);
g_setting.power.calibration_offset = ini_getl("power", "calibration_offset_mv", g_setting_defaults.power.calibration_offset, SETTING_INI);

// record
Expand Down
2 changes: 1 addition & 1 deletion src/core/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ typedef struct {
setting_power_cell_count_mode_t cell_count_mode;
int cell_count;
setting_power_osd_display_mode_t osd_display_mode;
bool power_ana;
bool external_analog_power_auto;
int calibration_offset;
} setting_power_t;

Expand Down
4 changes: 0 additions & 4 deletions src/core/sleep_mode.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,6 @@ void go_sleep() {
HDZero_Close();

// Turn off Analog Receiver
if (getHwRevision() == HW_REV_2) {
DM5680_ExternalAnalog_Power(1);
}
rtc6715.init(0, 0);

// Minimum fan
Expand All @@ -65,7 +62,6 @@ void wake_up() {
isSleeping = false;
hw_screen_on(1); // Turn on display

Analog_Module_Power(1);
g_setting.fans.right_speed = fan_speed_save.right;
g_setting.fans.left_speed = fan_speed_save.left;
fans_right_setspeed(fan_speed_save.right);
Expand Down
8 changes: 8 additions & 0 deletions src/core/thread.c
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,13 @@ static void *thread_peripheral(void *ptr) {
return NULL;
}

static void *thread_external_analog_module_power(void *ptr) {
while (1) {
external_analog_module_power();
usleep(10 * 1000);
}
}

//////////////////////////////////////////////////////////////////////
// local
static threads_obj_t threads_obj;
Expand All @@ -253,6 +260,7 @@ static void threads_instance(threads_obj_t *obj) {
obj->instance[1] = thread_version;
obj->instance[2] = thread_osd;
obj->instance[3] = thread_rtc6715_rssi;
obj->instance[4] = thread_external_analog_module_power;
}

int create_threads() {
Expand Down
2 changes: 1 addition & 1 deletion src/core/thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ extern "C" {
#include <stdint.h>

#define THREAD_COUNT_MAX (10)
#define THREAD_COUNT (4)
#define THREAD_COUNT (5)

typedef void *(*fun_thread_instance_t)(void *params);

Expand Down
6 changes: 3 additions & 3 deletions src/driver/dm5680.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,9 +325,9 @@ void DM5680_ResetHDMI_RX(uint8_t on) // Reset HDMI_RX,0=reset

void DM5680_ExternalAnalog_Power(uint8_t on) {
uint8_t Cmd[5] = {0xAA, 0x55, 0x02, 0x6, 0x00};
// Note Cmd[4] = 0 means power on for external analog module
Cmd[4] = !on;
// LOGI("DM5680_ExternalAnalog_Power %d", on);
// Note Cmd[4] = 1 means power on for external analog module
Cmd[4] = on;
// LOGI("DM5680_ExternalAnalog_Power %d", on);
Cmd_to_DM5680(1, Cmd, 5);
}
void DM5680_InternalAnalog_Power(uint8_t on) {
Expand Down
2 changes: 1 addition & 1 deletion src/driver/hardware-boxpro.c
Original file line number Diff line number Diff line change
Expand Up @@ -1022,7 +1022,7 @@ void Set_HT_dat(uint16_t ch0, uint16_t ch1, uint16_t ch2) {
I2C_Write(ADDR_FPGA, 0x77, (ch2 >> 8) & 0xff);
}

void Analog_Module_Power(bool ForceSet) {
void external_analog_module_power() {
}

int Get_VideoLatancy_status() // ret: 0=unlocked, 1=locked
Expand Down
30 changes: 17 additions & 13 deletions src/driver/hardware-goggle.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "../core/app_state.h"
#include "../core/common.hh"
#include "../core/ht.h"
#include "../core/osd.h"
#include "../core/settings.h"
#include "../ui/page_common.h"
Expand Down Expand Up @@ -1185,23 +1186,26 @@ void Set_HT_dat(uint16_t ch0, uint16_t ch1, uint16_t ch2) {
I2C_Write(ADDR_FPGA, 0x77, (ch2 >> 8) & 0xff);
}

void Analog_Module_Power(bool ForceSet) {
void external_analog_module_power() {
// Batch 2 goggles only
if (getHwRevision() >= HW_REV_2) {
static bool Analog_Module_Power_State = 0;
static bool Analog_Module_Power_State_Last = 0;
if (g_setting.power.power_ana == 0) {
Analog_Module_Power_State = 0;
static bool pwr = 0;
static bool pwr_last = -1;

if (g_app_state == APP_STATE_SLEEP) { // go sleep
pwr = 0;
} else if (oled_is_sleep == 1) { // oled off
pwr = 0;
} else if (g_setting.power.external_analog_power_auto == 0) { // always on
pwr = 1;
} else {
if (g_source_info.source != SOURCE_AV_MODULE) {
Analog_Module_Power_State = 1;
} else {
Analog_Module_Power_State = 0;
}
pwr = (g_source_info.source == SOURCE_AV_MODULE) &&
(g_setting.source.analog_module == SETTING_SOURCES_ANALOG_MODULE_EXTERNAL);
}
if ((Analog_Module_Power_State_Last != Analog_Module_Power_State) || (ForceSet == 1)) {
Analog_Module_Power_State_Last = Analog_Module_Power_State;
DM5680_ExternalAnalog_Power(Analog_Module_Power_State);

if (pwr_last != pwr) {
pwr_last = pwr;
DM5680_ExternalAnalog_Power(pwr);
}
}
}
Expand Down
30 changes: 17 additions & 13 deletions src/driver/hardware-goggle2.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "../core/app_state.h"
#include "../core/common.hh"
#include "../core/ht.h"
#include "../core/osd.h"
#include "../core/settings.h"
#include "../ui/page_common.h"
Expand Down Expand Up @@ -1161,23 +1162,26 @@ void Set_HT_dat(uint16_t ch0, uint16_t ch1, uint16_t ch2) {
I2C_Write(ADDR_FPGA, 0x77, (ch2 >> 8) & 0xff);
}

void Analog_Module_Power(bool ForceSet) {
void external_analog_module_power() {
// Batch 2 goggles only
if (getHwRevision() >= HW_REV_2) {
static bool Analog_Module_Power_State = 0;
static bool Analog_Module_Power_State_Last = 0;
if (g_setting.power.power_ana == 0) {
Analog_Module_Power_State = 0;
static int pwr = 0;
static int pwr_last = -1;

if (g_app_state == APP_STATE_SLEEP) { // go sleep
pwr = 0;
} else if (oled_is_sleep == 1) { // oled off
pwr = 0;
} else if (g_setting.power.external_analog_power_auto == 0) { // always on
pwr = 1;
} else {
if (g_source_info.source != SOURCE_AV_MODULE) {
Analog_Module_Power_State = 1;
} else {
Analog_Module_Power_State = 0;
}
pwr = (g_source_info.source == SOURCE_AV_MODULE) &&
(g_setting.source.analog_module == SETTING_SOURCES_ANALOG_MODULE_EXTERNAL);
}
if ((Analog_Module_Power_State_Last != Analog_Module_Power_State) || (ForceSet == 1)) {
Analog_Module_Power_State_Last = Analog_Module_Power_State;
DM5680_ExternalAnalog_Power(Analog_Module_Power_State);

if (pwr_last != pwr) {
pwr_last = pwr;
DM5680_ExternalAnalog_Power(pwr);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/driver/hardware.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ void Set_Saturation(uint8_t sat);
void Set_HT_status(uint8_t is_open, uint8_t frame_period, uint8_t sync_len);
void Set_HT_dat(uint16_t ch0, uint16_t ch1, uint16_t ch2);

void Analog_Module_Power(bool Force);
void external_analog_module_power();

int HDZERO_detect();
int AV_in_detect();
Expand Down
2 changes: 1 addition & 1 deletion src/ui/page_analog_rssi.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ static lv_obj_t *page_analog_rssi_create(lv_obj_t *parent, panel_arr_t *arr) {

static void on_enter() {
rtc6715.init(1, 0);
rtc6715.set_ch(33); // R1
rtc6715.set_ch(32); // R1
}

static void on_exit() {
Expand Down
13 changes: 6 additions & 7 deletions src/ui/page_power.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ enum {
ROW_CALIBRATION_OFFSET,
ROW_OSD_DISPLAY_MODE,
ROW_WARN_TYPE,
ROW_POWER_ANA,
ROW_EXTERNAL_ANALOG_POWER,
ROW_BACK,

ROW_COUNT
Expand Down Expand Up @@ -126,7 +126,7 @@ static lv_obj_t *page_power_create(lv_obj_t *parent, panel_arr_t *arr) {

#if defined(HDZGOGGLE) || defined(HDZGOGGLE2)
if (getHwRevision() >= HW_REV_2) {
create_btn_group_item(&btn_group_power_ana, cont, 2, _lang("AnalogRX Power"), _lang("On"), _lang("Auto"), "", "", ROW_POWER_ANA);
create_btn_group_item(&btn_group_power_ana, cont, 2, _lang("AnalogRX Power"), _lang("On"), _lang("Auto"), "", "", ROW_EXTERNAL_ANALOG_POWER);
pp_power.p_arr.max = ROW_COUNT;
} else {
pp_power.p_arr.max = ROW_COUNT - 1;
Expand Down Expand Up @@ -160,7 +160,7 @@ static lv_obj_t *page_power_create(lv_obj_t *parent, panel_arr_t *arr) {
lv_slider_set_value(slider_group_calibration_offset.slider, g_setting.power.calibration_offset, LV_ANIM_OFF);
btn_group_set_sel(&btn_group_osd_display_mode, g_setting.power.osd_display_mode);
btn_group_set_sel(&btn_group_warn_type, g_setting.power.warning_type);
btn_group_set_sel(&btn_group_power_ana, g_setting.power.power_ana);
btn_group_set_sel(&btn_group_power_ana, g_setting.power.external_analog_power_auto);

page_power_update_cell_count();
page_power_update_calibration_offset();
Expand Down Expand Up @@ -335,14 +335,13 @@ static void page_power_on_click(uint8_t key, int sel) {
ini_putl("power", "warning_type", g_setting.power.warning_type, SETTING_INI);
break;

case ROW_POWER_ANA:
case ROW_EXTERNAL_ANALOG_POWER:
// Batch 2 goggles only
if (getHwRevision() >= HW_REV_2) {
#if defined(HDZGOGGLE) || defined(HDZGOGGLE2)
btn_group_toggle_sel(&btn_group_power_ana);
g_setting.power.power_ana = btn_group_get_sel(&btn_group_power_ana);
ini_putl("power", "power_ana_rx", g_setting.power.power_ana, SETTING_INI);
Analog_Module_Power(1);
g_setting.power.external_analog_power_auto = btn_group_get_sel(&btn_group_power_ana);
ini_putl("power", "external_analog_power_auto", g_setting.power.external_analog_power_auto, SETTING_INI);
#endif
}
break;
Expand Down
3 changes: 0 additions & 3 deletions src/ui/page_source.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,6 @@ void source_toggle() {
page_source_select_hdzero();
break;
}
Analog_Module_Power(0);
}

void source_cycle() {
Expand All @@ -313,7 +312,6 @@ void source_cycle() {
page_source_select_av_in();
break;
}
Analog_Module_Power(0);
}

static void page_source_on_click(uint8_t key, int sel) {
Expand Down Expand Up @@ -371,7 +369,6 @@ static void page_source_on_click(uint8_t key, int sel) {
}
break;
}
Analog_Module_Power(0);
}

static void page_source_enter() {
Expand Down
Loading