Mam taki problem. Chcę przesyłać liczby oraz teksty z iPAQ-a do pewnego urządzenia (przycisk dla pieszych programowany z łącza szeregowego i IrDA) używając IrDA.
Generalnie działa przy przesyłaniu z jednego iPAQ-a na drugi i tak wstępnie testowałem ten program. Ale przy testach z urządzeniem, z którym ma to defoltowo pracować coś jakby do tego urządzenia nie docierało to co ma docierać.
Generalnie urządzenie ma również możliwość łączności szeregowej i wtedy widać w oknie terminalowym pseudo menu do wybierania odpowiednich liczb co oznacza przechodzenie w odpowiednie funkcje podmenu i powrotem. Czyli chcąc robić to samo IrDĄ musiałbym słać liczby. I tak właśnie robie (kod poniżej) ale coś nie działa
Na dodatek wysyłając te liczby IrDĄ z komercyjnego programu vxHpc wszystko działa i urządzenie odbiera te liczby i reaguje i można nawigować po menu. Czyli kanał komunikacji jest możliwy tą drogą a ja mam coś źle w kodzie.
Generalnie jeśli ktoś będzie miał czas zerknąć na ten kod i odpisać czy w ogóle jest dobrze napisany bo może mam jakiś gruby błąd, a sam nie wiem o co chodzi.
Kod wygląda mniej więcej tak:
using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
namespace PushButton
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Label label1;
private Microsoft.WindowsCE.Forms.InputPanel inputPanel1;
private System.Windows.Forms.MainMenu mainMenu1;
private IrDAClient irdaClient = new IrDAClient();
private IrDADeviceInfo [] deviceList = new IrDADeviceInfo[2];
private IrDAEndPoint endPoint ;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MenuItem menuItem2;
private Stream irdaStream ;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
base.Dispose( disposing );
}
static void Main()
{
Application.Run(new Form1());
}
private void Search_Click(object sender, System.EventArgs e)
{
int n = 10;
// IrDAClient irdaClient = new IrDAClient();
// IrDADeviceInfo [] deviceList = irdaClient.DiscoverDevices(n);
if( deviceList.Length > 0 )
for( int i = 0; i < deviceList.Length; i++ )
listBox1.Items.Add( deviceList[i].DeviceName );
else
listBox1.Items.Add( "Nie znaleziono urządzeń." );
}
private void Open_Click(object sender, System.EventArgs e)
{
deviceList = irdaClient.DiscoverDevices(2);
if(deviceList.Length > 0)
{
endPoint = new IrDAEndPoint(deviceList[0].DeviceID, "IrDA:IrCOMM");
irdaClient.Connect(endPoint);
irdaStream = irdaClient.GetStream();
byte [] komenda = new byte[10];
komenda[0] = 54;
irdaStream.Write(komenda,0,komenda.Length);
//irdaStream.Flush();
komenda[0] = 49;
irdaStream.Write(komenda,0,komenda.Length);
//irdaStream.Flush();
}
}
private void Close_Click(object sender, System.EventArgs e)
{
irdaStream.Close();
irdaClient.Close();
}
private void SendZero_Click(object sender, System.EventArgs e)
{
// Stream irdaStream = irdaClient.GetStream();
byte [] komenda = new byte[10];
komenda[0] = 48;
irdaStream.Write(komenda,0,komenda.Length);
//irdaStream.Flush();
byte [] bytes = new byte[500];
string str;
//do
//{
irdaStream.Read(bytes,0,bytes.Length);
str = ASCIIEncoding.ASCII.GetString(bytes, 1, bytes.Length-1);
label1.Text = str;
//}while(str.IndexOf("OK") == -1 && str.IndexOf("ERROR") == -1);
//irdaStream.Close();
}
}
}
Próbowałem też z irdaStream.WriteByte(48) ale też jakby te liczby nie docierały do urządzenia.
Pozdrawiam