📄 pthread_setup.c
字号:
/* set tabstop=4 *//******************************************************************************** * * * Copyright(C) 2004 Penta-Micro * * * * ALL RIGHT RESERVED * * * * This software is the property of Penta-Micro and is furnished under * * license by Penta-Micro. This software may be used only in accordance * * with the terms of said license. This copyright notice may not be * * removed, modified or obliterated without the prior written permission * * of Penta-Micro. * * * * This software may not be copyed, transmitted, provided to or otherwise * * made available to any other person, company, corporation or other entity * * except as specified in the terms of said license. * * * * No right, title, ownership or other interest in the software is hereby * * granted or transferred. * * * * The information contained herein is subject to change without notice and * * should not be construed as a commitment by Penta-Micro. * * * ******************************************************************************** MODULE NAME: PTHREAD_SETUP.C REVISION HISTORY: Date Ver Name Description ---------- --- --------------------- ----------------------------------------- 06/30/2004 2.0 CheulBeck(whitefe) Created 07/20/2005 2.1 JiGwanKang(xchannel) Modified ............................................................................... DESCRIPTION: This Module contains functions for Setup. ...............................................................................*/ /** ************************************************************************* ** ** includes ** ************************************************************************* **/#include <stdio.h>#include <ctype.h>#include <stddef.h> // offsetof()#include <sys/vfs.h> /* statfs() */#include "main.h" #include "pthread_setup.h"/** ************************************************************************* ** ** defines ** ************************************************************************* **/#define m_DEBUG(format, args...) printf(format, ## args);fflush(stdout); //#define m_DEBUG(format, args...) #define m_MSG(format, args...) printf(format, ## args);fflush(stdout);#define m_ERROR(format, args...) printf(format, ## args);fflush(stdout);/** ************************************************************************* ** ** typedefs ** ************************************************************************* **/ /** ************************************************************************* ** ** globals ** ************************************************************************* **/extern PTHREAD_STATE *gp_state_thread;extern SETUP_PARAM *gp_setup_param;const char *ptz_vendor_list[] = { "LPT-A100L ", "DRX-502A ", "PELCO D ", "NK-97CHE ", "SCC-641 ", "PELCO P ", "SJ2819RX ", "MRX-1000 ", "SPD1600/2500", "SBO-201P1 "}; /** ************************************************************************* ** ** locals ** ************************************************************************* **/static SETUP_OBJECT *sp_setup_object;/* display for hdd info */BOOL g_refresh_cmd = FALSE;UNS16 g_rec_time_list[] = { MIN_01, MIN_02, MIN_05, MIN_10, MIN_15, MIN_20, MIN_25, MIN_30, MIN_60 };/* Bitrate Quality string value list */UNS8 *bitrate_quality[] = { "ECON", " LOW", "NORM", "HIGH", " SUP" };/** ************************************************************************* ** ** forward declarations ** ************************************************************************* **/void *pthread_setup(void *args){ UNS16 ii; UNS16 input_value = 0; PTHREAD_ID start_id = 0; PTHREAD_BUF signal; FUNC_ID setup; RETURN ret; BOOL box_draw_flag = FALSE; m_DEBUG("\t!!!! pthread SETUP !!!!\n"); /* 1st. allocate live thread object */ if ( !(sp_setup_object = (SETUP_OBJECT *) malloc (sizeof(SETUP_OBJECT))) ) { m_ERROR("pthread_search.c:error In function 'malloc'\n"); return FAILURE; } memset(sp_setup_object, 0x00, sizeof(SETUP_OBJECT)); sp_setup_object->param = gp_setup_param; /* 2nd. arrange setup menu function */ setup.func_id[SETUP_PASSWORD].func_ptr = setup_password; setup.func_id[SETUP_MAIN].func_ptr = setup_main; setup.func_id[SETUP_GLOBAL_PARAM].func_ptr = setup_global_param; setup.func_id[SETUP_ENCODER_PARAM].func_ptr = setup_encoder_param; setup.func_id[SETUP_SYSTEM_PARAM].func_ptr = setup_system_param; // pentamicro 2006.01.11 setup.func_id[SETUP_WATERMARK_SETUP].func_ptr = setup_watermark_setup; setup.func_id[SETUP_MOTION_SETUP].func_ptr = setup_motion_setup; setup.func_id[SETUP_SENSOR_SETUP].func_ptr = setup_sensor_setup; setup.func_id[SETUP_SCHEDULE_SETUP].func_ptr = setup_schedule_setup; setup.func_id[SETUP_SP_TIME].func_ptr = setup_system_time; setup.func_id[SETUP_SP_NETWORK].func_ptr = setup_system_network; setup.func_id[SETUP_SP_CAMERA].func_ptr = setup_system_camera; setup.func_id[SETUP_SP_PASSWORD].func_ptr = setup_system_password; setup.func_id[SETUP_SP_HDD_MANAGEMENT].func_ptr = setup_system_hdd_manage; setup.func_id[SETUP_SP_PTZ].func_ptr = setup_system_ptz; setup.func_id[SETUP_SP_HDD_STATUS].func_ptr = setup_system_hdd_status; setup.func_id[SETUP_MOTION_AREA].func_ptr = setup_motion_area; /* 3rd. load osd to setup menu */ if ( osd_load_setup_menu(gp_setup_param) == FAILURE ) { m_ERROR("pthread_setup.c:error In function 'osd_load_setup_menu'\n"); return FAILURE; } /* 4th. set initial setup menu */ sp_setup_object->prev_id = SETUP_PASSWORD; sp_setup_object->cur_id = SETUP_PASSWORD; sp_setup_object->next_id = SETUP_MAIN; setup_clear_menu(sp_setup_object->cur_id); setup_create_menu(sp_setup_object->cur_id); setup_select_menu(sp_setup_object, 0); sp_setup_object->create_menu = 0; sp_setup_object->motion_menu = 0; tw2834_bg_box_draw(3, TRUE, 0x00, 50, 35, 80, 34); while (1) { /* waiting signal from input thread */ pthread_read_signal(&signal, PTHREAD_SETUP, TRUE); m_DEBUG("\tsignal> [setup][id:%02d][value:0x%04x]\n", signal.start_id, signal.m_value); /* receive start id */ sp_setup_object->sig_id = signal.start_id; sp_setup_object->sig_value = signal.m_value; switch (sp_setup_object->sig_id) { case PTHREAD_INPUT : /* call function */ ret = setup.func_id[sp_setup_object->cur_id].func_ptr(sp_setup_object); if (ret == ENDING) { gp_state_thread->state_main.state = IDLE; tw2834_bg_box_draw(3, FALSE, 0x00, 50, 35, 80, 34); tw2834_bg_box_draw(6, FALSE, 0x20, 47, 14, 93, 9); return 0; } else if (ret == FAILURE) { m_ERROR("pthread_setup.c:error: In function 'func_id[%d]'\n", sp_setup_object->cur_id); } if (sp_setup_object->create_menu) { if(!box_draw_flag) { tw2834_bg_box_draw(3, FALSE, 0x00, 50, 35, 80, 34); tw2834_bg_box_draw(6, TRUE, 0x20, 47, 14, 93, 9); box_draw_flag = TRUE; } setup_clear_menu(sp_setup_object->cur_id); setup_create_menu(sp_setup_object->cur_id); /* When to the free space displaying : disregard */ if(!g_refresh_cmd) setup_select_menu(sp_setup_object, 0); sp_setup_object->create_menu = 0; } else if (sp_setup_object->motion_menu) { setup_clear_menu(sp_setup_object->cur_id); setup_create_motion(sp_setup_object); setup_select_motion(sp_setup_object); sp_setup_object->motion_menu = 0; } break; default : break; } } /* end of while (!QUIT_SDVR_MAIN) */ return 0; }RETURN osd_load_setup_menu(SETUP_PARAM *psp){ S32 ii, jj; S32 value; S8 temp[8]; MENU_FONT_t *mft; SETUP_OBJECT *pso; pso = sp_setup_object; /* * GLOBAL PARAMETER */ mft = setup_menu_font[SETUP_GLOBAL_PARAM]; /* resolution : '0' 720 x 480(576), '1' 360 x 240(288) */ for (ii = 3; ii <= 7; ii += 2) { strcpy(mft[ii].str, "$"); } strcpy(mft[psp->gp.resolution*2 + 3].str, "#"); /* * ENCODER PARAMETER */ mft = setup_menu_font[SETUP_ENCODER_PARAM]; for (ii = 0; ii < MAX_CH_NUM; ii++) { /* flag conti rec : '0' off, '1' on */ if (psp->enc_ch[ii].flag_conti_rec) { strcpy(mft[ii + VALUE_CRF_CH1].str, " On"); } else { strcpy(mft[ii + VALUE_CRF_CH1].str, "Off"); } /* frame rate : 0 ~ 30 */ sprintf(temp, "%2d", fps_list[psp->enc_ch[ii].frame_rate]); strcpy(mft[ii + VALUE_FR_CH1].str, temp); /* CBR Q value : 0 ~ 4 ( 0.5M ~ 6.0M ) */ sprintf(temp, "%s", bitrate_quality[psp->enc_ch[ii].cbr_q]); strcpy(mft[ii + VALUE_BRQ_CH1].str, temp); /* SCHEDULE FLAG : '0' OFF, '1' ON, default is '0' */ if (psp->enc_ch[ii].schedule.flag) { strcpy(mft[ii + VALUE_SF_CH1].str, " On"); } else { strcpy(mft[ii + VALUE_SF_CH1].str, "Off"); } } /* * SYSTEM PARAMETER */ mft = setup_menu_font[SETUP_SP_NETWORK]; /* network ip configuration : default 192.168.1.100 */#if 1//big endian for (ii = 0; ii < 4; ii ++) { sprintf(temp, "%03d", (psp->sys.network.ipaddr>>(24 - ii * 8))&0xff); strcpy(mft[ii * 2 + 2].str, temp); }#endif /* network netmask configuration : default 255.255.255.0 */#if 1//big endian for (ii = 0; ii < 4; ii ++) { sprintf(temp, "%03d", (psp->sys.network.netmask>>(24 - ii * 8))&0xff); strcpy(mft[ii * 2 + 10].str, temp); }#endif /* network gateway configuration : default 192.168.1.1 */#if 1//big endian for (ii = 0; ii < 4; ii ++) { sprintf(temp, "%03d", (psp->sys.network.gateway>>(24 - ii * 8))&0xff); strcpy(mft[ii * 2 + 18].str, temp); }#endif /* password configuration : default 0000 */ mft = setup_menu_font[SETUP_SP_PASSWORD]; #if 1//big endian for (ii = 0; ii < USER_NUM; ii ++) { sprintf(temp, "%1d%1d%1d%1d", (psp->sys.password[ii].value >> 12) & 0x0f, (psp->sys.password[ii].value >> 8) & 0x0f, (psp->sys.password[ii].value >> 4) & 0x0f, psp->sys.password[ii].value & 0x0f); strcpy(mft[ii * 2 + 2].str, temp); }#endif return SUCCESS;}RETURN setup_create_menu(SETUP_ID id){ UNS16 ii = 0; MENU_FONT_t *font; tw2834_osd_clear(ALL_PATH); font = &setup_menu_font[id][ii]; while (font->xstart >= 0) { tw2834_write_string(X_PATH, font->xstart, font->ystart, NORMAL, NORMAL, font->str); /* Warnning */ font = &setup_menu_font[id][++ii]; }}void setup_clear_menu(SETUP_ID id){ tw2834_osd_clear(ALL_PATH);}void setup_select_menu(SETUP_OBJECT *pso, S16 up_down){ MENU_FONT_t *font; if (up_down == 0) { pso->cur_loc = setup_menu_active[pso->cur_id].start; } font = &setup_menu_font[pso->cur_id][pso->cur_loc]; tw2834_write_string(X_PATH, font->xstart, font->ystart, NORMAL, NORMAL, font->str); while (setup_menu_font[pso->cur_id][pso->cur_loc].active >= 0) { pso->cur_loc += up_down; if (pso->cur_loc == -1) { pso->cur_loc = setup_menu_active[pso->cur_id].end; } if (setup_menu_font[pso->cur_id][pso->cur_loc].active == -1) { pso->cur_loc = 0; } else if (setup_menu_font[pso->cur_id][pso->cur_loc].active) { break; } } font = &setup_menu_font[pso->cur_id][pso->cur_loc]; tw2834_write_string(X_PATH, font->xstart, font->ystart, YELLOW, BLINK, font->str); }void setup_update_osd(SETUP_OBJECT *pso){ MENU_FONT_t *font; font = &setup_menu_font[pso->cur_id][pso->osd_loc]; tw2834_write_string(X_PATH, font->xstart, font->ystart, font->color, font->attribute, font->str); }void setup_create_motion(SETUP_OBJECT *pso){ tw2834_motion_block_init(pso->cur_ch, pso->param->gp.video_form, TRUE); tw2834_write_string(X_PATH, 17, 3, NORMAL, NORMAL, "MOTION AREA"); }void setup_select_motion(SETUP_OBJECT *pso){ tw2834_cursor_set_pos(pso->cur_ch, pso->cur_loc % MB_X_NUM, pso->cur_loc / MB_X_NUM);}void setup_update_motion(SETUP_OBJECT *pso){ UNS32 x, y; UNS32 x_start; UNS32 y_start; UNS32 x_blk_size, y_blk_size; if(pso->param->gp.resolution == D1) { /* size(2X2 bitmap block) for D1 */ x_start = pso->cur_loc%MB_X_NUM*MB_2X2_SIZE; x_blk_size = MB_2X2_SIZE; y_start = pso->cur_loc/MB_X_NUM*MB_2X2_SIZE; y_blk_size= MB_2X2_SIZE; } else { /* size(1X1 bitmap block) for CIF */ x_start = pso->cur_loc%MB_X_NUM; x_blk_size = MB_1X1_SIZE; y_start = pso->cur_loc/MB_X_NUM; y_blk_size = MB_1X1_SIZE; } if(pso->param->enc_ch[pso->cur_ch].motion.area[y_start] & (1 << x_start)) { /* unset flag motion area(AT2041 Table) */ for (y = y_start; y < y_start+y_blk_size; y++) { for (x = x_start; x < x_start+x_blk_size; x++) { pso->param->enc_ch[pso->cur_ch].motion.area[y] &= ~(1 << x); } } /* display for motion area(TW2834) */ tw2834_cursor_select(pso->cur_ch, pso->cur_loc%MB_X_NUM, pso->cur_loc/MB_X_NUM, YELLOW, FALSE); } else { /* set flag motion area(AT2041 Table) */ for (y = y_start; y < y_start+y_blk_size; y++) { for (x = x_start; x < x_start+x_blk_size; x++) { pso->param->enc_ch[pso->cur_ch].motion.area[y] |= (1 << x); } } /* display for motion area(TW2834) */ tw2834_cursor_select(pso->cur_ch, pso->cur_loc%MB_X_NUM, pso->cur_loc/MB_X_NUM, YELLOW, TRUE); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -