/*
汎用防犯装置プログラム
COMPORT通信速度300ボー
受信信号構成
**\\%%%%%%!
**マイコンの名前
\\コマンド
%%%%%コマンド依存
!信号終了記号
GG 温度計測結果を発送する
GH 湿度計測結果を発送する
GI 高輝度LEDを点灯する
GJ 高輝度LEDを消灯する
GK ブザーを鳴らす
GL ブザーを消す
GM LED赤点灯
GN LED赤消灯
GO LED黄点灯
GP LED黄消灯
GQ LED青点灯
GR LED青消灯
GS ブザーを一定期間鳴らす4文字の数値がついている必要あり
GT 人を検知したら一定期間ブザーを鳴らす
GU 人を検知してもブザーを鳴らさない
GV 人を検知したら一定期間高輝度LEDを光らす
GW 人を検知しても高輝度LEDを光らさない
GX 防犯解除キーをセット2文字の数値がついている必要あり
GY 防犯解除キー入力を受け付けるようにする
GZ 防犯解除入力を受け付けないようにする
Gg 単に返答をする
Gh フラグ情報をサーバーへ返す。1文字目:警備解除キーが押された2､3文字目:人センサーの検知回数
Gi 設定状況をサーバーへ返す。。1文字目：人検知時ブザーを鳴らすか　2文字目:人検知時LEDを光らせるか　3文字目:警備解除キーを受け付けるか
Gj 特定のポートのIO設定を行う。1文字目:port名(1,5,7,8)　2文字目:port番号（0〜7）3文字目:io:1=出力0=入力に指定する
Gk 特定の出力ポートの設定を行う。1文字目:port名(1,5,7,8)　2文字目:port番号（0〜7）3文字目:io:1=H0=Lに指定する.Gjで出力に指定してから用いる
Gl 特定の入力port、bitno番目の端子のl/hを取得する。1文字目:port名(1,5,7,8,B)　2文字目:port番号（0〜7）Gjで入力に指定してから用いる。1,0を返す
Gm 各PORTの状態を返す1,5,7,8,Bの順
*/
#include <stdio.h>
#include "C:\work\yh8\tomolib3664\3664f.h"
#include "C:\work\yh8\tomolib3664\sci3.h"
#include "C:\work\yh8\tomolib3664\adc.h"
#include "C:\work\yh8\tomolib3664\io.h"
#include "C:\work\yh8\tomolib3664\timer.h"
#include "C:\work\yh8\tomolib3664\y_sonota.h"


void main( void );
void interrupt timertsta(void);
void interrupt irq0int(void);
void interrupt irq1int(void);
void interrupt irq2int(void);
void interrupt irq3int(void);
void interrupt sci3int(void);
void buza3(void);
void GG( void );void GH( void );void GI( void );void GJ( void );void GK( void );void GL( void );
void GM( void );void GN( void );void GO( void );void GP( void );void GQ( void );void GR( void );
void GS( void );void GT( void );void GU( void );void GV( void );void GW( void );void GX( void );
void GY( void );void GZ( void );
void Gg( void );void Gh( void );void Gi( void );void Gj( void );void Gk( void );void Gl( void );
void Gm( void );//void Gn( void );void Go( void );void Gp( void );void Gq( void );void Gr( void );
//void Gs( void );void Gt( void );void Gu( void );void Gv( void );void Gw( void );void Gx( void );
//void Gy( void );void Gz( void );


char miname[2] ; //マイコンの名前を格納。マイコンによって全て違うように設定する
unsigned char hito = 0 ;//人センサーの反応回数を記録する
unsigned int jusinmojisu; //COMMPORTより受信した文字数を格納
unsigned char meirei[30]; //COMMPORTより受信した信号を格納
unsigned char jusinflug ; //命令の受信を確認した場合、1その他は0
unsigned char hitobuzaflug ; //人を検知した場合ブザーを鳴らす=1その他は0
unsigned char hitoledflug ; //人を検知した場合LEDを点灯=1その他は0
unsigned char hitoledcount ; //人を検知した場合LEDを点灯した場合のタイマ
unsigned char keyflug ; //key解除のための入力を受け付ける=1その他は0
unsigned char key; //警備解除のためのキー
unsigned char keytmp; //警備解除のためのキー入力
unsigned char keykaijoflug; //警備解除要請が出たことを示す=1その他は0


void main( void )
{
 unsigned char tmp;
 unsigned int i;
miname[0] = 'G';miname[1] = 'G'; //マイコンの名前設定
jusinmojisu = 0;
jusinflug = 0;
hitobuzaflug = 0;
hitoledflug = 0;
hitoledcount = 61;
key = 1;
keytmp = 0xff;
keykaijoflug = 0;
keyflug = 0;
 //iniSci2( (unsigned char) 1 ,(unsigned char) 103 ); //通信速度設定1200boo
 iniSci2( (unsigned char) 2 ,(unsigned char) 103 ); //通信速度設定300boo
  //IRQ0割り込みの設定  //P1-4端子の状態により割り込みを発生させる  //割り込みベクタ番号14
  tmp = PMR1 ; tmp = ( tmp | 0x10 ); PMR1 = tmp;  //port1-4の機能をirq0入力端子に設定
  tmp = IEGR1; tmp = ( tmp | 0x01 ); IEGR1 = tmp; //立ち上がりエッジで割り込むように設定
  tmp = IRR1 ; tmp = (tmp & ( ~0x01 ));  IRR1 = tmp ; //IRR1の0Bit目、IRRI0（割り込み時に立つBit）をクリアしておく
  tmp = IENR1; tmp = ( tmp | 0x01 ); IENR1 = tmp; //IRQ0割り込みを許可



 startTma( 1 ); //1秒ごとの割り込みを設定
 tmp = SCR3; tmp = ( tmp | 0x40 ); SCR3 = tmp; //SCI3割り込みを許可

//ループ。信号を受信し、信号に従って分岐する
do{
 if( jusinflug ==1)
 {
    //命令をチェック
   switch(meirei[2])
   {
     case 'G':
     switch(meirei[3])
     {
      //温度測定結果を発送
      case 'G': GG(); break; 
      //湿度測定結果を発送
      case 'H': GH(); break; 
      //高輝度LEDを点灯
      case 'I': GI(); break; 
      //高輝度LEDを消灯する
      case 'J': GJ(); break;
      //ブザーを鳴らす
      case 'K': GK(); break;
      //ブザーを消す
      case 'L': GL(); break;
      //LED赤点灯
      case 'M': GM(); break;
      //LED赤消灯
      case 'N': GN(); break;
      //LED青点灯
      case 'O': GO(); break;
      //LED青消灯
      case 'P': GP(); break;
      //LED黄点灯
      case 'Q': GQ(); break;
      //LED黄消灯
      case 'R': GR(); break;
      //一定期間ブザーを鳴らす4文字の数値がついている必要あり
      case 'S': GS(); break;
      //人を検知したら一定期間ブザーを鳴らす
      case 'T': GT(); break;
      //人を検知してもブザーを鳴らさない
      case 'U': GU(); break;
      //人を検知したら一定期間高輝度LEDを光らす
      case 'V': GV(); break;
      //人を検知したら一定期間高輝度LEDを光らさない
      case 'W': GW(); break;
      //防犯解除キーをセット2文字の数値がついている必要あり
      case 'X': GX(); break;
      //防犯解除キー入力を受け付けるようにする
      case 'Y': GY(); break;
      //防犯解除キー入力を受け付けないようにする
      case 'Z': GZ(); break;
      //単に返答をする
      case 'g': Gg(); break;
      //フラグ情報をサーバーへ返す。1文字目:警備解除キーが押された2､3文字目:人センサーの検知回数
      case 'h': Gh(); break;
      //設定状況をサーバーへ返す。1文字目：人検知時ブザーを鳴らすか　2文字目:人検知時LEDを光らせるか　3文字目:警備解除キーを受け付けるか
      case 'i': Gi(); break;
      //Gj 特定のポートのIO設定を行う。1文字目:port名(1,5,7,8)　2文字目:port番号（0〜7）3文字目:io:1=出力0=入力に指定する
      case 'j': Gj(); break;
      //Gk 特定の出力ポートの設定を行う。1文字目:port名(1,5,7,8)　2文字目:port番号（0〜7）3文字目:io:1=H0=Lに指定する.Gjで出力に指定してから用いる
      case 'k': Gk(); break;
      //Gl 特定の入力port、bitno番目の端子のl/hを取得する。1文字目:port名(1,5,7,8,B)　2文字目:port番号（0〜7）y_iniio()で入力に指定してから用いる。
      case 'l': Gl(); break;
      //Gm 各PORTの状態を返す1,5,7,8,Bの順
      case 'm': Gm(); break;
      
      default: break;
     }
     break; 
   default: break;
   }
 jusinflug = 0;
   //初期化
  for( i = 0;i<30;i++){ meirei[i] = ' ';}
  jusinmojisu =0; 
 }
}while(1);
} //end main()


//sci3割り込み
void interrupt sci3int(void)
{
 unsigned char tmp;
 unsigned int i;
 unsigned char tmpflug;
 tmpflug = 'T';
 //SSRの2Bit目、TEND（受信DATAfull割り込み時に立つBit）をクリア
 tmp = SSR ;	tmp = 0x80;  SSR = tmp ;
 tmp = RDR;
// outCh( tmp ); //デバッグ用
 if(tmp != '!')
 {
  if( jusinmojisu<30){
   meirei[jusinmojisu] = tmp ; jusinmojisu++;
  }
 }else
 {
  //'!'を受け取った後の処理
  //名前が一致するかチェック
  if( meirei[0] == miname[0]){ if( meirei[1] == miname[1]){   jusinflug = 1;  }else{tmpflug='F';}}else{tmpflug='F';}
 }
 if(tmpflug =='F')
  {
   jusinflug = 0;
   jusinmojisu =0; 
   for( i = 0;i<30;i++){ meirei[i] = ' ';}
  }
 return;
}

//1秒ごとの割り込み
void interrupt timertsta(void)
{
 unsigned char tmp;
 //IRR1の6Bit目、IRRTA（TIMERA割り込み時に立つBit）をクリア
 tmp = IRR1 ;	tmp = tmp & ( ~0x40 );  IRR1 = tmp ;
 
 //高輝度LED消灯のチェック
 if( hitoledcount <60){hitoledcount++;}
 if( hitoledcount == 60 )
 {
 hitoledcount++;
 //高輝度LEDを消灯する
 setIo( '8' , 3 , 0 );	//port8-3 をLにセット。
 iniIo( '8' , 3 , 0 );	//port8-3 を入力に設定。
 }
 
// hito=0;
 return;
}



//IRQ0割り込み
//人センサーに繋がっている。
void interrupt irq0int(void)
{
 unsigned char tmp;
 //IRR1の0Bit目、IRRTA（irq0割り込み時に立つBit）をクリア
 tmp = IRR1 ;	tmp = tmp & ( ~0x1 );  IRR1 = tmp ;
 //ブザーを鳴らすかの検査
 if( hitobuzaflug == 1)
 {
  tmp = IENR1; tmp = tmp & ( ~0x1 ); IENR1 = tmp; //IRQ0割り込みを不許可
  buza3();
  tmp = IENR1; tmp = ( tmp | 0x01 ); IENR1 = tmp; //IRQ0割り込みを許可
 }
  //高輝度LED点灯の検査
  if( hitoledflug == 1)
 {
 //高輝度LEDを点灯する
  iniIo( '8' , 3 , 1 );	//port8-3 を出力に設定。
  setIo( '8' , 3 , 1 );	//port8-3 をHにセット。
  //消灯は1秒割り込みで行う
  hitoledcount = 0;
 }
 hito++;
 return;
}

