دستگاه های سریال

این سند نحوه استفاده از API سریال برای خواندن و نوشتن از دستگاه های سریال را شرح می دهد. برنامه‌های Chrome همچنین می‌توانند به دستگاه‌های USB و بلوتوث متصل شوند.

نیاز آشکار

شما باید مجوز سریال را به فایل مانیفست اضافه کنید:

"permissions": [
  "serial"
]

لیست پورت های سریال موجود

برای دریافت لیستی از مسیرهای مرتبط با پورت های سریال موجود، از روش serial.getDevices استفاده کنید. توجه: همه پورت های سریال در دسترس نیستند. API از روش‌های اکتشافی استفاده می‌کند تا فقط دستگاه‌های سریالی را نشان دهد که انتظار می‌رود ایمن باشند.

var onGetDevices = function(ports) {
  for (var i=0; i<ports.length; i++) {
    console.log(ports[i].path);
  }
}
chrome.serial.getDevices(onGetDevices);

اتصال به دستگاه سریال

اگر مسیر مرتبط با پورت سریال را می دانید، می توانید با استفاده از روش serial.connect به آن متصل شوید:

chrome.serial.connect(path, options, callback)
پارامتر شرح
مسیر (رشته) اگر مسیر مرتبط با پورت دستگاه شما ناشناخته است، می توانید از روش serial.getDevices استفاده کنید.
گزینه ها (شیء) شی پارامتر با چندین مقدار پیکربندی. جزئیات را در serial.ConnectionOptions ببینید
پاسخ به تماس هنگامی که پورت با موفقیت باز شد فراخوانی می شود. فراخوانی با یک پارامتر، connectionInfo ، فراخوانی می‌شود که چندین مقدار مهم دارد. جزئیات را در serial.ConnectionInfo ببینید.

یک مثال ساده:

var onConnect = function(connectionInfo) {
   // The serial port has been opened. Save its id to use later.
  _this.connectionId = connectionInfo.connectionId;
  // Do whatever you need to do with the opened port.
}
// Connect to the serial port /dev/ttyS01
chrome.serial.connect("/dev/ttyS01", {bitrate: 115200}, onConnect);

از پورت سریال جدا شوید

هنگامی که یک برنامه خاتمه می یابد، اتصالات به پورت های سریال که دائمی نیستند به طور خودکار توسط پلت فرم بسته می شوند. با این حال، اگر می‌خواهید در حالی که برنامه شما هنوز در حال اجرا است، اتصال را قطع کنید، می‌توانید از روش serial.disconnect استفاده کنید:

var onDisconnect = function(result) {
  if (result) {
    console.log("Disconnected from the serial port");
  } else {
    console.log("Disconnect failed");
  }
}
chrome.serial.disconnect(connectionId, onDisconnect);

خواندن از پورت سریال

API سریال از پورت سریال خوانده می شود و بایت های خوانده شده را به عنوان یک ArrayBuffer به شنوندگان رویداد تحویل می دهد. هر پورتی که برنامه شما به آن متصل است رویدادهای خواندنی را برای همه شنوندگان اضافه شده از طریق chrome.serial.onReceive.addListener(onReceiveCallback) ایجاد می کند. اگر همزمان به بیش از یک پورت متصل هستید، ممکن است connectionId مربوطه یک رویداد خوانده شده ورودی را در پارامتر پاسخ به تماس serial.onReceive بیابید.

مثال زیر می‌تواند بایت‌های خوانده‌شده را تا زمانی که یک خط جدید خوانده شود جمع‌آوری کند، ArrayBuffer دریافت‌شده را به رشته تبدیل کند و زمانی که یک خط جدید به عنوان آخرین کاراکتر دریافت‌شده یافت می‌شود، متدی را فراخوانی می‌کند:

var stringReceived = '';

var onReceiveCallback = function(info) {
    if (info.connectionId == expectedConnectionId && info.data) {
      var str = convertArrayBufferToString(info.data);
      if (str.charAt(str.length-1) === '\n') {
        stringReceived += str.substring(0, str.length-1);
        onLineReceived(stringReceived);
        stringReceived = '';
      } else {
        stringReceived += str;
      }
    }
  };

chrome.serial.onReceive.addListener(onReceiveCallback);

// [...] not shown here: connect to the serial port

ارسال اطلاعات به پورت سریال

ارسال داده ساده تر از خواندن است. تنها نکته این است که اگر پروتکل داده شما مبتنی بر رشته باشد، باید رشته خروجی خود را به یک ArrayBuffer تبدیل کنید. نمونه کد زیر را ببینید:

var writeSerial=function(str) {
  chrome.serial.send(connectionId, convertStringToArrayBuffer(str), onSend);
}
// Convert string to ArrayBuffer
var convertStringToArrayBuffer=function(str) {
  var buf=new ArrayBuffer(str.length);
  var bufView=new Uint8Array(buf);
  for (var i=0; i<str.length; i++) {
    bufView[i]=str.charCodeAt(i);
  }
  return buf;
}

شستشوی بافر پورت سریال

شما می توانید بافر پورت سریال خود را با صدور دستور flush شستشو دهید:

  chrome.serial.flush(connectionId, onFlush);

بیشتر

Serial API چندین ویژگی دیگر نیز دارد. برای مثال، می‌توانید یک اتصال را روی دائمی تنظیم کنید، بنابراین می‌تواند داده‌ها را حتی زمانی که برنامه شما اجرا نمی‌شود، دریافت کند، یا می‌توانید پارامترهای اتصال مانند نرخ بیت، زمان‌بندی، سیگنال‌های کنترلی و بسیاری موارد دیگر را با سریال به‌روزرسانی کنید. روش به روز رسانی برای اطلاعات بیشتر به مرجع کامل سریال API مراجعه کنید.

،

این سند نحوه استفاده از API سریال برای خواندن و نوشتن از دستگاه های سریال را شرح می دهد. برنامه‌های Chrome همچنین می‌توانند به دستگاه‌های USB و بلوتوث متصل شوند.

نیاز آشکار

شما باید مجوز سریال را به فایل مانیفست اضافه کنید:

"permissions": [
  "serial"
]

لیست پورت های سریال موجود

برای دریافت لیستی از مسیرهای مرتبط با پورت های سریال موجود، از روش serial.getDevices استفاده کنید. توجه: همه پورت های سریال در دسترس نیستند. API از روش‌های اکتشافی استفاده می‌کند تا فقط دستگاه‌های سریالی را نشان دهد که انتظار می‌رود ایمن باشند.

var onGetDevices = function(ports) {
  for (var i=0; i<ports.length; i++) {
    console.log(ports[i].path);
  }
}
chrome.serial.getDevices(onGetDevices);

اتصال به دستگاه سریال

اگر مسیر مرتبط با پورت سریال را می دانید، می توانید با استفاده از روش serial.connect به آن متصل شوید:

chrome.serial.connect(path, options, callback)
پارامتر شرح
مسیر (رشته) اگر مسیر مرتبط با پورت دستگاه شما ناشناخته است، می توانید از روش serial.getDevices استفاده کنید.
گزینه ها (شیء) شی پارامتر با چندین مقدار پیکربندی. جزئیات را در serial.ConnectionOptions ببینید
پاسخ به تماس هنگامی که پورت با موفقیت باز شد فراخوانی می شود. فراخوانی با یک پارامتر، connectionInfo ، فراخوانی می‌شود که چندین مقدار مهم دارد. جزئیات را در serial.ConnectionInfo ببینید.

یک مثال ساده:

var onConnect = function(connectionInfo) {
   // The serial port has been opened. Save its id to use later.
  _this.connectionId = connectionInfo.connectionId;
  // Do whatever you need to do with the opened port.
}
// Connect to the serial port /dev/ttyS01
chrome.serial.connect("/dev/ttyS01", {bitrate: 115200}, onConnect);

از پورت سریال جدا شوید

هنگامی که یک برنامه خاتمه می یابد، اتصالات به پورت های سریال که دائمی نیستند به طور خودکار توسط پلت فرم بسته می شوند. با این حال، اگر می‌خواهید در حالی که برنامه شما هنوز در حال اجرا است، اتصال را قطع کنید، می‌توانید از روش serial.disconnect استفاده کنید:

var onDisconnect = function(result) {
  if (result) {
    console.log("Disconnected from the serial port");
  } else {
    console.log("Disconnect failed");
  }
}
chrome.serial.disconnect(connectionId, onDisconnect);

خواندن از پورت سریال

API سریال از پورت سریال خوانده می شود و بایت های خوانده شده را به عنوان یک ArrayBuffer به شنوندگان رویداد تحویل می دهد. هر پورتی که برنامه شما به آن متصل است رویدادهای خواندنی را برای همه شنوندگان اضافه شده از طریق chrome.serial.onReceive.addListener(onReceiveCallback) ایجاد می کند. اگر همزمان به بیش از یک پورت متصل هستید، ممکن است connectionId مربوطه یک رویداد خوانده شده ورودی را در پارامتر پاسخ به تماس serial.onReceive بیابید.

مثال زیر می‌تواند بایت‌های خوانده‌شده را تا زمانی که یک خط جدید خوانده شود جمع‌آوری کند، ArrayBuffer دریافت‌شده را به رشته تبدیل کند و زمانی که یک خط جدید به عنوان آخرین کاراکتر دریافت‌شده یافت می‌شود، متدی را فراخوانی می‌کند:

var stringReceived = '';

var onReceiveCallback = function(info) {
    if (info.connectionId == expectedConnectionId && info.data) {
      var str = convertArrayBufferToString(info.data);
      if (str.charAt(str.length-1) === '\n') {
        stringReceived += str.substring(0, str.length-1);
        onLineReceived(stringReceived);
        stringReceived = '';
      } else {
        stringReceived += str;
      }
    }
  };

chrome.serial.onReceive.addListener(onReceiveCallback);

// [...] not shown here: connect to the serial port

ارسال اطلاعات به پورت سریال

ارسال داده ساده تر از خواندن است. تنها نکته این است که اگر پروتکل داده شما مبتنی بر رشته باشد، باید رشته خروجی خود را به یک ArrayBuffer تبدیل کنید. نمونه کد زیر را ببینید:

var writeSerial=function(str) {
  chrome.serial.send(connectionId, convertStringToArrayBuffer(str), onSend);
}
// Convert string to ArrayBuffer
var convertStringToArrayBuffer=function(str) {
  var buf=new ArrayBuffer(str.length);
  var bufView=new Uint8Array(buf);
  for (var i=0; i<str.length; i++) {
    bufView[i]=str.charCodeAt(i);
  }
  return buf;
}

شستشوی بافر پورت سریال

شما می توانید بافر پورت سریال خود را با صدور دستور flush شستشو دهید:

  chrome.serial.flush(connectionId, onFlush);

بیشتر

Serial API چندین ویژگی دیگر نیز دارد. برای مثال، می‌توانید یک اتصال را روی دائمی تنظیم کنید، بنابراین می‌تواند داده‌ها را حتی زمانی که برنامه شما اجرا نمی‌شود، دریافت کند، یا می‌توانید پارامترهای اتصال مانند نرخ بیت، زمان‌بندی، سیگنال‌های کنترلی و بسیاری موارد دیگر را با سریال به‌روزرسانی کنید. روش به روز رسانی برای اطلاعات بیشتر به مرجع کامل سریال API مراجعه کنید.