itop4412添加按键key

1.kernel部分修改

在mach-itop4412.c(arch/arm/mach-exynos下)static struct gpio_keys_button gpio_buttons[]添加

{
                .gpio           = EXYNOS4_GPX2(6),
                //.code         = 38,
                .code           = KEY_YCC_PHONE,
                .desc           = "BUTTON6",
                .active_low     = 1,
                .wakeup         = 0,
        },
{
                .gpio           = EXYNOS4_GPX3(5),
                //.code         = 38,
                .code           = KEY_YCC_BREAK,
                .desc           = "BUTTON7",
                .active_low     = 1,
                .wakeup         = 0,
        }


由于我所用的引脚冲突,需要在setup-keypad.c(arch/arm/mach-exynos下)注释掉冲突引脚,代码如下

#include <linux/gpio.h>
#include <plat/gpio-cfg.h>

void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols)
{
	/* Keypads can be of various combinations, Just making sure */
#if defined(CONFIG_CPU_TYPE_SCP_SUPPER) || defined(CONFIG_CPU_TYPE_POP_SUPPER) || defined(CONFIG_CPU_TYPE_POP2G_SUPPER)
	/* Set all the necessary GPX2 pins: KP_ROW[x] */
	s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), 2,
					 S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);

	/*GPL2: KP_COL[x] */
	s3c_gpio_cfgrange_nopull(EXYNOS4_GPL2(0), 1, S3C_GPIO_SFN(3));
#elif  defined(CONFIG_CPU_TYPE_SCP_ELITE) || defined(CONFIG_CPU_TYPE_POP_ELITE) || defined(CONFIG_CPU_TYPE_POP2G_ELITE)
	//ROW_6
	/*s3c_gpio_cfgall_range(EXYNOS4_GPX2(6), 1,
                                         S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);

	//ROW_7
	s3c_gpio_cfgall_range(EXYNOS4_GPX2(7), 1,
                                         S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);

	//ROW_8
	s3c_gpio_cfgall_range(EXYNOS4_GPX3(0), 1,
                                         S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);

	//ROW_13
	s3c_gpio_cfgall_range(EXYNOS4_GPX3(5), 1,
                                         S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);

	//COL_0
	s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(0), 1, S3C_GPIO_SFN(3));

	//COL_3
	s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(3), 1, S3C_GPIO_SFN(3));

	//COL_5
	s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(5), 1, S3C_GPIO_SFN(3));

	//COL_6
	s3c_gpio_cfgrange_nopull(EXYNOS4_GPX1(6), 1, S3C_GPIO_SFN(3));*/
#endif
}

为了后面安卓系统调用,修改input.h(include/linux下)添加按键定义

#define KEY_YCC_PHONE   251
#define KEY_YCC_BREAK   252

linux部分修改就这样了

2.安卓部分修改,有点多

首先需要修改的是和kernel对应的文件Generic.kl(iTop4412_ICS_git\frameworks\base\data\keyboards)

key 251   KEY_YCC_PHONE
key 252   KEY_YCC_BREAK
然后依次修改下面文件了ANPKeyCodes.h(iTop4412_ICS_git\external\webkit\Source\WebKit\android\plugins)的enum ANPKeyCodes 下添加

	kKeyYccPhone_ANPKeyCode = 211,
	kKeyYccBreak_ANPKeyCode = 212,

attrs.xml(iTop4412_ICS_git\frameworks\base\core\res\res\values)的<attr name="keycode">下添加

		<enum name="KEYCODE_KEY_YCC_PHONE" value="211" />
		<enum name="KEYCODE_KEY_YCC_BREAK" value="212" />
Input.cpp(iTop4412_ICS_git\frameworks\base\libs\ui)的bool KeyEvent::isSystemKey(int32_t keyCode) 下添加

		case AKEYCODE_KEY_YCC_PHONE:
		case AKEYCODE_KEY_YCC_BREAK:
KeycodeLabels.h(iTop4412_ICS_git\frameworks\base\include\ui)的static const KeycodeLabel KEYCODES[]下添加

	{ "KEY_YCC_PHONE", 211 },
	{ "KEY_YCC_BREAK", 212 },
