C# での利用方法

PInvoke 経由で felicalib.dll を使用するライブラリを添付してあります。

src/CSharp ディレクトリにあるFelicaLib.cs ファイルをプロジェクトに追加して利用してください。 felicalib.dll を実行プログラムを同じディレクトリにおいて実行してください。

以下にサンプルを示します。これは nanaco の履歴をダンプするもの。

using System;
using System.Collections.Generic;
using System.Text;
using FelicaLib;

namespace FelicaLib
{
    public class Nanaco
    {
        public static void Main()
        {
	    try
	    {
		using (Felica f = new Felica())
		{
		    readNanaco(f);
		}
	    }
	    catch (Exception ex)
	    {
		Console.WriteLine(ex.Message);
	    }
	}

	private static void readNanaco(Felica f)
	{
	    f.Polling((int)SystemCode.Common);
	    byte[] data = f.ReadWithoutEncryption(0x558b, 0);
	    if (data == null)
	    {
		throw new Exception("nanaco ID が読み取れません");
	    }
	    Console.Write("Nanaco ID = ");
	    for (int i = 0; i < 8; i++) {
		Console.Write(data[i].ToString("X2"));
	    }
	    Console.Write("\n");

            for (int i = 0; ; i++)
            {
                data = f.ReadWithoutEncryption(0x564f, i);
                if (data == null) break;

                switch (data[0])
                {
                    case 0x47:
                    default:
                        Console.Write("支払     ");
                        break;
                    case 0x6f:
                        Console.Write("チャージ ");
                        break;
                }

                int value = (data[9] << 24) + (data[10] << 16) + (data[11] << 8) + data[12];
                int year = (value >> 21) + 2000;
                int month = (value >> 17) & 0xf;
                int date = (value >> 12) & 0x1f;
                int hour = (value >> 6) & 0x3f;
                int min = value & 0x3f;

                Console.Write("{0}/{1:D2}/{2:D2} {3:D2}:{4:D2}", year, month, date, hour, min);

                value = (data[1] << 24) + (data[2] << 16) + (data[3] << 8) + data[4];
                Console.Write("  金額 {0,6}円", value);

                value = (data[5] << 24) + (data[6] << 16) + (data[7] << 8) + data[8];
                Console.Write("  残高 {0,6}円", value);

                value = (data[13] << 8) + data[14];
                Console.WriteLine("  連番 {0}", value);
            }
        }
    }
}