Click here to Skip to main content
Click here to Skip to main content

BetaBrite LED Sign API

By , 25 Apr 2005
 

Introduction

In the spirit of Lava Lamp build monitoring and Automated Continuous Integration and the Ambient Orb, I purchased a BetaBrite one-line electronic LED sign. This two foot LED display beats the heck out of those retro-kitsch novelty build status indicators. The BetaBrite supports full text build status information in eight colors and 12 different font styles-- including animations! It's way cool; I have yet to see someone walk by my desk who isn't mesmerized by its hypnotic animation and colors. And it's not all that expensive, either. Sam's Club has the BetaBrite sign for a reasonable $160, and that includes the serial communication cable, handheld remote, and software.

The BetaBrite is fully programmable via the infrared remote, but keying in long messages on the remote is a giant pain. It's a lot easier to connect the BetaBrite to your PC through a RS-232 Serial to RJ-12 cable, then use the bundled Windows software to program the sign:

The Windows software works fine, but what I really wanted was a native .NET API. So, armed with the protocol document and a functioning BetaBrite connection, I set out to write an easy to use .NET API for the BetaBrite.

Understanding the BetaBrite LED Sign

The BetaBrite understands a subset of the Alpha Sign Communications Protocol. We're talking about RS-232 serial communications to a device with a whopping 32 kilobytes of internal memory-- not exactly a supercomputer. So, as you might expect, the protocol is a little primitive and sometimes confusing. I spent the last week poring over the documentation; here's what I found:

  • BetaBrite only understands version 1.0 of the Alpha protocol

    Anything in the Alpha Protocol Documentation referring to 2.0 or 3.0 features won't apply to the BetaBrite. Some of these are obvious, such as multiple line commands-- the BetaBrite only has one line-- and some are less obvious.

  • All communications are in a standard packet format

    The sign communicates with the PC via a RS-232 serial port connection at 9600,N,8,1. All of the messages sent to the sign will be in a standard packet format:

    To simplify communications, all messages are sent in plain-text ASCII, with no unprintable high-bit ASCII characters. If high-bit ASCII is needed, it is encoded in a double-byte format as you'll see later.

  • The sign stores "files" in slots labeled by a single ASCII character

    Any ASCII character from 20h (space) to 7Eh (1/2 space) is valid as a file label, and you can allocate any combination of file labels up to the 32 kilobyte internal memory limit of the sign. Note that file label "0" is a so-called "priority label" and is treated a little differently, but other than that, they're all just named file labels for storing either Text, a String, or a Picture.

  • All memory must be allocated in advance

    I guess I've been spoiled by the automatic memory management and garbage collector of .NET, because this one took me a while to wrap my head around. Any time you program the sign, you must allocate all the memory you'll need in advance. Any attempt to allocate more memory later will destroy all the existing memory allocations! Be sure to allocate all the memory you'll need before writing anything to the sign. This isn't a big deal in practice, but it cannot be abstracted away, so you must be aware of it.

Architecture

