LAMW arduino serial comm via android usb otg lazarus / 43-Android ---------------------------------------------------------------------- Mongkey · 2023-12-15 07:52 https://hingxyu.medium.com/arduino-android-serial- communication-b72b124142fb ---------------------------------------------------------------------- jmpessoa · 2023-12-17 04:59 Done! New "jsArduinoAflakSerial" component!  (need tests!) New demo: "AppCompatArduinoAflakSerialDemo1" (need tests!) Thank you! ---------------------------------------------------------------------- Mongkey · 2023-12-17 10:59 @mr jmpessoa this spinner need to be commited, https://forum.lazarus.freepascal.org/index.php/topic,65168.0.html Thank you ---------------------------------------------------------------------- jmpessoa · 2023-12-17 16:52 Done! 2 days ago! ---------------------------------------------------------------------- Mongkey · 2023-12-18 03:03 Ok ---------------------------------------------------------------------- Mongkey · 2025-05-11 15:23 after 2 years  , failed to load aflak serial, thank you ---------------------------------------------------------------------- jmpessoa · 2025-05-21 21:21 Hi, Mongkey! Can you look for: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i public java.lang.Object jsArduinoAflakSerial_jCreate(long _self) {  return (java.lang.Object)(new jsArduinoAflakSerial(this,_self));} in your project "Controls.java" file?  (at end of file....) ---------------------------------------------------------------------- Mongkey · 2025-05-24 07:25 i could not find this object, mr. pessoa, i even not seeing jsArduinoAflakSerial.java at source directory. i used https://github.com/ksksue/PhysicaloidLibrary/tree/master , openotg aia sample, this lib using ai2 inventor for arduino it succeed reading cdc type usb, ch340x type usb ---------------------------------------------------------------------- jmpessoa · 2025-05-24 17:38 Can you try/reload   "AppCompatArduinoAflakSerialDemo1"  ?? ---------------------------------------------------------------------- Mongkey · 2025-05-25 02:33 i got this error, thank you ---------------------------------------------------------------------- Mongkey · 2025-05-25 07:01 it was run, but nothing happened, i did wireless debugging for testing, i got this, ha ha this kind of a hard component development Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i type=1400 audit(0.0:270327): avc:  denied  { getopt } for  path="/dev/socket/usap_pool_secondary" scontext=u:r:untrusted_app_30:s0:c18,c257,c512,c768 tcontext=u:r:zygote:s0 tclass=unix_stream_socket permissive=0 app=org.lamw.applamwproject1 thank you ---------------------------------------------------------------------- Mongkey · 2025-05-25 09:15 May be this jar library is more easy to use on pascal, thank you, https://github.com/ksksue/PhysicaloidLibrary/blob/master/PhysicaloidLi brary/bin/physicaloidlibrary.jar Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i package com.physicaloid.tutorial1; import java.io.UnsupportedEncodingException; import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView; import com.physicaloid.lib.Physicaloid; public class Tutorial1Activity extends Activity {    private static final String TAG = Tutorial1Activity.class.getSimpleName();    /*     * !!! You need to import PhysicaloidLibrary. !!!     * If you have errors, check Project -> Properties -> Android -> Library.     */     /*     * In this tutorial, You can learn     *  - how to use open/close/read/write     *       *  You might check TODO tags.     */     //****************************************************************    // TODO : Add to AndroidManifest.xml    //****************************************************************    Button btOpen, btClose, btRead, btWrite;    EditText etWrite;    TextView tvRead;     Physicaloid mPhysicaloid;     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_tutorial1);         btOpen  = (Button) findViewById(R.id.btOpen);        btClose = (Button) findViewById(R.id.btClose);        btRead  = (Button) findViewById(R.id.btRead);        btWrite = (Button) findViewById(R.id.btWrite);        etWrite = (EditText) findViewById(R.id.etWrite);        tvRead  = (TextView) findViewById(R.id.tvRead);         setEnabledUi(false);         //****************************************************************      // TODO : create a new instance        mPhysicaloid = new Physicaloid(this);        //****************************************************************    }     public void onClickOpen(View v) {        //****************************************************************      // TODO : open a device        if(mPhysicaloid.open()) { // default 9600bps            setEnabledUi(true);        }        //****************************************************************    }     public void onClickClose(View v) {        //****************************************************************      // TODO : close the device        if(mPhysicaloid.close()) {          setEnabledUi(false);        }        //****************************************************************    }     public void onClickRead(View v) {        byte[] buf = new byte[256];        int readSize=0;         //****************************************************************      // TODO : read from the device to a buffer and get read size      readSize = mPhysicaloid.read(buf);        //****************************************************************       if(readSize>0) {            String str;            try {              str = new String(buf, "UTF-8");                tvRead.append(str);            } catch (UnsupportedEncodingException e) {                Log.e(TAG,e.toString());            }        }    }     public void onClickWrite(View v) {        String str = etWrite.getText().toString();        if(str.length()>0) {            byte[] buf = str.getBytes();            //****************************************************************          // TODO : write a buffer to the device            mPhysicaloid.write(buf, buf.length);            //****************************************************************      }    }     private void setEnabledUi(boolean on) {        if(on) {            btOpen.setEnabled(false);            btClose.setEnabled(true);            btRead.setEnabled(true);          btWrite.setEnabled(true);            etWrite.setEnabled(true);          tvRead.setEnabled(true);        } else {            btOpen.setEnabled(true);            btClose.setEnabled(false);          btRead.setEnabled(false);            btWrite.setEnabled(false);          etWrite.setEnabled(false);            tvRead.setEnabled(false);        }    }} ---------------------------------------------------------------------- Mongkey · 2025-08-23 15:43 Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i package org.lamw.physicaloidbridge; import android.app.Activity;import android.os.Environment;import android.util.Log;import com.physicaloid.lib.Physicaloid;import com.physicaloid.lib.Boards;import com.physicaloid.lib.programmer.avr.UploadErrors;import com.physicaloid.lib.programmer.avr.UploadListener;import com.physicaloid.lib.usb.driver.uart.ReadLisener; public class PhysicaloidBridge {     private Physicaloid physicaloid;    private StringBuilder receivedData = new StringBuilder();     public PhysicaloidBridge(Activity activity) {        physicaloid = new Physicaloid(activity);    }     public boolean open() {        return physicaloid.open();    }     public void close() {        physicaloid.close();    }     public boolean isOpened() {        return physicaloid.isOpened();    }     public void write(String text) {        if (isOpened()) {            physicaloid.write(text.getBytes(), text.length());        }    }     public void addReadListener() {        if (isOpened()) {            physicaloid.addReadListener(new ReadLisener() {                @Override                public void onRead(int size) {                  byte[] buf = new byte[size];                    physicaloid.read(buf, size);                    String str = new String(buf);                    receivedData.append(str);                  Log.d("PhysicaloidBridge", "Received: " + str);                }            });        }    }     public String getReceivedData() {      String data = receivedData.toString();        receivedData.setLength(0); // clear buffer        return data;    }   public void uploadHexFile(String hexFilePath) {        physicaloid.upload(Boards.ARDUINO_UNO, hexFilePath, new UploadListener() {            @Override            public void onUploading(int value) {                Log.d("PhysicaloidBridge", "Uploading: " + value + "%");            }             @Override          public void onUploadSuccess() {                Log.d("PhysicaloidBridge", "Upload success!");            }           @Override            public void onUploadFailed(UploadErrors err) {              Log.e("PhysicaloidBridge", "Upload failed: " + err.toString());            }             @Override            public void onUploadCanceled() {                Log.d("PhysicaloidBridge", "Upload canceled.");            }        });    }} ---------------------------------------------------------------------- Mongkey · 2025-08-23 15:46 gradle Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i dependencies {    implementation files('libs/physicaloidlibrary.jar')}  manifest Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   for uploading more arduino boards with option "hex" file Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i public void uploadHexFile(String boardName, String hexFilePath) {    Boards board = Boards.ARDUINO_UNO; // default     switch (boardName.toLowerCase()) {        case "uno":            board = Boards.ARDUINO_UNO;          break;        case "mega":        case "mega2560":            board = Boards.ARDUINO_MEGA2560;            break;        case "nano":          board = Boards.ARDUINO_NANO;            break;        case "leonardo":            board = Boards.ARDUINO_LEONARDO;            break;        case "micro":            board = Boards.ARDUINO_MICRO;          break;        case "pro":        case "promini":            board = Boards.ARDUINO_PROMINI;            break;        case "duemilanove":            board = Boards.ARDUINO_DUEMILANOVE;          break;        // add others as needed        default:            Log.w("PhysicaloidBridge", "Unknown board: " + boardName + ", defaulting to UNO");    }     physicaloid.upload(board, hexFilePath, new UploadListener() {        @Override        public void onUploading(int value) {            Log.d("PhysicaloidBridge", "Uploading: " + value + "%");        }         @Override        public void onUploadSuccess() {            Log.d("PhysicaloidBridge", "Upload success!");        }         @Override        public void onUploadFailed(UploadErrors err) {            Log.e("PhysicaloidBridge", "Upload failed: " + err.toString());      }         @Override        public void onUploadCanceled() {          Log.d("PhysicaloidBridge", "Upload canceled.");        }    });}  This one created by using AI help.