light_ring_ctl.sh 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/bin/bash
  2. # 检查参数个数
  3. if [ $# -ne 4 ]; then
  4. echo "Usage: $0 <0-2> <0-4095> <0-4095> <0-4095>"
  5. exit 1
  6. fi
  7. # 赋值参数
  8. # bus 0-/dev/i2c-0 1-/dev/i2c-1
  9. bus=0
  10. # param1 0-第0个LED 1-第1个LED 2-第2个LED
  11. param1=$1
  12. # param2 red
  13. param2=$2
  14. param2=$((4095 - ${param2}))
  15. # param3 green
  16. param3=$3
  17. param3=$((4095 - ${param3}))
  18. # param4 blue
  19. param4=$4
  20. param4=$((4095 - ${param4}))
  21. # 验证第一个参数范围 0-2
  22. if ! [[ "$param1" =~ ^[0-2]$ ]]; then
  23. echo "Error: First parameter must be 0, 1, or 2"
  24. exit 1
  25. fi
  26. # 验证后面三个参数范围 0-4095
  27. for i in 2 3 4; do
  28. val=${!i}
  29. if ! [[ "$val" =~ ^[0-9]+$ ]] || [ "$val" -lt 0 ] || [ "$val" -gt 4095 ]; then
  30. echo "Error: Parameter $i must be an integer between 0 and 4095"
  31. exit 1
  32. fi
  33. done
  34. # 拆分函数:将 0-4095 的值拆成两个字节(高8位和低8位)
  35. split_into_bytes() {
  36. local value=$1
  37. local high_byte=$(( (value >> 8) & 0xFF ))
  38. local low_byte=$(( value & 0xFF ))
  39. echo "$high_byte $low_byte"
  40. }
  41. read high1 low1 <<< $(split_into_bytes $param2)
  42. read high2 low2 <<< $(split_into_bytes $param3)
  43. read high3 low3 <<< $(split_into_bytes $param4)
  44. echo "param1:${param1}"
  45. echo "high1:${high1} low1:${low1}"
  46. echo "high1:${high2} low1:${low2}"
  47. echo "high1:${high3} low1:${low3}"
  48. reg_06=$((0x06 + ${param1} * 12))
  49. reg_07=$((0x07 + ${param1} * 12))
  50. reg_08=$((0x08 + ${param1} * 12))
  51. reg_09=$((0x09 + ${param1} * 12))
  52. reg_0a=$((0x0a + ${param1} * 12))
  53. reg_0b=$((0x0b + ${param1} * 12))
  54. reg_0c=$((0x0c + ${param1} * 12))
  55. reg_0d=$((0x0d + ${param1} * 12))
  56. reg_0e=$((0x0e + ${param1} * 12))
  57. reg_0f=$((0x0f + ${param1} * 12))
  58. reg_10=$((0x10 + ${param1} * 12))
  59. reg_11=$((0x11 + ${param1} * 12))
  60. # echo "${reg_06} ${reg_07} ${reg_08} ${reg_09} ${reg_0a} ${reg_0b} ${reg_0c} ${reg_0d} ${reg_0e} ${reg_0f} ${reg_10} ${reg_11} "
  61. i2cset -y ${bus} 0x40 $reg_06 0
  62. i2cset -y ${bus} 0x40 $reg_07 0
  63. i2cset -y ${bus} 0x40 $reg_08 $low1
  64. i2cset -y ${bus} 0x40 $reg_09 $high1
  65. i2cset -y ${bus} 0x40 $reg_0a 0
  66. i2cset -y ${bus} 0x40 $reg_0b 0
  67. i2cset -y ${bus} 0x40 $reg_0c $low2
  68. i2cset -y ${bus} 0x40 $reg_0d $high2
  69. i2cset -y ${bus} 0x40 $reg_0e 0
  70. i2cset -y ${bus} 0x40 $reg_0f 0
  71. i2cset -y ${bus} 0x40 $reg_10 $low3
  72. i2cset -y ${bus} 0x40 $reg_11 $high3