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

📄 pthread_input.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_INPUT.C    REVISION HISTORY:    Date       Ver Name                  Description  ---------- --- --------------------- -----------------------------------------  06/30/2004 2.0 CheulBeck(whitefe)       Created    ...............................................................................   DESCRIPTION:    This Module contains functions for Input.   ...............................................................................*/   /** ************************************************************************* **  ** includes ** ************************************************************************* **/#include <stdio.h>#include <fcntl.h>#include <sys/termios.h>#include <sys/ioctl.h>#include "main.h"#include "pthread_input.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;extern BOOL                        g_refresh_cmd;#if 1//rec signal lossextern UNS8 rec_osd_status;#endif/** ************************************************************************* **  ** locals ** ************************************************************************* **//** ************************************************************************* **  ** forward declarations ** ************************************************************************* **/// pentamicro 2006.01.11void *pthread_input(void *args){	UNS16			ii;	UNS16			count;	UNS16               	sync_timer_cnt=0;	UNS16 			rec_cnt;	UNS32			buf[64];	UNS32			value;	UNS8			r_data[MAX_CH_NUM];	UNS8			w_data[MAX_CH_NUM];		UNS8			prev_data[MAX_CH_NUM];				S32				fd;		time_t			cur_time;	time_t			prev_time;			IR_IOCTL_T		cmd;	PTHREAD_BUF		signal;		if ( (fd = open("/dev/405_gpio_ir", O_RDWR)) < 0 ) {		m_ERROR("pthread_input.c:error: In function 'open'\n");		return 0;	}	for (ii = 0; ii < MAX_CH_NUM; ii++) {			r_data[ii] = 0;		w_data[ii] = 0;				prev_data[ii] = 0;	}		cmd = IR_VALUE;	count = 0;	value = 0;	cur_time = 0;	prev_time = 0;		while (1) {//printf("1234");			ioctl(fd, cmd, &value);	if( value != 0xff) {		if (value != 0)					/* 1st. send input data to other threads */			switch (value) {				case SDVR_KEY_POWER :				case SDVR_KEY_OSD :				case SDVR_KEY_1 :				case SDVR_KEY_2 :				case SDVR_KEY_3 :				case SDVR_KEY_4 :				case SDVR_KEY_5 :				case SDVR_KEY_6 :				case SDVR_KEY_7 :				case SDVR_KEY_8 :				case SDVR_KEY_9 :				case SDVR_KEY_0 :				case SDVR_KEY_PLUS :				case SDVR_KEY_MINUS :				case SDVR_KEY_SETUP :				case SDVR_KEY_SUB_PLUS :				case SDVR_KEY_SUB_MINUS :				case SDVR_KEY_LEFT :				case SDVR_KEY_UP :				case SDVR_KEY_DOWN :				case SDVR_KEY_RIGHT :				case SDVR_KEY_SEL :				case SDVR_KEY_F1 :				case SDVR_KEY_F2 :				case SDVR_KEY_F3 :				case SDVR_KEY_F4 :				case SDVR_KEY_F5 :				case SDVR_KEY_REW :								case SDVR_KEY_PLAY :				case SDVR_KEY_FF :								case SDVR_KEY_REC :				case SDVR_KEY_STOP :								case SDVR_KEY_SLOW :					m_DEBUG("!!! INPUT VALUE: 0x%02x\n", value);					signal.start_id = PTHREAD_INPUT;					signal.m_value = (UNS32)value;#if 1//rec signal loss 					if(value == SDVR_KEY_REC)						rec_osd_status = TRUE;#endif												if (pthread_send_signal(&signal, PTHREAD_MAIN) == FALSE) {						m_ERROR("pthread_input.c:error: In function 'pthread_send_signal'\n");					} 								break;				default :					break;						}					}		/* 3rd. get current time */		time(&cur_time);		if (cur_time != prev_time) {			/* set for current time sync, At 4 hour standing update ( 4(h) * 60(m) *60(s) = 14400 sec ) */			if(!(sync_timer_cnt % 14400)) 				time_sync();			sync_timer_cnt++;						memcpy(&gp_state_thread->state_live.cur_time, localtime(&cur_time), sizeof(struct tm));			if(g_refresh_cmd) {				signal.start_id = PTHREAD_INPUT;				signal.m_value = TEXTUPDATE_CMD;				if (pthread_send_signal(&signal, PTHREAD_MAIN) == FALSE) {					m_ERROR("pthread_input.c:error: In function 'pthread_send_signal'\n");				}			}			signal.start_id = PTHREAD_MANAGER;			signal.m_signal = SIGNAL_2;#if 1//rec signal loss bug 			rec_cnt = 0;			while(rec_osd_status) {				usleep(10);				rec_cnt++;				if(rec_cnt >= 30)  {					rec_osd_status = FALSE;					break;				}			}#endif										if (pthread_send_signal(&signal, PTHREAD_LIVE) == FALSE) {				m_ERROR("pthread_input.c:error: In function 'pthread_send_signal'\n");			} 					prev_time = cur_time;		}		buf[0]= 0xff;		usleep(10000);	}	close(fd);}#if 0void *pthread_input(void *args){	UNS16			ii;	S32				fd_ir_rs232;		time_t			cur_time=0;	time_t			prev_time=0;			PTHREAD_BUF	signal;	struct termios	rs232_attr;	UNS8			value, buf[64];	UNS16 			rec_cnt;	UNS16               sync_timer_cnt=0;	m_DEBUG("\t!!! pthread INPUT !!! \n");		if ( (fd_ir_rs232 = open ("/dev/ttyS1", O_RDWR | O_NOCTTY)) < 0 ) {		m_ERROR("pthread_input.c:error: In function 'open'\n");		return;	}	rs232_attr.c_oflag = 0;	rs232_attr.c_lflag = 0;	rs232_attr.c_iflag = IGNBRK | IGNPAR;	rs232_attr.c_cflag = B9600 | CS8 | CREAD | CLOCAL;	tcsetattr (fd_ir_rs232, TCSANOW, &rs232_attr);	memset(buf, 0xff, sizeof(buf));	while (1) {		read(fd_ir_rs232, buf, 64);		value= buf[0];		if( value != 0xff) {			/* 1st. send input data to other threads */			switch (value) {				case SDVR_KEY_POWER :				case SDVR_KEY_OSD :				case SDVR_KEY_1 :				case SDVR_KEY_2 :				case SDVR_KEY_3 :				case SDVR_KEY_4 :				case SDVR_KEY_5 :				case SDVR_KEY_6 :				case SDVR_KEY_7 :				case SDVR_KEY_8 :				case SDVR_KEY_9 :				case SDVR_KEY_0 :				case SDVR_KEY_PLUS :				case SDVR_KEY_MINUS :				case SDVR_KEY_SETUP :				case SDVR_KEY_SUB_PLUS :				case SDVR_KEY_SUB_MINUS :				case SDVR_KEY_LEFT :				case SDVR_KEY_UP :				case SDVR_KEY_DOWN :				case SDVR_KEY_RIGHT :				case SDVR_KEY_SEL :				case SDVR_KEY_F1 :				case SDVR_KEY_F2 :				case SDVR_KEY_F3 :				case SDVR_KEY_F4 :				case SDVR_KEY_F5 :				case SDVR_KEY_REW :								case SDVR_KEY_PLAY :				case SDVR_KEY_FF :								case SDVR_KEY_REC :				case SDVR_KEY_STOP :								case SDVR_KEY_SLOW :					m_DEBUG("!!! INPUT VALUE: 0x%02x\n", value);					signal.start_id = PTHREAD_INPUT;					signal.m_value = (UNS32)value;#if 1//rec signal loss 					if(value == SDVR_KEY_REC)						rec_osd_status = TRUE;#endif												if (pthread_send_signal(&signal, PTHREAD_MAIN) == FALSE) {						m_ERROR("pthread_input.c:error: In function 'pthread_send_signal'\n");					} 								break;				default :					break;						}					}		/* 3rd. get current time */		time(&cur_time);		if (cur_time != prev_time) {			/* set for current time sync, At 4 hour standing update ( 4(h) * 60(m) *60(s) = 14400 sec ) */			if(!(sync_timer_cnt % 14400)) 				time_sync();			sync_timer_cnt++;						memcpy(&gp_state_thread->state_live.cur_time, localtime(&cur_time), sizeof(struct tm));			if(g_refresh_cmd) {				signal.start_id = PTHREAD_INPUT;				signal.m_value = TEXTUPDATE_CMD;				if (pthread_send_signal(&signal, PTHREAD_MAIN) == FALSE) {					m_ERROR("pthread_input.c:error: In function 'pthread_send_signal'\n");				}			}			signal.start_id = PTHREAD_MANAGER;			signal.m_signal = SIGNAL_2;#if 1//rec signal loss bug 			rec_cnt = 0;			while(rec_osd_status) {				usleep(10);				rec_cnt++;				if(rec_cnt >= 30)  {					rec_osd_status = FALSE;					break;				}			}#endif										if (pthread_send_signal(&signal, PTHREAD_LIVE) == FALSE) {				m_ERROR("pthread_input.c:error: In function 'pthread_send_signal'\n");			} 					prev_time = cur_time;		}		buf[0]= 0xff;		usleep(10000);	}	close(fd_ir_rs232);}#endifvoid time_sync(void){	struct tm cur_time;	struct timeval tv = { 0L, 0L };		get_cur_time(&cur_time);	cur_time.tm_year -= 1900;      cur_time.tm_mon -= 1; 		tv.tv_sec = mktime(&cur_time);	settimeofday(&tv, NULL);}/* end of pthread_input.c */

⌨️ 快捷键说明

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