📄 pthread_input.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 + -