#ifdef LINUX_EVN
//socket
#include <sys/socket.h>
#include <linux/netlink.h>
#include <sys/un.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
#endif
/发送back硬按键定时器的标志位
static int flag_back_timer=1;void set_back_send_timer(int tv_sec,int tv_usec);
/*
* 开始链接BACK发送的处理函数
*/
void back_send_timer_func(int sig) /* 定时事件代码 */
{
// 定时器溢出,如果此时用户点击车机BACK硬按键,则会发送WM_PLINK_HARDKEY_BACK_DOWN
flag_back_timer=1;
}
/*
* 设置定时器时间,设置完后定时器会在指定时间触发back_send_timer_func 函数
*/
void set_back_send_timer(int tv_sec,int tv_usec)
{
INFO("set_back_send_timer \n");
struct itimerval back_send_timer_value;
back_send_timer_value.it_value.tv_usec = tv_usec;
back_send_timer_value.it_value.tv_sec = tv_sec;
signal(SIGALRM, back_send_timer_func); /* 捕获定时信号 */
setitimer(ITIMER_REAL, &back_send_timer_value, NULL); /* 定时开始 */
}
使用如下:
if( park_status==PARK_OFF
|| (park_status==PARK_ON && android_choose==ANDROID_UNAGREEN)
|| (park_status==PARK_ON && android_choose==ANDROID_AGREEN&&DaLink_MainMenu_Status==DALINK_MAIN_MENU__BACKGROUND)
|| (park_status==PARK_ON && android_choose==ANDROID_NULL&&DaLink_MainMenu_Status==DALINK_MAIN_MENU__BACKGROUND))
{
//为避免用户频繁的点击车机的BACK按键,利用定时器过滤BACK硬按键消息
if(flag_back_timer==1)
{
msg.MsgType = WM_PLINK_HARDKEY_BACK_DOWN;
sendMsgToPhonelink(&msg);
INFO(" SendMsgToPhonelink WM_PLINK_HARDKEY_BACK_DOWN \n");
flag_back_timer=0;
set_back_send_timer(0,500000);
INFO("set_back_send_timer(1,0)\n");
}
else
{
INFO("Abandon WM_PLINK_HARDKEY_BACK_DOWN\n");
}