Китайская мобила + MakeProgress = Вольтметр питания УСБ

Собственно вожусь со своим сетапом для удаленной отладки. УСБ девайсов у меня много, 10портового хаба не хватает. Разумеется запитать все это дело, когда там заряжается планшет мобильник, питается несколько девборд и прч. проблемно. Надо бы знать, когда питалово проседает. По крайней мере пока я не поставлю более мощный адаптер питания.
В общем воспользовавшись АТ командой AT+EADC=1, православным башем, и плазмоидом MakeProgress получил примерно такое:

Китайская мобила подрубается к компу по блютуз последовательному порту, и еще работает как удаленная клавиатура. Весь софт я наваял на баше, исходник скрипта привожу ниже. Не слишком красиво, в идеале надо было делать демона на сях, но уж хрен с ним.
Аппаратный компорт остается свободен для аврки, которая управляет питанием всего.

at_daemon.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
 
if [ -e /tmp/at_fifo ]; then
echo "Already ready."
cat /dev/rfcomm0 >> /tmp/at_fifo&
else
mkfifo /tmp/at_fifo
chmod 777 /tmp/at_fifo
echo "Configuring interface"
rfcomm bind rfcomm0 34:71:B9:53:66:01 10 
stty -F /dev/rfcomm0 115200 
echo "AT interface ready"
fi
 
#enable ADC & EKPD by default
 
./at_files/init.sh&
 
while true; do cat /tmp/at_fifo|while read line; do
#echo $line
CMD=`echo $line|cut -d" " -f1`
DATA=`echo $line|cut -d" " -f2| sed 's/.$//'`
case "$CMD" in
  "+EADC:")
  VBAT=`echo $DATA|cut -d"," -f1`
  VUSB=`echo $DATA|cut -d"," -f5`
  echo '{"minimum":0,"maximum":4.5,"value":'$VBAT'}' > /tmp/vbat
  echo '{"minimum":0,"maximum":6,"value":'$VUSB'}' > /tmp/vusb
  echo "VBAT=$VBAT; VUSB=$VUSB"
   ;;
  "+EKPDS:")
  KEYEVENT=`echo $DATA|cut -d"," -f1`
  KEYCODE=`echo $DATA|cut -d"," -f2`
  if [ $KEYEVENT -eq "1" ]; then
    echo $KEYCODE
    ./keymaps/e71.map $KEYCODE
    fi
  ;;
  "SEND")
  ATCMD=`echo $line|cut -d" " -f2`
  echo "$ATCMD" > /dev/rfcomm0
  echo "Sending CMD: $ATCMD"
  ;;
  "ERROR")
  echo "Bad stuff =("
  ;;
  "OK")
  echo "All fine"
  ;;
  *)
  echo $line
  ;;
 esac
done
done

init.sh
Высылает команды на включение вывода с ацп
AT() выдергиваем отсюда для своих нужд.

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
AT()
{
echo "SEND AT$1" > /tmp/at_fifo
}
sleep 5
#Since there's a bug/feature - a double command of the same thing just increases the poll frequency
AT "+EKPD=0"
AT "+EADC=0"
AT "+EKPD=1"
AT "+EADC=1"

e71.map
Пример мэппинга. В туду сделать его красивше, но это как-нибудь в следующий раз.
e71.map
A small and limited example of key mapping script. Yet to be remade into a better looking map using a more neat solution.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash -x
echo $1
 
case "$1" in
14)
  xdotool key Up
;;
15)
  xdotool key Down
;;
16)
  xdotool key Left
;;
17)
  xdotool key Right
;;

МейкПрогресс для этого пришлось немного хакнуть, он только в % отображал значение. Фичреквест отправил Никите Мельниченко, авось пофиксит к след. релизу.
P.S. Через TST-PS можно оказывается получать координаты нажатия на экран. Жаль в синий зуб не пробросишь…

Добавить комментарий