ATI Remote Wonder support

Forum about Domotiga Open Source Home Automation for Linux.

Moderator: RDNZL

Post Reply
SRG
Starting Member
Starting Member
Posts: 16
Joined: Fri Feb 12, 2010 9:36 pm
Location: MONTBELIARD
Contact:

ATI Remote Wonder support

Post by SRG »

Hello,

First step for the ATI Remote Wonder support (this remote is compatible with RFXCOM).
There are 3 ATI Remote :
- ATI Remote Wonder
- ATI Remote Wonder+
- ATI Remote Wonder II

I don't know if the code keys for the three are the same or not : everything below works for the first ATI Remote Wonder.

In CRFXComRX.class, decomment the ProcessAti function.

Code: Select all

    ELSE IF Protocol = MODEVAR AND RecBits = 20 THEN
      ProcessAti()
    ELSE IF Protocol = MODEVAR AND RecBits = 21 THEN
And add the code below to decode every key available on the remote (still in CRFXComRX.class) (right now this code only interprets the received keys and does nothing more ...) :

Code: Select all

PRIVATE FUNCTION DebugAtiCommand(Command AS String)
  Main.WriteLog(("ATI Input Received : " & Command))
END

PRIVATE FUNCTION ProcessAti() AS Boolean

  ' Example String received
  ' 14D20DF0 => 1
  ' 14D30EF0 => 2
  ' 14D40FF0 => 3
  ' ...
  ' 14DA15F0 => 9
  DIM bAti AS Boolean = FALSE
  DIM iDeviceId AS Integer  
  DIM A, B AS Byte

  A = RecBuf[0]
  B = RecBuf[1]
  
  IF A = &H35 AND B = &H70 THEN
    DebugAtiCommand("CURSOR_LEFT")
  ELSE IF A = &H36 AND B = &H71 THEN
    DebugAtiCommand("CURSOR_RIGHT")
  ELSE IF A = &H37 AND B = &H72 THEN
    DebugAtiCommand("CURSOR_UP")
  ELSE IF A = &H38 AND B = &H73 THEN
    DebugAtiCommand("CURSOR_DOWN")
  ELSE IF A = &H39 AND B = &H74 THEN
    DebugAtiCommand("CURSOR_LEFT_UP")
  ELSE IF A = &H3A AND B = &H75 THEN
    DebugAtiCommand("CURSOR_RIGHT_UP")
  ELSE IF A = &H3C AND B = &H77 THEN
    DebugAtiCommand("CURSOR_LEFT_DOWN")
  ELSE IF A = &H3B AND B = &H76 THEN 
    DebugAtiCommand("CURSOR_RIGHT_DOWN")
  ELSE IF A = &H3D AND B = &H78 THEN
    DebugAtiCommand("MOUSE_LEFT_BTN_DOWN")
  ELSE IF A = &H3E AND B = &H79 THEN
    DebugAtiCommand("MOUSE_LEFT_BTN_UP")
  ELSE IF A = &H41 AND B = &H7C THEN
    DebugAtiCommand("MOUSE_RIGHT_BTN_DOWN")
  ELSE IF A = &H42 AND B = &H7D THEN
    DebugAtiCommand("MOUSE_RIGHT_BTN_UP")
  ELSE IF A = &H3F AND B = &H7A THEN
    DebugAtiCommand("MOUSE_LEFT_DBLCLICK")
  ELSE IF A = &H43 AND B = &H7E THEN
    DebugAtiCommand("MOUSE_RIGHT_DBLCLICK")
  ELSE IF A = &HD2 AND B = &H0D THEN
    DebugAtiCommand("KEY_1")
  ELSE IF A = &HD3 AND B = &H0E THEN
    DebugAtiCommand("KEY_2")
  ELSE IF A = &HD4 AND B = &H0F THEN
    DebugAtiCommand("KEY_3")
  ELSE IF A = &HD5 AND B = &H10 THEN
    DebugAtiCommand("KEY_4")
  ELSE IF A = &HD6 AND B = &H11 THEN
    DebugAtiCommand("KEY_5")
  ELSE IF A = &HD7 AND B = &H12 THEN
    DebugAtiCommand("KEY_6")
  ELSE IF A = &HD8 AND B = &H13 THEN
    DebugAtiCommand("KEY_7")
  ELSE IF A = &HD9 AND B = &H14 THEN
    DebugAtiCommand("KEY_8")
  ELSE IF A = &HDA AND B = &H15 THEN
    DebugAtiCommand("KEY_9")
  ELSE IF A = &HDC AND B = &H17 THEN
    DebugAtiCommand("KEY_0")
  ELSE IF A = &HC5 AND B = &H00 THEN
    DebugAtiCommand("KEY_A")
  ELSE IF A = &HC6 AND B = &H01 THEN
    DebugAtiCommand("KEY_B")
  ELSE IF A = &HDE AND B = &H19 THEN
    DebugAtiCommand("KEY_C")
  ELSE IF A = &HE0 AND B = &H1B THEN
    DebugAtiCommand("KEY_D")
  ELSE IF A = &HE6 AND B = &H21 THEN
    DebugAtiCommand("KEY_E")
  ELSE IF A = &HE8 AND B = &H23 THEN
    DebugAtiCommand("KEY_F")
  ELSE IF A = &HDD AND B = &H18 THEN 
    DebugAtiCommand("SPECIAL_KEY_CHECK")
  ELSE IF A = &HDB AND B = &H16 THEN 
    DebugAtiCommand("SPECIAL_KEY_MENU")
  ELSE IF A = &HC7 AND B = &H02 THEN 
    DebugAtiCommand("SPECIAL_KEY_POWER")
  ELSE IF A = &HC8 AND B = &H03 THEN 
    DebugAtiCommand("SPECIAL_KEY_TV")
  ELSE IF A = &HC9 AND B = &H04 THEN 
    DebugAtiCommand("SPECIAL_KEY_DVD")
  ELSE IF A = &HCA AND B = &H05 THEN 
    DebugAtiCommand("SPECIAL_KEY_WEB")
  ELSE IF A = &HCB AND B = &H06 THEN 
    DebugAtiCommand("SPECIAL_KEY_BOOK")
  ELSE IF A = &HCC AND B = &H07 THEN 
    DebugAtiCommand("SPECIAL_KEY_HAND")
  ELSE IF A = &HE1 AND B = &H1C THEN 
    DebugAtiCommand("SPECIAL_KEY_TIMER")
  ELSE IF A = &HE5 AND B = &H20 THEN 
    DebugAtiCommand("SPECIAL_KEY_MAX")
  ELSE IF A = &HE2 AND B = &H1D THEN 
    DebugAtiCommand("SPECIAL_KEY_LEFT")
  ELSE IF A = &HE4 AND B = &H1F THEN 
    DebugAtiCommand("SPECIAL_KEY_RIGHT")
  ELSE IF A = &HE7 AND B = &H22 THEN 
    DebugAtiCommand("SPECIAL_KEY_DOWN")
  ELSE IF A = &HDF AND B = &H1A THEN 
    DebugAtiCommand("SPECIAL_KEY_UP")
  ELSE IF A = &HE3 AND B = &H1E THEN 
    DebugAtiCommand("SPECIAL_KEY_OK")
  ELSE IF A = &HCE AND B = &H09 THEN 
    DebugAtiCommand("SPECIAL_KEY_VOL_DOWN")
  ELSE IF A = &HCD AND B = &H08 THEN 
    DebugAtiCommand("SPECIAL_KEY_VOL_UP")
  ELSE IF A = &HCF AND B = &H0A THEN 
    DebugAtiCommand("SPECIAL_KEY_MUTE")
  ELSE IF A = &HD0 AND B = &H0B THEN 
    DebugAtiCommand("SPECIAL_KEY_CH_UP")
  ELSE IF A = &HD1 AND B = &H0C THEN 
    DebugAtiCommand("SPECIAL_KEY_CH_DOWN")
  ELSE IF A = &HEC AND B = &H27 THEN '( O) RED
    DebugAtiCommand("SPECIAL_KEY_REC")
  ELSE IF A = &HEA AND B = &H25 THEN 
    DebugAtiCommand("SPECIAL_KEY_PLAYING")
  ELSE IF A = &HE9 AND B = &H24 THEN 
    DebugAtiCommand("SPECIAL_KEY_FAST_REWIND")
  ELSE IF A = &HEB AND B = &H26 THEN 
    DebugAtiCommand("SPECIAL_KEY_FAST_FORWARD")
  ELSE IF A = &HED AND B = &H28 THEN 
    DebugAtiCommand("SPECIAL_KEY_STOP")
  ELSE IF A = &HEE AND B = &H29 THEN 
    DebugAtiCommand("SPECIAL_KEY_PAUSE")
  ELSE IF A = &HF0 AND B = &H2B THEN 
    DebugAtiCommand("SPECIAL_KEY_PREVIOUS")
  ELSE IF A = &HEF AND B = &H2A THEN 
    DebugAtiCommand("SPECIAL_KEY_NEXT")
  ELSE IF A = &HF2 AND B = &H2D THEN 
    DebugAtiCommand("SPECIAL_KEY_PLAYING")
  ELSE IF A = &HF3 AND B = &H2E THEN 
    DebugAtiCommand("SPECIAL_KEY_TOP")
  ELSE IF A = &HF4 AND B = &H2F THEN 
    DebugAtiCommand("SPECIAL_KEY_END")
  ELSE IF A = &HF5 AND B = &H30 THEN 
    DebugAtiCommand("SPECIAL_KEY_SELECT")
  ELSE IF A = &H00 AND B = &H00 THEN
    DebugAtiCommand("NULL")
  END IF

  ' iDeviceId = Devices.Find("ATI[" & (????????????????, Devices.FindInterface("RFXCom Receiver"), "ATI Remote Wonder")
  ' Devices.ValueUpdate(iDeviceId, Str(KEY), "", "", "")

  RETURN bAti

