RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX


Infrared Programming Using the .NET Compact Framework : Page 3

If you've ever used a TV remote control, you've experienced the convenience of using infrared communications. See how to use infrared to communicate between a Windows Mobile device and a PC.

Building the PC Application
With the Pocket PC application built, you can now build the PC application that listens for incoming infrared data.

Using Visual Studio 2005, create a new Windows application and name it Infrared_Desktop. Populate the default Form with the PictureBox control (see Figure 2).

Figure 2. Form1: Populated with the PictureBox control.

Add a reference to the InTheHand.Net.Personal library.

Switch to the code-behind of Form1 and import the following namespaces:

Imports System.IO
Imports System.Net.Sockets
Imports InTheHand.Net.Sockets
As usual, define the following constants and member variable:
Public Class Form1
    '---define the constants---
    Const DATA_BLOCK_SIZE As Integer = 8192
    Const MAX_TRIES As Integer = 3
    Private ServiceName As String = "default"
Define the ReceiveData() function so that it can receive incoming infrared data (shown in Listing 2).

You use the IrDAListener class to listen for an IrDa connection. Once a connection is established, you read the incoming data using a Stream object. Because incoming data may not be read in one go, you will repeatedly read from the stream until no more data is available. The function returns the data received as a byte array.

Next, define the ReceiveLoop() subroutine that calls the ReceiveData() function in a infinite loop:

    Public Sub ReceiveLoop()

        Dim dataReceived As Byte()
        '---listen for incoming data---
        dataReceived = ReceiveData()
        While True
            If DataReceived.Length > 0 Then
                PictureBox1.BeginInvoke( _
                   New myDelegate(AddressOf DisplayImage), _
                   New Object() {dataReceived})
            End If
            '---keep on listening for incoming data---
            dataReceived = ReceiveData()
        End While

    End Sub
Define the DisplayImage() subroutine and its delegate as follows:

    Private Delegate Sub myDelegate(ByVal data As Byte())
    Private Sub DisplayImage(ByVal data As Byte())

            Dim ms As MemoryStream = New MemoryStream(data)
            PictureBox1.Image = New Bitmap(Image.FromStream(ms))
        Catch ex As Exception
        End Try

    End Sub
The DisplayImage() subroutine converts the received byte array into an image so that it can be displayed by the PictureBox control.

Finally, when the form is loaded, invoke the ReceiveLoop() subroutine using a thread so that it can listen for incoming data in the background:

    Private Sub Form1_Load( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs) _
       Handles MyBase.Load

        '---receive incoming data as a separate thread---
        Dim t1 As System.Threading.Thread
        t1 = New Threading.Thread(AddressOf ReceiveLoop)

    End Sub

Close Icon
Thanks for your registration, follow us on our social networks to keep up-to-date