[http://graphics.x10.com/images6/mr26a_parts_350x263_72.jpg][http://www.x10.com/products/x10_mr26a.htm] ---- Wireless (RF) sensors that attaches to a PC through a serial port. The unit decodes the RF signals and X10 provides software that will control X-10 devices, MP3 players, etc. X10 also makes some combination RF/IR remotes that can sent more than just the typical light commands to the mr26a (example UR47a, UR81a, ...). These map each button of the remote to a signal that is decoded by the mr26a. Below is a little application that read the mr26a and displays the button pressed on the RF remote. (This code is based off the ...example) ---- # Please send any comments/bug reports to # Michael Jacobson (mpjacobson2000@yahoo.com) # tested with Tcl/Tk 8.4b3 ### Constants set baudrate 9600 set parity n set databits 8 set stopbits 1 set comport com2: ### Button Mapping set dlable {POWER PC TITLE SUBTITLE DISPLAY RETURN MENU EXIT LEFT UP \ RIGHT DOWN OK PLAY STOP SKIPPREV SKIPNEXT REWIND FORWARD \ PAUSE RECORD RECALL ONE TWO THREE FOUR FIVE SIX SEVEN \ EIGHT NINE ZERO ABSWITCH ENTER CHANNELUP CHANNELDOWN VOLUMEUP \ VOLUMEDOWN MUTE LIGHT1ON LIGHT2ON LIGHT3ON LIGHT4ON LIGHT5ON \ LIGHT6ON LIGHT7ON LIGHT8ON LIGHT1OFF LIGHT2OFF LIGHT3OFF LIGHT4OFF \ LIGHT5OFF LIGHT6OFF LIGHT7OFF LIGHT8OFF ALLLIGHTSON ALLLIGHTSOFF} set dcode {EEF0 EED4 EED6 EED4 EE3A EED8 EEB6 EEC9 EED2 EED5 \ EED1 EED3 EE52 EEB0 EE70 EE00 EE00 EE38 EEB8 EE72 \ EEFF EEF2 EE82 EE42 EEC2 EE22 EEA2 EE62 EEE2 EE12 \ EE92 EE02 EEBA EE52 EE40 EEC0 EE60 EEE0 EEA0 6000 \ 6010 6008 6018 6040 6050 6048 6058 6020 6030 6028 \ 6038 6060 6070 6068 6078 6090 6080} ### G U I text .t1 -width 85 -font {courier 8 } -tabs {3c 6c 9c 13c left} pack .t1 -side top -anchor nw button .b1 -text Exit -command exit pack .b1 -side bottom -anchor nw -fill x -expand true wm title . "X-10 RF Signal to Tivo Convertor ($comport)" ### M A I N .t1 tag configure underline -underline true .t1 tag configure bold -font {courier 10 bold} .t1 tag configure finsih -font {courier 6} .t1 insert end "\tRead $comport $baudrate, Parity=$parity,\ Databits=$databits, Stopbits=$stopbits\n\n" {underline bold} ### Procedures set olddata "" proc rd_chid {chid} { global olddata oldtime set newtime [clock clicks -milliseconds] set msg [read $chid] .t1 insert @0,0 . if {[string equal $msg $olddata]} { if {[expr $newtime - $oldtime] < 200} { set oldtime $newtime return } } set oldtime $newtime set olddata $msg set listOfLetters [split $msg {} ] set serialIPinHex "" foreach iChar $listOfLetters { scan $iChar "%c" decimalValue set serialIPinHex "$serialIPinHex [format "%02X" $decimalValue ]" } set result_updaterf [rfdecode [lindex $serialIPinHex 2][lindex $serialIPinHex 3]] .t1 insert @0,0 "remote code:\"$result_updaterf\"\n" } proc rfdecode {data} { global dlable dcode set fnd [lsearch $dcode $data] puts "rf: $fnd $data" if {$fnd == -1} { set output "Code not found : $data" } else { set output [lindex $dlable $fnd] } return $output } proc open_com {} { global com comport baudrate parity databits stopbits set com [open $comport r+] fconfigure $com -mode $baudrate,$parity,$databits,$stopbits\ -blocking 0 -translation binary -buffering none fileevent $com readable [list rd_chid $com] } proc Exit {} { global com close $com exit } wm protocol . WM_DELETE_WINDOW {Exit} open_com