#!/bin/sh
#===============================================================================
#
#  Copyright (C) 2023 by Digi International Inc.
#  All rights reserved.
#
#  This program is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License version 2 as published by
#  the Free Software Foundation.
#
#
#  !Description: Initialize bluetooth hardware
#
#===============================================================================

HCI_IFACE="hci0"

log() {
	printf "<3>iw612-bluetooth: %s\n" "${1}" >/dev/kmsg
}

bluetooth_start() {
	if ! [ -e "/proc/device-tree/bluetooth/mac-address" ]; then
		log "[ERROR] Bluetooth mac-address not found"
		return
	fi

	BTADDR=$(hexdump -ve '1/1 "%02X" ":"' /proc/device-tree/bluetooth/mac-address 2>/dev/null | sed 's/:$//g')
	hciattach -t5 /dev/ttyBt any 115200 flow nosleep "${BTADDR}" && \
	hciconfig ${HCI_IFACE} up && \
	sleep 0.2 && \
	hcitool -i ${HCI_IFACE} cmd 0x3f 0x0009 0xc0 0xc6 0x2d 0x00 && \
	sleep 0.2 && \
	killall hciattach && \
	sleep 0.2 && \
	hciattach -t5 /dev/ttyBt any -s 3000000 3000000 flow && \
	log "Bluetooth activated" && return

	log "[ERROR] Cannot initialize Bluetooth"
	return 1
}

bluetooth_stop() {
	if [ -e "/sys/class/bluetooth/${HCI_IFACE}" ]; then
		# hci reset command
		hcitool -i ${HCI_IFACE} cmd 0x03 0x0003
		sleep 0.2
		# set baudrate to 115200
		hcitool -i ${HCI_IFACE} cmd 0x3f 0x0009 0x00 0xc2 0x01 0x00
		killall hciattach
	fi
}

case "$1" in
	start)
		bluetooth_start
		;;
	stop)
		bluetooth_stop
		;;
	restart)
		$0 stop
		sleep 1
		$0 start
		;;
	*)
		echo "Usage: $0 {start|stop|restart}"
		exit 1
		;;
esac
