B4A Library Carrier Air Conditioner Remote Control

I have 3 x Carrier Air Conditioners in my house. The attached project and library files control all 3 my aircons. Some work to be done as the signal sent from the remote to the aircon includes the last setting of for eg the fan speed, is it swinging or not, the mode, etc, etc.

I have wrapped this Github project to pass the required codes from my S4 mini (KitKat with an IR blaster) to the aircons as cycle times of the IR signal.

Have done nothing fancy to this project - just wanted to see if I can control the air cons. Attached the following:
1. B4A sample project
2. The Java code - the cycle times are hard coded in the wrapper
3. The B4A library files - copy them to your additional library folder
4. Other library files that you will require - copy them to your additional library folder

Take note of the B4A manifest file.

It is working by replacing my Carrier Remote Type RG14A2/EF with the app on the S4 mini.

Change the Wrapper to your liking to suite your air conditioner - find the right cycle time codes and then replace it within the wrapper and recompile the library (compiling it can be very easily done with Simple Library Compiler)

I have downloaded this app to get some of the cycle time codes that I needed to control my air cons.

Sample Code:

B4X:
#Region  Project Attributes
    #ApplicationLabel: b4aACcontrol
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: portrait
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
 
 
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim carrier As ACcontrol


    Private Button1 As Button
 
    Dim ac As Int = 0
    Private Button2 As Button
    Private Button3 As Button
    Private Button4 As Button
    Private Button5 As Button
    Private Button6 As Button
    Private Button7 As Button
    Private Button8 As Button
    Private Button9 As Button
    Private Button10 As Button
    Private Button11 As Button
    Private Button12 As Button
    Private Button13 As Button
    Private Button14 As Button
    Private Button15 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")
 
    carrier.Initialize("")

End Sub

Sub Activity_Resume
 
    carrier.StartInfraRed

End Sub

Sub Activity_Pause (UserClosed As Boolean)
 
    carrier.StopInfraRed

End Sub


Sub Button1_Click
 
    If ac = 0 Then
        Button1.Text = "Aircon On"
        carrier.PowerOn
        ac = 1
    Else
        Button1.Text = "Aircon Off"
        carrier.PowerOff
        ac = 0 
    End If
 
End Sub

Sub Button2_Click
 
    carrier.Temp1
 
End Sub



Sub Button3_Click
 
    carrier.Temp2
 
End Sub

Sub Button4_Click
 
    carrier.Temp3
 
End Sub

Sub Button5_Click
 
    carrier.FanSpeedHigh
 
End Sub

Sub Button6_Click
 
    carrier.FanSpeedMedium
 
End Sub

Sub Button7_Click
 
    carrier.FanSpeedLow
 
End Sub

Sub Button8_Click
 
    carrier.FanSpeedAuto
 
End Sub

Sub Button9_Click
 
    carrier.CoolMode
 
End Sub

Sub Button10_Click
 
    carrier.DryMode
 
End Sub

Sub Button11_Click
 
    carrier.HeatMode
 
End Sub

Sub Button12_Click
 
    carrier.AutoMode
 
End Sub

Sub Button13_Click
 
    carrier.FanMode
 
End Sub

Sub Button14_Click
 
    carrier.Swing1
 
End Sub

Sub Button15_Click
 
    carrier.Swing2
 
End Sub

1.png



Library as it is at present:
ACcontrol
Version:
1
  • ACcontrol
    Methods:
    • AutoMode
    • CoolMode
    • DryMode
    • FanMode
    • FanSpeedAuto
    • FanSpeedHigh
    • FanSpeedLow
    • FanSpeedMedium
    • HeatMode
    • Initialize (paramString As String)
    • PowerOff
    • PowerOn
    • StartInfraRed
    • StopInfraRed
    • Swing1
    • Swing2
    • Temp1
    • Temp2
    • Temp3
    Permissions:
    • android.permission.TRANSMIT_IR
 

Attachments

  • b4aAControl.zip
    8.5 KB · Views: 331
  • ACcontrolLibFiles.zip
    34.4 KB · Views: 349
  • TheJavaCode.zip
    185.1 KB · Views: 338
  • OtherLibFiles.zip
    162.8 KB · Views: 328
