CSR8670按钮事件

一.手工编写按钮事件

使用PIO11 PIO12来分别模拟ButtonA和ButtonB,则相应的按钮事件和处理程序为:

#include <pio.h>
#include <stdio.h>
#include <message.h>

#define BUTTON_A        (1 << 11)        /* PIO11 is BUTTON_A */
#define BUTTON_B        (1 << 12)        /* PIO12 is BUTTON_B */

typedef struct
{
    TaskData    task;   /* task is required for messages to be delivered */
} appState;

appState app;

/* Function prototypes */
static void app_handler(Task task, MessageId id, Message message);
static void handle_pio(Task task, MessagePioChanged *pio);

int main(void)
{
    /* Set app_handler() function to handle app‘s messages */
    app.task.handler = app_handler;

    /* Set app task to receive PIO messages */
    MessagePioTask(&app.task);

    /* Setup PIO interrupt messages */
    PioDebounce32(BUTTON_A | BUTTON_B,  /* PIO pins we are interested in */
                2, 20);                 /* 2 reads and 20ms between them */

    MessageLoop();

    return 0;
}

static void app_handler(Task task, MessageId id, Message message)
{
    switch (id)
    {
    case MESSAGE_PIO_CHANGED:
        handle_pio(task, (MessagePioChanged*)message);
        break;

    default:
        printf("Unhandled message 0x%x\n", id);
    }
}

static void handle_pio(Task task, MessagePioChanged *pio)
{
    if (pio->state & BUTTON_A) printf("Button A pressed\n");
    if (pio->state & BUTTON_B) printf("Button B pressed\n");
}

将程序下载到板子上,按目标板上的“PLAY”和“VOL-”按钮,则会出现对应Button A Pressed和Button B Pressed。

二.自动生成按钮事件

使用CSR自带的buttonparsepro.exe程序将sample.button文件转换成对应的sample.c和sample.h文件,然后主程序引用这两个文件即可。

首先我们编写sample.button文件:

//
// Setup debouncing
//
// The format for PIO debouncing is
//      "debounce" count period
// where
//      "debounce"      is text debounce as is
//      count           is the number of times to read from the pins
//      period          is the delay between reads

// Do two reads 20 ms between them
debounce 2 20

//
// Define PIO pins that are used
//
// The format for defining PIO pins is
//      "pio" pin name
// where
//      "pio"           is text pio as is
//      pin             is pin number, for example 7 for PIO7
//      name            is pin name, for example BUTTON1

// Use name BUTTON_A for PIO11
pio 11 BUTTON_A
// Use name BUTTON_B for PIO12
pio 12 BUTTON_B

//
// Define messages for PIO events
//
// The format for defining PIO events is
//      "message" name
//          message_parameters*
// where
//      "message"       is text message as is
//      name            is name of the message, for example BUTTON_PRESSED
//      message_parameters
//                      are parameters defining when message is send

// Send message A_PRESS when BUTTON_A is pressed
message A_PRESS
    BUTTON_A    enter

// Send message B_RELEASE when BUTTON_B is released
message B_RELEASE
    BUTTON_B    release

// Send message A_DOUBLE when BUTTON_A is double-pressed within half a sec
message A_DOUBLE
    BUTTON_A    double 500

该文件就是描述PIO11和PIO12分别对应BUTTON_A的A_PRESS事件/A_DOUBLE事件和BUTTON_B的B_RELEASE事件。

然后我们使用buttonparsepro.exe程序来解析该文件,命令为:

buttonparsepro sample.button sample

命令运行后,会提示成功与否,如果成功,则会生成sample.c和sample.h两个文件,将这两个文件拷贝到主程序中,并在主程序中将sample.h包含进去,即可使用对应的按钮事件消息。引用sample.h的程序为:

#include <pio.h>
#include <stdio.h>
#include <message.h>
#include "sample.h"

typedef struct
{
    TaskData    task;   /* task is required for messages to be delivered */
    PioState    pio;    /* PIO state used by buttonparse */
} appState;

appState app;

/* Function prototypes */
static void app_handler(Task task, MessageId id, Message message);

int main(void)
{
    /* Set app_handler() function to handle app‘s messages */
    app.task.handler = app_handler;

    /* Set app task to receive button messages */
    pioInit(&app.pio, &app.task);

    MessageLoop();

    return 0;
}

