aboutsummaryrefslogtreecommitdiffstats
path: root/keyboards/handwired/qc60/info.json
blob: c047d5030719c6d734c539621f416779d56c0283 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
pre { line-height: 125%; margin: 0; }
td.linenos pre { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; }
span.linenos { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; }
td.linenos pre.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #ffffff; }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/*
             LUFA Library
     Copyright (C) Dean Camera, 2018.

  dean [at] fourwalledcubicle [dot] com
           www.lufa-lib.org
*/

/*
  Copyright 2018  Dean Camera (dean [at] fourwalledcubicle [dot] com)

  Permission to use, copy, modify, distribute, and sell this
  software and its documentation for any purpose is hereby granted
  without fee, provided that the above copyright notice appear in
  all copies and that both that the copyright notice and this
  permission notice and warranty disclaimer appear in supporting
  documentation, and that the name of the author not be used in
  advertising or publicity pertaining to distribution of the
  software without specific, written prior permission.

  The author disclaims all warranties with regard to this
  software, including all implied warranties of merchantability
  and fitness.  In no event shall the author be liable for any
  special, indirect or consequential damages or any damages
  whatsoever resulting from loss of use, data or profits, whether
  in an action of contract, negligence or other tortious action,
  arising out of or in connection with the use or performance of
  this software.
*/

#define  __INCLUDE_FROM_USB_DRIVER
#include "../../Core/USBMode.h"

#if defined(USB_CAN_BE_DEVICE)

#define  __INCLUDE_FROM_HID_DRIVER
#define  __INCLUDE_FROM_HID_DEVICE_C
#include "HIDClassDevice.h"

void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
{
	if (!(Endpoint_IsSETUPReceived()))
	  return;

	if (USB_ControlRequest.wIndex != HIDInterfaceInfo->Config.InterfaceNumber)
	  return;

	switch (USB_ControlRequest.bRequest)
	{
		case HID_REQ_GetReport:
			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
			{
				uint16_t ReportSize = 0;
				uint8_t  ReportID   = (USB_ControlRequest.wValue & 0xFF);
				uint8_t  ReportType = (USB_ControlRequest.wValue >> 8) - 1;
				uint8_t  ReportData[HIDInterfaceInfo->Config.PrevReportINBufferSize];

				memset(ReportData, 0, sizeof(ReportData));

				CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportType, ReportData, &ReportSize);

				if (HIDInterfaceInfo->Config.PrevReportINBuffer != NULL)
				{
					memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportData,
					       HIDInterfaceInfo->Config.PrevReportINBufferSize);
				}

				Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);

				Endpoint_ClearSETUP();

				if (ReportID)
				  Endpoint_Write_8(ReportID);

				Endpoint_Write_Control_Stream_LE(ReportData, ReportSize);
				Endpoint_ClearOUT();
			}

			break;
		case HID_REQ_SetReport:
			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
			{
				uint16_t ReportSize = USB_ControlRequest.wLength;
				uint8_t  ReportID   = (USB_ControlRequest.wValue & 0xFF);
				uint8_t  ReportType = (USB_ControlRequest.wValue >> 8) - 1;
				uint8_t  ReportData[ReportSize];

				Endpoint_ClearSETUP();
				Endpoint_Read_Control_Stream_LE(ReportData, ReportSize);
				Endpoint_ClearIN();

				CALLBACK_HID_Device_ProcessHIDReport(HIDInterfaceInfo, ReportID, ReportType,
				                                     &ReportData[ReportID ? 1 : 0], ReportSize - (ReportID ? 1 : 0));
			}

			break;
		case HID_REQ_GetProtocol:
			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
			{
				Endpoint_ClearSETUP();
				while (!(Endpoint_IsINReady()));
				Endpoint_Write_8(HIDInterfaceInfo->State.UsingReportProtocol);
				Endpoint_ClearIN();
				Endpoint_ClearStatusStage();
			}

			break;
		case HID_REQ_SetProtocol:
			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
			{
				Endpoint_ClearSETUP();
				Endpoint_ClearStatusStage();

				HIDInterfaceInfo->State.UsingReportProtocol = ((USB_ControlRequest.wValue & 0xFF) != 0x00);
			}

			break;
		case HID_REQ_SetIdle:
			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
			{
				Endpoint_ClearSETUP();
				Endpoint_ClearStatusStage();

				HIDInterfaceInfo->State.IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6);
			}

			break;
		case HID_REQ_GetIdle:
			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
			{
				Endpoint_ClearSETUP();
				while (!(Endpoint_IsINReady()));
				Endpoint_Write_8(HIDInterfaceInfo->State.IdleCount >> 2);
				Endpoint_ClearIN();
				Endpoint_ClearStatusStage();
			}

			break;
	}
}

bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
{
	memset(&HIDInterfaceInfo->State, 0x00, sizeof(HIDInterfaceInfo->State));
	HIDInterfaceInfo->State.UsingReportProtocol = true;
	HIDInterfaceInfo->State.IdleCount           = 500;

	HIDInterfaceInfo->Config.ReportINEndpoint.Type = EP_TYPE_INTERRUPT;

	if (!(Endpoint_ConfigureEndpointTable(&HIDInterfaceInfo->Config.ReportINEndpoint, 1)))
	  return false;

	return true;
}

void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
{
	if (USB_DeviceState != DEVICE_STATE_Configured)
	  return;

	if (HIDInterfaceInfo->State.PrevFrameNum == USB_Device_GetFrameNumber())
	{
		#if defined(USB_DEVICE_OPT_LOWSPEED)
		if (!(USB_Options & USB_DEVICE_OPT_LOWSPEED))
		  return;
		#else
		return;
		#endif
	}

	Endpoint_SelectEndpoint(HIDInterfaceInfo->Config.ReportINEndpoint.Address);

	if (Endpoint_IsReadWriteAllowed())
	{
		uint8_t  ReportINData[HIDInterfaceInfo->Config.PrevReportINBufferSize];
		uint8_t  ReportID     = 0;
		uint16_t ReportINSize = 0;

		memset(ReportINData, 0, sizeof(ReportINData));

		bool ForceSend         = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, HID_REPORT_ITEM_In,
		                                                             ReportINData, &ReportINSize);
		bool StatesChanged     = false;
		bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining));

		if (HIDInterfaceInfo->Config.PrevReportINBuffer != NULL)
		{
			StatesChanged = (memcmp(ReportINData, HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize) != 0);
			memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, HIDInterfaceInfo->Config.PrevReportINBufferSize);
		}

		if (ReportINSize && (ForceSend || StatesChanged || IdlePeriodElapsed))
		{
			HIDInterfaceInfo->State.IdleMSRemaining = HIDInterfaceInfo->State.IdleCount;

			Endpoint_SelectEndpoint(HIDInterfaceInfo->Config.ReportINEndpoint.Address);

			if (ReportID)
			  Endpoint_Write_8(ReportID);

			Endpoint_Write_Stream_LE(ReportINData, ReportINSize, NULL);

			Endpoint_ClearIN();
		}

		HIDInterfaceInfo->State.PrevFrameNum = USB_Device_GetFrameNumber();
	}
}

#endif
="p">:10.5, "y":1}, {"label":"R14", "x":11.5, "y":1}, {"label":"R15", "x":12.5, "y":1}, {"label":"R16", "x":13.5, "y":1}, {"label":"R17", "x":14.5, "y":1, "w":1.5}, {"label":"L20", "x":0, "y":2, "w":1.75}, {"label":"L21", "x":1.75, "y":2}, {"label":"L22", "x":2.75, "y":2}, {"label":"L23", "x":3.75, "y":2}, {"label":"L24", "x":4.75, "y":2}, {"label":"L25", "x":5.75, "y":2}, {"label":"R21", "x":7.75, "y":2}, {"label":"R22", "x":8.75, "y":2}, {"label":"R23", "x":9.75, "y":2}, {"label":"R24", "x":10.75, "y":2}, {"label":"R25", "x":11.75, "y":2}, {"label":"R26", "x":12.75, "y":2}, {"label":"R27", "x":13.75, "y":2, "w":2.25}, {"label":"L30", "x":0, "y":3, "w":1.25}, {"label":"L31", "x":1.25, "y":3}, {"label":"L32", "x":2.25, "y":3}, {"label":"L33", "x":3.25, "y":3}, {"label":"L34", "x":4.25, "y":3}, {"label":"L35", "x":5.25, "y":3}, {"label":"L36", "x":6.25, "y":3}, {"label":"R31", "x":8.25, "y":3}, {"label":"R32", "x":9.25, "y":3}, {"label":"R33", "x":10.25, "y":3}, {"label":"R34", "x":11.25, "y":3}, {"label":"R35", "x":12.25, "y":3}, {"label":"R36", "x":13.25, "y":3, "w":1.75}, {"label":"R37", "x":15, "y":3}, {"label":"L40", "x":0, "y":4, "w":1.25}, {"label":"L41", "x":1.25, "y":4, "w":1.25}, {"label":"L42", "x":2.5, "y":4, "w":1.25}, {"label":"L43", "x":3.75, "y":4, "w":2.75}, {"label":"L44", "x":6.5, "y":4, "w":1.25}, {"label":"R43", "x":8.75, "y":4, "w":1.25}, {"label":"R44", "x":10, "y":4, "w":2}, {"label":"R42", "x":12, "y":4}, {"label":"R45", "x":13, "y":4}, {"label":"R46", "x":14, "y":4}, {"label":"R47", "x":15, "y":4} ] }, "LAYOUT_ansi_default": { "key_count": 64, "layout": [ {"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":8, "y":0}, {"label":"8", "x":9, "y":0}, {"label":"9", "x":10, "y":0}, {"label":"0", "x":11, "y":0}, {"label":"-", "x":12, "y":0}, {"label":"=", "x":13, "y":0}, {"label":"Backspace", "x":14, "y":0, "w":2.0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":7.5, "y":1}, {"label":"U", "x":8.5, "y":1}, {"label":"I", "x":9.5, "y":1}, {"label":"O", "x":10.5, "y":1}, {"label":"P", "x":11.5, "y":1}, {"label":"[", "x":12.5, "y":1}, {"label":"]", "x":13.5, "y":1}, {"label":"\\", "x":14.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":7.75, "y":2}, {"label":"J", "x":8.75, "y":2}, {"label":"K", "x":9.75, "y":2}, {"label":"L", "x":10.75, "y":2}, {"label":";", "x":11.75, "y":2}, {"label":"'", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":8.25, "y":3}, {"label":"M", "x":9.25, "y":3}, {"label":",", "x":10.25, "y":3}, {"label":".", "x":11.25, "y":3}, {"label":"/", "x":12.25, "y":3}, {"label":"Shift", "x":13.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.75}, {"x":6.5, "y":4, "w":1.25}, {"x":8.75, "y":4, "w":1.25}, {"x":10, "y":4, "w":2.0}, {"label":"Alt", "x":12, "y":4}, {"label":"Win", "x":13, "y":4}, {"label":"Menu", "x":14, "y":4}, {"label":"Ctrl", "x":15, "y":4} ] }, "LAYOUT_ansi_alt": { "key_count": 63, "layout": [ {"label":"L00", "x":0, "y":0}, {"label":"L01", "x":1, "y":0}, {"label":"L02", "x":2, "y":0}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0}, {"label":"L05", "x":5, "y":0}, {"label":"L06", "x":6, "y":0}, {"label":"R00", "x":8, "y":0}, {"label":"R01", "x":9, "y":0}, {"label":"R02", "x":10, "y":0}, {"label":"R03", "x":11, "y":0}, {"label":"R04", "x":12, "y":0}, {"label":"R05", "x":13, "y":0}, {"label":"R07", "x":14, "y":0, "w":2}, {"label":"L10", "x":0, "y":1, "w":1.5}, {"label":"L11", "x":1.5, "y":1}, {"label":"L12", "x":2.5, "y":1}, {"label":"L13", "x":3.5, "y":1}, {"label":"L14", "x":4.5, "y":1}, {"label":"L15", "x":5.5, "y":1}, {"label":"R10", "x":7.5, "y":1}, {"label":"R11", "x":8.5, "y":1}, {"label":"R12", "x":9.5, "y":1}, {"label":"R13", "x":10.5, "y":1}, {"label":"R14", "x":11.5, "y":1}, {"label":"R15", "x":12.5, "y":1}, {"label":"R16", "x":13.5, "y":1}, {"label":"R17", "x":14.5, "y":1, "w":1.5}, {"label":"L20", "x":0, "y":2, "w":1.75}, {"label":"L21", "x":1.75, "y":2}, {"label":"L22", "x":2.75, "y":2}, {"label":"L23", "x":3.75, "y":2}, {"label":"L24", "x":4.75, "y":2}, {"label":"L25", "x":5.75, "y":2}, {"label":"R21", "x":7.75, "y":2}, {"label":"R22", "x":8.75, "y":2}, {"label":"R23", "x":9.75, "y":2}, {"label":"R24", "x":10.75, "y":2}, {"label":"R25", "x":11.75, "y":2}, {"label":"R26", "x":12.75, "y":2}, {"label":"R27", "x":13.75, "y":2, "w":2.25}, {"label":"L31", "x":0, "y":3, "w":2.25}, {"label":"L32", "x":2.25, "y":3}, {"label":"L33", "x":3.25, "y":3}, {"label":"L34", "x":4.25, "y":3}, {"label":"L35", "x":5.25, "y":3}, {"label":"L36", "x":6.25, "y":3}, {"label":"R31", "x":8.25, "y":3}, {"label":"R32", "x":9.25, "y":3}, {"label":"R33", "x":10.25, "y":3}, {"label":"R34", "x":11.25, "y":3}, {"label":"R35", "x":12.25, "y":3}, {"label":"R36", "x":13.25, "y":3, "w":2.75}, {"label":"L40", "x":0, "y":4, "w":1.5}, {"label":"L41", "x":1.5, "y":4}, {"label":"L42", "x":2.5, "y":4, "w":1.5}, {"label":"L43", "x":4, "y":4, "w":2.75}, {"label":"L44", "x":6.75, "y":4}, {"label":"R43", "x":8.75, "y":4}, {"label":"R44", "x":9.75, "y":4, "w":2.25}, {"label":"R45", "x":12, "y":4, "w":1.5}, {"label":"R46", "x":13.5, "y":4}, {"label":"R47", "x":14.5, "y":4, "w":1.5} ] }, "LAYOUT_iso_default": { "key_count": 65, "layout": [ {"label":"L00", "x":0, "y":0}, {"label":"L01", "x":1, "y":0}, {"label":"L02", "x":2, "y":0}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0}, {"label":"L05", "x":5, "y":0}, {"label":"L06", "x":6, "y":0}, {"label":"R00", "x":8, "y":0}, {"label":"R01", "x":9, "y":0}, {"label":"R02", "x":10, "y":0}, {"label":"R03", "x":11, "y":0}, {"label":"R04", "x":12, "y":0}, {"label":"R05", "x":13, "y":0}, {"label":"R07", "x":14, "y":0, "w":2}, {"label":"L10", "x":0, "y":1, "w":1.5}, {"label":"L11", "x":1.5, "y":1}, {"label":"L12", "x":2.5, "y":1}, {"label":"L13", "x":3.5, "y":1}, {"label":"L14", "x":4.5, "y":1}, {"label":"L15", "x":5.5, "y":1}, {"label":"R10", "x":7.5, "y":1}, {"label":"R11", "x":8.5, "y":1}, {"label":"R12", "x":9.5, "y":1}, {"label":"R13", "x":10.5, "y":1}, {"label":"R14", "x":11.5, "y":1}, {"label":"R15", "x":12.5, "y":1}, {"label":"R16", "x":13.5, "y":1}, {"label":"L20", "x":0, "y":2, "w":1.75}, {"label":"L21", "x":1.75, "y":2}, {"label":"L22", "x":2.75, "y":2}, {"label":"L23", "x":3.75, "y":2}, {"label":"L24", "x":4.75, "y":2}, {"label":"L25", "x":5.75, "y":2}, {"label":"R21", "x":7.75, "y":2}, {"label":"R22", "x":8.75, "y":2}, {"label":"R23", "x":9.75, "y":2}, {"label":"R24", "x":10.75, "y":2}, {"label":"R25", "x":11.75, "y":2}, {"label":"R26", "x":12.75, "y":2}, {"label":"R17", "x":13.75, "y":2}, {"label":"R27", "x":14.75, "y":1, "w":1.25, "h":2}, {"label":"L30", "x":0, "y":3, "w":1.25}, {"label":"L31", "x":1.25, "y":3}, {"label":"L32", "x":2.25, "y":3}, {"label":"L33", "x":3.25, "y":3}, {"label":"L34", "x":4.25, "y":3}, {"label":"L35", "x":5.25, "y":3}, {"label":"L36", "x":6.25, "y":3}, {"label":"R31", "x":8.25, "y":3}, {"label":"R32", "x":9.25, "y":3}, {"label":"R33", "x":10.25, "y":3}, {"label":"R34", "x":11.25, "y":3}, {"label":"R35", "x":12.25, "y":3}, {"label":"R36", "x":13.25, "y":3, "w":2.75}, {"label":"L40", "x":0, "y":4, "w":1.25}, {"label":"L41", "x":1.25, "y":4, "w":1.25}, {"label":"L42", "x":2.5, "y":4, "w":1.25}, {"label":"L43", "x":3.75, "y":4, "w":2.75}, {"label":"L44", "x":6.5, "y":4, "w":1.25}, {"label":"R43", "x":8.75, "y":4, "w":1.25}, {"label":"R44", "x":10, "y":4, "w":2}, {"label":"R42", "x":12, "y":4}, {"label":"R45", "x":13, "y":4}, {"label":"R46", "x":14, "y":4}, {"label":"R47", "x":15, "y":4} ] }, "LAYOUT_iso_alt": { "key_count": 64, "layout": [ {"label":"L00", "x":0, "y":0}, {"label":"L01", "x":1, "y":0}, {"label":"L02", "x":2, "y":0}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0}, {"label":"L05", "x":5, "y":0}, {"label":"L06", "x":6, "y":0}, {"label":"R00", "x":8, "y":0}, {"label":"R01", "x":9, "y":0}, {"label":"R02", "x":10, "y":0}, {"label":"R03", "x":11, "y":0}, {"label":"R04", "x":12, "y":0}, {"label":"R05", "x":13, "y":0}, {"label":"R07", "x":14, "y":0, "w":2}, {"label":"L10", "x":0, "y":1, "w":1.5}, {"label":"L11", "x":1.5, "y":1}, {"label":"L12", "x":2.5, "y":1}, {"label":"L13", "x":3.5, "y":1}, {"label":"L14", "x":4.5, "y":1}, {"label":"L15", "x":5.5, "y":1}, {"label":"R10", "x":7.5, "y":1}, {"label":"R11", "x":8.5, "y":1}, {"label":"R12", "x":9.5, "y":1}, {"label":"R13", "x":10.5, "y":1}, {"label":"R14", "x":11.5, "y":1}, {"label":"R15", "x":12.5, "y":1}, {"label":"R16", "x":13.5, "y":1}, {"label":"L20", "x":0, "y":2, "w":1.75}, {"label":"L21", "x":1.75, "y":2}, {"label":"L22", "x":2.75, "y":2}, {"label":"L23", "x":3.75, "y":2}, {"label":"L24", "x":4.75, "y":2}, {"label":"L25", "x":5.75, "y":2}, {"label":"R21", "x":7.75, "y":2}, {"label":"R22", "x":8.75, "y":2}, {"label":"R23", "x":9.75, "y":2}, {"label":"R24", "x":10.75, "y":2}, {"label":"R25", "x":11.75, "y":2}, {"label":"R26", "x":12.75, "y":2}, {"label":"R17", "x":13.75, "y":2}, {"label":"R27", "x":14.75, "y":1, "w":1.25, "h":2}, {"label":"L30", "x":0, "y":3, "w":1.25}, {"label":"L31", "x":1.25, "y":3}, {"label":"L32", "x":2.25, "y":3}, {"label":"L33", "x":3.25, "y":3}, {"label":"L34", "x":4.25, "y":3}, {"label":"L35", "x":5.25, "y":3}, {"label":"L36", "x":6.25, "y":3}, {"label":"R31", "x":8.25, "y":3}, {"label":"R32", "x":9.25, "y":3}, {"label":"R33", "x":10.25, "y":3}, {"label":"R34", "x":11.25, "y":3}, {"label":"R35", "x":12.25, "y":3}, {"label":"R36", "x":13.25, "y":3, "w":2.75}, {"label":"L40", "x":0, "y":4, "w":1.5}, {"label":"L41", "x":1.5, "y":4}, {"label":"L42", "x":2.5, "y":4, "w":1.5}, {"label":"L43", "x":4, "y":4, "w":2.75}, {"label":"L44", "x":6.75, "y":4}, {"label":"R43", "x":8.75, "y":4}, {"label":"R44", "x":9.75, "y":4, "w":2.25}, {"label":"R45", "x":12, "y":4, "w":1.5}, {"label":"R46", "x":13.5, "y":4}, {"label":"R47", "x":14.5, "y":4, "w":1.5} ] }, "LAYOUT_hhkb_default": { "key_count": 63, "layout": [ {"label":"L00", "x":0, "y":0}, {"label":"L01", "x":1, "y":0}, {"label":"L02", "x":2, "y":0}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0}, {"label":"L05", "x":5, "y":0}, {"label":"L06", "x":6, "y":0}, {"label":"R00", "x":8, "y":0}, {"label":"R01", "x":9, "y":0}, {"label":"R02", "x":10, "y":0}, {"label":"R03", "x":11, "y":0}, {"label":"R04", "x":12, "y":0}, {"label":"R05", "x":13, "y":0}, {"label":"R06", "x":14, "y":0}, {"label":"R07", "x":15, "y":0}, {"label":"L10", "x":0, "y":1, "w":1.5}, {"label":"L11", "x":1.5, "y":1}, {"label":"L12", "x":2.5, "y":1}, {"label":"L13", "x":3.5, "y":1}, {"label":"L14", "x":4.5, "y":1}, {"label":"L15", "x":5.5, "y":1}, {"label":"R10", "x":7.5, "y":1}, {"label":"R11", "x":8.5, "y":1}, {"label":"R12", "x":9.5, "y":1}, {"label":"R13", "x":10.5, "y":1}, {"label":"R14", "x":11.5, "y":1}, {"label":"R15", "x":12.5, "y":1}, {"label":"R16", "x":13.5, "y":1}, {"label":"R17", "x":14.5, "y":1, "w":1.5}, {"label":"L20", "x":0, "y":2, "w":1.75}, {"label":"L21", "x":1.75, "y":2}, {"label":"L22", "x":2.75, "y":2}, {"label":"L23", "x":3.75, "y":2}, {"label":"L24", "x":4.75, "y":2}, {"label":"L25", "x":5.75, "y":2}, {"label":"R21", "x":7.75, "y":2}, {"label":"R22", "x":8.75, "y":2}, {"label":"R23", "x":9.75, "y":2}, {"label":"R24", "x":10.75, "y":2}, {"label":"R25", "x":11.75, "y":2}, {"label":"R26", "x":12.75, "y":2}, {"label":"R27", "x":13.75, "y":2, "w":2.25}, {"label":"L31", "x":0, "y":3, "w":2.25}, {"label":"L32", "x":2.25, "y":3}, {"label":"L33", "x":3.25, "y":3}, {"label":"L34", "x":4.25, "y":3}, {"label":"L35", "x":5.25, "y":3}, {"label":"L36", "x":6.25, "y":3}, {"label":"R31", "x":8.25, "y":3}, {"label":"R32", "x":9.25, "y":3}, {"label":"R33", "x":10.25, "y":3}, {"label":"R34", "x":11.25, "y":3}, {"label":"R35", "x":12.25, "y":3}, {"label":"R36", "x":13.25, "y":3, "w":1.75}, {"label":"R37", "x":15, "y":3}, {"label":"L41", "x":1.5, "y":4}, {"label":"L42", "x":2.5, "y":4, "w":1.5}, {"label":"L43", "x":4, "y":4, "w":2.75}, {"label":"L44", "x":6.75, "y":4}, {"label":"R43", "x":8.75, "y":4}, {"label":"R44", "x":9.75, "y":4, "w":2.25}, {"label":"R45", "x":12, "y":4, "w":1.5}, {"label":"R46", "x":13.5, "y":4} ] }, "LAYOUT_hhkb_split_lshift": { "key_count": 64, "layout": [ {"label":"L00", "x":0, "y":0}, {"label":"L01", "x":1, "y":0}, {"label":"L02", "x":2, "y":0}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0}, {"label":"L05", "x":5, "y":0}, {"label":"L06", "x":6, "y":0}, {"label":"R00", "x":8, "y":0}, {"label":"R01", "x":9, "y":0}, {"label":"R02", "x":10, "y":0}, {"label":"R03", "x":11, "y":0}, {"label":"R04", "x":12, "y":0}, {"label":"R05", "x":13, "y":0}, {"label":"R06", "x":14, "y":0}, {"label":"R07", "x":15, "y":0}, {"label":"L10", "x":0, "y":1, "w":1.5}, {"label":"L11", "x":1.5, "y":1}, {"label":"L12", "x":2.5, "y":1}, {"label":"L13", "x":3.5, "y":1}, {"label":"L14", "x":4.5, "y":1}, {"label":"L15", "x":5.5, "y":1}, {"label":"R10", "x":7.5, "y":1}, {"label":"R11", "x":8.5, "y":1}, {"label":"R12", "x":9.5, "y":1}, {"label":"R13", "x":10.5, "y":1}, {"label":"R14", "x":11.5, "y":1}, {"label":"R15", "x":12.5, "y":1}, {"label":"R16", "x":13.5, "y":1}, {"label":"R17", "x":14.5, "y":1, "w":1.5}, {"label":"L20", "x":0, "y":2, "w":1.75}, {"label":"L21", "x":1.75, "y":2}, {"label":"L22", "x":2.75, "y":2}, {"label":"L23", "x":3.75, "y":2}, {"label":"L24", "x":4.75, "y":2}, {"label":"L25", "x":5.75, "y":2}, {"label":"R21", "x":7.75, "y":2}, {"label":"R22", "x":8.75, "y":2}, {"label":"R23", "x":9.75, "y":2}, {"label":"R24", "x":10.75, "y":2}, {"label":"R25", "x":11.75, "y":2}, {"label":"R26", "x":12.75, "y":2}, {"label":"R27", "x":13.75, "y":2, "w":2.25}, {"label":"L30", "x":0, "y":3, "w":1.25}, {"label":"L31", "x":1.25, "y":3}, {"label":"L32", "x":2.25, "y":3}, {"label":"L33", "x":3.25, "y":3}, {"label":"L34", "x":4.25, "y":3}, {"label":"L35", "x":5.25, "y":3}, {"label":"L36", "x":6.25, "y":3}, {"label":"R31", "x":8.25, "y":3}, {"label":"R32", "x":9.25, "y":3}, {"label":"R33", "x":10.25, "y":3}, {"label":"R34", "x":11.25, "y":3}, {"label":"R35", "x":12.25, "y":3}, {"label":"R36", "x":13.25, "y":3, "w":1.75}, {"label":"R37", "x":15, "y":3}, {"label":"L41", "x":1.5, "y":4}, {"label":"L42", "x":2.5, "y":4, "w":1.5}, {"label":"L43", "x":4, "y":4, "w":2.75}, {"label":"L44", "x":6.75, "y":4}, {"label":"R43", "x":8.75, "y":4}, {"label":"R44", "x":9.75, "y":4, "w":2.25}, {"label":"R45", "x":12, "y":4, "w":1.5}, {"label":"R46", "x":13.5, "y":4} ] }, "LAYOUT_wkl_default": { "key_count": 61, "layout": [ {"label":"L00", "x":0, "y":0}, {"label":"L01", "x":1, "y":0}, {"label":"L02", "x":2, "y":0}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0}, {"label":"L05", "x":5, "y":0}, {"label":"L06", "x":6, "y":0}, {"label":"R00", "x":8, "y":0}, {"label":"R01", "x":9, "y":0}, {"label":"R02", "x":10, "y":0}, {"label":"R03", "x":11, "y":0}, {"label":"R04", "x":12, "y":0}, {"label":"R05", "x":13, "y":0}, {"label":"R07", "x":14, "y":0, "w":2}, {"label":"L10", "x":0, "y":1, "w":1.5}, {"label":"L11", "x":1.5, "y":1}, {"label":"L12", "x":2.5, "y":1}, {"label":"L13", "x":3.5, "y":1}, {"label":"L14", "x":4.5, "y":1}, {"label":"L15", "x":5.5, "y":1}, {"label":"R10", "x":7.5, "y":1}, {"label":"R11", "x":8.5, "y":1}, {"label":"R12", "x":9.5, "y":1}, {"label":"R13", "x":10.5, "y":1}, {"label":"R14", "x":11.5, "y":1}, {"label":"R15", "x":12.5, "y":1}, {"label":"R16", "x":13.5, "y":1}, {"label":"R17", "x":14.5, "y":1, "w":1.5}, {"label":"L20", "x":0, "y":2, "w":1.75}, {"label":"L21", "x":1.75, "y":2}, {"label":"L22", "x":2.75, "y":2}, {"label":"L23", "x":3.75, "y":2}, {"label":"L24", "x":4.75, "y":2}, {"label":"L25", "x":5.75, "y":2}, {"label":"R21", "x":7.75, "y":2}, {"label":"R22", "x":8.75, "y":2}, {"label":"R23", "x":9.75, "y":2}, {"label":"R24", "x":10.75, "y":2}, {"label":"R25", "x":11.75, "y":2}, {"label":"R26", "x":12.75, "y":2}, {"label":"R27", "x":13.75, "y":2, "w":2.25}, {"label":"L31", "x":0, "y":3, "w":2.25}, {"label":"L32", "x":2.25, "y":3}, {"label":"L33", "x":3.25, "y":3}, {"label":"L34", "x":4.25, "y":3}, {"label":"L35", "x":5.25, "y":3}, {"label":"L36", "x":6.25, "y":3}, {"label":"R31", "x":8.25, "y":3}, {"label":"R32", "x":9.25, "y":3}, {"label":"R33", "x":10.25, "y":3}, {"label":"R34", "x":11.25, "y":3}, {"label":"R35", "x":12.25, "y":3}, {"label":"R36", "x":13.25, "y":3, "w":2.75}, {"label":"L40", "x":0, "y":4, "w":1.5}, {"label":"L42", "x":2.5, "y":4, "w":1.5}, {"label":"L43", "x":4, "y":4, "w":2.75}, {"label":"L44", "x":6.75, "y":4}, {"label":"R43", "x":8.75, "y":4}, {"label":"R44", "x":9.75, "y":4, "w":2.25}, {"label":"R45", "x":12, "y":4, "w":1.5}, {"label":"R47", "x":14.5, "y":4, "w":1.5} ] } } }