Last edited:

Johan Schoeman

Expert
Licensed User
Longtime User
Here comes the Wrapping Wizard!!
It was a week long search to find the cycle timing codes...But got it working! Now I should be able to control my DSTV and Aircons from the same app. Next I want to add the TV
 

Johan Schoeman

Expert
Licensed User
Longtime User
Here is an update. I have stripped the commands out of the wrapper and they can now be passed via B4A code to the wrapper. You will still need the Jar's in OtherLibFiles.zip to be in your additional library folder. Posting updated B4A library files (V1.01) and updated B4A project.

Note the B4A manifest file and the frequency set in the B4A code:

Dim frequency As Int = 38000

My Carrier air conditioner commands all run at 38kHz - that is what they require.

Sample code:

B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim carrier As ACcontrol
   
    Dim ac As Int = 0
   
    Private Button1 As Button
    Private Button2 As Button
    Private Button3 As Button
    Private Button4 As Button
    Private Button5 As Button
    Private Button6 As Button
    Private Button7 As Button
    Private Button8 As Button
    Private Button9 As Button
    Private Button10 As Button
    Private Button11 As Button
    Private Button12 As Button
    Private Button13 As Button
    Private Button14 As Button
    Private Button15 As Button
    Dim frequency As Int = 38000
   
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")
   
    carrier.Initialize("")

End Sub

Sub Activity_Resume
   
    carrier.StartInfraRed

End Sub

Sub Activity_Pause (UserClosed As Boolean)
   
    carrier.StopInfraRed

End Sub


Sub Button1_Click
   
    If ac = 0 Then
        Button1.Text = "Aircon On"
       
        Dim command() As Int = Array As Int(173,161,26,55,26,15,25,55,26,54,26,15,26,15,25,54,27,15,25,15,25,55,26,15,25,15,26,54,26,55,26,15,25,54,27,54,27,14,26,54,26,55,26,54,27,54,26,54,27,54,26,15,26,54,26,15,26,14,26,15,25,15,26,15,26,15,25,15,26,54,26,15,25,15,26,15,25,15,26,14,26,15,26,53,27,15,25,54,27,54,26,55,26,54,27,54,26,54,27,207,173,161,26,54,27,14,26,54,27,54,26,15,25,15,26,54,26,15,26,15,25,55,26,15,25,15,26,54,26,54,27,14,26,54,27,54,26,15,25,55,26,54,27,54,26,54,27,54,26,55,26,15,25,55,26,15,25,15,26,15,25,15,25,15,26,15,25,15,26,54,26,13,27,13,26,15,25,15,26,15,25,13,27,54,26,15,26,54,26,54,27,54,26,54,27,54,26,54,27,2500)
        carrier.PowerOn(frequency,command)
        ac = 1
    Else
        Button1.Text = "Aircon Off"
        Dim command() As Int = Array As Int(173,160,27,54,26,15,26,54,26,54,27,14,26,15,26,53,27,15,25,15,26,54,26,15,26,15,25,54,27,54,26,15,26,54,26,15,26,54,26,54,27,54,26,54,27,15,25,55,26,54,26,54,27,15,26,14,26,15,25,15,25,54,27,15,25,15,26,54,26,55,26,54,27,14,26,15,25,13,26,15,26,15,25,15,26,15,25,15,25,55,26,54,27,54,26,54,27,54,27,206,174,160,27,54,26,15,26,54,26,54,27,15,25,15,25,55,26,15,26,15,25,54,27,14,26,15,25,54,27,54,26,15,26,54,26,15,26,55,26,54,27,53,27,54,27,14,26,54,26,55,26,54,27,15,25,15,25,15,26,15,25,54,27,14,26,15,26,54,26,54,27,54,26,15,26,15,25,15,25,15,26,15,25,15,26,14,26,13,26,54,27,54,26,55,26,54,26,55,26,2500)
        carrier.PowerOff(frequency,command)
        ac = 0   
    End If
   
End Sub

