亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hiddkeyboarddriver.c

?? IAR5.2下 AT91SAM9260 ARM 對 MCP2515 控制源化碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#include "HIDDKeyboardDriver.h"
#include "HIDDKeyboardDriverDescriptors.h"
#include "HIDDKeyboardCallbacks.h"
#include "HIDDKeyboardInputReport.h"
#include "HIDDKeyboardOutputReport.h"
#include <utility/trace.h>
#include <usb/common/core/USBGetDescriptorRequest.h>
#include <usb/common/hid/HIDGenericDescriptor.h>
#include <usb/common/hid/HIDDescriptor.h>
#include <usb/common/hid/HIDGenericRequest.h>
#include <usb/common/hid/HIDReportRequest.h>
#include <usb/common/hid/HIDIdleRequest.h>
#include <usb/common/hid/HIDKeypad.h>
#include <usb/device/core/USBD.h>
#include <usb/device/core/USBDDriver.h>

//------------------------------------------------------------------------------
//         Internal types
//------------------------------------------------------------------------------
/*
    Type: HIDDKeyboardDriver
        Driver structure for an HID device implementing keyboard functionalities.

    Variables:
        usbdDriver - Standard USB device driver instance.
        inputReportIdleRate - Idle rate (in milliseconds) of the input report.
        inputReport - Input report instance.
        outputReport - Output report instance.
*/
typedef struct {

    USBDDriver usbdDriver;
    unsigned char inputReportIdleRate;
    HIDDKeyboardInputReport inputReport;
    HIDDKeyboardOutputReport outputReport;

} HIDDKeyboardDriver;

//------------------------------------------------------------------------------
//         Internal variables
//------------------------------------------------------------------------------
/*
    Variable: hiddKeyboardDriver
        Static instance of the HID keyboard device driver.
*/
static HIDDKeyboardDriver hiddKeyboardDriver;

//------------------------------------------------------------------------------
//         Internal functions
//------------------------------------------------------------------------------
/*
    Function: HIDDKeyboardDriver_GetDescriptor
        Returns the descriptor requested by the host.

    Parameters:
        type - Descriptor type.
        length - Maximum number of bytes to send.

    Returns:
        1 if the request has been handled by this function, otherwise 0.
*/
static unsigned char HIDDKeyboardDriver_GetDescriptor(unsigned char type,
                                                      unsigned char length)
{
    const USBConfigurationDescriptor *pConfiguration;
    HIDDescriptor *hidDescriptor;

    switch (type) {

        case HIDGenericDescriptor_REPORT:
            trace_LOG(trace_INFO, "Report ");

            // Adjust length and send report descriptor
            if (length > HIDDKeyboardDriverDescriptors_REPORTSIZE) {

                length = HIDDKeyboardDriverDescriptors_REPORTSIZE;
            }
            USBD_Write(0, &hiddReportDescriptor, length, 0, 0);
            break;

        case HIDGenericDescriptor_HID:
            trace_LOG(trace_INFO, "HID ");

            // Configuration descriptor is different depending on configuration
            if (USBD_IsHighSpeed()) {

                pConfiguration = hiddKeyboardDriver.usbdDriver.pDescriptors->pHsConfiguration;
            }
            else {

                pConfiguration = hiddKeyboardDriver.usbdDriver.pDescriptors->pFsConfiguration;
            }

            // Parse the device configuration to get the HID descriptor
            USBConfigurationDescriptor_Parse(pConfiguration, 0, 0, (USBGenericDescriptor **) &hidDescriptor);

            // Adjust length and send HID descriptor
            if (length > sizeof(HIDDescriptor)) {

                length = sizeof(HIDDescriptor);
            }
            USBD_Write(0, hidDescriptor, length, 0, 0);
            break;

        default:
            return 0;
    }

    return 1;
}

/*
    Function: HIDDKeyboardDriver_GetIdle
        Sends the current Idle rate of the input report to the host.

*/
static void HIDDKeyboardDriver_GetIdle()
{
    trace_LOG(trace_INFO, "gIdle ");

    USBD_Write(0, &(hiddKeyboardDriver.inputReportIdleRate), 1, 0, 0);
}

/*
    Function: HIDDKeyboardDriver_SetIdle
        Retrieves the new idle rate of the input report from the USB host.

    Parameters:
        idleRate - New input report idle rate.
*/
static void HIDDKeyboardDriver_SetIdle(unsigned char idleRate)
{
    trace_LOG(trace_INFO, "sIdle(%d) ", idleRate);

    hiddKeyboardDriver.inputReportIdleRate = idleRate;
    USBD_Write(0, 0, 0, 0, 0);
}