//IRQ1割り込み
void interrupt irq1int(void)
{
 unsigned char tmp;
 unsigned int i,ii;
 tmp = IENR1; tmp = tmp & ( ~0x2 ); IENR1 = tmp; //IRQ1割り込みを不許可
 tmp = IRR1 ;	tmp = tmp & ( ~0x2 );  IRR1 = tmp ; //IRR1の1Bit目、IRRTA（irq1割り込み時に立つBit）をクリア
  for(i=0;i<0xff;i++){ for(ii=0;ii<0xff;ii++){ }}
  tmp = IENR1; tmp = ( tmp | 0x02 ); IENR1 = tmp; //IRQ1割り込みを許可
  outCh( '0' );  //デバッグ用
 //警備解除キー受付時の処理
 if( keyflug ==1) {  keytmp = (keytmp<<1); }
 return;
}

//IRQ2割り込み
void interrupt irq2int(void)
{
 unsigned char tmp;
 unsigned int i,ii;
 tmp = IENR1; tmp = tmp & ( ~0x4 ); IENR1 = tmp; //IRQ2割り込みを不許可
 tmp = IRR1 ;	tmp = tmp & ( ~0x4 );  IRR1 = tmp ; //IRR1の2Bit目、IRRTA（irq2割り込み時に立つBit）をクリア
  for(i=0;i<0xff;i++){ for(ii=0;ii<0xff;ii++){ }}
  tmp = IENR1; tmp = ( tmp | 0x04 ); IENR1 = tmp; //IRQ2割り込みを許可
  outCh( '1' );  //デバッグ用
 //警備解除キー受付時の処理
 if( keyflug ==1) {   keytmp = (keytmp<<1); keytmp = keytmp + 1; }
 return;
}

//IRQ3割り込み
void interrupt irq3int(void)
{
 unsigned char tmp;
 unsigned int i,ii;
 tmp = IENR1; tmp = tmp & ( ~0x8 ); IENR1 = tmp; //IRQ3割り込みを不許可
 tmp = IRR1 ;	tmp = tmp & ( ~0x8 );  IRR1 = tmp ; //IRR1の3Bit目、IRRTA（irq3割り込み時に立つBit）をクリア
 for(i=0;i<0xff;i++){ for(ii=0;ii<0xff;ii++){ }}
 tmp = IENR1; tmp = ( tmp | 0x08 ); IENR1 = tmp; //IRQ3割り込みを許可
 outCh( '3' );  //デバッグ用
 //警備解除キー受付時の処理
 if( keyflug ==1)
 {
  if(key==keytmp){ keykaijoflug = 1;outCh( 'T' ); } else{outCh( 'F' );}//デバッグ用
  keytmp = 0;
 }
 return;
}



//ブザーを3回鳴らす
void buza3(void)
{
  unsigned int i,ii,iii;
  iniIo( '8' , 1 , 1 );	//port8-1 を出力に設定。
  for(iii=0;iii<3;iii++){
   setIo( '8' , 1 , 1 );	//port8-1 をHにセット。
   for(i=0;i<0xff;i++){ for(ii=0;ii<120;ii++){ }}
   setIo( '8' , 1 , 0 );	//port8-1 をLにセット。
   for(i=0;i<0xff;i++){ for(ii=0;ii<500;ii++){ }}
  }
  iniIo( '8' , 1 , 0 );	//port8-1 を入力に設定。
return;
}


//温度計測結果を発送する
void GG( void)
{
unsigned int ad;
 ad = adcn( 1 );
 outCh( miname[0] );outCh( miname[1] );
 outChfi( ad );
 outCh( '!' );
return;
}

//湿度計測結果を発送する
void GH( void)
{
unsigned int ad;
 ad = adcn( 3 );
 outCh( miname[0] );outCh( miname[1] );
 outChfi( ad );
 outCh( '!' );
return;
}