Sub Button2_Click
   
    Dim command() As Int  = Array As Int(175,160,27,54,27,14,26,54,26,55,26,15,25,15,26,54,26,15,26,15,25,54,27,15,25,15,26,53,27,54,27,14,26,54,27,54,26,15,26,53,27,54,27,54,26,54,27,54,26,55,26,15,25,55,26,15,25,15,26,14,26,15,26,14,26,15,25,15,26,54,26,54,27,15,25,15,26,14,26,15,25,15,26,54,26,15,26,14,26,54,27,54,26,54,27,54,26,55,26,207,175,160,26,54,27,15,25,54,27,54,27,14,26,15,25,54,27,15,25,15,26,54,26,15,25,15,26,54,26,55,26,15,25,54,27,54,27,14,26,54,26,55,26,54,27,54,26,54,27,54,27,14,26,54,27,14,26,15,25,15,25,15,26,15,25,15,26,15,25,54,27,54,26,15,26,14,26,15,26,14,26,15,25,54,27,15,25,15,26,54,27,54,26,54,27,54,27,54,26,2500)
    carrier.Temp1(frequency, command)
   
End Sub



Sub Button3_Click
   
    Dim command() As Int  = Array As Int(175,160,27,54,26,15,26,54,26,54,27,15,25,15,26,53,27,15,26,14,26,54,26,15,26,15,25,54,27,54,26,15,26,54,27,53,27,15,26,54,27,54,26,54,27,54,26,54,27,54,27,14,26,54,27,14,26,14,26,15,25,15,26,15,25,15,26,54,26,54,27,15,25,15,26,14,26,15,25,15,26,14,26,15,26,14,26,54,26,54,27,54,26,55,26,54,27,54,26,207,174,160,27,54,26,15,26,53,27,54,27,14,26,15,25,54,27,15,25,15,26,54,26,15,26,15,25,54,27,54,26,15,26,54,26,54,27,15,25,54,27,54,26,55,26,54,27,53,27,54,27,15,25,54,27,14,26,15,25,15,26,15,25,15,25,16,25,54,27,53,27,15,25,15,26,15,25,15,25,15,26,15,25,15,26,15,25,54,27,54,26,54,27,54,26,54,27,54,26,2500)
    carrier.Temp2(frequency, command)
   
End Sub

Sub Button4_Click
   
    Dim command() As Int  = Array As Int(174,160,26,54,27,15,25,54,27,54,26,15,26,14,26,54,27,14,26,15,25,54,27,15,25,15,26,54,26,54,27,15,25,54,27,54,26,15,26,54,26,54,27,54,26,54,27,54,26,55,26,15,26,53,27,15,26,14,26,15,25,15,25,15,26,15,25,54,27,15,25,15,26,13,26,15,25,15,26,14,26,15,26,14,26,54,26,55,26,54,27,54,26,54,27,54,26,54,27,207,175,160,26,54,27,15,25,54,27,54,26,15,26,15,25,54,27,15,25,15,26,54,26,15,25,15,26,54,26,54,27,15,25,54,27,54,26,15,26,54,26,55,26,54,27,54,27,54,26,54,27,15,25,54,27,15,25,15,26,15,25,15,25,15,26,15,25,54,27,14,26,15,26,14,26,15,25,15,25,15,26,15,25,15,26,54,26,54,27,54,27,53,27,54,26,55,26,54,27,2500)
    carrier.Temp3(frequency, command)
   
End Sub

Sub Button5_Click
   
    Dim command() As Int  = Array As Int(174,160,27,54,26,15,26,53,27,54,26,15,26,15,25,54,27,15,25,15,26,54,26,15,26,14,26,54,27,54,26,15,25,55,26,15,26,14,26,54,26,55,26,54,27,54,26,54,27,54,26,54,27,54,26,15,26,15,25,15,26,15,25,15,25,15,26,15,25,55,26,15,26,15,25,15,25,15,26,15,25,15,26,54,26,15,26,54,26,54,27,54,26,54,27,54,26,54,27,207,173,161,26,54,27,15,25,55,26,54,26,15,26,15,25,54,27,15,25,15,26,54,26,15,25,15,26,54,26,54,27,15,25,55,26,15,26,14,26,54,26,54,27,54,26,54,27,54,27,54,26,54,27,54,26,15,26,14,26,15,26,14,26,15,25,15,26,15,25,54,27,14,26,15,25,15,26,15,25,15,25,15,26,54,27,14,26,54,26,54,27,54,26,55,26,54,27,54,26,2500)
    carrier.FanSpeedHigh(frequency, command)
   
End Sub

Sub Button6_Click
   
    Dim command() As Int  = Array As Int(174,160,26,55,26,15,25,55,26,54,27,14,26,15,25,54,27,15,25,15,26,54,26,15,25,15,26,54,26,55,26,16,25,54,27,14,26,54,27,14,26,54,26,55,26,54,27,54,26,55,26,54,27,14,26,54,27,14,26,15,25,15,25,15,26,15,25,15,26,54,26,15,26,15,25,15,25,15,26,14,26,15,26,54,26,15,25,55,26,54,27,54,26,54,27,54,26,54,27,207,173,161,26,54,27,15,25,54,27,54,26,15,25,15,26,54,26,16,25,15,25,55,26,15,25,15,26,54,26,54,27,15,25,54,27,15,25,54,27,15,25,54,27,54,26,54,27,54,26,54,27,54,27,14,26,54,26,15,26,15,25,15,26,15,25,15,26,14,26,54,26,15,26,15,25,15,25,15,26,15,25,15,26,54,26,15,26,54,26,54,27,54,26,54,27,54,26,55,26,2500)
    carrier.FanSpeedMedium(frequency, command)
   
End Sub

Sub Button7_Click
   
    Dim command() As Int  = Array As Int(173,161,26,54,27,15,25,54,27,54,26,15,26,14,26,54,26,16,25,15,25,55,26,15,25,15,26,54,26,54,27,15,25,54,27,54,26,15,26,15,25,54,27,54,26,54,27,54,26,55,26,15,25,54,27,54,26,15,26,15,25,15,26,15,25,15,25,15,26,54,26,15,26,15,25,15,25,15,26,15,25,15,26,54,26,15,26,54,26,54,27,54,26,54,27,54,26,55,26,207,173,161,27,53,27,15,25,55,26,54,26,15,26,15,25,54,27,15,25,15,26,54,26,15,25,15,26,54,26,55,26,15,25,55,26,54,27,14,26,15,25,54,27,54,26,54,27,54,26,55,26,15,26,54,26,54,27,14,26,15,25,15,26,15,25,15,25,16,25,54,26,15,26,15,25,15,26,15,25,15,25,15,26,54,26,15,26,54,26,54,27,54,26,54,27,54,26,55,26,2500)
    carrier.FanSpeedLow(frequency, command)
   
End Sub

Sub Button8_Click
   
    Dim command() As Int  = Array As Int(174,160,27,54,26,15,26,54,26,54,27,14,26,15,25,54,27,15,25,15,26,54,26,15,26,15,25,54,27,53,27,15,26,54,26,54,27,15,25,54,27,54,26,54,27,54,26,54,27,54,27,14,26,54,26,15,26,15,25,15,25,15,26,15,25,15,26,15,25,54,27,13,26,15,25,15,26,15,25,15,26,15,25,54,26,15,26,54,26,55,26,54,27,53,27,54,27,54,26,207,174,160,27,54,26,15,26,54,26,54,27,15,25,15,25,55,26,15,26,15,25,54,27,14,26,15,25,54,27,54,26,15,26,54,26,55,26,15,25,54,27,54,26,54,27,54,26,55,26,54,27,15,25,54,27,15,25,15,25,15,26,14,26,15,26,14,26,15,25,54,27,15,25,15,25,15,26,15,25,15,26,15,25,54,27,15,25,54,27,54,26,54,27,54,26,54,27,54,27,2500)
    carrier.FanSpeedAuto(frequency, command)
   
End Sub