/*
    Function: HIDDKeyboardDriver_GetReport
        Sends the requested report to the host.

    Parameters:
        type - Report type.
        length - Maximum number of bytes to send.
*/
static void HIDDKeyboardDriver_GetReport(unsigned char type,
                                         unsigned short length)
{
    trace_LOG(trace_INFO, "gReport ");

    // Check report type
    switch (type) {

        case HIDReportRequest_INPUT:
            trace_LOG(trace_INFO, "In ");

            // Adjust size and send report
            if (length > sizeof(HIDDKeyboardInputReport)) {

                length = sizeof(HIDDKeyboardInputReport);
            }
            USBD_Write(0, // Endpoint #0
                       &(hiddKeyboardDriver.inputReport),
                       length,
                       0, // No callback
                       0);
            break;

        case HIDReportRequest_OUTPUT:
            trace_LOG(trace_INFO, "Out ");

            // Adjust size and send report
            if (length > sizeof(HIDDKeyboardOutputReport)) {

                length = sizeof(HIDDKeyboardOutputReport);
            }
            USBD_Write(0, // Endpoint #0
                       &(hiddKeyboardDriver.outputReport),
                       length,
                       0, // No callback
                       0);
            break;

        default:
            USBD_Stall(0);
    }
}

/*
    Function: HIDDKeyboardDriver_ReportReceived
        Callback invoked when an output report has been received from the host.
        Forward the new status of the LEDs to the user program via the
        <HIDDKeyboardCallbacks_LedsChanged> callback.
*/
static void HIDDKeyboardDriver_ReportReceived()
{
    trace_LOG(trace_INFO, "oReport ");

    // Trigger callback
    HIDDKeyboardCallbacks_LedsChanged(
        HIDDKeyboardOutputReport_GetNumLockStatus(&(hiddKeyboardDriver.outputReport)),
        HIDDKeyboardOutputReport_GetCapsLockStatus(&(hiddKeyboardDriver.outputReport)),
        HIDDKeyboardOutputReport_GetScrollLockStatus(&(hiddKeyboardDriver.outputReport)));

    // Restart transfer
    USBD_Read(HIDDKeyboardDriverDescriptors_INTERRUPTOUT,
              &(hiddKeyboardDriver.outputReport),
              sizeof(HIDDKeyboardOutputReport),
              (TransferCallback) HIDDKeyboardDriver_ReportReceived,
              0); // No argument for callback function
}

