remote.c 2.16 KB
/*
 * remote.c
 *
 *  Created on: 2019-9-24
 *      Author: Windowns
 */
#include "c_def.h"
#include "debug.h"
#include "oem.h"

#ifdef REMOTE_ENABLE
#include "regmap.h"
//#include "interrupt.h"
//#include "hw_gpio.h"
//#include "hw_timer.h"

#include "app_timer.h"
//#include "app_gpio.h"
#include "remote.h"
#include "message.h"
#include "key_scan.h"
#include "app_main.h"
//#include "oem_string.h"
//#include <string.h>
#include "app_key.h"
//#include "app_ver.h"
//#include "hw_pll.h"
#include "mem_reloc.h"


void app_ir_keypress(U32 key_val) __INTERNAL_RAM_TEXT;
void app_ir_buf_recive(U32 buffer) __INTERNAL_RAM_TEXT;

volatile U32 remote_data;
volatile U32 remote_key;
U8 remote_key_state;
volatile U8 remote_repeat_valid;
volatile U8 remote_state;


void Remote_Init(void)
{
	remote_data = APP_KEY_INVALID;
	remote_key = APP_KEY_INVALID;
	remote_key_state = KEY_UP;
	remote_repeat_valid = FALSE;
	remote_state = RC_IDLE;
}


void app_ir_buf_recive(U32 buffer)
{
	int buf[4];
	int time[4];
	int level[4];
	int i;
	static U32 cumulative_time =0;
	static int pre_level=0;

	buf[0]=buf[1]=buf[2]=buf[3]=0xFF;

	for(i=0;i<4;i++)
	{
		buf[i] &= (buffer>>(i*8));
		level[i] = buf[i] & 0x80;
		time[i] = buf[i] & 0x7F;

		if((cumulative_time != 0)&&(pre_level != level[i]))
		{
			app_ir_message_send(pre_level,cumulative_time);
			cumulative_time = 0;
		}

		cumulative_time += time[i];
		
		if(time[i] < 0x7F)
		{
			app_ir_message_send(level[i],cumulative_time);
			cumulative_time = 0;
		}
		else
		{
			pre_level = level[i];
		}
		
	}
}

void app_ir_keypress(U32 key_val)
{
#ifndef REMOTE_DEBUG
	U32 rmt_key;
	U32 temp;
	U8 i;

	if (timer_data.remoteKeyUpTimer)
	{
		if (remote_key_state == KEY_DOWN)
		{
			//remote_key_state = KEY_UP;
			//uMsgSend (UI_REMOTE_KEY, KEY_UP, remote_key);
			//DBG_RMTPrintf("RMT:key up 0x%x\n\r", remote_key);
		}
	}

	remote_key = key_val;

	//remote key TO map key
	vRemoteMapMainKey((U32 *)&remote_key);
	remote_key = remote_key_to_app_key(remote_key);
	rmt_key = remote_key;

	remote_key_state = KEY_DOWN;

	uiMsgSend(UI_REMOTE_KEY, KEY_DOWN, rmt_key);
	
	app_timer_remoteKeyUpTimer_set(150);

	DBG_RMTPrintf("RMT:key down 0x%x\n\r", rmt_key);

#endif
}
#endif