#!/usr/bin/python

# Banco di test CM-Panel POE
# https://www.acmesystems.it/banco_cmpanel-poe

import RPi.GPIO as GPIO
import serial
import time
import sys

Failed=False

print("Test RS485")
print("SW1 ON - ON - OFF - OFF");

transmit_pin = 38

GPIO.setmode(GPIO.BCM)  # Use Broadcom pin numbering
GPIO.setup(transmit_pin, GPIO.OUT)  # transmit_pin is the GPIO pin number connected to DE and RE

data_to_send = bytearray(b'HelloWorld')

serRS485 = serial.Serial('/dev/ttyAMA0', 115200,timeout=0.1)  
serRS485.flushOutput()
serRS485.flushInput()

serUSB = serial.Serial('/dev/ttyUSB0', 115200,timeout=0.1)  
serUSB.flushOutput()
serUSB.flushInput()

# Test from RS485 to ttyUSB0

GPIO.output(transmit_pin, GPIO.HIGH)  # Enable DE
serRS485.write(data_to_send)
serRS485.flush()  
GPIO.output(transmit_pin, GPIO.LOW)  # Disable DE

received_data = serUSB.read(len(data_to_send))

if len(received_data)<len(data_to_send):
	print("Errore RS485->ttyUSB0: trasmessi %d byte ricevuti %d byte" % (len(data_to_send),len(received_data)))
	Failed=True

if received_data!=data_to_send:
	print("Errore RS485->ttyUSB0: caratteri ricevuti diversi da quelli trasmessi")
	Failed=True

# Test from ttyUSB0 to RS485

serUSB.write(data_to_send)
serUSB.flush()  

received_data = serRS485.read(len(data_to_send))

if len(received_data)<len(data_to_send):
	print("Errore ttyUSB0->RS485: trasmessi %d byte ricevuti %d byte" % (len(data_to_send),len(received_data)))
	Failed=True

if received_data!=data_to_send:
	print("Errore ttyUSB0->RS485: caratteri ricevuti diversi da quelli trasmessi")
	Failed=True

serRS485.close()
serUSB.close()
GPIO.cleanup()  # Clean up GPIO on exit
    
if Failed==False:
	print("Test SUCCESS")
	sys.exit(0)    
else:
	print("Test FAILED")    
	sys.exit(1)
