# -*- coding: utf-8 -*-

import socket
import sys
import select
import os
from time import sleep
import threading

host = "localhost"
port = 10500
bufsize = 1024
timer_length = 20.0
Rst = "0"
standby = False

# GPIO オープン処理
 os.system("gpio -g mode 9 out")
 os.system("gpio -g mode 11 out")
 os.system("gpio -g mode 8 out")
 os.system("gpio -g mode 7 out")
 os.system("gpio -g mode 23 out")
 os.system("gpio -g mode 16 out")

 os.system("/home/pi/jtalk.sh 音声リモコンを起動しました")


# 命令受付モード終了関数
def standbyOff():
  global standby, timer_length
  if standby == True:
    os.system("gpio -g write 16 1")
    os.system("/home/pi/jtalk.sh 命令受付モードを終了します")
    os.system("gpio -g write 23 0")
    os.system("gpio -g write 9 0")
    os.system("gpio -g write 11 0")
    os.system("gpio -g write 8 0")
    os.system("gpio -g write 7 0")
    os.system("gpio -g write 16 0")
    Rst = "0"
    standby = False

# julius 接続処理 -module Mode
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, port))


# RasRobo 永久ループ処理
while True:
  message = ""
  inputready, outputready, exceptrdy = select.select([client_socket], [],[])

# 命令受付処理
for s in inputready:
  if s == client_socket:
      message = str(client_socket.recv(bufsize).decode('utf-8'))
      print ("受信したメッセージ : ", message)
   if "命令受付モードオン" in message:      #"スタンバイ", "起動"
     if standby == True:
         os.system("/home/pi/jtalk.sh すでに命令受付モード中です")
     else:
         os.system("/home/pi/jtalk.sh 命令受付モードに入ります")
         os.system("gpio -g write 23 1")
         standby = True
         t = threading.Timer(timer_length, standbyOff)
         t.start()

   elif "命令受付モードオフ" in message:    #"ニュートラル", "解除"
         os.system("amixer set Mic nocap")
         os.system("/home/pi/jtalk.sh 命令受付モードを解除します")
         os.system("amixer set Mic cap")
         os.system("gpio -g write 23 0")
         os.system("gpio -g write 9 0")
         os.system("gpio -g write 11 0")
         os.system("gpio -g write 8 0")
         os.system("gpio -g write 7 0")
         Rst = "0"
         standby = False

   elif "終了" in message:           #"終了"
         os.system("gpio -g write 23 0")
         os.system("gpio -g write 9 0")
         os.system("gpio -g write 11 0")
         os.system("gpio -g write 8 0")
         os.system("gpio -g write 7 0")
         Rst = "0"
         standby = False


# モーター駆動処理
   if standby == True:          #命令受付モード中
     if Rst == "0":            #起動命令受付可能 
      if "前進" in message:     #"前","前進", "進め", "START"
         os.system("amixer set Mic nocap")
         os.system("/home/pi/jtalk.sh 前進します")
         os.system("amixer set Mic cap")
         os.system("gpio -g write 9 1")
         os.system("gpio -g write 11 0")
         os.system("gpio -g write 8 1")
         os.system("gpio -g write 7 0")
         Rst = "1"
      if "後進" in message:     #"後進", "後", "バック", "さがれ"
         os.system("amixer set Mic nocap")
         os.system("/home/pi/jtalk.sh バックします、バックします")
         os.system("amixer set Mic cap")
         os.system("gpio -g write 9 0")
         os.system("gpio -g write 11 1")
         os.system("gpio -g write 8 0")
         os.system("gpio -g write 7 1")
         Rst = "1"
      if "左前" in message:
         os.system("amixer set Mic nocap")
         os.system("/home/pi/jtalk.sh 前進して左に曲がります")
         os.system("amixer set Mic cap")
         os.system("gpio -g write 9 1")
         sleep(0.5)       #0.5秒片側回転
         os.system("gpio -g write 11 0")
         os.system("gpio -g write 8 1")
         os.system("gpio -g write 7 0")
         Rst = "1"
      if "左後" in message:
         os.system("amixer set Mic nocap")
         os.system("/home/pi/jtalk.sh バックで左に曲がります")
         os.system("amixer set Mic cap")
         os.system("gpio -g write 11 1")
         sleep(0.5)       #0.5秒片側回転
         os.system("gpio -g write 9 0")
         os.system("gpio -g write 8 0")
         os.system("gpio -g write 7 1")
         Rst = "1"
      if "右前" in message:
         os.system("amixer set Mic nocap")
         os.system("/home/pi/jtalk.sh 前進して右に曲がります")
         os.system("amixer set Mic cap")
         os.system("gpio -g write 8 1")
         sleep(0.5)       #0.5秒片側回転
         os.system("gpio -g write 9 1")
         os.system("gpio -g write 11 0")
         os.system("gpio -g write 7 0")
         Rst = "1"
      if "右後" in message:
         os.system("amixer set Mic nocap")
         os.system("/home/pi/jtalk.sh バックで右に曲がります")
         os.system("amixer set Mic cap")
         os.system("gpio -g write 7 1")
         sleep(0.5)       #0.5秒片側回転
         os.system("gpio -g write 9 0")
         os.system("gpio -g write 11 1")
         os.system("gpio -g write 8 0")
         Rst = "1"

# モーター停止処理
     if Rst == "1":            #停止命令受付可能 
      if "停止" in message:     #"停止", "止まれ", "STOP"
         os.system("gpio -g write 16 1")
         os.system("gpio -g write 9 0")
         os.system("gpio -g write 11 0")
         os.system("gpio -g write 8 0")
         os.system("gpio -g write 7 0")
         os.system("gpio -g write 23 0")
         os.system("gpio -g write 16 0")
         Rst = "0"



client_socket.close()