#define RS485_OE_1 22 //RS485 CH#1 Output Enable => pin 22 for CH#1
#define RS485_OE_2 23 //RS485 CH#2 Output Enable => pin 23 for CH#2

#define Snd_485 HIGH
#define Rcv_485 LOW

void RS485_setup(){
  Serial1.setTimeout(300);
  Serial1.begin(9600);
  pinMode(RS485_OE_1, OUTPUT);
  delay(10);
  digitalWrite(RS485_OE_1, Rcv_485);

  Serial2.setTimeout(300);
  Serial2.begin(9600);
  pinMode(RS485_OE_2, OUTPUT);
  delay(10);
  digitalWrite(RS485_OE_2, Rcv_485);
}

void send_485(){
  if(!Wait_485_1){
    String message = read_buff(Buff_485_1_Wr);
    if(message != ""){
      
      //save sent message info. for received data processing
      latest_sent_msg = message;

      message += CRLF;
      digitalWrite(RS485_OE_1, Snd_485); delay(5);
      Serial1.print(message);
      returnTime = millis();
      Serial1.flush();
      digitalWrite(RS485_OE_1, Rcv_485); delay(5);

      Wait_485_1 = true;
      Wait_485_1_cnt = 0;
    }
  }
}

int recieve_485(){
  // Timeout code
  if(Wait_485_1){
    Wait_485_1_cnt++;
    if(Wait_485_1_cnt > 25){ // Timeout = periodic(20ms) x 20 = 400 msec
      //Serial.println("485 not responced... (Timeout)");
      timeoutMC9();
      //if((latest_sent_msg == MC9_10_PV) ||(latest_sent_msg == MC9_10_SV)){

      /*
      if((latest_sent_msg == msg_MC9_PV(10)) || (latest_sent_msg == msg_MC9_SV(10))){
        timeoutMC9();
      }
      */
      latest_sent_msg = "";
      Wait_485_1 = false;
      Wait_485_1_cnt = 0;
      numOf485--;
      

      return -1;
    }
  }
  // Receive pv data
  while(Wait_485_1 && (Serial1.available() > 0)) {
    char c = Serial1.read();    
    write_buff_c(Buff_485_1_Rd, c);
  }

  String message = read_buff(Buff_485_1_Rd);
  if(message != ""){
    numOf485--;
    if(latest_sent_msg.indexOf("DRS") != -1){
      saveMC9(message);
    }
    else{
      Serial.print("----- 485 rcv : ");
      Serial.println(message);
    }
    Wait_485_1 = false;
    Wait_485_1_cnt = 0;
  }

  return 0;
}

/* For Test from PC */
void recieve_485_0(){

  while(Serial.available() > 0) {
    char c = Serial.read();    
    IdeSerial += c;
  }

  if(IdeSerial.endsWith("\n")){
    IdeSerial.replace(CRLF,"");
    IdeSerial += sumMC9(IdeSerial);
    IdeSerial = "" + IdeSerial + CRLF;
    
    write_buff_first(Buff_485_1_Wr, IdeSerial);
    IdeSerial = "";
  }
}
