libpafeで行き先表示板

1207131341_622x550.jpg

linuxで、Felica(Edy)の読み込みのできるライブラリ libpafe が単純で、使いやすそうだったので、ちょいと遊んでみた。 1秒間隔でポーリングさせ、Edyが認識できる度に"(在室)"と"(不在)"が切り替わるようにしてみた。Edy認識のプログラムを20行ほどと、判断+表示切替のShell Script を20行ほど、書いてみた。

下の電光掲示板は、随分前にサーバで制御できるようにしてあったので、 かなり簡単にできてます。

// felica.cxx
//
//	EdyのIDを1秒間隔でポーリング。
//	見つけたらIDを表示して停止

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

extern "C" {
#include <libpafe/libpafe.h>
#include <libpafe/pasori_command.h>
#include <libpafe/felica_command.h>
}

// 停止判定
volatile int flag_abort = 0 ;

// ^C による停止の処理
void func_sigterm( int x ) {
  flag_abort = 1 ;
}

int main() {
  pasori* p ;

  // PaSoRiを初期化
  if ( (p = pasori_open()) != NULL ) {
    felica* f ;
    sighandler_t old ;

    pasori_init( p ) ;
    // pasori_set_timeout( p , 0 ) ; // timeout forever

    // イベントハンドラの切り替え
    old = signal( SIGTERM , func_sigterm ) ;

    while( !flag_abort ) {
      // Felicaがあるかチェックする(Edyのみ)
      if ( (f = felica_polling( p , FELICA_POLLING_EDY ,
                                0 , 1 )) != NULL ) {
	uint8 idm[ 16 ] ;

	// IDmを取得する
	felica_get_idm( f , idm ) ;
	printf( "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n" ,
		idm[ 0 ] , idm[ 1 ] , idm[ 2 ] , idm[ 3 ] ,
		idm[ 4 ] , idm[ 5 ] , idm[ 6 ] , idm[ 7 ] ) ;

	// felica_free()があるはずなんだけど...
	free( f ) ;

	// 強制終了
	flag_abort = 1 ;
	break ;
      }
      // 1秒間隔
      usleep( 1000000 ) ;
    }
    // イベントハンドラを戻す
    signal( SIGTERM , old ) ;
    // PaSoRiを閉じる
    pasori_close( p ) ;
  }
  return 0 ;
}

これを処理する Shell Script。

#!/bin/bash

MY_EDY_ID="11:22:33:44:55:66:77:88"
EDY_ID="/usr/local/bin/edy_id"
EABADGE="/usr/local/bin/eabadge.pl"
STATE="HERE"

while [ "$STATE" != "" ]; do
    case $STATE in
	HERE ) $EABADGE -f "(在室)" ;;
	OUT  ) $EABADGE -f "(不在)" ;;
    esac

    GET_ID=`$EDY_ID`
    while [ "$GET_ID" != "$MY_EDY_ID" ]; do
	GET_ID=`$EDY_ID`
    done
    
    case $STATE in
	HERE ) STATE="OUT" ;;
	OUT  ) STATE="HERE" ;;
    esac
done
 

2015年12月

    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    

アーカイブ

Google

このブログ記事について

このページは、T-Saitohが2012年7月13日 13:41に書いたブログ記事です。

ひとつ前のブログ記事は「1文字/1行・入出力関数」です。

次のブログ記事は「リダイレクトとパイプ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。