//高輝度LEDを点灯する
void GI( void)
{ 
  iniIo( '8' , 3 , 1 );	//port8-3 を出力に設定。
  setIo( '8' , 3 , 1 );	//port8-3 をHにセット。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//高輝度LEDを消灯する
void GJ( void)
{ 
  setIo( '8' , 3 , 0 );	//port8-3 をLにセット。
  iniIo( '8' , 3 , 0 );	//port8-3 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//ブザーを鳴らす
void GK( void)
{ 
  iniIo( '8' , 1 , 1 );	//port8-1 を出力に設定。
  setIo( '8' , 1 , 1 );	//port8-1 をHにセット。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//ブザーを消す
void GL( void)
{ 
  setIo( '8' , 1 , 0 );	//port8-1 をLにセット。
  iniIo( '8' , 1 , 0 );	//port8-1 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}


//LED赤点灯
void GM( void)
{ 
  iniIo( '8' , 0 , 1 );	//port8-0 を出力に設定。
  setIo( '8' , 0 , 1 );	//port8-0 をHにセット。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//LED赤消灯
void GN( void)
{ 
  setIo( '8' , 0 , 0 );	//port8-0 をLにセット。
  iniIo( '8' , 0 , 0 );	//port8-0 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//LED青点灯
void GO( void)
{ 
  iniIo( '8' , 2 , 1 );	//port8-2 を出力に設定。
  setIo( '8' , 2 , 1 );	//port8-2 をHにセット。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//LED青消灯
void GP( void)
{ 
  setIo( '8' , 2 , 0 );	//port8-2 をLにセット。
  iniIo( '8' , 2 , 0 );	//port8-2 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//LED黄点灯
void GQ( void)
{ 
  iniIo( '8' , 4 , 1 );	//port8-4 を出力に設定。
  setIo( '8' , 4 , 1 );	//port8-4 をHにセット。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}


//LED黄消灯
void GR( void)
{ 
  setIo( '8' , 4 , 0 );	//port8-4 をLにセット。
  iniIo( '8' , 4 , 0 );	//port8-4 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}


//ブザーを一定期間鳴らす4文字の数値がついている必要あり
void GS( void)
{
 char * ch1="     ";
 unsigned int timer , i,ii ;
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
 *ch1 =meirei[4]; *(ch1+1) =meirei[5]; *(ch1+2) =meirei[6]; *(ch1+3) =meirei[7]; *(ch1+4) ='\0';
 timer = y_conv_ch4_touint( ch1 );
  iniIo( '8' , 1 , 1 );	//port8-1 を出力に設定。
  setIo( '8' , 1 , 1 );	//port8-1 をHにセット。
 for(i=0;i<timer;i++){ for(ii=0;ii<10;ii++){
  #asm nop;
 }}
  setIo( '8' , 1 , 0 );	//port8-1 をLにセット。
  iniIo( '8' , 1 , 0 );	//port8-1 を入力に設定。
// outCh( miname[0] );outCh( miname[1] );
// outCh( '!' );
return;
}


//人を検知したら一定期間ブザーを鳴らす
void GT( void)
{
hitobuzaflug = 1;//hitobuzaflugはIRQ0割り込み時に検査
//  setIo( '8' , 1 , 0 );	//port8-1 をLにセット。
//  iniIo( '8' , 1 , 0 );	//port8-1 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//人を検知してもブザーを鳴らさない
void GU( void)
{
hitobuzaflug = 0; //hitobuzaflugはIRQ0割り込み時に検査
//  setIo( '8' , 1 , 0 );	//port8-1 をLにセット。
//  iniIo( '8' , 1 , 0 );	//port8-1 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//人を検知したら一定期間高輝度LEDを光らす
void GV( void)
{
hitoledflug = 1;//hitobuzaflugはIRQ0割り込み時に検査
//  setIo( '8' , 1 , 0 );	//port8-1 をLにセット。
//  iniIo( '8' , 1 , 0 );	//port8-1 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//人を検知しても高輝度LEDを光らさない
void GW( void)
{
hitoledflug = 0; //hitobuzaflugはIRQ0割り込み時に検査
//  setIo( '8' , 1 , 0 );	//port8-1 をLにセット。
//  iniIo( '8' , 1 , 0 );	//port8-1 を入力に設定。
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//防犯解除キーをセット2文字の数値がついている必要あり
void GX( void)
{
 char * ch1="   ";
 //unsigned int tmp
 *ch1 =meirei[4]; *(ch1+1) =meirei[5]; *(ch1+2) ='\0';
 key = y_conv_ch2_touchv( ch1 );
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//防犯解除キー入力を受け付けるようにする
void GY( void)
{
 unsigned char tmp;
 keyflug =1;
  //IRQ1割り込みの設定  //P1-5端子の状態により割り込みを発生させる  //割り込みベクタ番号15
  tmp = PMR1 ; tmp = ( tmp | 0x20 ); PMR1 = tmp;  //port1-5の機能をirq1入力端子に設定
  tmp = PUCR1 ; tmp = ( tmp | 0x20 ); PUCR1 = tmp;//port1-5のをプルアップ
  tmp = IEGR1; tmp = ( tmp | 0x02 ); IEGR1 = tmp; //立ち上がりエッジで割り込むように設定(コメント行にすれば立下り）
  tmp = IRR1 ; tmp = (tmp & ( ~0x02 ));  IRR1 = tmp ; //IRR1の1Bit目、IRRI1（割り込み時に立つBit）をクリアしておく
  tmp = IENR1; tmp = ( tmp | 0x02 ); IENR1 = tmp; //IRQ1割り込みを許可
  //IRQ2割り込みの設定  //P1-6端子の状態により割り込みを発生させる  //割り込みベクタ番号16
  tmp = PMR1 ; tmp = ( tmp | 0x40 ); PMR1 = tmp;  //port1-6の機能をirq2入力端子に設定
  tmp = PUCR1 ; tmp = ( tmp | 0x40 ); PUCR1 = tmp;//port1-6のをプルアップ
  tmp = IEGR1; tmp = ( tmp | 0x04 ); IEGR1 = tmp; //立ち上がりエッジで割り込むように設定(コメント行にすれば立下り）
  tmp = IRR1 ; tmp = (tmp & ( ~0x04 ));  IRR1 = tmp ; //IRR1の2Bit目、IRRI2（割り込み時に立つBit）をクリアしておく
  tmp = IENR1; tmp = ( tmp | 0x04 ); IENR1 = tmp; //IRQ2割り込みを許可
  //IRQ3割り込みの設定  //P1-7端子の状態により割り込みを発生させる  //割り込みベクタ番号17
  tmp = PMR1 ; tmp = ( tmp | 0x80 ); PMR1 = tmp;  //port1-7の機能をirq3入力端子に設定
  tmp = PUCR1 ; tmp = ( tmp | 0x80 ); PUCR1 = tmp;//port1-7のをプルアップ
  tmp = IEGR1; tmp = ( tmp | 0x08 ); IEGR1 = tmp; //立ち上がりエッジで割り込むように設定(コメント行にすれば立下り）
  tmp = IRR1 ; tmp = (tmp & ( ~0x08 ));  IRR1 = tmp ; //IRR1の3Bit目、IRRI3（割り込み時に立つBit）をクリアしておく
  tmp = IENR1; tmp = ( tmp | 0x08 ); IENR1 = tmp; //IRQ3割り込みを許可
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//防犯解除入力を受け付けないようにする
void GZ( void)
{
 unsigned char tmp;
 keyflug =0;
 tmp = IENR1; tmp = tmp & ( ~0x2 ); IENR1 = tmp; //IRQ1割り込みを不許可
 tmp = IENR1; tmp = tmp & ( ~0x4 ); IENR1 = tmp; //IRQ2割り込みを不許可
 tmp = IENR1; tmp = tmp & ( ~0x8 ); IENR1 = tmp; //IRQ3割り込みを不許可
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//単に返答をする
void Gg( void)
{
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//フラグ情報をサーバーへ返す。1文字目:警備解除キーが押された2､3文字目:人センサーの検知回数
void Gh( void)
{
 outCh( miname[0] );outCh( miname[1] );
 if( keykaijoflug==0 ){ outCh( '0' ); }else{ outCh( '1' ); }
 outChfc(hito);
 outCh( '!' );
 hito = 0;
 keykaijoflug = 0;
return;
}

//設定状況をサーバーへ返す。1文字目：人検知時ブザーを鳴らすか　2文字目:人検知時LEDを光らせるか　3文字目:警備解除キーを受け付けるか
void Gi( void)
{
 outCh( miname[0] );outCh( miname[1] );
 if( hitobuzaflug==0 ){ outCh( '0' ); }else{ outCh( '1' ); }
 if( hitoledflug==0  ){ outCh( '0' ); }else{ outCh( '1' ); }
 if( keyflug==0      ){ outCh( '0' ); }else{ outCh( '1' ); }
 outCh( '!' );
return;
}

//特定のポートのIO設定を行う。1文字目:port名(1,5,7,8)　2文字目:port番号（0〜7）3文字目:io:1=出力0=入力に指定する
void Gj( void)
{
 char ch = 'A';
 unsigned char bitno; unsigned char io;
 ch = meirei[5];
 bitno = y_conv_ch1_touchv( &ch );
 ch = meirei[6];
 io = y_conv_ch1_touchv( &ch );
 iniIo(meirei[4] , bitno , io);
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

// 特定の出力ポートの設定を行う。1文字目:port名(1,5,7,8)　2文字目:port番号（0〜7）3文字目:lh:1=H0=Lに指定する.
// Gjで出力に指定してから用いる
void Gk( void)
{
 char ch;
 unsigned char bitno; unsigned char lh;
 ch = meirei[5];
 bitno = y_conv_ch1_touchv( &ch );
 ch = meirei[6];
 lh = y_conv_ch1_touchv( &ch );
 setIo( meirei[4], bitno, lh);
 outCh( miname[0] );outCh( miname[1] );
 outCh( '!' );
return;
}

//Gl 特定の入力port、bitno番目の端子のl/hを取得する。1文字目:port名(1,5,7,8,B)　2文字目:port番号（0〜7）Gjで入力に指定してから用いる。
void Gl( void)
{
 unsigned char ch[2] ;
 unsigned char * ch1 = "aa";
 unsigned char bitno; 
 unsigned char tmp;
 ch[0] ='0'; ch[1] =meirei[5];
 bitno = y_conv_ch2_touchv( ch );
 tmp = getIo(meirei[4] , bitno);
 outCh( miname[0] );outCh( miname[1] );
 ch1 = y_conv_uchv_toch2( tmp ) ;
  outCh( *ch1  );outCh( *(ch1+1) );
 outCh( '!' );
return;
}

//Gm 各PORTの状態を返す1,5,7,8,Bの順
void Gm( void)
{
 unsigned char tmp; 
 unsigned  char *ch1="   ";
 outCh( miname[0] );outCh( miname[1] );
 tmp = PDR1 ;ch1 = y_conv_uchv_toch2( tmp ) ; outCh( * ch1 );outCh( * (ch1+1) );
 tmp = PDR5 ;ch1 = y_conv_uchv_toch2( tmp ) ; outCh( * ch1 );outCh( * (ch1+1) );
 tmp = PDR7 ;ch1 = y_conv_uchv_toch2( tmp ) ; outCh( * ch1 );outCh( * (ch1+1) );
 tmp = PDR8 ;ch1 = y_conv_uchv_toch2( tmp ) ; outCh( * ch1 );outCh( * (ch1+1) );
 tmp = PDRB ;ch1 = y_conv_uchv_toch2( tmp ) ; outCh( * ch1 );outCh( * (ch1+1) );
 outCh( '!' );
return;
}