寫在前頭:
自從購入Mazda CX-5 2.2D後,經過一番小小研究之後,有感於原廠所整合的基本功能不足,故有了擴充其功能的想法,由於本身並未接觸過嵌入式系統,唯其核心與Linux有共通之處,藉由本身浸淫Linux多年所累積的知識,才得以改造MZD Connect,將其功能進化。
一台馬自達新車,價值好幾十萬,甚或一百多萬,以在下的Mazda CX-5 2.2D,要價幾達120萬,拿來亂搞確實不太好(年輕時上億的機台都在搞了,120萬算啥?),不過因為對自身還算有信心,所以才敢放心大膽修改MZD Connect,因此想仿效的朋友,風險請自負,任何因本文所造成之損失,本人皆不負責。
本實作皆需搭配一隻Android手機,且該手機必須具備有無線基地台功能,並能安裝及執行文中所述之APP。基於新車的保固疑慮,所有功能之開發皆以不更動原廠介面為考量,背景圖片、語音功能皆能輕鬆一鍵回復原廠,Shell程式中於執行後亦恢復系統讀寫保護,盡量達到零風險。
MZD Connect進化專案持續開發中,由於皆利用零碎時間,故進度緩慢,加上測試完全在車內,也毫無效率可言,之所以會持續開發的原因,唯興趣而已,因此請勿以專業級眼光看待,謝謝您。
前置工作:手機請先安裝ConnectBot、SSH Button、ES檔案瀏覽器。
特別說明:車子發動後自動執行Shell Script,因有其風險因素存在,故不提供,而最大因素為怕網路流傳後,日本原廠工程師封掉或加強MZD Connect系統保護,故本人釋出版本必須搭配Android手機搭配SSH Button一鍵執行,因此請勿再針對此點提問。
註:以下皆為初期開發的版本,新版介面、功能皆已不同!!!!
本專案部分功能Demo:
實際影片:
MZD Connect進化專案項目:
(1) 隨機更換桌面。
(2) MP4影片撥放。
(3) REAL-TIME Tracking GPS。
(4) 語音提醒功能。[子項目:行車速度、行車數據資訊、時間、天氣、股價]
(5) Picture SlideShow。
(6) 手機鏡像。
ToDo List:
1.隨機更換桌面[完成度:99.9%]
目前功能:21張背景圖開機隨機自動更換及手機一鍵更換。
延伸功能:可分背景主題:以家庭、興趣、汽車…..當分類,擴充背景圖庫。
Shell Script:chg_back_21.sh(Shell Script完整釋出)
2.MP4影片撥放[完成度:40%]
尚未完成:Shell環境變數問題仍未解決,目前仍需手動登入MZD Connect執行。
說明:本功能為自行開發之影音撥放功能,目前網路上有較佳之解決方案,故不再提供Shell Script。
3.REAL-TIME Tracking GPS[完成度:30%]
目前功能:取得MZD Connect GPS座標資訊,回傳自己的主機。
未來:購買一台3G WiFi行動分享器放置於車內,汽車發動後Wi-Fi聯網即時發送座標資訊給遠端主機。
尚未完成:硬體、MZD程式優化、遠端主機程式。(未來完成不會釋出Shell Script)
4.語音提醒功能:[完成度:30%]
目前功能:車子發動N秒後,自動撥放一段語音及語音速度撥報。
延伸功能:可自行錄製個人專屬語音,例如:自己的、老婆的、女朋友的、小孩的,當然,你找的到蔡依林或林志玲幫你錄的話,請給作者在下我一份。
未來:天氣語音、語音整點報時、其它行車資訊語音。(僅會釋出語音速度撥報Shell Script)
Shell Script:speed_current_loop.sh
5. Picture SlideShow[完成度:0%]
6.手機鏡像[完成度:0%]
目前釋出之Shell Script :
chg_back_21.sh、restore_mzd.sh、my_mzd.sh、speed_current_loop.sh
=============================================================
進化專案(1):隨機更換桌面[chg_back_21.sh、restore_mzd.sh、my_mzd.sh]
=============================================================
#!/bin/sh
# Purpose: To Change MZD Connect Background Picture(0~21).
# Author: blog_yesican_tw
# file name: chg_back_21.sh
mount -o rw,remount /
a=4
b=9
no_chk=`echo $RANDOM | cut -c 2`
no=`echo $RANDOM | cut -c 3`
if [ $no_chk -lt $a ]
then
file=`/bin/ls /jci/gui/common/images/background$no.png`
elif [ $no_chk -lt $b ]
then
file=`/bin/ls /jci/gui/common/images/background1$no.png`
else
file=`/bin/ls /jci/gui/common/images/background20.png`
fi
echo "Change MZD Connect Background Picture with $file"
cp $file /jci/gui/common/images/background.png
mount -o ro,remount /
=============================================================
#!/bin/sh
# Purpose: Restore MZD Connect Background.
# Author: blog_yesican_tw
# file name: restore_mzd.sh
mount -o rw,remount /
echo "Restoring MZD Connect ........"
cp /jci/gui/common/images/background0.png /jci/gui/common/images/background.png
echo "MZD Connect is ready to reboot....."
mount -o ro,remount /
reboot
=============================================================
#!/bin/sh
# Purpose: MZD Connect Random Background.
# Author: blog_yesican_tw
# file name: my_mzd.sh
mount -o rw,remount /
echo "This is my MZD Connect ........"
sh /bin/chg_back_21.sh
echo "MZD Connect is ready to reboot....."
mount -o ro,remount /
reboot
=============================================================
隨機更換桌面說明:
Step1:先行製作如下檔名之背景圖(10個或21個),Win 7使用軟體:FastStone Image Viewer
【21張隨機背景圖】 background0.png(原廠背景圖)、background1.png、background2.png、background3.png、background4.png、background5.png、background6.png、background7.png、background8.png、background9.png、background10.png、background11.png、background12.png、background13.png、background14.png、background15.png、background16.png、background17.png、background18.png、background19.png、background20.png
Step2:使用ES檔案瀏覽器將 Shell Script 上傳至 /bin/目錄、將背景圖上傳至 /jci/gui/common/images/目錄。
Step3:設置SSH Button:【MZD隨機桌面】、【回復原廠桌面】
若不使用SSHButton的一鍵命令,可使用ConnectBot登入MZD Connect,【MZD隨機桌面】其完整指令為:
sh /bin/my_mzd.sh
若不使用SSHButton的一鍵命令,可使用ConnectBot登入MZD Connect,【回復原廠桌面】其完整指令為:
sh /bin/restore_mzd.sh
使用:WiFi連線成功後,按下【MZD隨機桌面】,MZD Connect會重開機,開機完成後,背景桌面會隨機更改。按下【回復原廠桌面】,MZD Connect會重開機,背景桌面會回復成原廠桌面。
=============================================================
進化專案(4):[子項目]語音速度撥報[speed_current_loop.sh](僅在藍芽及USB模式下,收音機模式雖運行但聽不到聲音)
=============================================================
#!/bin/sh
# Purpose: MZD Connect Current Speed Voice.
# Author: blog_yesican_tw
# file name: speed_current_loop.sh
sleep_time=`cat /jci/gui/common/images/sleep_time`
speedvoice_onoff=`cat /jci/gui/common/images/speedvoice_onoff`
aplay /mnt/sda1/voice/speed/speed_current.wav
until [ $speedvoice_onoff -eq 0 ]
do
dbus-send --print-reply --address=unix:path=/tmp/dbus_service_socket --type=method_call --dest=com.jci.lds.data /com/jci/lds/data com.jci.lds.data.GetPosition | awk 'NR==8{print $2}' > /tmp/speed_current
speed_current=`cat /tmp/speed_current`
echo "Now Current Speed is $speed_current"
if [ $speed_current -eq 1 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 2 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 3 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 4 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 5 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 6 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 7 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 8 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 9 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 10 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 11 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 12 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 13 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 14 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 15 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 16 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 17 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 18 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 19 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 20 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 21 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 22 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 23 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 24 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 25 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 26 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 27 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 28 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/10.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 29 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 30 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 31 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 32 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 33 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 34 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 35 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 36 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 37 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 38 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 39 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/30.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 40 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 41 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 42 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 43 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 44 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 45 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 46 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/20.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 47 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 48 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 49 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/40.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 50 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 51 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 52 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 53 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 54 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 55 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 56 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 57 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 58 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 59 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/50.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 60 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 61 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 62 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 63 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 64 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 65 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 66 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 67 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 68 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/60.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 69 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 70 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 71 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 72 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 73 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 74 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 75 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 76 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 77 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 78 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 79 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/70.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 80 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 81 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 82 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 83 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 84 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 85 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 86 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 87 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 88 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 89 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/80.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 90 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 91 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 92 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 93 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 94 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 95 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 96 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 97 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 98 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 99 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/90.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 100 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 101 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 102 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 103 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 104 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 105 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 106 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 107 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 108 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 109 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/100_0.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 110 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 111 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 112 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 113 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 114 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 115 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/115.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 116 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/116.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 117 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 118 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 119 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 120 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/120.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 121 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/120.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 122 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/120.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 123 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/120.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 124 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/120.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 125 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/125.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 126 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/126.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 127 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/120.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 128 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/120.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 129 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/120.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 130 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/130.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 131 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/130.wav /mnt/sda1/voice/speed/1.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 132 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/2.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 133 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/130.wav /mnt/sda1/voice/speed/3.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 134 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/130.wav /mnt/sda1/voice/speed/4.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 135 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/135.wav /mnt/sda1/voice/speed/5.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 136 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/136.wav /mnt/sda1/voice/speed/6.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 137 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/7.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 138 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/8.wav /mnt/sda1/voice/speed/km.wav
elif [ $speed_current -eq 139 ]
then
aplay /mnt/sda1/voice/speed/pre_speed.wav /mnt/sda1/voice/speed/110.wav /mnt/sda1/voice/speed/9.wav /mnt/sda1/voice/speed/km.wav
else
echo " Current Speed is $speed_current,Speed Voice Not Setting."
fi
sleep $sleep_time
done
=============================================================
語音報速說明:
Step1:使用ES檔案瀏覽器將 Shell Script 上傳至 /bin/目錄、將解壓縮後的語音檔Copy至SD卡/voice/speed目錄(在MZD Connect目錄路徑為/mnt/sda1/voice/speed/)。
Step2:設置SSH Button:【開啟MZD讀取權限】
若不使用SSHButton的一鍵命令,可使用ConnectBot登入MZD Connect,【開啟MZD讀取權限】其完整指令為:
mount -o rw,remount /
Step3:設置SSH Button:【語音報速關閉】、【語音報速開啟】
speedvoice_onoff:0 [語音報速關閉]
speedvoice_onoff:1 [語音報速開啟]
若不使用SSHButton的一鍵命令,可使用ConnectBot登入MZD Connect,【語音報速關閉】其完整指令為:
echo "0" > /jci/gui/common/images/speedvoice_onoff
若不使用SSHButton的一鍵命令,可使用ConnectBot登入MZD Connect,【語音報速開啟】其完整指令為:
echo "1" > /jci/gui/common/images/speedvoice_onoff
Step4:設置SSH Button:【MZD語音報速間隔時間】
若不使用SSHButton的一鍵命令,可使用ConnectBot登入MZD Connect,【MZD語音報速間隔時間】其完整指令為:
echo "90" > /jci/gui/common/images/sleep_time
Step5:設置SSH Button:【MZD語音報速】
若不使用SSHButton的一鍵命令,可使用ConnectBot登入MZD Connect,【MZD語音報速】其完整指令為:
sh /bin/ speed_current_loop.sh
【速度語音檔列表】:可以自行錄製,mp3亦可(附檔為使用人工語音之wav檔)
1.wav、10.wav、100.wav、100_0.wav、110.wav、120.wav、130.wav、2.wav、20.wav、3.wav、30.wav、4.wav、40.wav、5.wav、50.wav、6.wav、60.wav、7.wav、70.wav、8.wav、80.wav、9.wav、90.wav、km.wav、pre_speed.wav
使用:WiFi連線成功後,按下【MZD語音報速】,MZD Connect會每隔90秒播報車速。
若想更改參數(speedvoice_onoff、sleep_time)必須先【開啟MZD讀取權限】。
PS:生平開過超過200km已經是17年前,之後沒開超過120km了,所以語音最大速度只錄到139km。或許有人說,啊...這樣語音報速不就很吵(其實體驗過後你就會發現,對開車專心度是有提高功能的),另外我個人是覺得,超炫的,因為是由汽車主機發聲(廢話!程式由汽車電腦執行),無任何外掛機器,感覺蠻高科技的,如果再加上我之後想加的功能,如即時播報天氣資訊,提供語音行車資訊,還有語音報即時股價........,應該目前沒有廠牌的汽車會幫你做這樣的功能吧,想想就蠻酷的,況且又可自錄語音,像我打算用一陣子後換成自家小孩的語音版本。
後記:SSHButton的一鍵命令、ConnectBot、ES檔案瀏覽器請自行摸熟,本文不負責手機App之教學。
附加壓縮檔重新上傳過,已下載者請重新下載
附加壓縮檔: 201602/mobile01-4d6464feeaee400f536faebff4acd05c.zip
blog.yesican.tw wrote:
自從購入Mazda CX-5 2.2D後,經過一番小小研究之後,有感於原廠所整合的基本功能不足,故有了擴充其功能的想法,由於本身並未接觸過嵌入式系統,唯其核心與Linux有共通之處,藉由本身浸淫Linux多年所累積的知識,才得以改造MZD Connect,將其功能進化。
一台馬自達新車,價值好幾十萬,甚或一百多萬,以在下的Mazda CX-5 2.2D,要價幾達120萬,拿來亂搞確實不太好,不過因為對自身還算有信心,所以才敢放心大膽修改MZD Connect,因此想仿效的朋友,風險請自負,任何因本文所造成之損失,本人皆不負責。
謝謝樓主對MZD 無私的分享
給你一個

攝影 ‧ 就是在平凡中尋找不平凡 ‧ 瓶攝言語
國外車友已經針對很多功能有很多不同的想法與開發,歡迎一起分享~
Infotainment Project
關閉廣告