js-
I've got some basics here...
38 KHz carrier frequency
9 ms (about) preamble at start of packet
Packet bytes are transmitted LSB first
Zero off time about 500 uS
One off time about 1600 uS
Basically the 1's and 0's are actually indicated by the time the carrier is off. The carrier is turned on for (I'm speaking from memory here) about 600 uS between each bit. So it's on for 600 uS, then it's off for either 500 or 1600 uS depending on a 1 or a 0, then it's back on for 600 uS again.
All remote controls do work a bit different. 38 kHz is the most common carrier frequency, but it seems almost every brand of TV and VCR ever made used slightly different coding for the actual protocol. If you're interested in trying to hack the code to work with other remote controls, or to make Wink randomly change your TV channel, a fellow named Ken Shirriff wrote a really nice library for controlling all kinds of things. It is rather large from what I remember but it does the trick. I haven't used it myself, but Dustin who wrote most of the Ringo code did play with it some.
Link:
https://github.com/z3t0/Arduino-IRremote If you want a real challenge... you can code up the "heckler" bug. Dustin did this at one point with some success. Not sure if he ever published the code or not, but here's the general idea....
Let Wink observe IR communications for a while. If they match a certain length (they're not just random blips from flashes of light), he can then remember them. I think Dustin used a set of arrays that just marked raw timing - when the carrier came on and when it turned off. You can use the micros() function to get this timing with fairly tight resolution.
After a while, after enough sequences have been seen and memorized, the robot then somewhat randomly re-broadcasts the same sequences in random orders with his IR sender.
The idea is that after you visit a friend and show off the robot, you put it on the coffee table with the power still on and let him do his thing. After a bit of channel surfing the friend is confused that his TV begins to randomly show menus, change channels, change volume, etc.
In theory this should automatically work with any remote control because it doesn't need to know the protocol at all, because it's just measuring the raw timing between blips from the remote and re-creating the same sequences.
This level of coding is above my ability and free time, but I'd share it with the world and give props to the writer if it ever comes about.
Hope that helps!
-Kevin