当前位置: 首页 > news >正文

园区二学一做网站中国最好的影视后期培训学校

园区二学一做网站,中国最好的影视后期培训学校,中国造价信息网官网,如何做高网站的浏览量最早的博客Android 模拟串口通信过程_launch virtual serial port driver pro-CSDN博客里就是用过 Google 提供的 demo#xff0c;最近想再写个其他的demo发现用起来有点麻烦#xff0c;还需要导入其他 module#xff0c;因此在网上找到了Android-SerialPort-API: https://g… 最早的博客Android 模拟串口通信过程_launch virtual serial port driver pro-CSDN博客里就是用过 Google 提供的 demo最近想再写个其他的demo发现用起来有点麻烦还需要导入其他 module因此在网上找到了Android-SerialPort-API: https://github.com/licheedev/Android-SerialPort-API.git 也是Fork自Google开源的Android串口通信Demo。 话不多说直接开搞。 目录 一、简单说明 1、添加依赖 2、创建串口通讯工具类 SerialPortUtil 3、示例 MainActivity 4、通过logcat验证app 二、注意 三、总结 四、demo地址 一、简单说明 1、添加依赖 dependencies {...//添加依赖implementation (com.licheedev:android-serialport:2.1.3)} 2、创建串口通讯工具类 SerialPortUtil class SerialPortUtil {companion object {private const val TAG SerialPortUtilval sInstances by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {SerialPortUtil()}}private lateinit var mIOpenSerialPortListener: IOpenSerialPortListenerprivate lateinit var mISerialPortDataListener: ISerialPortDataListenerprivate lateinit var mSendingHandlerThread: HandlerThreadprivate lateinit var mSendingHandler: Handlerprivate lateinit var mSerialPortReceivedThread: SerialPortReceivedThreadprivate lateinit var mFileInputStream: FileInputStreamprivate lateinit var mFileOutputStream: FileOutputStreamprivate lateinit var serialPort: SerialPort/*** 打开串口方法*/fun open(path: File) {try {serialPort SerialPort.newBuilder(path, 9600) // 校验位0:无校验位(NONE默认)1:奇校验位(ODD);2:偶校验位(EVEN).build()mFileInputStream serialPort.inputStream as FileInputStreammFileOutputStream serialPort.outputStream as FileOutputStream} catch (e: SecurityException) {mIOpenSerialPortListener.onFail(path, Status.NO_READ_WRITE_PERMISSION)return} catch (e: Exception) {mIOpenSerialPortListener.onFail(path, Status.OPEN_FAIL)return}mIOpenSerialPortListener.onSuccess(path)startSendThread()startReceivedThread()}/*** 发送数据*/fun sendBytes(bytes: ByteArray?): Boolean {try {Runnable {val message Message.obtain()message.obj bytesmSendingHandler.sendMessage(message)Thread.sleep(100)}.run()} catch (e: Exception) {Log.e(TAG, sendBytes: 发送数据失败 e.message)return false}return true}/*** 开启发送消息线程*/private fun startSendThread() {Log.d(TAG, startSendThread: 开启发送消息线程)mSendingHandlerThread HandlerThread(mSendingHandlerThread)mSendingHandlerThread.start()mSendingHandler object : Handler(mSendingHandlerThread.looper) {override fun handleMessage(msg: Message) {val sendBytes: ByteArray? msg.obj as ByteArray?if ((null ! sendBytes) (sendBytes.isNotEmpty())) {try {mFileOutputStream.write(sendBytes)mISerialPortDataListener.onDataSend(sendBytes)} catch (e: java.io.IOException) {e.printStackTrace()}}}}}/*** 停止发送消息线程*/fun stopSendThread() {Log.d(TAG, stopSendThread: 停止发送消息线程)mSendingHandlerThread.interrupt()mSendingHandlerThread.quit()}/*** 开启接收消息的线程*/private fun startReceivedThread() {Log.d(TAG, startReceivedThread: 开启接受消息线程)mSerialPortReceivedThread object : SerialPortReceivedThread(mFileInputStream) {override fun onDataReceived(bytes: ByteArray?) {mISerialPortDataListener.onDataReceived(bytes)}}mSerialPortReceivedThread.start()}/*** 停止接收消息的线程*/fun stopReceivedThread() {Log.d(TAG, stopReceivedThread: 停止接收消息的线程)mSerialPortReceivedThread.release()serialPort.tryClose()}/*** 设置串口打开的监听*/fun setIOpenSerialPortListener(iOpenSerialPortListener: IOpenSerialPortListener) {mIOpenSerialPortListener iOpenSerialPortListener}/*** 设置串口数据收发的监听*/fun setISerialPortDataListener(iSerialPortDataListener: ISerialPortDataListener) {mISerialPortDataListener iSerialPortDataListener}} 在这里简单介绍些在开启串口通讯后开启两个线程分别处理send及received步骤。 3、示例 MainActivity class MainActivity : Activity(), IOpenSerialPortListener, ISerialPortDataListener {companion object {private const val TAG MainActivityprivate val FIND_CARD byteArrayOf(0x20, 0x00, 0x80.toByte(), 0x04, 0x03, 0x03, 0x01, 0x00, 0x7a, 0x03)}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)CrashHandler.sInstance.init(this)//0、设置su位置SerialPort.setSuPath(/system/xbin/su)//1、首先设置open监听SerialPortUtil.sInstances.setIOpenSerialPortListener(this)//2、设置串口监听SerialPortUtil.sInstances.setISerialPortDataListener(this)//3、open串口SerialPortUtil.sInstances.open(File(/dev/ttyS3))//4、模拟发送命令SerialPortUtil.sInstances.sendBytes(FIND_CARD)}override fun onDestroy() {super.onDestroy()SerialPortUtil.sInstances.stopSendThread()SerialPortUtil.sInstances.stopReceivedThread()}override fun onSuccess(device: File?) {Log.d(TAG, onSuccess: open成功)}override fun onFail(device: File?, status: Status?) {Log.d(TAG, onFail: open失败原因 $status)}override fun onDataReceived(bytes: ByteArray?) {Log.d(TAG, onDataReceived: 接受数据: Arrays.toString(bytes))}override fun onDataSend(bytes: ByteArray?) {Log.d(TAG, onDataSend: 发送数据: Arrays.toString(bytes))}} 4、通过logcat验证app 09:52:48.349 serial_port D Opening serial port /dev/ttyS3 with flags 0x2 09:52:48.349 serial_port D open() fd 45 09:52:48.349 serial_port D Configuring serial port 09:52:48.359 MainActivity D onSuccess: open成功 09:52:48.359 SerialPortUtil D startSendThread: 开启发送消息线程 09:52:48.359 SerialPortUtil D startReceivedThread: 开启接受消息线程 09:52:48.359 SerialPortReceivedThread I run: available 0 09:52:48.359 MainActivity D onDataSend: 发送数据: [32, 0, -128, 4, 3, 3, 1, 0, 122, 3] 09:52:48.529 BufferQueue E [com.lichang.source/com.lichang.source.MainActivity] connect: already connected (cur1, req1) 09:52:48.529 mali_winsys D EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000 09:52:48.529 OpenGLRenderer D Enabling debug mode 0 09:52:51.609 SerialPortReceivedThread I run: size 14 09:52:51.609 SerialPortReceivedThread I run: bytes [32, 0, 0, 8, 4, 0, 8, 4, 28, 37, -117, -5, -74, 3] 09:52:51.609 MainActivity D onDataReceived: 接受数据: [32, 0, 0, 8, 4, 0, 8, 4, 28, 37, -117, -5, -74, 3] 09:52:51.609 SerialPortReceivedThread I run: available 0 09:52:53.729 SerialPortReceivedThread I run: size 22 09:52:53.729 SerialPortReceivedThread I run: bytes [32, 0, 0, 16, 32, 17, 35, 69, 103, -113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 3] 09:52:53.729 MainActivity D onDataReceived: 接受数据: [32, 0, 0, 16, 32, 17, 35, 69, 103, -113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 3] 09:52:53.729 SerialPortReceivedThread I run: available 0 09:53:03.239 dalvikvm D Debugger has detached; object registry had 1 entries 09:53:03.249 dalvikvm D GC_CONCURRENT freed 222K, 15% free 2334K/2744K, paused 1ms1ms, total 12ms 09:53:12.419 SerialPortUtil D stopSendThread: 停止发送消息线程 09:53:12.419 SerialPortUtil D stopReceivedThread: 停止接收消息的线程 09:53:12.419 serial_port D close(fd 45) 二、注意 为了在Android上读/写串行端口你需要在设备上安装su binary(这可以通过root设备来完成)。通常具有串口通信能力的Android设备已将su安装在默认路径下。 默认的 su 路径使用的是 “/system/bin/su” 三、总结 在新项目中快速应用可以先导入依赖然后copy示例中的 com/lichang/source/serialport文件夹即可按照 3、示例 MainActivity 钓箱串口工具类。 四、demo地址 serialport-demo_kt: 使用 implementation (com.licheedev:android-serialport:2.1.3)
http://www.w-s-a.com/news/442915/

