C++程序  |  75行  |  1.76 KB

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <boot/boot.h>
#include <boot/board.h>
#include <boot/gpio_keypad.h>

#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
static unsigned int dream_row_gpios[] = {
#if 0 // unused?
    35, /* KP_MKOUT0 */
    34, /* KP_MKOUT1 */
    33, /* KP_MKOUT2 */
    32, /* KP_MKOUT3 */
    31, /* KP_MKOUT4 */
    23, /* KP_MKOUT5 */
#endif
#if 1
    30, /* KP_MKOUT6 */
    78, /* KP_MKOUT7 */
#endif
};

static unsigned int dream_col_gpios[] = {
#if 1 // main buttons
    42, /* KP_MKIN0 */
    41, /* KP_MKIN1 */
    40, /* KP_MKIN2 */
    39, /* KP_MKIN3 */
#endif
#if 1 // side buttons
    38, /* KP_MKIN4 */
    37, /* KP_MKIN5 */
    36, /* KP_MKIN6 */
#endif
};
static gpio_keypad_info dream_keypad = {
    .output_gpios = dream_row_gpios,
    .input_gpios = dream_col_gpios,
    .noutputs = ARRAY_SIZE(dream_row_gpios),
    .ninputs = ARRAY_SIZE(dream_col_gpios),
    .settle_time = 5000,
    .polarity = 0
};

static void keypad_poll()
{
    static int skip = 0;
    skip++;
    if(skip > 10) {
        gpio_keypad_scan_keys(&dream_keypad);
        skip = 0;
    }
}


void keypad_init(void)
{
    gpio_keypad_init(&dream_keypad);
    boot_register_poll_func(keypad_poll);
}