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

📄 pthread_schedule.c

📁 1、基于韩国at2041芯片开发的Linux环境的DVR代码。 2、以原来代码进行了修改。 3、主要修改网络通讯出现异常问题处理 4、硬盘覆盖录像不起作用
💻 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_SCHEDULE.C    REVISION HISTORY:    Date       Ver Name                  Description  ---------- --- --------------------- -----------------------------------------  06/28/2004 2.0 CheulBeck(whitefe)       Created    ...............................................................................   DESCRIPTION:    This Module contains functions for schdeule record.   ...............................................................................*/   /** ************************************************************************* **  ** includes ** ************************************************************************* **/#include <stdio.h>#include "main.h"#include "pthread_schedule.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;  /** ************************************************************************* **  ** locals ** ************************************************************************* **/static SCHEDULE_OBJECT	*sp_schedule_object;/** ************************************************************************* **  ** forward declarations ** ************************************************************************* **/void *pthread_schedule(void *args){	PTHREAD_ID		start_id = 0;	PTHREAD_BUF		signal;	m_DEBUG("\t!!! pthread SCHEDULE !!!\n");	/* 1st. allocate live thread object */	if ( !(sp_schedule_object = (SCHEDULE_OBJECT *) malloc (sizeof(SCHEDULE_OBJECT))) ) {		m_ERROR("pthread_schedule.c:error In function 'malloc'\n");		return FAILURE;			}		memset(sp_schedule_object, 0, sizeof(SCHEDULE_OBJECT));	while (1) {		/* 2nd. get current time */		get_current_time(sp_schedule_object);		/* 3rd. check schedule time event every one second */		if (time_filter(sp_schedule_object) == TRUE) {			/* 4th. check state for schedule record */			check_state_schedule_rec(sp_schedule_object);		}		/* 5th. idle time */		usleep(500000); // 500ms		 	} /* end of while (!QUIT_SDVR_MAIN) */	return 0;}RETURN get_current_time(SCHEDULE_OBJECT *pso) {	time_t	p_time;		time(&p_time);	memcpy(&pso->tm_cur, localtime(&p_time), sizeof(pso->tm_cur));	return SUCCESS;}	BOOL time_filter(SCHEDULE_OBJECT *pso) {	UNS16	ii;	UNS16	flag_schedule;	pso->param = gp_setup_param;	flag_schedule = 0;	for (ii = 0; ii < MAX_CH_NUM; ii ++) {		flag_schedule += pso->param->enc_ch[ii].schedule.flag;	}	if (flag_schedule) {	// check setup parameter flag for schedule 		if ( pso->tm_cur.tm_sec != pso->tm_prev.tm_sec ) {			pso->tm_prev.tm_sec = pso->tm_cur.tm_sec;			return TRUE;		}	}	return FALSE;}	RETURN check_state_schedule_rec(SCHEDULE_OBJECT *pso) {	UNS16	ii;	PTHREAD_BUF		signal;			pso->param = gp_setup_param;	pso->state = gp_state_thread;	for (ii = 0; ii < MAX_CH_NUM; ii ++) {		/* reset schedule state parameter */		if (pso->param->enc_ch[ii].schedule.flag != pso->flag_prev[ii]) {			if (!pso->param->enc_ch[ii].schedule.flag) {				if (pso->state->state_enc.enc_ch[ii].schedule) {					pso->state->state_enc.enc_ch[ii].schedule = 0;					pso->state->state_enc.schedule_rec = pso->state->state_enc.enc_ch[0].schedule +													pso->state->state_enc.enc_ch[1].schedule +													pso->state->state_enc.enc_ch[2].schedule +													pso->state->state_enc.enc_ch[3].schedule;					/* send massage to manager thread */					signal.start_id = PTHREAD_SCHEDULE;					signal.m_signal = SIGNAL_1;					signal.m_channel = ii;					if (pthread_send_signal(&signal, PTHREAD_MANAGER) == FALSE) {						m_ERROR("main.c:error: In function 'pthread_send_signal'\n");					}												pso->state_prev[ii] = 0;				}			}			pso->flag_prev[ii] = pso->param->enc_ch[ii].schedule.flag;		}		/* check state for schedule record */		if (pso->param->enc_ch[ii].schedule.flag) {	// check flag			if ((pso->tm_cur.tm_hour * 60 + pso->tm_cur.tm_min >= 				pso->param->enc_ch[ii].schedule.from_time[pso->tm_cur.tm_wday].tm_hour * 60 +				pso->param->enc_ch[ii].schedule.from_time[pso->tm_cur.tm_wday].tm_min) &&				(pso->tm_cur.tm_hour * 60 + pso->tm_cur.tm_min < 				pso->param->enc_ch[ii].schedule.to_time[pso->tm_cur.tm_wday].tm_hour * 60 +				pso->param->enc_ch[ii].schedule.to_time[pso->tm_cur.tm_wday].tm_min)) 	// check time			{				pso->state->state_enc.enc_ch[ii].schedule = 1;									if (pso->state->state_enc.enc_ch[ii].schedule != pso->state_prev[ii]) {	// check event					pso->state->state_enc.schedule_rec = 1;					/* send massage to manager thread */					signal.start_id = PTHREAD_SCHEDULE;					signal.m_signal = SIGNAL_0;					signal.m_channel = ii;					if (pthread_send_signal(&signal, PTHREAD_MANAGER) == FALSE) {						m_ERROR("main.c:error: In function 'pthread_send_signal'\n");					}																	pso->state_prev[ii] = pso->state->state_enc.enc_ch[ii].schedule;				}								} else {				pso->state->state_enc.enc_ch[ii].schedule = 0;				if (pso->state->state_enc.enc_ch[ii].schedule != pso->state_prev[ii]) {	// check event										pso->state->state_enc.schedule_rec = pso->state->state_enc.enc_ch[0].schedule +													pso->state->state_enc.enc_ch[1].schedule +													pso->state->state_enc.enc_ch[2].schedule +													pso->state->state_enc.enc_ch[3].schedule;					/* send massage to manager thread */					signal.start_id = PTHREAD_SCHEDULE;					signal.m_signal = SIGNAL_1;					signal.m_channel = ii;					if (pthread_send_signal(&signal, PTHREAD_MANAGER) == FALSE) {						m_ERROR("main.c:error: In function 'pthread_send_signal'\n");					}												pso->state_prev[ii] = pso->state->state_enc.enc_ch[ii].schedule;				}								}		}	}	return SUCCESS;}	/* end of pthread_schedule.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -