<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • ESM6802 Android版支持雙CAN通信

     2017-8-29     作者:陳昌龍         
    文章標簽:C/C++AndroidESM6802CAN

      2017年8月,英創在ESM6802 Android基礎版之上,完善了對雙CAN接口的支持。


      CAN接口的工作思路大致如下圖所示:


    ESM6802-Android版支持雙CAN通信.gif

    圖1 Android CAN應用流程介紹


      由于Android NDK調用system()函數設置CAN接口不再有效,英創在開機運行了一個腳本服務canconfig,每隔1s種讀一次系統屬性:can0.baudrate和can1.baudrate,當讀到屬性值改變時,即調用ip命令設置啟動can接口。JNI層調用property_set函數設置這兩個屬性,并對java層應用程序提供了native_canOpen、native_canRead、native_canWrite、native_canClose接口。而這四個接口函數以libCanControl.so文件提供給java層應用開發客戶,英創將這四個接口作為靜態方法封裝成了一個Java類:emtronix.hardware.CanControl,用戶只需要(且必須)通過調用CanControl類的這四個接口就可以完成CAN應用程序的開發。當然對于自己開發JNI層的客戶,我們也提供libCanControl.so文件的C/C++源碼做參考。這樣,對于Android應用開發的客戶來說,只需要專注于Java層的應用邏輯開發。


      CanControl類的四個native函數簡單介紹如下:


      public class CanControl {

     

      static {

          System.loadLibrary("CanControl");

      }

      /**

       * 打開CAN接口 ifname,波特率設置為baud,設置CAN socket,只接收id & filtermask == filterid的CAN幀

       * @param ifname CAN接口名字,范圍:can0/can1

       * @param baud  波特率,  1000000,800000,500000,250000,125000,100000,60000,50000,20000,10000

       * @param filterid 過濾ID,大于-1有效

       * @param filtermask    過濾掩碼

       * @return  失敗返回-1; 成功返回CAN socket描述符

       */

      public native static int native_canOpen(String ifname, String baud,int filterid, int filtermask);

     

      /**

       *從can socket讀取一幀數據,內部使用select阻塞監聽可讀操作,并設置超時時間

       * @param fd    can socket文件描述符

       * @param frame     讀取到數據幀

       * @param sec       超時時間,單位s

       * @return      失敗返回-1;成功返回幀數據長度

       */

      public native static int native_canRead(int fd, CanFrame frame, int sec);

     

      /**

       * 向can socket寫函數

       * @param fd    can socket文件描述符

       * @param data  寫數據數組

       * @param id    數據組成can幀的id號

       * @return      失敗返回-1;成功返回寫的byte長度

       */

      public native static int native_canWrite(int fd, byte[] data, int id);

     

      /**

       * 關閉can socket

       * @param fd   can socket文件描述符

       * @return      失敗返回-1;成功返回0

       */

      public native static int native_canClose(int fd);

      }


      英創使用libCanControl.so封裝的CanControl操作類,編寫了一個簡單的CAN通信測試APP:TestCanJni,支持標準幀/擴展幀、 HEX顯示/發送,可設置一個過濾器。感興趣的客戶可以向英創工程師具體咨詢。


    ESM6802-Android版支持雙CAN通信.gif

    圖3 CAN測試APP運行界面


    ESM6802-Android版支持雙CAN通信.gif

    圖4 支持HEX發送/顯示

    文章標簽:C/C++AndroidESM6802CAN
    精品国产亚洲AV麻豆| 亚洲蜜芽在线精品一区| 精品亚洲av无码一区二区柚蜜| 国产一级精品高清一级毛片| 香蕉视频国产精品| 日本精品久久久中文字幕| 麻豆精品一区二区综合av| 99久久亚洲综合精品成人网| 久久精品无码专区免费| 精品露脸国产偷人在视频7| 亚洲午夜精品一区二区| 久久97久久97精品免视看| 最新国语自产精品视频在| 青青青国产精品一区二区| 久久亚洲国产成人精品无码区| 欧洲国产成人精品91铁牛tv| 久久精品国产乱子伦| 久久九九有精品国产23百花影院| 九九热视频精品在线| 精品无码综合一区二区三区 | 国产精品一区二区电影| 亚洲国产精品久久网午夜| 久久国产乱子精品免费女| 国产精品偷窥熟女精品视频| 日韩精品国产丝袜| 日韩精品专区在线影院重磅| 精品无码人妻一区二区免费蜜桃| 欧洲熟妇精品视频| 国产精品原创巨作?v网站| 国产成品精品午夜视频| 久久精品国产亚洲av品善| 精品国产鲁一鲁一区二区| 欧洲精品99毛片免费高清观看| 国产精品一区二区久久国产| 亚洲国产人成精品| 麻豆人妻少妇精品无码专区| 国产精品天天在线| 国产精品色午夜免费视频| 国产乱人伦精品一区二区在线观看| 日韩精品一区二区三区老鸭窝| 久久精品人人做人人爽电影蜜月|