
from pyb import UART, repl_uart, udelay

# HC06 Bluetooth board ----------------------------------------

# This opens connection with Bluetooth module connected to Y1, Y2 (UART 6)
# Then it sets the repl output to this UART.
#COMMANDS AT - does nothing but get an ok.
#  The posible baudrates are:
#     AT+BAUD1-------1200
#     AT+BAUD2-------2400
#     AT+BAUD3-------4800
#     AT+BAUD4-------9600 - Default for hc-06
#     AT+BAUD5------19200
#     AT+BAUD6------38400
#     AT+BAUD7------57600
#     AT+BAUD8-----115200
#     AT+BAUD9-----230400
#     AT+BAUDA-----460800
#     AT+BAUDB-----921600
#     AT+BAUDC----1382400
#     AT+VERSION
#     AT+NAMEnewname  This is the name that will show up in windows.
#     AT+PIN???? set 4 digit pairing pin.

class hc06(object):
  """HC06 (JY-MCU) Bluetooth serial device driver.  This is simply a light UART wrapper
     with addition AT command methods to customize the device."""

  def __init__( self, uart, baudrate ):
    """ uart = uart #1-6, baudrate must match what is set on the JY-MCU.
        Needs to be a #1-C. """
    self._uart = UART(uart, baudrate)

  def __del__( self ) : self._uart.deinit()

  def any( self ) : return self._uart.any()

  def write( self, astring ) : return self._uart.write(astring)
  def writechar( self, achar ) : self._uart.writechar(achar)

  def read( self, num = None ) : return self._uart.read(num)
  def readline( self ) : return self._uart.readline()
  def readchar( self ) : return self._uart.readchar()
  def readall( self ) : return self._uart.readall()
  def readinto( self, buf, count = None ) : return self._uart.readinto(buf, count)

  def _cmd( self, cmd ) :
    """ Send AT command, wait a bit then return result string. """
    self._uart.write("AT+" + cmd)
    udelay(500)
    return self.readline()

  def baudrate( self, rate ) :
    """ Set the baud rate.  Needs to be #1-C. """
    return self._cmd("BAUD" + str(rate))

  def name( self, name ) :
    """ Set the name to show up on the connecting device. """
    return self._cmd("NAME" + name)

  def pin( self, pin ) :
    """ Set the given 4 digit numeric pin. """
    return self._cmd("PIN" + str(pin))

  def version( self ) : return self._cmd("VERSION")

  def setrepl( self ) : repl_uart(self._uart)

