うさ☆うさ日記 このページをアンテナに追加 RSSフィード

2006 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 05 | 06 |
2013 | 05 | 08 | 09 | 10 | 11 | 12 |
2014 | 08 |
2015 | 04 | 06 | 08 | 09 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 09 | 11 | 12 |
2017 | 04 | 05 | 06 | 10 | 11 |
2018 | 03 | 04 |

2015-11-13

[]Windows.Devices.SmartCards名前空間のクラスとPaSoRiFeliCaカードを使う(`・ω・´)

Windows 10上で動くUWPアプリからWindows.Devices.SmartCards名前空間のクラスを用いて、PaSoRiFeliCaカードを使う方法について。

使うPaSoRiはこれ。

ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380

ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380

っで、リーダーに送信するコマンドの構築を容易にするために、下記を利用するのでソースをダウンロードしておきます。

NFC Smart Card Reader PC/SC Library


上記の準備ができたら、Visual Studio 2015でUWPのプロジェクトを作成。

PC/SC Libraryのソースについては、とりあえずPcScSdkフォルダのソースを自分のプロジェクトに追加しちゃいましょうか。

また、プロジェクトから「Package.appxmanifest」を開き、[機能]の[共有ユーザー証明書]をチェックしておきます。


っで、ここまでできればPaSoRiFeliCaカードを使う準備は完了、後は以下のようなコードでOKだよもん。

using Windows.Devices.Enumeration;
using Windows.Devices.SmartCards;
using Windows.Networking.Proximity;

using Felica;

private async void Polling()
{
    // Reader検索
    var selector = SmartCardReader.GetDeviceSelector(SmartCardReaderKind.Any);
    var devices = await DeviceInformation.FindAllAsync(selector);
    var device = devices.FirstOrDefault();
    if (device == null)
    {
        return;
    }

    var reader = await SmartCardReader.FromIdAsync(device.Id);
    if (reader == null)
    {
        return;
    }

    // カード検索
    var cards = await reader.FindAllCardsAsync();
    var card = cards.FirstOrDefault();
    if (card == null)
    {
        return;
    }

    // 接続してポーリングコマンド送信
    using (var con = await card.ConnectAsync())
    {
        var handler = new AccessHandler(con);

        var result = await handler.TransparentExchangeAsync(new byte[] { 6, 0, 0xff, 0xff, 0, 3 });
    }
}

送ってるコマンドは特に説明しないので知らない人はFeliCaの資料でも見てくんろ。

っで、ポーリングが成功すれば、resultには18byte(サイズ 1byte + コマンド 1byte + IDm 8byte + PMm 8byte)の応答が返ってきます。


楽ちんぽ(・∀・)


なお、UWPアプリじゃなくてデスクトップアプリでも、TargetPlatformVersionを設定してWindows.winmdとSystem.Runtime.WindowsRuntime.dllを参照すればWindows.Devices.SmartCardsの使用は可能で、その場合は「Package.appxmanifest」の部分の作業は不要です。

machi_ponmachi_pon 2016/02/18 11:37 なお、PaSoRiを使って暗号化領域のRead、Writeまで出来ることを確認済み。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/machi_pon/20151113/1447403147