|
@@ -0,0 +1,88 @@
|
|
|
|
|
+#!/bin/bash
|
|
|
|
|
+
|
|
|
|
|
+# 检查参数个数
|
|
|
|
|
+if [ $# -ne 4 ]; then
|
|
|
|
|
+ echo "Usage: $0 <0-2> <0-4095> <0-4095> <0-4095>"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# 赋值参数
|
|
|
|
|
+# bus 0-/dev/i2c-0 1-/dev/i2c-1
|
|
|
|
|
+bus=0
|
|
|
|
|
+
|
|
|
|
|
+# param1 0-第0个LED 1-第1个LED 2-第2个LED
|
|
|
|
|
+param1=$1
|
|
|
|
|
+
|
|
|
|
|
+# param2 red
|
|
|
|
|
+param2=$2
|
|
|
|
|
+param2=$((4095 - ${param2}))
|
|
|
|
|
+
|
|
|
|
|
+# param3 green
|
|
|
|
|
+param3=$3
|
|
|
|
|
+param3=$((4095 - ${param3}))
|
|
|
|
|
+
|
|
|
|
|
+# param4 blue
|
|
|
|
|
+param4=$4
|
|
|
|
|
+param4=$((4095 - ${param4}))
|
|
|
|
|
+
|
|
|
|
|
+# 验证第一个参数范围 0-2
|
|
|
|
|
+if ! [[ "$param1" =~ ^[0-2]$ ]]; then
|
|
|
|
|
+ echo "Error: First parameter must be 0, 1, or 2"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# 验证后面三个参数范围 0-4095
|
|
|
|
|
+for i in 2 3 4; do
|
|
|
|
|
+ val=${!i}
|
|
|
|
|
+ if ! [[ "$val" =~ ^[0-9]+$ ]] || [ "$val" -lt 0 ] || [ "$val" -gt 4095 ]; then
|
|
|
|
|
+ echo "Error: Parameter $i must be an integer between 0 and 4095"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+done
|
|
|
|
|
+
|
|
|
|
|
+# 拆分函数:将 0-4095 的值拆成两个字节(高8位和低8位)
|
|
|
|
|
+split_into_bytes() {
|
|
|
|
|
+ local value=$1
|
|
|
|
|
+ local high_byte=$(( (value >> 8) & 0xFF ))
|
|
|
|
|
+ local low_byte=$(( value & 0xFF ))
|
|
|
|
|
+ echo "$high_byte $low_byte"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+read high1 low1 <<< $(split_into_bytes $param2)
|
|
|
|
|
+read high2 low2 <<< $(split_into_bytes $param3)
|
|
|
|
|
+read high3 low3 <<< $(split_into_bytes $param4)
|
|
|
|
|
+
|
|
|
|
|
+echo "param1:${param1}"
|
|
|
|
|
+echo "high1:${high1} low1:${low1}"
|
|
|
|
|
+echo "high1:${high2} low1:${low2}"
|
|
|
|
|
+echo "high1:${high3} low1:${low3}"
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+reg_06=$((0x06 + ${param1} * 12))
|
|
|
|
|
+reg_07=$((0x07 + ${param1} * 12))
|
|
|
|
|
+reg_08=$((0x08 + ${param1} * 12))
|
|
|
|
|
+reg_09=$((0x09 + ${param1} * 12))
|
|
|
|
|
+reg_0a=$((0x0a + ${param1} * 12))
|
|
|
|
|
+reg_0b=$((0x0b + ${param1} * 12))
|
|
|
|
|
+reg_0c=$((0x0c + ${param1} * 12))
|
|
|
|
|
+reg_0d=$((0x0d + ${param1} * 12))
|
|
|
|
|
+reg_0e=$((0x0e + ${param1} * 12))
|
|
|
|
|
+reg_0f=$((0x0f + ${param1} * 12))
|
|
|
|
|
+reg_10=$((0x10 + ${param1} * 12))
|
|
|
|
|
+reg_11=$((0x11 + ${param1} * 12))
|
|
|
|
|
+
|
|
|
|
|
+# 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} "
|
|
|
|
|
+
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_06 0
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_07 0
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_08 $low1
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_09 $high1
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_0a 0
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_0b 0
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_0c $low2
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_0d $high2
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_0e 0
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_0f 0
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_10 $low3
|
|
|
|
|
+i2cset -y ${bus} 0x40 $reg_11 $high3
|
|
|
|
|
+
|