#!/bin/bash # NANOPI NEO PLUS2 BLUETOOTH HELPER SCRIPT CHIP="ap6212" UART_DEV="ttyS3" INDEX=`rfkill list | grep "sunxi-bt" | cut -f 1 -d":"` reset (){ BTWAKE="/proc/bluetooth/sleep/btwake" if [[ -f "${BTWAKE}" ]]; then echo "0" > ${BTWAKE} fi INDEX=`rfkill list | grep $1 | cut -f 1 -d":"` if [[ -n ${INDEX} ]]; then rfkill block ${INDEX} sleep 1 rfkill unblock ${INDEX} sleep 1 fi } start (){ sleep 2.75 rm -rf /var/log/brcm BRCM_TRY_LOG="/var/log/brcm/brcm_try.log" BRCM_LOG="/var/log/brcm/brcm.log" BRCM_ERR_LOG="/var/log/brcm/brcm_err.log" [[ -d "/var/log/brcm" ]] || mkdir -p "/var/log/brcm" if [[ -d "/sys/class/rfkill/rfkill${INDEX}" ]]; then reset "sunxi-bt" chmod 0660 /sys/class/rfkill/rfkill${INDEX}/state chmod 0660 /sys/class/rfkill/rfkill${INDEX}/type chgrp dialout /sys/class/rfkill/rfkill${INDEX}/state chgrp dialout /sys/class/rfkill/rfkill${INDEX}/type if [[ -f "/sys/bus/nvmem/devices/sunxi-sid0/nvmem" ]]; then MACADDR=`md5sum /sys/bus/nvmem/devices/sunxi-sid0/nvmem | cut -b 1-12 | sed -r ':1;s/(.*[^:])([^:]{2})/\1:\2/;t1'` else MACADDR=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/') fi echo ${MACADDR} > /tmp/bt_macaddress let TIMEOUT=90 while [ ${TIMEOUT} -gt 0 ]; do killall -9 /bin/brcm_patchram_plus /bin/brcm_patchram_plus -d --patchram /lib/firmware/${CHIP}/bcm43438a1.hcd --enable_hci --bd_addr ${MACADDR} --no2bytes --tosleep 5000 /dev/${UART_DEV} >${BRCM_LOG} 2>&1 & sleep 30 CUR_TIME=`date "+%H-%M-%S"` if [[ `grep "Done setting line discpline" "${BRCM_LOG}"` ]]; then echo "${CUR_TIME}: bt firmware download ok($((TIMEOUT/30)))" >> ${BRCM_TRY_LOG} if [[ ! `grep "fail" "${BRCM_TRY_LOG}"` ]]; then reset "hci0" hciconfig hci0 down sleep .50 hciconfig hci0 up hciconfig >> ${BRCM_TRY_LOG} fi break else echo "${CUR_TIME}: bt firmware download fail($((TIMEOUT/30)))" >> ${BRCM_TRY_LOG} cp ${BRCM_LOG} ${BRCM_ERR_LOG} reset fi TIMEOUT=$((TIMEOUT-30)) done fi } stop (){ kill `ps --no-headers -C brcm_patchram_plus -o pid` } if [ $# -eq 0 ]; then >&2 echo -e "Arguments: start stop" exit 1 fi case $1 in start|stop) ;; *) echo -e "Arguments: start stop" >&2 exit 1 esac BTHELPER=`echo $1` $BTHELPER exit 0