2019年7月4日 星期四

[NT98515] NEW PROJECT

簡述 :

新的專案, 硬體元件及軟體需求  :
  • ISP NT98515
  • Sensor OV4689
  • WiFi RTL8189ES/SDIO
軟體功能 :
  • WiFi AP/Station Mode
  • mjpg-stream
  • Youtube streamming
以下逐步建置專案所需軟體 :
  1. Source code unpack
    1. $ tar –jxvf NA51023_BSP_20180928_IPCAM_V1.2.02.tar.bz2
    2. $ sh sdk.unpack
    3. $ source build/envsetup.sh
    4. $ lunch 1, 1, 1
    5. $ make
  2. Sensor/OV4689 Configure  https://miworkbook.blogspot.com/2019/07/nt98515-configure-sensor-ov4689.html
  3. WIFI/8189ES Configure
    1. Enable WIFI support https://miworkbook.blogspot.com/2019/07/nt98515-enable-wifi-support.html
    2. Compile RTL8189ES/SDIO https://miworkbook.blogspot.com/2019/06/nt98515-sdio-wifi-module-rtl-8189es.html
  4. 修整 boot-up script https://miworkbook.blogspot.com/2019/07/nt98515-prepare-boot-up-script.html
  5. 安裝 mjpg-streamer
    1. 編譯 jpegsrc https://miworkbook.blogspot.com/2019/07/nt98515-cross-compile-jpegsrc.html
    2. 編譯 mjpg-streamer https://miworkbook.blogspot.com/2019/07/nt98515-mjpg-streamer.html
    3. 製作 mjpg-streamer plugin  
  6. Enable WiFi support

2019年7月3日 星期三

[NT98515] Configure sensor Ov4689

簡述 :

新的專案預計使用 OV4689.

修改 Project Config

修改 uitron/Project/DemoKit/ModelConfig_IP_CAM2_EVB.txt 其中有關 sensor/AE/AWB/IQ 的設定

特別要注意的是, 這個修改必須重新 lunch.

影像是上下顛倒, 左右相反的. 需要再修改 uitron/DrvExt/DrvExt_src/ModelExt/DxCamera_Sensor.c











原來是系統設定就是上下顛倒的, 把它改回來

//    init_obj.option= SENSOR_OPTION_FLIP;
init_obj.option = SENSOR_OPTION_MIRROR;













   
   

2019年7月2日 星期二

[NT98515] Enable WiFi Support

簡述 :

NT98515 的 SDK 預設不支援 WiFi. 必須要在 Linux Kernel 設定.

Configure :

$ make linux_config
[*] Networking support
  [*] Wireless
    <M> cfg80211 - wireless configuration API 
    [*] nl80211 testmode command
    [ ] enable powersave by default
    [*] cfg80211 wireless extensions compatibility
<M> Generic IEEE 802.11 Networking Stack (mac80211) 
[*] Minstrel
[*]      Minstrel 802.11n support 



Device Drivers --->
  [*] Network device support 
    [*] Wireless LAN
        <*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)












  
  

  

2019年6月27日 星期四

[Raspberry] mjpg-streamer

簡述:

測試看看 Raspberry Pi 上, 使用 Mjpeg-Streamer 的 frame delay.

安裝及編譯:

$ sudo apt-get install libjpeg8-dev
$ sudo apt-get install imagemagick
$ sudo apt-get install cmake
$ sudo git clone https://github.com/jacksonliam/mjpg-streamer.git
$ cd mjpeg-streamer/mjpg-streamer-experimental
$ make all
$ sudo make install

用測試圖片驗證:

在 plugins 目錄下有一個 input_testpicture 的目錄, 可以用來測試驗證.

在 raspberry pi 上面執行以下命令,
$ ./mjpg_streamer –i “input_testpicture.so –r 320x240 –d 500” –o “output_http.so –w www”


就可以從瀏覽器上打開 http://192.168.43.201:8080/index.html










或是從 VLC 上打開 http://192.168.43.201:8080/?action=stream


可以確認 live view 的部分是 work 的.


用 USB cam 來當作影像輸入:

mjpg-streamer 本身的 input_uvc 是有支援 USB Cam/Webcam 的. 只不過一般的 webcam 通常預設是 YUYV 的格式, 而非 MJPEG. 最簡單的方法就是修改 plugins/input_uvc/input_uvc.c 這個檔案. 把 V4L2_PIX_FMT_MJPEG 改成 V4L2_PIX_FMT_YUYV.

然後啟動 mjpg_streamer
$ ./mjpg_streamer –i “input_uvc.so –r 320x240 –d 500” –o “output_http.so –w www"
從瀏覽器打開











或是從 VLC player 連線

搭配 Raspberry Camera :

載入 raspberry pi camera driver
$ sudo modprobe bcm2835-v4l2










啟動 mjpg_streamer













可同時連線



