/*
    Function: HIDDKeyboardDriver_SetReport

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情综合网站| 蜜桃在线一区二区三区| 国产sm精品调教视频网站| 精品国产免费一区二区三区香蕉| 免费av成人在线| 日韩欧美综合一区| 久久国产生活片100| 精品久久久久99| 国产在线播精品第三| 久久精品这里都是精品| 国产盗摄一区二区三区| 国产精品不卡一区| 91浏览器在线视频| 亚洲国产视频一区二区| 欧美系列日韩一区| 老司机精品视频线观看86 | 视频一区欧美日韩| 777亚洲妇女| 国产一区二区在线免费观看| 欧美国产精品专区| 欧美三级三级三级爽爽爽| 日韩电影在线免费看| 日韩视频一区二区三区| 国产精品白丝av| 亚洲男人天堂av| 在线不卡中文字幕播放| 91麻豆精品一区二区三区| 一区二区三区免费网站| 91麻豆精品久久久久蜜臀| 精品无人码麻豆乱码1区2区| 亚洲人成网站色在线观看| 欧美日韩另类国产亚洲欧美一级| 蜜臀av性久久久久蜜臀av麻豆| 国产欧美日韩三区| 欧美人体做爰大胆视频| 国产美女视频一区| 亚洲高清久久久| 久久久久久久一区| 欧美精品视频www在线观看| 国产一区二区在线看| 一区二区三区中文字幕在线观看| 日韩西西人体444www| 不卡欧美aaaaa| 日本成人在线看| 日韩毛片一二三区| 欧美一卡2卡三卡4卡5免费| 成人国产视频在线观看| 日韩不卡一二三区| 成人免费在线播放视频| 欧美精品一区二区三区久久久| 99国产欧美另类久久久精品| 久久99精品国产| 一区二区三区中文字幕| 久久久久久久久一| 日韩网站在线看片你懂的| 色噜噜狠狠成人网p站| 国产精品影视网| 麻豆久久一区二区| 亚洲午夜精品在线| 中文字幕一区二区三区不卡| 精品日韩成人av| 欧美精选一区二区| 日本精品视频一区二区| 成人精品一区二区三区中文字幕| 美女www一区二区| 婷婷久久综合九色综合绿巨人 | 亚洲bt欧美bt精品| 亚洲视频一区二区在线| 国产日韩精品一区二区三区在线| 欧美夫妻性生活| 欧美影院一区二区| 一本久道中文字幕精品亚洲嫩| 国产精品白丝av| 国产麻豆成人传媒免费观看| 奇米精品一区二区三区四区 | 国产精品沙发午睡系列990531| 日韩欧美国产高清| 欧美高清激情brazzers| 欧美色视频一区| 91久久精品一区二区| 色94色欧美sute亚洲13| 91毛片在线观看| 一本大道久久a久久综合婷婷| av毛片久久久久**hd| 91在线无精精品入口| 91小视频在线观看| 91麻豆.com| 欧美人与禽zozo性伦| 欧美日韩精品电影| 日韩一级高清毛片| 日韩精品一区二区三区四区视频 | 欧美激情资源网| 专区另类欧美日韩| 亚洲日本在线天堂| 亚洲亚洲人成综合网络| 五月婷婷激情综合网| 日韩中文字幕亚洲一区二区va在线| 亚洲国产美女搞黄色| 丝瓜av网站精品一区二区| 青娱乐精品视频在线| 精东粉嫩av免费一区二区三区| 国产一区二区三区四区五区入口| 天堂午夜影视日韩欧美一区二区| 一区二区三区丝袜| 一本色道a无线码一区v| 久久综合色一综合色88| 国产亚洲一区字幕| 亚洲精品成人少妇| 日韩电影一区二区三区四区| 日韩av在线播放中文字幕| 国产成人在线看| 欧洲一区二区三区在线| 日韩欧美在线观看一区二区三区| 欧美精品一区男女天堂| 日韩成人免费电影| 色综合中文综合网| 91亚洲精品一区二区乱码| 亚洲超碰97人人做人人爱| 一区二区三区中文字幕精品精品 | 久久综合精品国产一区二区三区 | 大尺度一区二区| 欧美日韩高清影院| 国产视频一区二区在线观看| 亚洲免费高清视频在线| 亚洲18影院在线观看| 亚洲综合成人在线| 麻豆国产欧美一区二区三区| 国产精品综合一区二区三区| 国产成人精品亚洲777人妖| 成人免费毛片aaaaa**| 欧美亚洲综合色| 国产精品久久免费看| 亚洲成人先锋电影| 国产精品影视天天线| 91麻豆精品91久久久久同性| 国产精品毛片久久久久久| 五月综合激情日本mⅴ| 成人综合婷婷国产精品久久蜜臀| 色欧美日韩亚洲| 欧美国产一区在线| 激情深爱一区二区| 91精品国产高清一区二区三区蜜臀 | 91美女片黄在线| 国产精品美女久久久久久久| 91一区在线观看| 精品久久免费看| 久久久久久久久久久久电影| 亚洲综合精品久久| av一区二区三区| 国产欧美一区二区在线| 欧美日韩一级视频| 欧美一区二区国产| 亚洲一区二区三区视频在线播放| 亚洲成a人在线观看| 韩国在线一区二区| 欧美日韩国产在线观看| 日韩理论片网站| 国产成都精品91一区二区三| 日韩三级高清在线| 日韩精品亚洲一区| 欧美日韩精品高清| 一区二区国产盗摄色噜噜| 成人黄色在线网站| 久久久久久黄色| 激情综合网天天干| 日韩女优毛片在线| 亚洲免费大片在线观看| 91精选在线观看| 国产福利一区在线观看| 中文字幕中文字幕一区二区| 欧美性猛交xxxxxx富婆| 久久精品国产99| 久久综合久久综合九色| 激情都市一区二区| 亚洲人成网站影音先锋播放| 欧美一区二区黄色| 亚洲一区二区视频| 美女一区二区视频| 91丨九色丨蝌蚪富婆spa| 正在播放一区二区| 亚洲精品自拍动漫在线| 国产成人夜色高潮福利影视| 欧美性一级生活| 国产精品麻豆久久久| 国产专区欧美精品| 欧美性大战久久久| 1024亚洲合集| 色综合久久中文字幕综合网| 国产情人综合久久777777| 国产丝袜美腿一区二区三区| 国产麻豆精品95视频| 亚洲电影一级片| 国产精品久久久久久久第一福利| 欧美一区二区三区免费大片 | 欧美伊人久久大香线蕉综合69| 久久精品人人做人人爽人人| 日韩综合一区二区| 日本精品一区二区三区高清 | 综合久久一区二区三区| 国产成人aaa|