Sub Button9_Click
   
    Dim command() As Int  = Array As Int(173,161,26,55,26,15,25,55,26,54,26,15,26,15,25,54,27,15,25,15,25,55,26,15,25,15,26,54,26,55,26,15,25,54,27,54,27,14,26,54,26,55,26,54,27,54,26,54,27,54,26,15,26,54,26,15,26,14,26,15,25,15,26,15,26,15,25,15,26,54,26,15,25,15,26,15,25,15,26,14,26,15,26,53,27,15,25,54,27,54,26,55,26,54,27,54,26,54,27,207,173,161,26,54,27,14,26,54,27,54,26,15,25,15,26,54,26,15,26,15,25,55,26,15,25,15,26,54,26,54,27,14,26,54,27,54,26,15,25,55,26,54,27,54,26,54,27,54,26,55,26,15,25,55,26,15,25,15,26,15,25,15,25,15,26,15,25,15,26,54,26,13,27,13,26,15,25,15,26,15,25,13,27,54,26,15,26,54,26,54,27,54,26,54,27,54,26,54,27,2500)
    carrier.CoolMode(frequency, command)
   
End Sub

Sub Button10_Click
   
    Dim command() As Int  = Array As Int(173,162,25,56,25,16,25,56,25,56,24,16,25,16,24,56,25,16,24,16,25,56,24,16,25,15,25,56,25,56,25,16,24,56,25,16,24,16,25,16,24,56,25,56,25,56,25,56,24,56,25,56,26,56,25,56,24,16,25,16,24,16,24,16,25,16,24,16,25,56,25,16,24,16,25,16,24,56,25,16,24,16,25,56,24,16,24,56,25,56,25,56,24,16,24,56,25,56,25,210,172,163,24,56,24,16,24,56,24,57,24,16,24,16,25,56,24,16,25,16,24,56,25,16,24,16,24,56,25,56,24,16,24,56,25,15,25,16,24,16,25,56,24,56,25,56,24,56,25,56,24,57,24,56,25,56,24,16,25,15,25,16,24,16,24,16,24,16,24,57,24,16,24,16,25,16,24,56,25,15,25,16,24,57,24,16,24,57,24,56,24,57,24,16,24,57,24,56,25,2500)
    carrier.DryMode(frequency, command)
   
End Sub

Sub Button11_Click
   
    Dim command() As Int  = Array As Int(170,166,20,60,21,20,20,60,21,60,20,20,20,20,20,60,20,20,20,20,20,61,20,20,20,20,21,60,20,60,21,20,20,61,20,60,20,20,20,20,20,60,21,60,20,60,21,60,20,61,20,20,20,61,20,60,20,20,20,20,20,20,20,20,21,20,20,20,21,60,20,20,21,20,20,60,20,61,20,20,20,20,23,57,20,20,23,57,20,61,20,20,20,20,24,57,23,58,20,213,171,163,23,57,24,16,23,57,24,57,23,16,23,17,23,57,23,17,23,16,23,58,23,16,23,16,23,58,23,57,24,16,23,58,23,57,23,16,24,16,23,57,24,57,23,57,23,58,23,58,23,16,23,57,24,57,23,16,24,16,23,16,24,16,23,16,23,16,24,57,20,20,20,20,23,57,23,58,20,20,20,20,20,60,21,20,20,60,20,61,20,20,20,20,21,60,20,60,21,2500)
    carrier.HeatMode(frequency, command)
   
End Sub

Sub Button12_Click
   
    Dim command() As Int  = Array As Int(171,163,21,60,21,20,20,60,20,61,20,20,20,20,21,60,20,20,20,20,20,60,21,20,20,20,20,61,20,60,20,20,20,60,20,20,20,20,20,20,21,60,20,60,21,60,20,60,21,60,20,61,20,60,20,61,20,20,20,20,24,16,20,20,24,16,20,60,23,17,20,20,20,20,20,61,20,20,23,17,20,20,20,20,20,60,20,60,21,60,21,20,20,60,20,61,20,60,21,213,171,163,20,60,20,20,20,60,20,60,21,20,23,16,24,57,20,20,21,20,20,60,20,20,20,20,23,58,20,60,20,20,20,60,20,20,21,20,20,20,21,60,20,60,20,61,20,60,21,60,20,61,20,60,21,60,20,20,21,20,20,20,20,20,20,20,20,60,20,20,23,16,20,20,20,60,20,20,21,20,20,20,20,20,21,60,20,61,20,60,20,20,20,60,20,60,21,60,21,2500)
    carrier.AutoMode(frequency, command)
   
End Sub

