<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     作者:陳昌龍         
    文章標(biāo)簽:C/C++AndroidESM6802CAN

      2017年8月,英創(chuàng)在ESM6802 Android基礎(chǔ)版之上,完善了對雙CAN接口的支持。


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


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

    圖1 Android CAN應(yīng)用流程介紹


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


      CanControl類的四個(gè)native函數(shù)簡單介紹如下:


      public class CanControl {

     

      static {

          System.loadLibrary("CanControl");

      }

      /**

       * 打開CAN接口 ifname,波特率設(shè)置為baud,設(shè)置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讀取一幀數(shù)據(jù),內(nèi)部使用select阻塞監(jiān)聽可讀操作,并設(shè)置超時(shí)時(shí)間

       * @param fd    can socket文件描述符

       * @param frame     讀取到數(shù)據(jù)幀

       * @param sec       超時(shí)時(shí)間,單位s

       * @return      失敗返回-1;成功返回幀數(shù)據(jù)長度

       */

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

     

      /**

       * 向can socket寫函數(shù)

       * @param fd    can socket文件描述符

       * @param data  寫數(shù)據(jù)數(shù)組

       * @param id    數(shù)據(jù)組成can幀的id號

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

       */

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

     

      /**

       * 關(guān)閉can socket

       * @param fd   can socket文件描述符

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

       */

      public native static int native_canClose(int fd);

      }


      英創(chuàng)使用libCanControl.so封裝的CanControl操作類,編寫了一個(gè)簡單的CAN通信測試APP:TestCanJni,支持標(biāo)準(zhǔn)幀/擴(kuò)展幀、 HEX顯示/發(fā)送,可設(shè)置一個(gè)過濾器。感興趣的客戶可以向英創(chuàng)工程師具體咨詢。


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

    圖3 CAN測試APP運(yùn)行界面


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

    圖4 支持HEX發(fā)送/顯示

    文章標(biāo)簽:C/C++AndroidESM6802CAN
    国产精品秘入口18禁麻豆免会员| 精品亚洲一区二区| 国产精品成人va在线观看| 久久久久成人精品无码| 人人妻人人澡人人爽人人精品浪潮| 国产午夜无码精品免费看动漫| 国产精品美女久久久网站动漫| 精品亚洲成AV人在线观看| 大伊香蕉精品一区视频在线 | 精品国产乱码久久久久久| 国产精品无码专区| www国产亚洲精品久久久日本| 69SEX久久精品国产麻豆| 久久99国产这里有精品视| 国产精品成人观看视频| 亚洲国产精品日韩av不卡在线| 久久精品一区二区三区四区| 国产玖玖玖九九精品视频| 国内精品videofree720| 69精品久久久久| 精品亚洲综合在线第一区| 一本久久A久久免费精品不卡| 亚洲精品国产综合久久久久紧| 99视频精品全部在线| 国产精品亚洲精品日韩已满| www国产亚洲精品久久久日本| 国内精品在线播放| 国产成人综合久久精品红| 亚洲精品视频在线免费| 99亚洲精品高清一二区| 久草精品视频在线播放| 国产综合免费精品久久久| 精品国产亚洲男女在线线电影| 国产精品自产拍2021在线观看| 成人国产精品一区二区网站公司| 国产成人精品日本亚洲专一区| 99久久久国产精品免费牛牛四川| 国产精品免费福利久久| 国语自产少妇精品视频| 国内精品人妻无码久久久影院| aaaaaa精品视频在线观看|