相关文章:

  • 做网站的不给ftp网站如何做触屏滑动
  • wordpress statraq重庆百度优化
  • 企业网站官网英文WordPress站点切换为中文
  • 服装公司网站定位一点号自媒体平台
  • 密云微网站建设汽车之家手机官网首页
  • 多语言外贸网站制作苏州建设网站微信公众号
  • 用wordpress建站学什么百度给企业做网站吗
  • 福建城乡建设网站做数码测评的网站
  • 东海县建设局网站wordpress 好用的主题
  • 网站图片设计制作制作一个门户网站需要多少钱
  • 虚拟币交易网站源码自己给网站做支付接口
  • 免费的seo网站在线 crm
  • 绍兴市高速公路建设指挥部网站网站主页和子页风格如何统一
  • 获取网站状态网站租金可以做办公费吗
  • 网站开发执行什么标准号wordpress主题 表白
  • 杭州网站推广与优化凡科网是免费的吗
  • 公司网站的重要性门户网站推广介绍方案
  • 做金融网站看那些素材江门网红打卡景点蓬江区
  • 饮食网站模板建网站中企动力优
  • 郑州 制造 网站东平企业建站公司
  • 天津设计师网站大全展示型网站搭建
  • 南宁网站建设 传导网站开发平台开发公司
  • 网站建设好处上海建设工程网站
  • 黑河哈尔滨网站建设太原网站制作定制开发
  • 建站做网站香河住房与建设局网站
  • 如何制造一个网站域名分类网站
  • 解析视频的网站怎么做凡科网快图
  • 企业网站优化问题接单app平台有哪些
  • 怎么做网站后缀识别符号才不会变什么是电子商务网站建设
  • 中山 五金 骏域网站建设专家专门用来制作网页的软件是什么