Sub Button13_Click
   
    Dim command() As Int  = Array As Int(170,166,20,60,20,20,21,60,20,61,20,20,20,20,20,61,20,20,20,20,20,60,21,20,20,20,20,60,21,60,20,20,21,60,21,60,20,20,20,20,20,60,20,61,20,60,20,61,20,60,21,20,20,60,20,61,20,20,20,20,20,20,20,20,20,20,20,60,21,60,20,60,21,20,20,20,20,61,20,20,20,20,20,20,20,20,20,20,20,60,22,60,21,20,20,60,21,60,20,213,169,166,21,60,20,20,20,61,20,60,20,20,20,20,20,60,21,20,20,20,21,60,20,20,21,20,20,60,20,61,20,20,20,61,20,60,21,20,20,20,20,60,21,60,21,60,20,60,20,61,20,20,21,60,20,60,21,20,20,20,20,20,21,20,20,20,21,60,20,60,21,60,20,20,21,20,20,60,20,20,20,20,20,20,21,20,20,20,21,60,20,60,20,20,20,60,20,61,20,2500)
    carrier.FanMode(frequency, command)
   
End Sub

Sub Button14_Click
   
    Dim command() As Int = Array As Int(170,159,25,52,25,16,23,52,25,52,25,14,25,14,25,52,25,14,25,14,25,52,25,15,24,15,24,53,25,52,25,14,25,52,25,14,25,14,25,14,25,14,25,52,25,53,25,52,25,52,25,52,25,52,25,52,25,52,25,14,25,14,25,14,25,14,25,52,25,52,25,52,25,14,25,14,25,14,25,14,25,14,25,14,25,14,25,14,25,52,25,52,25,52,25,52,25,52,25,2500)
    carrier.Swing1(frequency, command)
   
End Sub

Sub Button15_Click
   
    Dim command() As Int = Array As Int(170,159,25,51,26,13,25,52,25,52,25,14,25,14,25,52,25,14,25,15,24,52,25,14,25,14,25,51,26,51,25,14,25,52,25,14,25,52,25,52,25,14,25,52,25,14,25,51,25,52,25,52,25,14,24,15,25,52,25,14,25,52,25,14,25,14,25,53,24,52,25,52,25,14,25,14,25,14,25,14,25,15,24,15,24,15,24,15,24,53,25,52,25,52,25,52,25,52,25,200,168,156,25,52,25,14,25,52,25,52,25,14,24,15,25,52,25,14,25,14,25,52,25,15,24,15,25,52,25,52,25,14,25,52,25,14,24,53,25,52,25,14,25,52,25,15,24,52,25,52,25,52,25,14,25,14,25,52,25,15,25,52,25,14,25,14,25,52,25,52,25,52,25,14,25,14,25,14,25,14,25,14,25,14,24,14,25,15,24,53,25,52,25,52,25,52,25,52,25,2500)
    carrier.Swing2(frequency, command)
   
End Sub

I will do another update of this library where I will allow for about 50 different commands to be passed from the B4A project (just named command1 to command50). If you have a device with an IR blaster (Such as Samsung S4 mini) and have the cycle times and the accompanying frequency/frequencies of the device that you want to control then you will be able to control any appliance that can be controlled via a IR enabled remote such as TV's, Aircons, Satellite decoders, DSLR cameras, HiFi's, Car Audio, XBOX, etc - then you just need to add the commands in the B4A code and keep track of what command executes what function.
 

Attachments

  • b4aAControl.zip
    9.7 KB · Views: 316
  • ACcontrolLibFiles_V1.01.zip
    31.1 KB · Views: 325
  • OtherLibFiles.zip
    162.8 KB · Views: 346

Johan Schoeman

Expert
Licensed User
Longtime User
Just an interesting note - if you do have a device that supports an IR blaster then you can actually see the IR blasts by doing the following:
1. Start the app on your device that supports an IR blaster (device 1)
2. Start the camera on another device making use of the front facing camera (device 2).
3. Point device 1 (with the IR supported IR blaster) to device 2 (device 2 front camera active) and press any of the buttons displayed by the app on device 1
4. Looking closely you will see the IR codes sent by device 1 being displayed on the camera display of device 2

Pure magic.....
 
Last edited:
Top