⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pthread_setup.c

📁 1、基于韩国at2041芯片开发的Linux环境的DVR代码。 2、以原来代码进行了修改。 3、主要修改网络通讯出现异常问题处理 4、硬盘覆盖录像不起作用
💻 C
📖 第 1 页 / 共 5 页
字号:
/* 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 + -