📄 gmenu.c
字号:
/*
********************************************************************************
*
* (c) Copyright 2002, Vineyard Technologies, Inc.
*
* Filename : gmenu.c
* Programmer(s): Steve KyeongHyeon Lee
* Created : 2003/05/07
* Modified :
*
* Description :
********************************************************************************
*/
#include "types.h"
#include "8052reg.h"
#include <stdio.h>
#include <absacc.h>
#include "main.h"
#include "eprom.h"
#include "lib.h"
#include "gio.h"
#include "hdd_if.h"
#include "key.h"
#include "types.h"
#include "i2c.h"
#include "gosd.h"
#include "ghdd.h"
#include "gsearch.h"
#include "md.h"
#include "mdmenu.h"
#ifdef TMP_DEL
#ifdef LANIF
#include "lan.h"
#endif
#include "rdcp.h"
#endif
#include "audio.h"
#include "bit1601.h"
#include "rmcon.h"
#include "sio.h"
#ifdef RS232_TO_PC_TRANSFER
#include "RS232toPCapp.h"
#endif
//######################################################################
//
//######################################################################
extern xdata u8 gv_encoder_mode;
extern xdata u8 gv_temp_CAMERA_OF_RECORD;
extern xdata u8 gv_NTSC_PAL;
extern xdata u8 gv_sensor_flag;
extern xdata u8 gv_ff_mode;
extern xdata u8 osdgv_menu_base;
extern xdata u8 EOD;
extern xdata u8 FOD;
extern xdata u8 gv_skip_search_block;
#ifdef TMP_DEL
#ifdef LANIF
extern xdata u8 gv_lanif;
#endif
#endif
extern xdata u8 gv_rec_frame_rate;
extern xdata u8 gv_evt_msg2read;
extern void encoder_mode(u8 sensor);
extern void Channel_Display(u8 mode);
extern u8 decoder_mode(void);
//extern void osd_printf(u8 index_x, u8 index_y, u8 length_of_string,u8 *string);
extern void xioWriteByte(u8 ipw_regidx, u8 ipw_regval);
extern void dv03_enable(void);
extern void osd_page_clear(void);
extern void top_mode(void);
extern void encoder_reconfig(void);
extern void dec_ch_mode_set();
extern void enc_buf_clr_proc(void);
extern u8 key_check(void);
extern void wakeup_genesis(u8 mode);
#ifdef RS232_TO_PC_TRANSFER
extern xdata u8 gv_rs232_move_flag;
#endif
//######################################################################
//
//######################################################################
#define XCCORD 13
#define TIME_XCCORD 25
#define SCHEDULE_XCCORD 19
#ifndef SINGLE_CHANNEL
#define TMENU_FIRST 0
#define TMENU_START 0
#else
#ifdef SINGLE_CHANNEL_CH1_ONOFF_OSD
#define TMENU_FIRST 2//3
#define TMENU_START 2//3
#else
#define TMENU_FIRST 3//3
#define TMENU_START 3//3
#endif
#endif
#ifdef TMP_DEL
#ifdef LANIF
#define TMENU_LAST 9
#endif
#else
#ifdef DISPLAY_IP_ADDRESS
#define TMENU_LAST 9
#else
#ifdef RS232_TO_PC_TRANSFER
#define TMENU_LAST 9
#else
#ifdef POWER_ON_RECORD
#define TMENU_LAST 9
#else
#define TMENU_LAST 8
#endif
#endif
#endif
#endif
#define MAX_EVT_BUF 7
#if USE_ADJ
#define BRIGHTNESS_MIN 5
#define BRIGHTNESS_MAX 255
#define CONTRAST_MIN 5
#define CONTRAST_MAX 125
#define SATURATION_MIN 5
#define SATURATION_MAX 255
#define COLORTEMP_MIN 5
#define COLORTEMP_MAX 255
#endif
//######################################################################
//
//######################################################################
xdata u8 ntsc_code_frame_rate[9] = {0,1,2,3,5,6,9,14,29};
xdata u8 pal_code_frame_rate[9] = {0,1,2,3,5,7,11,24,24};
xdata u8 code_frame_rate[9];
xdata u8 gv_p_ch = 1;
xdata u8 gv_on_play_flag = 0;
xdata u8 gv_Current_Channel;
xdata u8 st_time_data[2][6];
xdata u8 ed_time_data[2][6];
xdata u8 gv_depth_1_menu = 100;
xdata u8 gv_depth_2_menu = 100;
xdata u8 gv_depth_3_menu = 100;
xdata u8 gv_cursor_position = 0;
xdata u8 gv_time_data[6];
xdata u8 gv_play_mode = NOPLAY_MODE; // Steve : Must be initialized for OSD
xdata u8 gv_rec_mode;
xdata u8 gv_PauseMode=0;
xdata u8 confirm_ok1 = 1;
xdata u8 confirm_ok2 = 1;
xdata u8 tmp_eprom_passwd_base[6];
xdata EvtNode gv_evt_start[MAX_EVT_BUF];
xdata EvtNode gv_evt_stop[MAX_EVT_BUF];
xdata u16 gv_evt_start_off[MAX_EVT_BUF];
xdata u16 gv_evt_stop_off[MAX_EVT_BUF];
xdata u16 gv_evt_start_num;
xdata u8 gv_evt_cnt;
xdata u8 gv_evt_first_idx;
xdata u8 gv_time_search_mode;
xdata u32 gv_lba_start;
#ifdef LANIF
xdata u8 gv_tmp_buf[18];
xdata u8 gv_x_pos;
xdata u8 gv_lan_restart = FALSE;
#endif
#ifdef RECORD_STOP_PASSWORD
xdata u8 record_stop_pwd_status = 0;
extern xdata u8 blink_time;
#endif
void EVENT_DISP(u8 hid, u8 cmd);
u8 TIME_SEARCH_input(u8 keyy);
void TIME_SEARCH_DISP2(u8 hid);
void PASSWORD_INPUT(u8 mode, u8 key);
void PASSWORD_MENUDISP(u8 mode);
void nvram_initialize(u8 msg_on);
void HDDINFO_RECORD_TIME_DISP(void);
void ds1307_time_set(void);
void en_top(void);
u32 LBA_decrement(u8 hddIndex, u32 lba);
u32 LBA_increment(u8 hddIndex, u32 lba);
void osd_put_num(u8 x, u8 y, u16 len, u16 num);
void update_target_time(u8 idx);
void play_message(u8 key);
u8 play_start(void);
void SearchNewEvent(void);
void TIME_SEARCH_DISP(void);
#ifdef NOT_JUNK
void get_time_for_play(u8 hddIndex, u32* start_lba, u8* start_time, u8* end_time);
#endif
u8 adjust_audio_frame(u8 mode);
void push_channel_button(u8 key);
#if USE_ADJ
void DISPATCH_Go(u8 key);
void DISPATCH_BrightnessMenu(void);
void DISPATCH_BrightnessGo(u8 key);
void DISPATCH_ContrastMenu(void);
void DISPATCH_ContrastGo(u8 key);
void DISPATCH_SaturationMenu(void);
void DISPATCH_SaturationGo(u8 key);
void DISPATCH_ACCamMenu(void);
void DISPATCH_ACCamGo(u8 key);
void DISPATCH_ColorTempMenu(void);
void DISPATCH_ColorTempGo(u8 key);
code u8 *apbMainMenu[4] =
#ifdef FONT_SC
{
//"12345678901234567"
"1: ", // 0 MENU_BRIGHTNESS
"2: ", // 1 MENU_CONTRAST
"3: ", // 2 MENU_SATURATION
"4: ",
};
#else
{
//"12345678901234567"
"Brightness ", // 0 MENU_BRIGHTNESS
"Contrast ", // 1 MENU_CONTRAST
"Saturation ", // 2 MENU_SATURATION
"Color Temperature",
};
#endif
#endif
//void test001(u8* hex)
//{
// osd_printf(XCCORD+ 4,osdgv_menu_base+7,2," ");
// osd_printf(XCCORD+ 4,osdgv_menu_base+7,2,hex);
//}
//================================================================
//
//================================================================
#define BLINK_X_CORD_CNTR 44
#define BLINK_Y_CORD_Y 11
void blinking_message(u8 length1, char* str1, u8 length2, char* str2)
{
xdata u8 i;
for(i=0;i<3;i++)
{
osd_printf(BLINK_X_CORD_CNTR-length1, BLINK_Y_CORD_Y, length1, str1);
if(length2)
osd_printf(BLINK_X_CORD_CNTR-length2, BLINK_Y_CORD_Y+1, length2, str2);
delay_time(50000,3);
osd_erase(BLINK_X_CORD_CNTR-length1, BLINK_Y_CORD_Y,length1);
if(length2)
osd_erase(BLINK_X_CORD_CNTR-length2, BLINK_Y_CORD_Y+1,length2);
delay_time(50000,2);
}
}
#ifdef FONT_SC
void blinking_message_sc(u8 length1, char* str1)
{
xdata u8 i;
for(i=0;i<3;i++)
{
osd_printf(BLINK_X_CORD_CNTR-length1, BLINK_Y_CORD_Y, length1, str1);
osd_putch((BLINK_X_CORD_CNTR-length1)/2+length1-2, BLINK_Y_CORD_Y,2);
delay_time(50000,3);
osd_erase(BLINK_X_CORD_CNTR-length1, BLINK_Y_CORD_Y,length1+1);
delay_time(50000,2);
}
}
#endif
//===============================================================================
//
//===============================================================================
u8 cal_cood_ary[12]={36,34,30,28,24,22,18,16,12,10,6,4};
u8 cal_cood(u8 movx)
{
u8 dataa;
dataa = 4;
if(gv_cursor_position<12)
dataa = cal_cood_ary[gv_cursor_position]+movx;
return dataa;
}
//===============================================================================
//
//===============================================================================
u8 bcd2bin(u8 bcdval)
{
u8 binval;
if(bcdval >= 0x10)
binval = (bcdval&0x0f) + 10*(bcdval>>4);
else
binval = bcdval;
return binval;
}
//===============================================================================
//
//===============================================================================
u8 bin2bcd(u8 binval)
{
u8 bcdval;
if(binval >= 10)
bcdval = ((binval/10) << 4) | (binval % 10);
else
bcdval = binval;
return bcdval;
}
//===============================================================================
//
//===============================================================================
void ds1307_time_set(void)
{
u8 i;
for(i=0;i<6;i++)
i2c_pkt_write(0xd0, (i>2)?i+1:i, bin2bcd(gv_time_data[i]));
}
//===============================================================================
//
//===============================================================================
void ds1307_time_read(void)
{
xdata u8 time_err=0;
u8 i;
for(i=0;i<6;i++)
gv_time_data[i] = bcd2bin(i2c_pkt_read(0xd0,(i>2)?i+1:i));
if(gv_time_data[0] > 59) time_err = 1; // sec
if(gv_time_data[1] > 59) time_err = 1; // min
if(gv_time_data[2] > 24) time_err = 1; // hour
if(gv_time_data[3] > 31 || gv_time_data[3] == 0) time_err = 1; // day
if(gv_time_data[4] > 12 || gv_time_data[4] == 0) time_err = 1; //month
if(gv_time_data[5] > 99) time_err = 1; //year
if(time_err == 1)
{
#ifdef DEBUG_ERR_TIME
printf("\n\rds1307_time_read err: ");
{int i; for(i=5;i>=0;i--) printf("%02d:", (int) gv_time_data[i]); }
#endif
gv_time_data[0] = 1;
gv_time_data[1] = 1;
gv_time_data[2] = 1;
gv_time_data[3] = 1;
gv_time_data[4] = 1;
gv_time_data[5] = 5; // 2005 is default value
time_err = 0;
ds1307_time_set();
}
}
//===============================================================================
//
//===============================================================================
void real_time_read(u8 option)
{
u8 i;
if(option)
{
for(i=0;i<6;i++)
gv_time_data[i] = bcd2bin(i2c_pkt_read(0xd0,(i>2)?i+1:i));
}
else
{
gv_time_data[0] = bcd2bin(i2c_pkt_read(0xd0,0x00));
if(gv_time_data[0] == 0)
{
gv_time_data[1] = bcd2bin(i2c_pkt_read(0xd0,0x01));
if(gv_time_data[1] == 0)
{
gv_time_data[2] = bcd2bin(i2c_pkt_read(0xd0,0x02));
if(gv_time_data[2] == 0)
{
gv_time_data[3] = bcd2bin(i2c_pkt_read(0xd0,0x04));
gv_time_data[4] = bcd2bin(i2c_pkt_read(0xd0,0x05));
gv_time_data[5] = bcd2bin(i2c_pkt_read(0xd0,0x06));
}
}
}
}
}
//===============================================================================
//
//===============================================================================
void LBA_read(u8 hddIndex)
{
xdata u8 ch0,ch1,ch2,ch3;
xdata u8 offset = (hddIndex)?0x21:0x25;// Current Writting LBA updated every one second
gv_WCurrent_LBA[hddIndex] = 0;
ch0 = i2c_pkt_read(0xd0,offset+0);
ch1 = i2c_pkt_read(0xd0,offset+1);
ch2 = i2c_pkt_read(0xd0,offset+2);
ch3 = i2c_pkt_read(0xd0,offset+3);
gv_WCurrent_LBA[hddIndex] =
((((u32)ch3)&0x000000ff)<<24)|
((((u32)ch2)&0x000000ff)<<16)|
((((u32)ch1)&0x000000ff)<<8)|
(((u32)ch0)&0x000000ff);
}
//===============================================================================
//
//===============================================================================
void LBA_write(u8 hddIndex)
{
xdata u32 long_data;
xdata u8 offset = (hddIndex)?0x21:0x25; // Current Writting LBA updated every one second
long_data = gv_WCurrent_LBA[hddIndex];
i2c_pkt_write(0xd0,offset+0, long_data&0x000000ff); long_data = long_data >> 8;
i2c_pkt_write(0xd0,offset+1, long_data&0x000000ff); long_data = long_data >> 8;
i2c_pkt_write(0xd0,offset+2, long_data&0x000000ff); long_data = long_data >> 8;
i2c_pkt_write(0xd0,offset+3, long_data&0x000000ff);
}
//===============================================================================
//
//===============================================================================
void HELP_MENUDISP(u8 option)
{
#ifndef NFS_1
switch(option)
{
#ifdef FONT_SC
case 0: //1234567890123456789012345678
osd_printf(19,osdgv_menu_base+12,28,"N (< >), N (ght) BC ");//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -