もりやさんが
という、キーボードの信号のビット列についての資料を出していたので、キーコードからビット列に直すやつ、C#で適当に書いといた。
namespace IRCnv
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// 000_0000_0000_0_000_0000_0000_0_0 24+1
private const int BITBUF_SIZ = 25; // #define BITBUF_SIZ 25
private const int SIGNAL_START = 0; // #define SIGNAL_START
private const int CHR_START = 3; // #define CHR_START 3
private const int LOWER_BIT_FLAG = 11; // #define LOWER_BIT_FLAG 11
private const int NEGATIVE_CHR_OFFSET = 12; // #define NEGATIVE_CHR_OFFSET 12
private const int STOP_BIT = BITBUF_SIZ - 1; // #define STOP_BIT (BITBUF_SIZ - 1)
private String IRCode(char keychar)
{
int code = (int)keychar & 0xff;
int[] bitbuf = new int[BITBUF_SIZ]; // 1バイトを8ビットに変換する
// 下位→上位
for (int i = 0; i < 8; ++i)
{
// キーコード8bitを下位から
bitbuf[i + CHR_START] = (code & 1);
bitbuf[i + CHR_START + NEGATIVE_CHR_OFFSET] = ~(code & 1) & 1;
code >>= 1;
}
bitbuf[SIGNAL_START] = bitbuf[SIGNAL_START + 1] = bitbuf[SIGNAL_START + 2] = 0;
bitbuf[SIGNAL_START + 0 + NEGATIVE_CHR_OFFSET] =
bitbuf[SIGNAL_START + 1 + NEGATIVE_CHR_OFFSET] =
bitbuf[SIGNAL_START + 2 + NEGATIVE_CHR_OFFSET] = 1;
bitbuf[LOWER_BIT_FLAG] = bitbuf[CHR_START];
bitbuf[LOWER_BIT_FLAG + NEGATIVE_CHR_OFFSET] = ~bitbuf[CHR_START] & 1;
bitbuf[STOP_BIT] = 0;
return String.Join("", bitbuf);
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
textBox1.AppendText(e.KeyChar + ":" + IRCode(e.KeyChar) + Environment.NewLine);
}
}
}
textBox1をForm1に貼って、Readonlyにして動かすとtextbox上で打ったキーを変換したものをtextboxに追加していきます。
a:0001000011011110111100100
b:0000100011001111011100110
c:0001100011011110011100100
d:0000010011001111101100110
e:0001010011011110101100100
f:0000110011001111001100110
g:0001110011011110001100100
こんなかんじ。