1.4Міст USB-USB
1.4.1 Загальний опис
Найлегший шлях для з’єднання двох комп’ютерів – це використати USB-USB міст показаний на рис.3 та рис.4. Комутуючи два комп’ютери таким кабелем можна передавати файли з одного комп’ютера на інший, і навіть, створити мережу для доступу в інтернет через комп’ютер до якого підключені за допомогою такого кабелю (за умов, що цей комп’ютер має вихід в інтернет).
Рис.3. Вигляд USB-USB моста
інтерфейс шина хост мережа
Щодо швидкості, то мікроконтроллер USB моста може підтримувати стандарт USB 1.1 (12 Мбіт/с) або USB 2.0 (480 Мбіт/с).
Рис.4. Вигляд моста зсередини
1.4.2 Встановлення
USB-USBміст може працювати у двох режимах: режим прямого з’єднання та в режимі мережі (див. рис.5).
Для режиму прямого з’єднання передбачене програмне забезпечення, яке додається в комплекті з кабелем. Воно дозволяє пересилати чи копіювати вибрані файли на\або з віддаленого комп’ютера.
Процес встановлення драйверів для USB-USBкабелю залежить від виробника. Потрібно буде, перш за все встановити драйвери, а також програмне забезпечення, що йдуть в комплекті з кабелем на CD. Ця процедура повинна бути здійснена на обох комп’ютерах, без підключеного кабелю.
Деякі виробники постачають два різні файли установки, один для режиму прямого з’єднання, інший – для режиму мережі. Інші виробники постачають тільки один установочний файл, який підходить для обох режимів.
Рис.5. Вибір режиму роботи з програми пересилки
В режимі мережі, є можливість створити малу мережі між двома комп’ютерами. Після створення такої мережі з’являється можливість організації спільних папок, принтерів та доступу до Інтернет.
1.4.2 Використання USB-USB моста
В даній лабораторній роботі використовується PCLinq2 Hi-Speed USB Bridge Cable кабель який дозволяє легко з’єднати два комп’ютери просто приєднавши кабель до кожного з них. Перед тим як розпочати роботу з програмою PCLinq2 (див. рис.7) потрібно в першу чергу запустити програму Setup на кожному з комп’ютерів.
Рис.6. Можливі режими роботи PCLinq2 кабелю
Рис.7. Програма пересилки PCLinq2, яка відповідає за взаємодію та файлову пересилку між двома комп’ютерами по PCLinq2 Hi-Speed USB Bridge Cable кабелю
Додаток 1.
Код програми для роботи із COM портом
using System;
using System.IO;
using System.IO.Ports;
using System.Collections;
using System.Threading;
namespace Termie
{
public sealed class CommPort
{
SerialPort _serialPort;
Thread _readThread;
volatile bool _keepReading;
//begin Singleton pattern
static readonly CommPort instance = new CommPort();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static CommPort()
{
}
CommPort()
{
_serialPort = new SerialPort();
_readThread = null;
_keepReading = false;
}
public static CommPort Instance
{
get
{
return instance;
}
}
//end Singleton pattern
//begin Observer pattern
public delegate void EventHandler(string param);
public EventHandler StatusChanged;
public EventHandler DataReceived;
//end Observer pattern
private void StartReading()
{
if (!_keepReading)
{
_keepReading = true;
_readThread = new Thread(ReadPort);
_readThread.Start();
}
}
private void StopReading()
{
if (_keepReading)
{
_keepReading = false;
_readThread.Join();//block until exits
_readThread = null;
}
}
/// <summary> Get the data and pass it on. </summary>
private void ReadPort()
{
while (_keepReading)
{
if (_serialPort.IsOpen)
{
byte[] readBuffer = new byte[_serialPort.ReadBufferSize + 1];
try
{
// If there are bytes available on the serial port,
// Read returns up to "count" bytes, but will not block (wait)
// for the remaining bytes. If there are no bytes available
// on the serial port, Read will block until at least one byte
// is available on the port, up until the ReadTimeout milliseconds
// have elapsed, at which time a TimeoutException will be thrown.
int count = _serialPort.Read(readBuffer, 0, _serialPort.ReadBufferSize);
String SerialIn = System.Text.Encoding.ASCII.GetString(readBuffer,0,count);
DataReceived(SerialIn);
}
catch (TimeoutException) { }
}
else
{
TimeSpan waitTime = new TimeSpan(0, 0, 0, 0, 50);
Thread.Sleep(waitTime);
}
}
}
/// <summary> Open the serial port with current settings. </summary>
public void Open()
{
Close();
try
{
_serialPort.PortName = Settings.Port.PortName;
_serialPort.BaudRate = Settings.Port.BaudRate;
_serialPort.Parity = Settings.Port.Parity;
_serialPort.DataBits = Settings.Port.DataBits;
_serialPort.StopBits = Settings.Port.StopBits;
_serialPort.Handshake = Settings.Port.Handshake;
// Set the read/write timeouts
_serialPort.ReadTimeout = 50;
_serialPort.WriteTimeout = 50;
_serialPort.Open();
StartReading();
}
catch (IOException)
{
StatusChanged(String.Format("{0} does not exist", Settings.Port.PortName));
}
catch (UnauthorizedAccessException)
{
StatusChanged(String.Format("{0} already in use", Settings.Port.PortName));
}
catch (Exception ex)
{
StatusChanged(String.Format("{0}", ex.ToString()));
}
// Update the status
if (_serialPort.IsOpen)
{
string p = _serialPort.Parity.ToString().Substring(0, 1); //First char
string h = _serialPort.Handshake.ToString();
if (_serialPort.Handshake == Handshake.None)
h = "no handshake"; // more descriptive than "None"
StatusChanged(String.Format("{0}: {1} bps, {2}{3}{4}, {5}",
_serialPort.PortName, _serialPort.BaudRate,
_serialPort.DataBits, p, (int)_serialPort.StopBits, h));
}
else
{
StatusChanged(String.Format("{0} already in use", Settings.Port.PortName));
}
}
/// <summary> Close the serial port. </summary>
public void Close()
{
StopReading();
_serialPort.Close();
StatusChanged("connection closed");
}
/// <summary> Get the status of the serial port. </summary>
public bool IsOpen
{
get
{
return _serialPort.IsOpen;
}
}
/// <summary> Get a list of the available ports. Already opened ports
/// are not returend. </summary>
public string[] GetAvailablePorts()
{
return SerialPort.GetPortNames();
}
/// <summary>Send data to the serial port after appending line ending. </summary>
/// <param name="data">An string containing the data to send. </param>
public void Send(string data)
{
if (IsOpen)
{
string lineEnding = "";
switch (Settings.Option.AppendToSend)
{
case Settings.Option.AppendType.AppendCR:
lineEnding = "\r"; break;
case Settings.Option.AppendType.AppendLF:
lineEnding = "\n"; break;
case Settings.Option.AppendType.AppendCRLF:
lineEnding = "\r\n"; break;
}
_serialPort.Write(data + lineEnding);
}
}
}
}