software_development」カテゴリーアーカイブ

Nintendo SwitchのJoyConのhackを試してみる – その1

Nintendo SwitchのJoyConのhackを試してみる。

JoyConはBluetoothでPCに接続することができ、HIDゲームパッドとして認識される。
あとは通信プロトコルが分かれば、JoyConのhackができるのではないだろうか。

ということでJoyConのhackを試してみた。
Wiiリモコンhackのときと同じやりかたでとりあえずコントローラーのボタンは取れるようだ。
汎用HIDデバイスとしてアクセスして、USB-HIDと同様に入力用Reportというバッファからデータを読み出すというやり方だ。
参考:
WiiリモコンをPCで使うサンプルソフトを作ってみる

JoyConの挙動は、Wiiリモコンhackの基本動作モードのような動作をしているので、ボタンの状態が変化したときのみInputReportが取れて戻り値が返ってくる。
Reportの1バイト目は固定で0x3F。
Reportの2バイト目と3バイト目は各ボタンの状態が1bitずつ格納されている。
Reportの4バイト目はスティックの状態がHATスイッチ(8方向)として取れる。デジタルで0x00~0x08の値を取っている。
続きを読む

名古屋でVRハッカソンをやるためのUE4 勉強会 2限目に行ってきた

名古屋でVRハッカソンをやるためのUE4 勉強会 2限目に行ってきた。
名古屋ゲーム制作部というゲーム作りの好きな人が集まっている団体の勉強会だ。

前回の1限目に続いて、参加した。

今回はHMDの実機向けのソフトを動かすので、デスクトップPCを持ち込んだ。

続きを読む

WindowsでUnicode版のFindFirstFileのAPIを使ってみたサンプルコード

昨日のWindowsでファイル名を変更するプログラムをANSI版APIからUnicode版APIに書き換えた話で、
とりあえずリネーム処理以外のFindFirstFileというAPIのUnicode版FindFirstFileWを使ったフォルダとファイルをスキャンする使い方のサンプルコードっぽいのを晒してみる。

cmd.exeで動かすと文字化けするので、スタートメニューからPowershellを起動してPowershellで動かせば文字化けせずにUnicodeのフォルダ名やファイル名が正しく表示される。
続きを読む

Windowsでファイル名をまとめて変更するのに、C言語でプログラムを書いたのだけどUnicode文字のファイル名でハマって苦労した

Windowsでファイル名をまとめて変更しようとしていた。
で、何かスクリプト言語でちょろっと書いて一気に変換みたいなことをやろうと最初は思っていたのだけど、結局C言語でプログラムを書いてしまった。

ところがANSI版のAPIで書いたらMoveFileでうまく変更できないファイル名が出てきたので、Unicode対応のMoveFileWを使って書き直す等、もとのANSI版のAPIのプログラムをだいぶ書き直して動かした。

フォルダ内のファイルをスキャンしていくのにFindFirstFileWとFindNextFileWというAPIを使う。
使用する構造体はWIN32_FIND_DATAでなく、WIN32_FIND_DATAWを使う。

ファイル名はANSI版ならヌル文字を終端に入れたchar型の配列でよいのだけど、Unicode版はwchar_t型の配列を使う。

wchar_t配列型の文字列のフォルダ名やファイル名などを加工するのに、strcpyやstrcatが使えないので代わりにwcscpyやwcscatを使った。

文字定数は”foo”などと書く代わりにL”foo”と書いてUnicodeにしておかなければならない。

コマンドラインで動かすプログラムなのだけど、Unicodeを表示させるためにprintfでは駄目なので、printf(“%s”,str)と書くかわりにwprintfを使ってwprintf(L”%ls”,wstr)となどと書く。

cmd.exeから動かすとwprintfの表示が文字化けしてしまう。
コードページを変更するコマンドを使ってもどうもうまくいかない。
cmd.exeを使わずにPowershellで実行するとちゃんとwprintfの表示ができた。

知っている人にはきっと今更な話だが、ずっと自分はANSI版のAPIしか触ってなかったので。


つづく

Swiftでglibcを使うにはどうすればいいだろうか

Swiftでglibcを使うにはどうすればいいだろうか?

SwiftのLinux版(Ubuntu版)というのがあり、Mac版やiOS版みたいなフレームワークのライブラリが無いかわりにglibcを使うことができる。

それなら逆にMac版などでも同じようにglibcを呼び出すことができるのではないだろうか?

しかし、Ubuntu版のSwiftのディレクトリのincludeの中身を探してみたのだが、それっぽいものが見つからなかった。
import Glibcとすれば、ちゃんと使えているのだけど、どこにその仕掛けがあるのだろう?


追記
Ubuntu版のSwiftのlibディレクトリをよく調べたらusr/lib/swift/linux/libswiftGlibc.soというファイルがあった。
さらにそのサブディレクトリのusr/lib/swift/linux/x86_64の中にglibc.modulemapとGlibc.swiftdocとGlibc.swiftmoduleというのがあった。
このライブラリのソースコードとかを調べてみたら何か分かるのかもしれない。


余談だが、emacsにおける新バージョンのglibcとの非互換問題はどうなったのだろう?
Emacsは衰退しました – Qiita

第7回 Center CLR 勉強会に行ってきた

第7回 Center CLR 勉強会に行ってきた。
今回は、会場はMisocaの会議室で開催された。
20170121_105019

内容は、
・XAML(仮)
XAMLの話

・Reference sourceについて
.NET Frameworkのソースコードブラウザ(webアプリ)の話

・Xaramin FormsとAzure Mobile AppsとMobile Center
 Xamarinを使ったアプリとAzureクラウドとの連携の話

・2017年Legacyとどう向き合って行くか
 Visual Studioの古いやつのサポートが切れる話など

LT
・P/Invokeの話
.NET Coreとilasm(CoreCLR)の話 (自分)
続きを読む

Ubuntu上で.NET Coreを使うのだけど、ilasmが使えないないのでCoreCLRをビルドした

Ubuntu上で.NET Coreを使うのだけど、ilasmが使えないないのでCoreCLRをビルドした。

趣味のコンパイラを自作するのにilasmを使ってたが、これを.NET Core/Ubuntuで動かそうと思った。
CIL(MSIL)中間コードを生成するTiny BASICコンパイラを作ってみた

Ubuntuで.NET Core(バージョン1.1)を使う方法は、公式(英語)の手順が出ている。
https://www.microsoft.com/net/core#linuxubuntu
続きを読む