END
I don't know exactly how to go any further ... does i have to store the received value in the DB with "Devices.ValueUpdate" ?
The idea is of course in the end to declare event on the received keys.

Key explanation :
Image
User avatar
RDNZL
Forum Moderator
Forum Moderator
Posts: 1008
Joined: Sun Sep 24, 2006 1:45 pm
Location: Dordrecht, The Netherlands
Contact:

Re: ATI Remote Wonder support

Post by RDNZL »

Nice work!

I will add support for them very soon. I have some code for ATI and ATI+ here, until we have a more generic solution for all remotes (ati, lirc etc) I guess it's best to create a device, and set the value as you wrote.
I'm not sure how we can fire events if you have a repeating command (eg vol up), will have to check that.
Regards, Ron.
SRG
Starting Member
Starting Member
Posts: 16
Joined: Fri Feb 12, 2010 9:36 pm
Location: MONTBELIARD
Contact:

Re: ATI Remote Wonder support

Post by SRG »

I think that everything is OK with the .182 version from SVN about the ATI Remote Wonder, nice job.

The only key that may not be ok is the "web" key (middle on the second row starting from the top on the screen below).
In the log i get once pressed :
2010/02/15 23:44:05 14CA05F0 ATI[15]C Remote type=ATI Remote Wonder Channel=15 Command=? bits=20
(it's just the name of the key that should be renamed in the code from sCommand = "?" to "Web")

Whereas other ones are ok :
2010/02/15 23:44:02 14ED28F0 ATI[15]C Remote type=ATI Remote Wonder Channel=15 Command=Stop bits=20
User avatar
RDNZL
Forum Moderator
Forum Moderator
Posts: 1008
Joined: Sun Sep 24, 2006 1:45 pm
Location: Dordrecht, The Netherlands
Contact:

Re: ATI Remote Wonder support

Post by RDNZL »

I renamed it to Web in the latest revision, thanks for testing.
Regards, Ron.
Post Reply

Return to “DomotiGa Forum”