[NT98515] SDIO Wifi module RTL-8189ES

簡述:

又到了團團轉時間. 這一次大風吹的是 "在 NT98515 的平台上啟用 SDIO 介面的 WiFi 模組 RTL8189ES"
這部分的整合, 需要考量到幾方面, wifi module 的接線, SDIO driver 的設置, wifi driver 的設置.

SDIO wifi module :

根據 SDIO 的規格, SDIO 有一個 card detect ping, 這個 pin 並不在 SD card 的插槽上. 當有卡插入的時候, 這個 pin 會短路到 ground. 主機端從而判斷出插槽裡面有卡, 開始偵測這張卡, 並試圖啟用這張卡.


SDIO driver 的設置 :

Linux 的硬體設定, 是從 dts 傳送給核心, 在啟動相對應的驅動程式時, 傳送相關的參數. 確認過 dts (linux-kernel/arch/mips/boot/dts/novatek/nvt-na51023-evb-default.dtsi), 幸運地發現 SDIO port (mmc2) 已經設定好了.



另外, (uitron/Project/DemoKit/ModelConfig_IPCAM2_EVB.txt) 這裡面有一些 NVT_SDIO_WIFI/NVT_USB_WIFI , 不用去管它. SDIO 介面的 wifi driver 目錄是空的, USB port 上沒有接 wifi driver, 也不用特別去改設定. 總之, 改這個沒有用.

確認 SDIO driver 是否可以正常動作 :

附圖是兩個 SDIO bus, 一個有  device, 一個沒有. 很容易分辨出來.


RTL-8189ES driver 設置 :

1. 從 https://github.com/openwetek/rtl8189es 下載
2. 參考 rtl8188ftv/Makefile, 加入 NT98515 的組態
3. make
基本上沒有甚麼大問題.

2019年6月3日 星期一

[Android] AsyncTask 用法詳解

簡述:

Android 的 App, 通常只在預設的 UI Thread 運行. 當遇到一些較為耗費時間的工作時, 就必須採用 Multi Thread  的作法. 否則很容易就會遇到 ANR 的錯誤, 導致 App 被停止執行. AsyncTask 是一種 Multi Thread 的作法.

AsyncTask 的型態:

因為 AsyncTask 的目的就是提供一個線外作業的機制, 所以它會有兩個特性:  
  1. 在平行時間運行. AsyncTask 和 UI Thread 必須可以在不互相影響的狀況下各自運行.
  2. 互動. AsyncTask 的運行必須可以反映到  UI Thread (如果不能反映到 UI Thread, 又怎麼知道它執行完畢了呢 ?)
於是, 很容易可以猜想到, AsyncTask  它會接收一個起始狀態, 一個運行狀態, 一個結果回報的狀態. 這3 種狀態的參數型態,  就是這個 AsnycTask 的參數型態, 如下圖:
 
class SleepTask extends AsnycTask<String, Integer, String>, 這邊就宣告了 SleepTask 是 AsyncTask 的衍生類別, 它有 3 個參數型態, String, Integer, String. 各參數依序為起始狀態, 運行狀態, 結果狀態.
起始狀態是在執行時, 由呼叫程序傳入, 然後 AsnycTask 在呼叫 doInBackground 時, 以參數傳入. 從字面上的意義可以知道, doInBackground 是真正在計算的苦力. doInBackground  接收到起始狀態, 然後照起始狀態的指示, 開始運算. 算到一個階段 (需要通知 UI Thread 進度的時候),  就呼叫 publishProgress, 並給予運行狀態, 以便回報進度.  AsyncTask 再把這各參數轉送到 onProgressUpdate. 計算結束的時候, doInBackground 的返回值也會被送到 onPostExcute, 以便更新運算的結果.
之所以要這麼麻煩, 是因為 AsyncTask 除了要運行 doInBackground() 這個苦力程序外, 還要負責同步狀態到 UI Thread. 所以就有了 onPreExecute()/onProgressUpdate()/onPostExecute(), 這三個程序, 用來在不同的時間點更新 UI Thread. 其中除了 onPreExecute 不需要參數, onProgressUpdate()/onPostExecute() 都是把 doInBackground() 產生的狀態更新到 UI Thread.

AsyncTask 的成員函式:

衍生的 AsnycTask 類別, 需要實作以下函式
onPreExecute(), 在還沒有開始計算前, 負責準備工作.
doInBackground(), 真正的苦力運算函式.
onProgressUpdate(), 協助更新 doInBackground 的運算進度
onPostExecute(), 協助更新 doInBackground 的運算結果.

[ NT98515] CROSSCOMPILE ECLIPSE PAHO MQTT C Client

簡述: 試著把 Eclipse Paho MQTT C client  移植到 NT98515 的平台, 並且測試驗證. 下載 source: git clone https://github.com/eclipse/paho.mqtt.c make: cmake $ cmake...