keycodes.h(iTop4412_ICS_git\frameworks\base\native\include\android)下添加

	AKEYCODE_KEY_YCC_PHONE   = 211,
	AKEYCODE_KEY_YCC_BREAK   = 212,
KeyEvent.java(iTop4412_ICS_git\frameworks\base\core\java\android\view)的public class KeyEvent extends InputEvent implements Parcelable下面添加

	/** {@hide} */
	public static final int KEYCODE_KEY_YCC_PHONE      = 211;
	/** {@hide} */
	public static final int KEYCODE_KEY_YCC_BREAK      = 212;
还有  private static void populateKeycodeSymbolicNames()里面添加

	names.append(KEYCODE_KEY_YCC_PHONE, "KEYCODE_KEY_YCC_PHONE");
        names.append(KEYCODE_KEY_YCC_BREAK, "KEYCODE_KEY_YCC_BREAK");

其实仔细看一下KeyEvent.java文件的public class KeyEvent extends InputEvent implements Parcelable下面有一段说明的
    // NOTE: If you add a new keycode here you must also add it to:
    //  isSystem()
    //  native/include/android/keycodes.h
    //  frameworks/base/include/ui/KeycodeLabels.h
    //  external/webkit/WebKit/android/plugins/ANPKeyCodes.h
    //  frameworks/base/core/res/res/values/attrs.xml
    //  emulator?
    //  LAST_KEYCODE
    //  KEYCODE_SYMBOLIC_NAMES
    //
    //  Also Android currently does not reserve code ranges for vendor-
    //  specific key codes.  If you have new key codes to have, you
    //  MUST contribute a patch to the open source project to define
    //  those new codes.  This is intended to maintain a consistent
    //  set of key code definitions across all Android devices.

    // Symbolic names of all key codes.
写了需要修改的文件,可以按照他说的修改,名字什么的都是需要对应的,还需要和kernel对应起来,Android才能识别到kernel里面的按键


公司破电脑编译个Android真慢!







本人同时在搞uboot和kernel移植,uboot201607移植已经成功,kernel4.1.36移植也成功,在搞驱动中,有兴趣的可以一起学习,互相交流
QQ:792452536  QQ群:454224407





在 2012 年,四核 ARM 处理器还是个新鲜事物,但短短一年时间之后,嵌入式多核系统 已经深入人心,并开始大面积普及应用,以极快的速度向工控、仪表等行业延伸,这些都是我 们始料不及的。 面对这样的形势,我们是固守还是迎接新的挑战?答案是肯定的,世界的潮流永远是浩 浩荡荡,不会停止前进的脚步。 如果我们固守,老旧的芯片价格将越来越贵,例如多年前大量使用的 SDRAM 价格已经 很高昂,几年前的 DDR2 也开始不便宜,现在的 DDR3 反倒性价比更高,其他芯片包括存储 介质也是这样。 如果我们停滞不前,一些新系统、新架构所带来的生产力将不能在新产品中体现,竞争 能力以及产品优势随之会受到影响。 同时,以前掌握的知识和能力将逐渐陈旧,越来越不能适应时代不断发展、需求不断进 步给我们提出的新要求。 发展是硬道理,尤其在信息技术这个领域,只有不断学习,积极改变才能把握先机,赢 得更多的机遇和挑战。 从架构上来讲,多核系统比单核要复杂很多,性能也成倍增长,但掌握它真的很难吗? 实际上,从嵌入式系统开发的角度来看,所谓的‘四核’其实并没有多少改变,留给我 们开发人员的工作跟以前也没有多少差别,因为 Linux 本身一直是支持多核的。 实际开发的时候,我们会发现,多核系统的驱动和应用程序的编程方式、编程理念、编 译工具、以及开发方法和原来单核系统并无差别。 作为一款开发板的产品手册,我们将尽可能详尽的为大家讲解 Exynos 4412 这款处理器 的系统应用特点,对于开发过程中可能碰到的难点和问题给予较全面的说明。 欢迎广大用户提出宝贵意见,便于我们更好的改进和提高!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值