#!/bin/bash # Armadillo300用 CHRLCD 表示プログラム # by さえき 2007-2-21 # gpioポートにchrlcdを繋いだ # by さえき 2007-2-21 # 同じディレクトリに 以下を 置いておく # chrlcd A300のgpio駆動プログラム # buf 表示出力用文字列バッファ rw 21バイト # db_henkan (このディレクトリ下のPIC_DB/database.datを変換) # j_p(指定のページの表示)やtimeofday(日時の表示)なども # # ボタン状態を見て 次のページを読み出し そして 表示 # の 繰り返し # 起動時 メニュー表示もいいが 時計表示がBetter? # disp_tは どのキー押しても メニューに戻りますし chrlcd_exist_flg=0 # unsigned char str[21]; val=0 # FILE *infile, *outfile; while :;do while :;do val=$(./chrlcd b_chk) # port_check(); case $chrlcd_exist_flg in 1) if [ "$val" -lt 32 ]; then break fi # normal chrlcd_exist_flg=0 ;; # 外された goto _end/goto chrlcd_exist_checkのloop?かも * ) if [ "$val" -lt 32 ]; then # (ledctrl --off) ;(./chrlcd start);sleep 1 (ledctrl --on) ;(./chrlcd start); chrlcd_exist_flg=1 fi (ledctrl --off);sleep 1;(ledctrl --on);sleep 1 ;; # chrlcd接続なし 1 sec polling # chrlcd接続なしのとき このループ以外で回っているケースもあるようだ # 検討されたい esac done # p="j_p main_menu__" p="disp_t" #起動時 メニュー表示もいいが 時計表示がBetter? #どのキー押しても メニューに戻りますし y="B" # ;stty -F /dev/ttyS1 9600 cstopb -echo db=$(./db_henkan);pp=$(./$p) #表示し ボタンデータを得る echo "" > _p_history #test echo "$db" > _db while [ "$y" == "B" ];do (ledctrl --off) while :;do val=$(./chrlcd b_chk) # port_check(); if [ "$val" -gt 31 ]; then chrlcd_exist_flg=0 break 2 # chrlcdが外されたぞー fi # normal case "$val" in #ボタン開放待ち # case "$(./onebyone_S1)" in #ボタン開放待ち "31" ) break ;; #ボタン開放になった 抜ける "" ) break ;; * ) continue ;; #ボタン押しのままだ  ループ esac done p0="$p" # echo "1$p" >> _p_history #test while :;do val=$(./chrlcd b_chk) # port_check(); if [ "$val" -gt 31 ]; then chrlcd_exist_flg=0 break 2 # chrlcdが外されたぞー fi # normal case "$val" in #ボタン状態 拾う # case "$(./onebyone_S1)" in #ボタン状態 拾う "31" ) continue ;; #ボタン押しなし ループ #↓の$2は呼び出し元(戻り用?) "15" ) p="$(echo "$pp"|awk -F "|" '{printf $3}')" ;; #button 1 # もしヌルなら continueとし ボタン押しを無効にする のを 個々に追加すること "23" ) p="$(echo "$pp"|awk -F "|" '{printf $4}')" ;; #button 2 "27" ) p="$(echo "$pp"|awk -F "|" '{printf $5}')" ;; #button 3 "29" ) p="$(echo "$pp"|awk -F "|" '{printf $6}')" ;; #button 4 "30" ) p="$(echo "$pp"|awk -F "|" '{printf $6}')" ;; #button 5 "" ) sleep 1 ;p="j_p main_menu__" # 通信 中断? 再開待ち ;; * ) y="" ;; # button multi-press esac echo "2$p:$p0" >> _p_history #test (ledctrl --on) # printf "\21" > /dev/ttyS1 #for test pp=$(./$p) #指定のプログラムの実行 j_p:DBデータ表示し 戻り値付き # if [$pp -eq ""}];then #前の値で 繰り返す ppをセーブしておいた方がいいかな? break #ボタン指示あり 抜ける done done done exit 0 echo "$pp" exit