static void app_handler(Task task, MessageId id, Message message)
{
    switch (id)
    {
    case A_PRESS:
        printf("Button A pressed\n");
        break;

    case B_RELEASE:
        printf("Button B released\n");
        break;

    case A_DOUBLE:
        printf("Button A double-pressed\n");
        break;

    default:
        printf("Unhandled message 0x%x\n", id);
    }
}

/* End-of-File */

运行程序,按目标板上的“PLAY”和“VOL-”按钮,则会出现对应Button A Pressed和Button B Released事件。

时间: 2024-11-10 01:48:32

CSR8670按钮事件的相关文章

IDA学习笔记--VS2008按钮事件捕捉

http://blog.csdn.net/ccnyou/article/details/8521611 IDA笔记--VS2008按钮事件捕捉 用到工具: IDA Proc C32Asm Rescope VS2008 LordPE 实例程序:MFCDemo.exe(附下载链接),我们目标是找到Button1对应的函数的地址处 附件包含:博客文章原文文档,文章中用到的MFCDemo程序. 下载链接:http://download.csdn.net/detail/ccnyou/5012040 1,首

iOS代码实现:创建按钮,绑定按钮事件,读取控件值

// // main.m // Hello // // Created by lishujun on 14-8-28. // Copyright (c) 2014年 lishujun. All rights reserved. // #import <UIKit/UIKit.h> // 视图控制器对象 @interface HelloWorldViewController : UIViewController @property (nonatomic, retain) IBOutlet UIT

android开发步步为营之22:处理Activity中的back按钮事件

在手机应用中,用户点击回退按钮一般是返回上个页面,一般页面不用处理,如果在首页,点回退,没任何提示,就把应用给关了,这个用户体验就不太好了,所以一般都会给用户一个确认的提示:是否退出?免得用户误操作. 一. Activity 中处理 @Override public boolean onKeyDown( int keyCode, KeyEvent event) { // TODO Auto-generated method stub Toast.makeText( this , "onkeydo

安卓之页面跳转与传值和按钮事件

一:新建页面 即新建Activity,new-other-Android Activity,next, 新建Activity的时候, 1:eclipse会自动创建Layout,我们发现Layout目录下会多了对应的xml文件: 2:ec会自动在AndroidManifest.xml中创建对应的activity节点: 需要注意的是,这些都是ec帮我们自动创建的,我们完全可以手动创建 class,然后让它继承自activity,然后指定layout的那个xml,然后手动创建节点完成. 二:点击按钮进

Ugui按钮事件添加方法

按钮事件添加方法3个例子 Eg1: using UnityEngine; using System.Collections; using UnityEngine.Events;//引用事件命名空间 using UnityEngine.UI;//引用UI命名空间 public class Test : MonoBehaviour { // Use this for initialization void Start () { //定义Action,并赋予delegate方法 UnityAction

MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱

网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面. <button onclick="logout()" >退出</button> $("#logOut").click(function () { location.href = "@Url.Action("Logout", "Account")"; }); 然后再某个页面楼主用了HTML辅助方法产生表单元素,代码如下所示: @H

导航栏切换按钮事件

同事写的一段代码,不是很难,但感觉不错保存起来 // 导航栏切换按钮事件 $('ul.main-tab>li').on('mousedown', function() { var $this = $(this), $box = $('.main-tab-content'), i = $this.index(); if ($this.hasClass('on')) { return false; } switch (i) { case 0: break; case 1: updateRadarTa

.Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化

原文:.Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化 我们知道资源被注册到R.java我们通过R.java就可以读取到界面中的组件.跟我们.net一样,通过ID来读取组件 知识点: 通过R.java读取组件 MainActivity.java通过findViewById方法查找组件 在Layout中用@string查找字符串,这个跟我们MVC中国际化基本相识,通过xml这种资源引用进行中文和英文切换 加入中文和英文本地化 双击fragment_main.xml设计视图

Java Hello World例子和添加按钮事件与功能

新建android工程,然后默认“下一步”即可完成创建: 2.添加Button 3.在src的MainActivity.java添加以下红色代码 import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar;import android.support.v4.app.Fragment;import android.content.Intent;import android.os.Bu