#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org

START=10
STOP=90

uci_apply_defaults() {
  . /lib/functions/system.sh

  cd /etc/uci-defaults || return 0
  files="$(ls)"
  [ -z "$files" ] && return 0
  for file in $files; do
    (. "./$(basename $file)") && rm -f "$file"
  done
  uci commit
}

boot() {
  [ -f /proc/mounts ] || /sbin/mount_root
  [ -f /proc/jffs2_bbc ] && echo "S" >/proc/jffs2_bbc

  mkdir -p /var/lock
  chmod 1777 /var/lock
  mkdir -p /var/log
  mkdir -p /var/run
  ln -s /var/run /run
  ln -s /var/lock /run/lock
  mkdir -p /var/state
  mkdir -p /var/tmp
  mkdir -p /tmp/.uci
  chmod 0700 /tmp/.uci
  touch /var/log/wtmp
  touch /var/log/lastlog
  mkdir -p /tmp/resolv.conf.d
  touch /tmp/resolv.conf.d/resolv.conf.auto
  ln -sf /tmp/resolv.conf.d/resolv.conf.auto /tmp/resolv.conf
  grep -q debugfs /proc/filesystems && /bin/mount -o nosuid,nodev,noexec,noatime -t debugfs debugfs /sys/kernel/debug
  grep -q bpf /proc/filesystems && /bin/mount -o nosuid,nodev,noexec,noatime,mode=0700 -t bpf bpffs /sys/fs/bpf
  grep -q pstore /proc/filesystems && /bin/mount -o nosuid,nodev,noexec,noatime -t pstore pstore /sys/fs/pstore
  [ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe

  touch /tmp/.config_pending
  /sbin/kmodloader

  [ ! -f /etc/config/wireless ] && {
    # compat for bcm47xx and mvebu
    sleep 1
  }

  [ -e /sys/class/ieee80211/phy0/macaddress ] && {
		local mac=$(cat /sys/class/ieee80211/phy0/macaddress)
		local val="0x020000"
		local oui=${mac%:*:*:*}                                                                                     
		local nic=${mac#*:*:*:}                                                                                     

		oui=$(printf "%06x" $((0x${oui//:/} + $val & 0xffffff)) | sed 's/^\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1:\2:\3/')
		echo $oui:$nic > /sys/class/ieee80211/phy0/macaddress                                                                                           
	}

	[ -e /sys/class/ieee80211/phy1/macaddress ] && {
		local mac=$(cat /sys/class/ieee80211/phy1/macaddress)
		local val="0x020000"
		local oui=${mac%:*:*:*}                                                                                     
		local nic=${mac#*:*:*:}                                                                                     

		oui=$(printf "%06x" $((0x${oui//:/} + $val & 0xffffff)) | sed 's/^\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1:\2:\3/')
		echo $oui:$nic > /sys/class/ieee80211/phy1/macaddress                                                                                           
	}

  mkdir -p /tmp/.uci
  [ -f /etc/uci-defaults/30_uboot-envtools ] && (. /etc/uci-defaults/30_uboot-envtools)
  /bin/config_generate
  rm -f /tmp/.config_pending
  /sbin/wifi config
  uci_apply_defaults
  sync

  # temporary hack until configd exists
  /sbin/reload_config
  # Reset Ble: gpio#0

  # Reset ZWave: gpio#2
  if [ ! -e /sys/class/gpio/gpio514/value ]; then
    echo 514 >/sys/class/gpio/export
    echo out >/sys/class/gpio/gpio514/direction
    echo 1 >/sys/class/gpio/gpio514/value
  fi

  if [ ! -e /sys/class/gpio/gpio512/value ]; then
    #reg w 10000060 0x50140044
    echo 512 >/sys/class/gpio/export
    echo out >/sys/class/gpio/gpio512/direction
    echo 1 >/sys/class/gpio/gpio512/value
  fi

  # Reset Zigbee : gpio#1
  if [ ! -e /sys/class/gpio/gpio513/value ]; then
    echo 513 >/sys/class/gpio/export
    echo out >/sys/class/gpio/gpio513/direction
    echo 1 >/sys/class/gpio/gpio513/value
  fi

  #4G POWER_ON: gpio#16
  if [ ! -e /sys/class/gpio/gpio528/value ]; then
    echo 528 >/sys/class/gpio/export
    echo out >/sys/class/gpio/gpio528/direction
    echo 0 >/sys/class/gpio/gpio528/value
  fi
  #4G RESET: gpio#17
  if [ ! -e /sys/class/gpio/gpio529/value ]; then
    echo 529 >/sys/class/gpio/export
    echo out >/sys/class/gpio/gpio529/direction
    echo 0 >/sys/class/gpio/gpio529/value
  fi
  #4G RF_ON: gpio#18
  if [ ! -e /sys/class/gpio/gpio530/value ]; then
    echo 530 >/sys/class/gpio/export
    echo out >/sys/class/gpio/gpio530/direction
    echo 0 >/sys/class/gpio/gpio530/value
  fi
  
  # enable led pin set 
  devmem 0x1000003c 32 0x001e001f
  devmem 0x10000060 32 0x54104054
  # enable pwrled 
  echo 1 > /sys/class/leds/pwrled/brightness
  
  # errled -> wifi led 
  echo netdev > /sys/class/leds/errled/trigger
  echo wlan1 > /sys/class/leds/errled/device_name
  echo 1 > /sys/class/leds/errled/link
  echo 0 > /sys/class/leds/errled/tx
  echo 0 > /sys/class/leds/errled/rx

  # zigbeeled -> zigbee led
  /root/boot_wifi_run.sh &

  /etc/init.d/mqtt_cmd disable
  /etc/init.d/zwave disable 
  /etc/init.d/zigbee disable
  /etc/init.d/ha_web_ui disable 
  /etc/init.d/ha_register disable
  /etc/init.d/frpc disable
}
