source: azure_iot_hub_f767zi/trunk/asp_baseplatform/OBJ/STM32F767NUCLEO144_GCC/USBO/hid_keyboard.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 7.3 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2012 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16 * スコード中に含まれていること.
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23 * と.
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27 * 報告すること.
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32 * 免責すること.
33 *
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38 * の責任を負わない.
39 *
40 * $Id$
41 */
42/* Copyright (c) 2010-2011 mbed.org, MIT License
43 *
44 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
45 * and associated documentation files (the "Software"), to deal in the Software without
46 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
47 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
48 * Software is furnished to do so, subject to the following conditions:
49 *
50 * The above copyright notice and this permission notice shall be included in all copies or
51 * substantial portions of the Software.
52 *
53 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
54 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
55 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
56 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
57 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
58 */
59
60/*
61 * USB HOST KEYBOARDコード生成
62 */
63
64#include <kernel.h>
65#include <t_syslog.h>
66#include <t_stdlib.h>
67#include <sil.h>
68#include "syssvc/serial.h"
69#include "syssvc/syslog.h"
70#include "device.h"
71#include "hid_appli.h"
72
73static const uint8_t keymap[4][60] = {
74 {
75 0, 0, 0, 0, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', /* 000 - 011 */
76 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', /* 012 - 023 */
77 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', /* 024 - 035 */
78 '7', '8', '9', '0', 10, 27, 8, 9, ' ', '-', '=', '[', /* 036 - 047 */
79 ']', '\\','#', ';', '\'', 0, ',', '.', '/', 0, 0, 0 /* 048 - 059 */
80 },
81
82 /* CTRL MODIFIER */
83 {
84 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, /* 000 - 011 */
85 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 19, /* 012 - 023 */
86 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, /* 024 - 035 */
87 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 036 - 047 */
88 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 048 - 059 */
89 },
90
91 /* SHIFT MODIFIER */
92 {
93 0, 0, 0, 0, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', /* 000 - 011 */
94 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', /* 012 - 023 */
95 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@', '#', '$', '%', '^', /* 024 - 035 */
96 '&', '*', '(', ')', 0, 0, 0, 0, 0, 0, '+', '{', /* 036 - 047 */
97 '}', '|', '~', ':', '"', 0, '<', '>', '?', 0, 0, 0 /* 048 - 059 */
98 },
99
100 /* ALT MODIFIER */
101 {
102 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 000 - 011 */
103 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 012 - 023 */
104 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 024 - 035 */
105 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 036 - 047 */
106 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 048 - 059 */
107 }
108};
109
110/*
111 * HID KEYBOARD初期化
112 * parameter1: phandle HIDハンドラ
113 * return TUSBH_ERCODE
114 */
115TUSBH_ERCODE
116HidKeyboardInit(void *phandle)
117{
118 syslog_0(LOG_NOTICE, "## USBH_HID_KeybdInit ##");
119 return TUSBH_E_OK;
120}
121
122/*
123 * HID KEYBOARD情報取得
124 * parameter1: phandle HIDハンドラ
125 * parameter2: pinfo KEYBOARD情報設定タイプへのポインタ
126 * parameter3: buffer USB HOSTからのデータ
127 * parameter4: length USB HOSTデータ長
128 * return TUSBH_ERCODE
129 */
130TUSBH_ERCODE
131HidGetKeyboardInfo(void *phandle, KEYBOARD_Info_t *pinfo, uint8_t *buffer, uint16_t length)
132{
133 uint8_t i;
134
135 if(length > 0){
136 pinfo->lctrl = (buffer[0] >> 0) & 1;
137 pinfo->lshift = (buffer[0] >> 1) & 1;
138 pinfo->lalt = (buffer[0] >> 2) & 1;
139 pinfo->lgui = (buffer[0] >> 3) & 1;
140 pinfo->rctrl = (buffer[0] >> 4) & 1;
141 pinfo->rshift = (buffer[0] >> 5) & 1;
142 pinfo->ralt = (buffer[0] >> 6) & 1;
143 pinfo->rgui = (buffer[0] >> 7) & 1;
144
145 for(i = 0 ; i < sizeof(pinfo->keys) ; i++)
146 pinfo->keys[i]=(uint32_t)buffer[i+2];
147 return TUSBH_E_OK;
148 }
149 else
150 return TUSBH_E_TMOUT;
151}
152
153/*
154 * HID ASCII-CODE取得
155 * parameter1: phandle HIDハンドラ
156 * parameter2: pinfo KEYBOARD情報設定タイプへのポインタ
157 * return ASCII CODE
158 */
159uint8_t
160HidGetASCIICode(KEYBOARD_Info_t *pinfo)
161{
162 uint8_t index = 0;
163
164 if(pinfo->lshift == 1 || pinfo->rshift == 1)
165 index = 2;
166 else if(pinfo->lctrl == 1 || pinfo->rctrl == 1)
167 index = 1;
168 else if(pinfo->lalt == 1 || pinfo->ralt == 1)
169 index = 3;
170 if(pinfo->keys[0] < 60)
171 return keymap[index][pinfo->keys[0]];
172 else
173 return 0;
174}
175
Note: See TracBrowser for help on using the repository browser.