Early on, I made the decision to implement the API as a set of three classes:

  • BetaBrite.Sign

    This is the primary Public interface for the sign. It drives the Protocol and RS232 classes behind the scenes, so the user is protected from the complexities of both the Alpha Sign Communications Protocol and RS-232 serial communications. Here's a quick glance at it:

  • BetaBrite.Protocol

    This Private class factory defines all the low-level commands necessary to talk to the sign, which can all be rendered to a byte stream via the ToBytes() method. Additionally, if you want to preview a "pretty printed" version of the command, you can call the overridden ToString() method for the command. All commands inherit from the BaseCommand class, which implements the standard Alpha packet format. The child commands must override the FormDataField method, which returns the string of text specific to that particular command class. The Sign.SetDateAndTime method illustrates how this works:

    ''' <summary>
    ''' Sets the date and time on the sign to any arbitrary date/time
    ''' </summary>
    Public Sub SetDateAndTime(ByVal dt As DateTime)
        Dim dc As New BetaBrite.Protocol.SetDateTimeCommand(dt)
        If _IsDebug Then
            Debug.Write(dc.ToString)
        End If
        Write(dc.ToBytes)
    End Sub

    Note that a few of the Protocol Enums are exposed in the Sign methods -- for transitions and so forth -- as these are unavoidably determined by the underlying protocol.

  • BetaBrite.RS232

    This Private class defines the communication method between the PC and the sign. It is almost completely Private, however, you still need to provide the Sign object with a comm port number. Internally, all Protocol commands are rendered into byte streams and automatically transported to the sign using Cory Smith's DBComm class. It's unmodified, other than some header comments I added attributing it to Cory. I compiled this in so the entire BetaBrite DLL can be used as a standalone interface API with no other dependencies.

Using BetaBrite.Sign

As promised, this API is very simple to use. Here's the canonical "Hello, World" example -- assuming your BetaBrite is connected via the first serial port:

  Dim bb As New BetaBrite.Sign(1)
  bb.Open()
  bb.Display("I <extchar=heart> BetaBrite!")
  bb.Close()

Now, this example cheats a bit because the Display() method is ultra-simple. This method can only display a single message (although it can be a very long message, up to 32 KB) as a result. In order to progress beyond "Hello World", I'll show examples of the three things you can show on a BetaBrite sign.

The Text item is the most frequently used, and represents formatted text followed by a transition state:

Dim bb As New BetaBrite.Sign(1)
With bb
  .Open()
  .UseMemoryText("D"c, 128)
  .UseMemoryText("E"c, 128)
  .UseMemoryText("F"c, 128)
  .AllocateMemory()

  .SetText("D"c, _
    "<font=five><color=green>This is <font=seven>file D", _
    Transition.Rotate)
  .SetText("E"c, _
    "<font=five><color=yellow>This is <font=seven>file E", _
    Transition.WipeLeft)
  SetText("F"c, _
    "<font=five><color=red>time is <calltime>", _
    Transition.RollDown)

  .SetRunSequence("EDF")
  .Close()
End With

If you run this code, you should see three different messages, with different colors, fonts, and transitions between the messages. Pay attention to the explicit memory allocation-- be sure you allocate enough memory for your text plus the one or two bytes of formatting codes per tag. As you may have noticed, text message strings support a set of lightweight HTML-style formatting codes, which you can find in the Text Formatting region of the Protocol class: look for Protocol.ControlChars, Protocol.Color, Protocol.Font, Protocol.ExtChar and Protocol.CharAttrib. I won't bother listing them all here, because the demonstration solution shows examples of each and every one. However, it is important to bear in mind that, unlike HTML, these tags do not support closing tags-- so if you change the color, it will stay changed for the rest of your messages! Be sure to change the color back when you're done.

The String item is a subset of text that acts like a variable:

Dim bb As New BetaBrite.Sign(1)
With bb
  .Open()
  .UseMemoryText("A"c, 128)
  .UseMemoryString("B"c, 32)
  .AllocateMemory()

  .SetText("A"c, "You are customer number <callstring=B>")
  .Close()
End With

I didn't specify a run sequence here because file A always runs by default. The main advantage of strings is that they can be dynamically updated without making the sign "flash", so think of them as variables. They support a subset of the formatting codes that text messages support, so unless you need a variable, stick with text messages.

The Picture item represents an 8-color bitmap of up to 80x7 pixels:

Dim bb as New BetaBrite.Sign(1)
With bb
  .Open()
  .UseMemoryText("A"c, 128)
  .UseMemoryPicture("B"c)
  .UseMemoryPicture("C"c)
  .UseMemoryPicture("D"c)
  .AllocateMemory()

  .SetPicture("B"c, "betabrite_picture_triangle.bmp", 35, 7)
  .SetPicture("C"c, "betabrite_picture_smiley.bmp", 10, 7)
  .SetPicture("D"c, "betabrite_picture_demo.bmp")

  .SetText("A"c, _
    "<callpic=C><callpic=C><callpic=B><callpic=C>" & _
    "<callpic=C><newline><callpic=D>", _
    Transition.RollUp)

   .Close()
End With

Note that, unless you specify otherwise, the maximum amount of picture memory (80x7) will be allocated in that file label. Here's what you should see when this is run:

This will scroll up and be replaced by another full-size 80x7 picture of some "modern art" I created. Now, I know what you're thinking: yes, you can load any arbitrary 80x7 pixel image into the BetaBrite, in whatever file formats .NET supports. However, do not expect this to look good! 80x7 is a tiny number of pixels, and the BetaBrite has a very limited palette: essentially two reds, two greens, and four yellows (see Protocol.PixelColor). Try it and see, but don't say I didn't warn you. I recommend sticking with the 8-color bitmap templates I created in the demonstration solution; look in the \bin folder for these.

Animated images (ala animated .gifs) isn't supported natively, but can be hacked in using the <NoHold> or <Speed5> tags and a sequence of cleverly designed picture files. There's an example of simulating animation in the demonstration solution, too.

Some Limitations

I'm pretty happy with the way this API turned out, but I think it's worth mentioning a few of the things I decided not to do. Some of these might make sense as possible future enhancements, and some were intentionally avoided.

  • It is BetaBrite-only. I thought about making the API generic enough to work with any Alpha sign, but then quickly decided that was a bad idea, because I don't have any other Alpha signs to test against.
  • It is write-only. I only implemented the Write commands, but for every Write, there is a Read. Making the API read-write isn't essential for a PC connected sign, in my opinion, but it might be useful.
  • It does not expose advanced run functionality. After setting the date and time on the sign, you can tell certain file labels to run at certain times of the day. The run sequence could display "GOOD MORNING" from 9 a.m. - 12 p.m., and "GOOD EVENING" from 6 p.m. - 9 a.m. Although this is supported in the BetaBrite.Protocol class, I didn't expose it in BetaBrite.Sign. This would not be hard to do, but I don't think it's very useful for PC-connected signs -- I expect the PC to be overwriting the sign every few minutes anyway. It'd be more useful for signs that were running standalone.

Conclusion

If you own a BetaBrite LED sign, I think you'll have a lot of fun with these classes; they make it easy to write .NET applications that support the BetaBrite sign. There are many more details and comments in the demonstration solution provided at the top of the article, so check it out.

I hope you enjoyed this article. Please don't hesitate to provide feedback, good or bad! If you enjoyed this article, you may also like my other articles as well.

History

  • Sunday, March 20th, 2005 - published.
  • Thursday, April 21st, 2005 - version 1.1
    • Modified picture methods to support directly passing a Bitmap.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

wumpus1
Web Developer
United States United States
My name is Jeff Atwood. I live in Berkeley, CA with my wife, two cats, and far more computers than I care to mention. My first computer was the Texas Instruments TI-99/4a. I've been a Microsoft Windows developer since 1992; primarily in VB. I am particularly interested in best practices and human factors in software development, as represented in my recommended developer reading list. I also have a coding and human factors related blog at www.codinghorror.com.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5memberHeaven20203-Nov-10 9:54 
very Cool
GeneralCode upgraded/refactored & committed to GooglecodememberSune Kaae8-May-10 10:44 
I did a few refactorings and minor tweaks to the library, and got Jeff's permission to post it to googlecode.
 
Here's the googlecode project: http://code.google.com/p/betabrite-api-dotnet/[^]
 
And here's my blogpost: http://blog.sunekaae.com/2010/05/net-api-for-betabrite-led-message.html[^]
 
/Sune
QuestionReusemembersnevl15-Jan-10 17:18 
Jeff,
 
I'm hoping to use your BetaBrite code significantly in a script I'm writing for Homeseer (www.Homeseer.com). Once finished, I want to post it for other Homeseer users. I don't intend to sell it, but rather just allow people to download it and I will support them with any problems they have. I also plan to point to this article in the credits with your name.
 
I'm assuming that there is no issue in my doing this?
 
Steve
GeneralBetaBrite Prism, and more colors for SMALL DOT PICTURE FILEmemberroger_meier30-Mar-09 18:43 
Thanks to the information from this project, the betabriteusb.dll and the Alpha Protocol Document I have been able to program the Prism pretty much the same way I have been programming BetaBrite Classic displays. The one thing I'm still struggling with is writing Small Dots pictures. I can write them the same way I can also write them on the classic displays, but I can't get the additional colors to work. The version of the "Alpha Sign Communication Protocol" (pn 97088061, Rev F, March 2006) currently available online does not document the additional colors of the Prism display. The 'Write SMALL DOTS PICTURE' packet only supports colors from "0" to "8" (0x30 to 0x38) for pixels, i.e. black to yellow, just like for the classic displays. Other values are interpreted as black pixels.
 
I used the IR remote to create 7x80 DOTS Graphic with pixels of all possible colors, and used the "Read SMALL DOTS PICTURE" command to read the picture back to the PC. From the received packet it is apparent that the values for the Prism colors are the following:
 
30 31 32 33 34 35 36 37 38 64 60 74 70 76 72 69 65 68 4c 7d 7a 7b 7e 79 78 7f
 
where 30 is red and 7f is pink. However, when I send a picture using these colors, only values from 30 to 38 are accepted and any other values are ignored. They are turned in to 00, which I confirmed by reading the picture back.
 
I seem to be missing something, obviously, but I can't seem to find what that is using the Alpha Sign Communication Protocol documentation.
 
I did find a post on the ams-i forums that talks about how to use additional colors for TEXT messages, using <1C> "Z" and then 3 RGB values, which seem to indicate that the Prism implements at least part of the Alpha 3.0 protocol). However, I couldn't find any information regarding additional colors in pictures.
 
I was hoping that there is a newer version of the protocol documentation that specifically discusses the additional features the Prism display has over the classic displays, and that someone reading this is able to point me to where I can obtain such documentation.
GeneralRe: BetaBrite Prism, and more colors for SMALL DOT PICTURE FILEmemberbhawkins419412-May-10 5:17 
do you have the sample code at all I am looking for this dll and code that everyone is talking about but the ftp site is down. I am looking at porting some of it to C# so I can use it in a few products, but I am looking at sending rgb colors to the display. Could you post or email me the code that you have been using for getting these extra colors.
 
Thanks
Brian
GeneralRe: BetaBrite Prism, and more colors for SMALL DOT PICTURE FILEmemberroger_meier12-May-10 6:39 
You can download the dll from here:
 
http://www.industrologic.com/prissoft.htm
 
There is also a demo program in basic that demonstrates how to use it.
 
It is not possible, to send Small Dot picture files with more than the 8 standard colors. I've tried. However, it is possible to send regular text using RGB colors. Send the command code 0x1C followed by "ZRRGGBB" to change the text color and "1CH" followed by "YRRGGBB" to change the shade color. The prism can reproduce the following 64 colors:
 
RGB values in hexadecimal:
 
Red           - FF0000
Dim Red       - 400000
Green         - 00FF00
Dim Green     - 004000
Amber         - FFFF00
Brown         - 404000
Orange        - F04000
Yellow        - 40FF00
Blue          - 0000FF
Dim Blue      - 000040
Aqua          - 00FFFF
Light Cyan    - 00FF40
Cyan          - 0040FF
Light Cyan    - 004040
Magenta       - FF0040
Purple        - 8000FF
Light Purple  - 400040
Violet        - 400080
Light Violet  - FF40FF
Redish White  - FFFF40
Full White    - FFFFFF
Blueish White - 40FFFF
White         - 40FF40
Grey          - 404040
Pink          - FF4040
 
E.g. to set the text color to blue, send the character 0x1C, the character "Z", and then 6 characters representing the RGB value in hex, i.e. "0000FF"
 
The individual bytes for R, G, and B can not assume arbitrary values. They can only be "00", "40", "80", or "C0". (Note that the Adaptive Micro Systems program uses the value FF rather than C0. Both produce the same color result.)
GeneralMacrosmembersupercat916-Mar-09 7:15 
It's been ages since I've done any BetaBrite programming, but one thing I found is that attempting to edit a stored message or string will disrupt the display, but the sign supports programmable macros which can be changed without disrupting the display. One is unfortunately limited in what one can do with macros (IIRC, they can contain font-change commands, but not end-of-line or transition commands), but they nonetheless provide a useful way to have text that will change 'smoothly' in response to external stimuli.
GeneralRe: Macrosmemberroger_meier30-Mar-09 18:37 
Can you elaborate on how this works?
Generalbetabrite prismmemberyankee0720-Sep-08 9:53 
i have one but dont know how to program it please help.... when i open my store it came with ..
GeneralBetaBrite Prism --&gt; working proof. [modified]memberStonie7-Feb-08 19:28 
Guys,
 
With some guess work and scratching around, I have managed to port this code to the new version of the betabrite, the Prism (USB) with working RGB colors.
 
The hurdle was working out the P/Invoke required to the sign running with an unsupported dll I found on the homeseer forums, D'Oh! | :doh: then porting it to Jeff’s excellent Protocol class was easy.
 
Once I have it tidied up a bit I will post it, if you want the code now in it's current incarnation send me a message Andrew (at) stonie.net
 
Wink | ;)
Cheers,
Stonie.
 
modified on Sunday, February 10, 2008 5:24 PM

NewsRe: BetaBrite Prism --&gt; working proof.memberStonie27-May-08 1:53 
UPDATE: you can grab the code here: ftp://ftp.stonie.net/BetaBrite[^] Smile | :)
GeneralRe: BetaBrite Prism --&gt; working proof.memberroger.meier@pobox.com30-Mar-09 18:26 
It says that I don't have the right privileges. Is there another place to the grab code from?
GeneralRe: BetaBrite Prism --&gt; working proof.memberStonie30-Mar-09 22:52 
Try again now Wink | ;)
GeneralRe: BetaBrite Prism --&gt; working proof.memberroger_meier31-Mar-09 4:30 
Much better, thanks a bunch! Big Grin | :-D
GeneralHELP PLEASE!!memberFredEEE26-Dec-07 0:50 
I have one of these signs and it came with no cable or software. I found the link to build the cable but I dont know nothing about .net and VB. Can someone please help by pointing me in the right direction to using this pages code?
 
Remember I dont know VB
 

Thank You
QuestionError after conversion...memberRPSinc19-Apr-07 2:35 
Greetings:
I have converted this to .net 2.0 and am receiving the following error:
'CommandCode' cannot expose type 'CommandCode' in namespace 'BetaBrite' through class 'BaseCommand'.
 
Any ideas on what I need to do to resolve this?
 
Thanks
GeneralRe: Error after conversion...memberStonie23-Dec-07 9:43 
To work around it, you can mark CommandCode Enum as public (instead of protected)
 
Hope this helps,
Stonie.
GeneralRe: Error after conversion...memberH00TERZ30-Jun-08 7:20 
Acutally, you should change:
 
Protected Enum CommandCode
 
to
 
Public Enum Commandcode
GeneralDefect in Sign.OpenmemberRoman V. Gavrilov12-Mar-07 8:25 
Public Open method in Sign class re-instantiates BetaBrite.RS232 resetting port to 1 (by field initializer). That is the library does not work with COM ports other then 1.
 
Did I miss something?
 
Regards,
Roman
GeneralMissing .bmp file in latest postingmemberRob Krakora1-May-05 3:26 
You are missing a .bmp file in your latest posting of the demo source code. Would you please re-post with this file? Thank you.
GeneralRe: Missing .bmp file in latest postingmemberwumpus116-Jun-05 19:31 
Shoot, you're right. Here are the missing bitmaps; put them in the BetaBriteConsole/bin folder.
 
http://www.codinghorror.com/blog/files/betabrite_images.zip[^]
GeneralRe: Missing .bmp file in latest postingmemberSune Kaae17-Apr-10 8:15 
hei - I know the post i old, but the image files seems to have gone missing again. Any chance of re-posting?
 
/Sune
Generalneed windows software helpmemberghost80727-Apr-05 16:15 
so here's the deal i have a single line beta brite sign.
i really love it, and i want to do more with the sign(i'm currently developing an application for my store, we rent dvd, vhs, games, and also do instore gaming) from my application,
but......
i bought the sign from sam's club and to my surpise it came without software. all attempts to d/l anything from the web site only gets me demos.
does anyone have a copy of the disk that they would be willing to send to me?
this is completely legit.
 
thanx for your help.
Dave Jr.
GeneralNot disposing bitmaps properlymemberPete Everett15-Apr-05 4:02 
First off, I'd like to say that you've done a tremendous job with this code. It works really well, and I've used it to great effect with my BetaBrite sign.
 
I do have a problem with your bitmap handling, though, specifically in the WritePictureFileCommand class. You never call Dispose() on the Bitmap object that you create. I wrote a web interface which allows people to draw on my sign, and I have to take their drawing, save it to a file, then feed the file to your code. I'd like to be able to delete the file afterward, but I can't because your internal Bitmap object is still using it. I think a more flexible design might be for your class to take a Bitmap object instead of a file path. That way, people could be responsible for their own resource cleanup, and I'd be able to create an in-memory Bitmap object and feed it to your sign without the in-between step of having to save it to a file.
 
Anyway, apart from that, it's great work. Nicely done.
GeneralRe: Not disposing bitmaps properlymemberwumpus115-Apr-05 11:04 
Well, it's not wrong per se-- the web context just holds on to the reference a lot longer than a console or winforms app would. You need the resource released faster in a web environment. Which is no problem! Just modify the Sign.SetPicture method as follows:
  Dim pc As New WritePictureFileCommand(fileLabel, filename)
  SendCommand(pc)
  pc = Nothing
that pc = Nothing line should release the bitmap object immediately after it is sent.
 
I agree we should add an overloaded method which accepts a Bitmap object, in addition to the filename, so you can avoid the filesystem step entirely. I'll do that.
 
I'm interested to see your web interface, too!
GeneralRe: Not disposing bitmaps properlymemberPete Everett18-Apr-05 6:20 

I don't want to quibble over semantics here (actually, I just like using the word "quibble"), but because of the way .NET does garbage collection, setting the reference to Nothing doesn't actually free the resources until the garbage collector comes through to clean up, which could potentially be a long time. That's why we have the IDisposable interface. Just setting the reference to Nothing isn't enough. As an example:
 

    Dim b As Bitmap = New Bitmap("c:\test.png")
    b = Nothing
    System.IO.File.Delete("c:\test.png")
throws an exception (IOException) because the Bitmap object still holds the file open and will continue to until the next GC. To clean up straightaway, you need to call Dispose().
 
    Dim b As Bitmap = New Bitmap("c:\test.png")
    b.Dispose()
    System.IO.File.Delete("c:\test.png")
And that works just fine. When you write classes that contain IDisposable objects, it's considered good form to make sure that you class either disposes of those objects when it's done with them, or make your class implement IDisposable as well, and make its Dispose method call Dispose on all disposable objects that it contains.
 
P.S. If you're interested, my sketchy web interface is an ActiveX control, available to play with at http://pirate.princeton.edu/DrawOnSign.html[^]
 
You can view the results on a web cam if you follow the link on the page.
GeneralRe: Not disposing bitmaps properlymemberwumpus118-Apr-05 7:49 
Pete Everett wrote:
When you write classes that contain IDisposable objects, it's considered good form to make sure that you class either disposes of those objects when it's done with them, or make your class implement IDisposable as well, and make its Dispose method call Dispose on all disposable objects that it contains.
 
Well, this is an optimization, not a requirement. The bitmap will always get released, but you want it released RIGHT THIS VERY SECOND because you're creating a file and then immediately deleting it.
 
At any rate, I agree, the bitmap should be explicitly passed in to the class to provide finer control-- and to let you use bitmap objects in memory rather than disk, which is important for web apps. That's the best solution.
 
I made this change on Friday, and now I regret not uploading the new version immediately-- my article got promoted this weekend to a "real" article which means I have to wait for article/code changes to wind their way through the formal update process. Frown | :(
GeneralRe: Not disposing bitmaps properlymemberwumpus118-Apr-05 8:00 
It's really, REALLY ghetto-- but until I get the proper version of the code to you that lets you pass the bitmap as a param, this will work in the meantime:
        Dim b As Bitmap = New Bitmap("c:\kitty.gif")
        b = Nothing
        System.GC.Collect()
        System.IO.File.Delete("c:\kitty.gif")

GeneralRe: Not disposing bitmaps properlymemberJoeSmug19-Mar-07 14:33 
This is not good programming. You should never explicitly call GC.Collect. In reference to the Dispose method, you should always call Dispose on an object that implements IDisposable. To better realize this you need to understand how garbage collection works. If you do not call Dispose, the object will live until its Finalize method is called. This is not guaranteed to be called on the next generation collection so therefore the object could be promoted to the next generation. You could wind up with an object living into the next two or more generations which is bad. Always, always, always call Dispose.
GeneralRe: Not disposing bitmaps properlymemberwumpus125-Apr-05 12:33 
Pete-- I emailed you directly, but I'm not sure if you got it or not (at the whiteboyfunk domain?). At any rate, the article has been updated and the code sample now provides a way to directly pass a Bitmap object in to the picture methods!
GeneralWay cooladminChris Maunder11-Apr-05 0:30 
Anyone got a spare one of these things lying around? Big Grin | :-D
 
cheers,
Chris Maunder
GeneralRe: Way coolmemberwumpus111-Apr-05 16:46 
Doubtful Big Grin | :-D but one of my blog readers posted that he picked up a BetaBrite on eBay for ~$100, which is a great deal. And once you get the PC cable hooked up and communicating using the API, you really don't need the IR remote, either..

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130617.1 | Last Updated 25 Apr 2005
Article Copyright 2005 by wumpus1
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid