The files contained in this repository can be downloaded to your computer using a svn client.
On Linux you simply type the command displayed below.

This URL has Read-Only access.

Statistics
| Revision:

root / trunk / DomotiGa / CRFXComTX.class @ 646

History | View | Annotate | Download (30.7 kB)

1
' Gambas class file
2
3
' Description:
4
' CRFXComTX.class
5
' Connect to RFXCom transmitter or xmitter interface via tcp socket or serial port.
6
7
' Development Status:
8
' Works, needs some more testing.
9
10
' Credits:
11
' Thanks to Bert Weijenberg of RFXCOM for all the support.
12
13
' DomotiGa - an open source home automation program.
14
' Copyright(C) 2008-2011 Ron Klinkien
15
16
' Read file called COPYING for license details.
17
18
PROPERTY TCPHost AS String
19
PROPERTY TCPPort AS Integer
20
PROPERTY Interface AS String
21
PROPERTY SerPort AS String
22
PROPERTY Baud AS String
23
PROPERTY RFXComDebug AS Boolean
24
PROPERTY Handshake AS Boolean
25
PROPERTY RelayPort AS Integer
26
PROPERTY DisableX10 AS Boolean
27
PROPERTY EnableARC AS Boolean
28
PROPERTY EnableHarrison AS Boolean
29
PROPERTY EnableKoppla AS Boolean
30
PROPERTY ACAddress1 AS String
31
PROPERTY ACAddress2 AS String
32
PROPERTY RFXmitter AS Boolean
33
PROPERTY InterfaceType AS String
34
35
PRIVATE sTCPHost AS String
36
PRIVATE iTCPPort AS Integer
37
PRIVATE sInterface AS String
38
PRIVATE sSerPort AS String
39
PRIVATE sBaud AS String
40
PRIVATE bHandshake AS Boolean
41
PRIVATE bRFXComTXDebug AS Boolean
42
PRIVATE iRelayPort AS Integer
43
PRIVATE bDisableX10 AS Boolean
44
PRIVATE bEnableARC AS Boolean
45
PRIVATE bEnableHarrison AS Boolean
46
PRIVATE bEnableKoppla AS Boolean
47
PRIVATE sACAddress1 AS String
48
PRIVATE sACAddress2 AS String
49
PRIVATE bRFXmitter AS Boolean
50
PRIVATE sInterfaceType AS String
51
52
PUBLIC hRFXComTX AS NEW Socket
53
PUBLIC hRFXComTXSer AS NEW SerialPort
54
PUBLIC hRFXComTXRelay AS NEW ServerSocket
55
PUBLIC hRelayTXClient AS Object[]
56
PUBLIC hRelayTXSocket AS NEW Socket
57
58
CONST GETSW AS Byte = &H30
59
CONST MODERFXCOM AS Byte = &H33
60
CONST MODERFXCOMNOREC AS Byte = &H37
61
62
PRIVATE bMessage AS Boolean
63
PRIVATE bProtocol AS Byte = MODERFXCOM
64
PRIVATE bAck AS Boolean = FALSE
65
66
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67
' connect to the host:port
68
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69
PUBLIC FUNCTION ConnectTCP() AS Boolean
70
71
  ' try to close the connection
72
  TRY hRFXComTX.Close
73
74
  ' get a new one
75
  hRFXComTX = NEW Socket AS "RFXComTX"
76
  hRFXComTX.Connect(sTCPHost, iTCPPort)
77
78
  ' all ok
79
  RETURN TRUE
80
81
CATCH ' some errors
82
  Main.WriteLog(("RFXCom ") & sInterfaceType & (" Error: ") & ERROR.Text)
83
  RETURN FALSE
84
85
END
86
87
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
88
' connect to the serial port
89
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90
PUBLIC FUNCTION ConnectSerial() AS Boolean
91
92
  ' try to close the connection
93
  TRY hRFXComTXSer.Close
94
95
  ' get a new one
96
  hRFXComTXSer = NEW Serialport AS "RFXComTXSer"
97
  WITH hRFXComTXSer
98
    .PortName = sSerPort
99
    .Speed = sBaud
100
    .Parity = 0
101
    .DataBits = 8
102
    .StopBits = 2
103
    .FlowControl = 0
104
    .Open()
105
  END WITH
106
107
  DoInit()
108
109
  ' all ok
110
  RETURN TRUE
111
112
CATCH ' some errors
113
  Main.WriteLog(("RFXCom ") & sInterfaceType & (" Error: ") & ERROR.Text)
114
  RETURN FALSE
115
116
END
117
118
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119
' disconnect from the host
120
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
121
PUBLIC FUNCTION Disconnect() AS Boolean
122
123
  ' try to close the connection
124
  TRY hRFXComTX.Close
125
  TRY hRFXComTXSer.Close
126
  TRY hRFXComTXRelay.Close
127
  Main.WriteLog(("RFXCom ") & sInterfaceType & (" TCP socket/serial port close."))
128
129
  ' all ok
130
  RETURN TRUE
131
132
CATCH ' some errors
133
  Main.WriteLog(("RFXCom Error: ") & ERROR.Text)
134
  RETURN FALSE
135
136
END
137
138
PUBLIC SUB RFXComTX_Error()
139
140
  DIM sString AS String = "RFXCom transmitter: "
141
142
  ' handle error
143
  SELECT CASE hRFXComTX.Status
144
    CASE Net.CannotCreateSocket
145
      Main.WriteLog(sString & ("The system does not allow to create a socket."))
146
    CASE Net.HostNotFound
147
      Main.WriteLog(sString & ("Host '") & sTCPHost & ("' not found."))
148
    CASE Net.ConnectionRefused
149
      Main.WriteLog(sString & ("Unable to connect. Connection refused."))
150
    CASE Net.CannotRead
151
      Main.WriteLog(sString & ("Error reading data."))
152
    CASE Net.CannotWrite
153
      Main.WriteLog(sString & ("Error writing data."))
154
  END SELECT
155
156
END
157
158
PUBLIC SUB RFXComTX_Ready()
159
160
  Main.WriteLog(("RFXCom ") & sInterfaceType & (" TCP socket connected."))
161
  DoInit()
162
163
END
164
165
PRIVATE SUB DoInit()
166
167
  SetInitMode() ' set 48 bits
168
  GetVersion()  ' get transmitter version and enable X10
169
170
  IF NOT bRFXmitter THEN
171
    IF bDisableX10 THEN DisableX10TX()
172
    IF bEnableARC THEN EnableARCTX()
173
    IF bEnableHarrison THEN EnableHarrisonTX()
174
    IF bEnableKoppla THEN EnableKopplaTX()
175
  ENDIF
176
177
END
178
179
PUBLIC FUNCTION StartRelay() AS Boolean
180
181
  hRFXComTXRelay = NEW ServerSocket AS "RFXComTXRelay"
182
  hRFXComTXRelay.Type = Net.Internet
183
  hRFXComTXRelay.Port = iRelayPort
184
  ' we start listening for max 1 connection
185
  hRFXComTXRelay.Listen(1)
186
187
  IF hRFXComTXRelay.Status = Net.Active THEN
188
    hRelayTXClient = NEW Object[]
189
    ' all ok
190
    RETURN TRUE
191
  ELSE
192
    RETURN FALSE
193
  ENDIF
194
195
END
196
197
PUBLIC SUB RFXComTXRelay_Connection(sHost AS String)
198
199
  DIM sHostName AS String
200
201
  hRelayTXSocket = NEW Socket AS "RelayTXSocket"
202
  ' accept client
203
  IF hRFXComTXRelay.Status <= Net.Inactive THEN RETURN
204
  IF Main.bRFXComTXDebug THEN Main.WriteDebugLog(("[RFXComTXSRelay] Connection request from: ") & sHost)
205
206
  hRelayTXSocket = hRFXComTXRelay.Accept()
207
  hRelayTXClient.Add(hRelayTXSocket)
208
  IF hRelayTXSocket.Status = Net.Connected THEN
209
    sHostName = DNS.ResolveHost(hRelayTXSocket.RemoteHost)
210
    IF NOT sHostName THEN sHostName = hRelayTXSocket.RemoteHost
211
    Main.WriteLog(("RFXCom ") & sInterfaceType & (" Relay connection from ") & sHostName & (" accepted."))
212
  ENDIF
213
214
END
215
216
PUBLIC SUB RFXComTXRelay_Error()
217
218
  ' handle error
219
  SELECT CASE hRFXComTXRelay.Status
220
    CASE Net.CannotCreateSocket
221
      Main.WriteDebugLog(("[RFXComTXRelay] The system does not allow to create a socket."))
222
    CASE Net.CannotBindSocket
223
      Main.WriteDebugLog(("[RFXComTXRelay] Cannot bind socket."))
224
    CASE Net.CannotListen
225
      Main.WriteDebugLog(("[RFXComTXRelay] Cannot listen on port."))
226
  END SELECT
227
228
END
229
230
PUBLIC SUB Socket_Closed()
231
232
  Main.WriteLog(("RFXCom ") & sInterfaceType & (" Relay client connection closed."))
233
  hRelayTXClient.Remove(hRelayTXClient.Find(LAST))
234
235
END
236
237
PUBLIC SUB SendCommand(sAddress AS String, sCmd AS String)
238
239
  DIM iDeviceId AS Integer
240
  DIM sType AS String
241
  DIM bUnit, bDevice AS Byte
242
243
  iDeviceId = Devices.Find(sAddress, Devices.FindInterface("RFXCom Transmitter"))
244
  IF iDeviceId THEN
245
    sType = Devices.FindTypeForDevice(iDeviceId)
246
  ELSE
247
    RETURN
248
  ENDIF
249
250
  IF NOT bRFXmitter THEN
251
    SELECT sType
252
      CASE "ARC", "X10", "KAKU" ' X10, KAKU with CodeWheel, NEXA, DomiaLite
253
        IF sType = "X10" AND IF Main.bRFXComTXDisableX10 THEN
254
          Main.WriteDebugLog(("[RFXComTX] You have disabled the X10 protocol, unable to control device!"))
255
          RETURN
256
        ENDIF
257
        IF sType = "ARC" OR sType = "KAKU" AND IF NOT Main.bRFXComTXEnableARC THEN
258
          Main.WriteDebugLog(("[RFXComTX] You have not enabled the KAKU/ARC protocol, unable to control device!"))
259
          RETURN
260
        ENDIF
261
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
262
          ARC(sAddress, sCmd, iDeviceId)
263
        ELSE
264
          Main.WriteDebugLog(("[RFXComTX] Invalid X10, ARC or KAKU address '") & sAddress & ("' given!"))
265
        ENDIF
266
      CASE "AC", "HE" ' AC protocol, KAKU without CodeWheel, HomeEasy UK, Chacon.
267
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
268
          HEEU(sAddress, Main.sRFXComTXACAddress1, Main.sRFXComTXACAddress2, sCmd, iDeviceId)
269
        ELSE
270
          Main.WriteDebugLog(("[RFXComTX] Invalid AC address '") & sAddress & ("' given!"))
271
        ENDIF
272
      DEFAULT
273
        Main.WriteDebugLog(("[RFXComTX] " & sType & " protocol is not supported by RFXtransmitter code!"))
274
        RETURN
275
    END SELECT
276
  ELSE
277
    SELECT sType
278
      CASE "X10" ' X10 lightning
279
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
280
          X10(sAddress, sCmd, iDeviceId)
281
        ELSE
282
          Main.WriteDebugLog(("[RFXComTX] Invalid X10 address '") & sAddress & ("' given!"))
283
        ENDIF
284
      CASE "ARC", "KAKU" ' KlikAanKlikUit with CodeWheel, NEXA, Domia Lite, Proove, ByeByeStandby, ELRO AB600, Intertechno, Duwi
285
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
286
          KAKU(sAddress, sCmd, iDeviceId)
287
        ELSE
288
          Main.WriteDebugLog(("[RFXComTX] Invalid ARC or KAKU address '") & sAddress & ("' given!"))
289
        ENDIF
290
      CASE "HEEU", "AC", "HE" ' HomeEasy EU protocol, AC and HomeEasy UK/KAKU without codewheel
291
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
292
          HEEU(sAddress, Main.sRFXComTXACAddress1, Main.sRFXComTXACAddress2, sCmd, iDeviceId)
293
        ELSE
294
          Main.WriteDebugLog(("[RFXComTX] Invalid HEEU address '") & sAddress & ("' given!"))
295
        RETURN
296
        ENDIF
297
      CASE "Digimax" ' RTS10 control
298
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
299
          Digimax(sAddress, sCmd, iDeviceId)
300
        ELSE
301
          Main.WriteDebugLog(("[RFXComTX] Invalid Digimax address '") & sAddress & ("' given!"))
302
        ENDIF
303
      CASE "Harrison" ' Harrison
304
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
305
          Harrison(sAddress, sCmd, iDeviceId)
306
        ELSE
307
          Main.WriteDebugLog(("[RFXComTX] Invalid Harrison address '") & sAddress & ("' given!"))
308
        ENDIF
309
      CASE "Koppla" ' IKEA Koppla
310
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
311
          Koppla(sAddress, sCmd, iDeviceId)
312
        ELSE
313
          Main.WriteDebugLog(("[RFXComTX] Invalid Koppla address '") & sAddress & ("' given!"))
314
        ENDIF
315
      CASE "Waveman" ' Waveman
316
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
317
          Waveman(sAddress, sCmd, iDeviceId)
318
        ELSE
319
          Main.WriteDebugLog(("[RFXComTX] Invalid Waveman address '") & sAddress & ("' given!"))
320
        ENDIF
321
      CASE "Flamingo" ' Flamingo
322
        IF Left$(sAddress, 1) LIKE "[A-Z]" AND Right$(sAddress, 1) LIKE "[0-9]" THEN
323
          Flamingo(sAddress, sCmd, iDeviceId)
324
        ELSE
325
          Main.WriteDebugLog(("[RFXComTX] Invalid Flamingo address '") & sAddress & ("' given!"))
326
        ENDIF
327
      DEFAULT
328
        Main.WriteDebugLog(("[RFXComTX] " & sType & " protocol is not supported by RFXmitter code!"))
329
        RETURN
330
    END SELECT
331
  ENDIF
332
333
END
334
335
PRIVATE SUB WriteCom(bBuffer AS Byte[])
336
337
  IF sInterface = "tcp" THEN
338
    ' send the message to the tcp stream
339
    TRY bBuffer.Write(hRFXComTX, 0, bBuffer.Length)
340
    IF ERROR THEN Main.WriteRFXDebugLog(("[RFXComTX] Unable to write to TCP port!"))
341
  ELSE
342
    ' send the message to the serial port
343
    TRY bBuffer.Write(hRFXComTXSer, 0, bBuffer.Length)
344
    IF ERROR THEN Main.WriteRFXDebugLog(("[RFXComTX] Unable to write to serial port!"))
345
  ENDIF
346
347
END
348
349
PRIVATE SUB WriteMessage(bBuf AS Byte[], OPTIONAL bCmd AS Boolean)
350
351
  DIM sMessage AS String = Hex(bBuf[0], 2)
352
  DIM dFinish AS Date
353
  DIM bTemp AS Byte
354
  DIM iIndex, iEnd, iTries AS Integer
355
356
  bAck = FALSE
357
358
  IF NOT bCmd THEN
359
    iEnd = ((bBuf[0] AND &HF8) / 8)
360
    IF (bBuf[0] AND &H7) <> 0 THEN INC iEnd
361
    FOR iIndex = 1 TO iEnd
362
      sMessage &= Hex(bBuf[iIndex], 2)
363
    NEXT
364
    IF Main.bRFXComTXDebug THEN Main.WriteDebugLog("[RFXComTX] " & sMessage)
365
  ENDIF
366
367
  ' write data to the interface
368
  WriteCom(bBuf)
369
370
  dFinish = Second(Now) + 3 ' wait for ACK, max 3 seconds
371
372
  DO WHILE (bAck = FALSE)
373
    IF (Second(Now) > dFinish) THEN
374
      Main.WriteDebugLog("[RFXComTX] No ACK received within 3 seconds!", FALSE)
375
      BREAK
376
    ENDIF
377
378
    IF sInterface = "tcp" THEN
379
      TRY READ #hRFXComTX, bTemp
380
      IF NOT ERROR THEN
381
        IF bTemp = bProtocol THEN
382
          IF Main.bRFXComTXDebug THEN Main.WriteDebugLog("[RFXComTX] ACK=>", TRUE)
383
          bMessage = TRUE
384
        ELSE IF bTemp = &H5A THEN
385
          IF Main.bRFXComTXDebug THEN Main.WriteDebugLog("[RFXComTX] NAK=>", TRUE)
386
          bMessage = TRUE
387
        ENDIF
388
        IF Main.bRFXComTXDebug THEN Main.WriteRFXDebugLog(Hex(bTemp, 2), TRUE)
389
        IF bCmd THEN bMessage = TRUE
390
      ENDIF
391
    ELSE
392
      TRY READ #hRFXComTXSer, bTemp
393
      IF NOT ERROR THEN
394
        IF bTemp = bProtocol THEN
395
          IF Main.bRFXComTXDebug THEN Main.WriteDebugLog("[RFXComTX] ACK=>", TRUE)
396
          bMessage = TRUE
397
        ELSE IF bTemp = &H5A THEN
398
          IF Main.bRFXComTXDebug THEN Main.WriteDebugLog("[RFXComTX] NAK=>", TRUE)
399
          bMessage = TRUE
400
        ENDIF
401
        IF Main.bRFXComTXDebug THEN Main.WriteRFXDebugLog(Hex(bTemp, 2), TRUE)
402
        IF bCmd THEN bMessage = TRUE
403
      ENDIF
404
    ENDIF
405
406
    IF bMessage THEN
407
      bAck = TRUE
408
      bMessage = FALSE
409
      IF Main.bRFXComTXDebug THEN Main.WriteRFXDebugLog("\n", TRUE)
410
    ENDIF
411
  LOOP
412
  bAck = FALSE
413
414
END
415
416
' set interface mode
417
PUBLIC FUNCTION SetInitMode()
418
419
  DIM bBuf1 AS Byte[] = [CByte(&HF0), CByte(MODERFXCOM), &HF0, MODERFXCOM] ' handshake
420
  DIM bBuf2 AS Byte[] = [CByte(&HF0), CByte(MODERFXCOMNOREC), &HF0, MODERFXCOMNOREC] ' no handshake
421
422
  IF bHandshake THEN
423
    IF Main.bRFXComTXDebug THEN Main.WriteRFXDebugLog(("Initialized ") & sInterfaceType & (" for Handshake usage with => ") & Hex(bBuf1[0]) & Hex(bBuf1[1]) & Hex(bBuf1[2]) & Hex(bBuf1[3]) & "\n")
424
    bProtocol = MODERFXCOM
425
    WriteMessage(bBuf1, TRUE)
426
  ELSE
427
    IF Main.bRFXComTXDebug THEN Main.WriteRFXDebugLog(("Initialized") & sInterfaceType & (" for No Handshake usage with => ") & Hex(bBuf2[0]) & Hex(bBuf2[1]) & Hex(bBuf2[2]) & Hex(bBuf2[3]) & "\n")
428
    bProtocol = MODERFXCOMNOREC
429
    WriteMessage(bBuf2, TRUE)
430
  ENDIF
431
432
END
433
434
' disable X10 protocol
435
PUBLIC SUB DisableX10TX()
436
437
  DIM bBuf AS Byte[] = [CByte(&HF0), CByte(&H3F), &HF0, &H3F]
438
439
  IF Main.bRFXComTXDebug THEN
440
    Main.WriteRFXDebugLog(("Cmd to ") & sInterfaceType & (" => F03FF03F\n"), FALSE)
441
    Main.WriteRFXDebugLog(("Disable X10 RF\n"), FALSE)
442
  ENDIF
443
  WriteMessage(bBuf, TRUE)
444
445
END SUB
446
447
' enable ARC aka KAKU
448
PUBLIC FUNCTION EnableARCTX()
449
450
  DIM bBuf AS Byte[] = [CByte(&HF0), CByte(&H3D), &HF0, &H3D]
451
452
  IF Main.bRFXComTXDebug THEN
453
    Main.WriteRFXDebugLog(("Cmd to ") & sInterfaceType & (" => F03DF03D\n"), FALSE)
454
    Main.WriteRFXDebugLog(("Enable KlikAan-KlikUit RF\n"), FALSE)
455
  ENDIF
456
  WriteMessage(bBuf, TRUE)
457
458
END
459
460
' enable harrison protocol
461
PUBLIC SUB EnableHarrisonTX()
462
463
  DIM bBuf AS Byte[] = [CByte(&HF0), CByte(&H3C), &HF0, &H3C]
464
465
  IF Main.bRFXComTXDebug THEN
466
    Main.WriteRFXDebugLog(("Cmd to ") & sInterfaceType & (" => F03CF03C\n"), FALSE)
467
    Main.WriteRFXDebugLog(("Enable Harrison RF\n"), FALSE)
468
  ENDIF
469
  WriteMessage(bBuf, TRUE)
470
471
END
472
473
' enable koppla protocol
474
PUBLIC SUB EnableKopplaTX()
475
476
  DIM bBuf AS Byte[] = [CByte(&HF0), CByte(&H3E), &HF0, &H3E]
477
478
  IF Main.bRFXComTXDebug THEN
479
    Main.WriteRFXDebugLog(("Cmd to ") & sInterfaceType & (" => F03EF03E\n"), FALSE)
480
    Main.WriteRFXDebugLog(("Enable Flamingo / Koppla RF\n"), FALSE)
481
  ENDIF
482
  WriteMessage(bBuf, TRUE)
483
484
END
485
486
' ask for firmware version
487
PUBLIC FUNCTION GetVersion()
488
489
  DIM bBuf AS Byte[] = [CByte(&HF0), CByte(GETSW), &HF0, GETSW]
490
491
  IF Main.bRFXComTXDebug THEN
492
    Main.WriteRFXDebugLog(("Version request to ") & sInterfaceType & (" => F030F030\n"), FALSE)
493
    IF NOT bRFXmitter THEN Main.WriteRFXDebugLog(("RF Modes are reset to: X10 enabled and all other modes are disabled\n"), FALSE)
494
    Main.WriteRFXDebugLog(sInterfaceType & (" Firmware Version: "), FALSE)
495
  ENDIF
496
  WriteMessage(bBuf, TRUE)
497
498
END
499
500
PRIVATE FUNCTION ToHouse(sHouse AS String) AS Byte
501
502
  SELECT CASE UCase(sHouse)
503
    CASE "A"
504
      RETURN &H60 'A
505
    CASE "B"
506
      RETURN &H70 'B
507
    CASE "C"
508
      RETURN &H40 'C
509
    CASE "D"
510
      RETURN &H50 'D
511
    CASE "E"
512
      RETURN &H80 'E
513
    CASE "F"
514
      RETURN &H90 'F
515
    CASE "G"
516
      RETURN &HA0 'G
517
    CASE "H"
518
      RETURN &HB0 'H
519
    CASE "I"
520
      RETURN &HE0 'I
521
    CASE "J"
522
      RETURN &HF0 'J
523
    CASE "K"
524
      RETURN &HC0 'K
525
    CASE "L"
526
      RETURN &HD0 'L
527
    CASE "M"
528
      RETURN &H0 'M
529
    CASE "N"
530
      RETURN &H10 'N
531
    CASE "O"
532
      RETURN &H20 'O
533
    CASE "P"
534
      RETURN &H30 'P
535
  END SELECT
536
537
END
538
539
PUBLIC FUNCTION GetUnit(iUnit AS Integer) AS Byte
540
541
  IF iUnit > 8 THEN iUnit -= 8
542
543
  SELECT CASE iUnit
544
    CASE 1
545
      RETURN &H0
546
    CASE 2
547
      RETURN &H10
548
    CASE 3
549
      RETURN &H8
550
    CASE 4
551
      RETURN &H18
552
    CASE 5
553
      RETURN &H40
554
    CASE 6
555
      RETURN &H50
556
    CASE 7
557
      RETURN &H48
558
    CASE 8
559
      RETURN &H58
560
  END SELECT
561
562
END
563
564
PUBLIC FUNCTION GetHouse(sHouse AS String, iUnit AS Integer) AS Byte
565
566
  DIM bTemp AS Byte
567
568
  SELECT CASE sHouse
569
    CASE "A"
570
      bTemp = &H60
571
    CASE "B"
572
      bTemp = &H70
573
    CASE "C"
574
      bTemp = &H40
575
    CASE "D"
576
      bTemp = &H50
577
    CASE "E"
578
      bTemp = &H80
579
    CASE "F"
580
      bTemp = &H90
581
    CASE "G"
582
      bTemp = &HA0
583
    CASE "H"
584
      bTemp = &HB0
585
    CASE "I"
586
      bTemp = &HE0
587
    CASE "J"
588
      bTemp = &HF0
589
    CASE "K"
590
      bTemp = &HC0
591
    CASE "L"
592
      bTemp = &HD0
593
    CASE "M"
594
      bTemp = &H0
595
    CASE "N"
596
      bTemp = &H10
597
    CASE "O"
598
      bTemp = &H20
599
    CASE "P"
600
      bTemp = &H30
601
    CASE ELSE
602
      bTemp = &H60
603
  END SELECT
604
  IF iUnit > 8 THEN bTemp = bTemp OR &H4
605
  RETURN bTemp
606
607
END
608
609
' Digimax RTS10 control with X10 commands for RFXmitter
610
PUBLIC SUB Digimax(sAddress AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
611
612
  DIM sData, sHouse, sDevice AS String
613
  DIM iDevice, iHouse AS Integer
614
615
  sHouse = Left$(sAddress, 1)
616
  sDevice = Right$(sAddress, 2)
617
  sData = Chr(44) & sHouse & sDevice
618
  iHouse = Asc(sHouse)
619
  iDevice = Asc(sDevice)
620
621
  SELECT CASE UCase(sCmd)
622
    CASE "ON"
623
      sData &= Chr(&H10 OR (&HF - (Lsr(iHouse, 4) + iHouse + Lsr(iDevice, 4) + iDevice + &H1) AND &HF))
624
      sData &= Chr(&H19) & Chr(&H20) & Chr(&HFF - (Lsl(12, 4)) AND &HF0)
625
    CASE "OFF"
626
      sData &= Chr(&H20 OR (&HF - (Lsr(iHouse, 4) + iHouse + Lsr(iDevice, 4) + iDevice + &H2) AND &HF))
627
      sData &= Chr(&H21) & Chr(&H20) & Chr(&HFF - (Lsl(5, 4)) AND &HF0)
628
    CASE "LEARN"
629
      sData &= Chr(&H30 OR (&HF - (Lsr(iHouse, 4) + iHouse + Lsr(iDevice, 4) + iDevice + &H3) AND &HF))
630
      sData &= Chr(&H21) & Chr(&H20) & Chr(&HFF - (Lsl(5, 4)) AND &HF0)
631
  END SELECT
632
633
END
634
635
' ARC/KAKU for RFXmitter
636
PUBLIC SUB KAKU(sAddress AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
637
638
  DIM bBuf AS Byte[4]
639
  DIM iDevice, iUnit AS Integer
640
641
  iUnit = Asc(Left$(sAddress, 1)) - &H41
642
  iDevice = Right$(sAddress, 2) - 1
643
644
  bBuf[0] = 24
645
646
  SELECT UCase(sCmd)
647
    CASE "ON"
648
      bBuf[1] = &H54
649
    CASE "OFF"
650
      bBuf[1] = &H14
651
    DEFAULT
652
      Main.WriteDebugLog(("[RFXComTX] Unknown command '") & UCase(sCmd) & ("' given!"))
653
      RETURN
654
  END SELECT
655
656
  bBuf[2] = Lsl((iDevice AND &H8), 3) OR Lsl((iDevice AND &H4), 2) OR Lsl((iDevice AND &H2), 1) OR (iDevice AND &H1)
657
  bBuf[3] = Lsl((iUnit AND &H8), 3) OR Lsl((iUnit AND &H4), 2) OR Lsl((iUnit AND &H2), 1) OR (iUnit AND &H1)
658
659
  WriteMessage(bBuf)
660
661
  bBuf[1] = &H55
662
  bBuf[2] = &H80 OR Lsl((iDevice AND &H8), 3) OR Lsl((iDevice AND &H4), 2) OR &H7
663
  bBuf[3] = Lsl((iUnit AND &H8), 3) OR Lsl((iUnit AND &H4), 2) OR Lsl((iUnit AND &H2), 1) OR (iUnit AND &H1)
664
665
  WriteMessage(bBuf)
666
667
END
668
669
' X10 for RFXmitter
670
PUBLIC SUB X10(sAddress AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
671
672
  DIM bBuf AS Byte[5]
673
  DIM bHouse, bUnit AS Byte
674
  DIM iUnit, iDc, iUnithl AS Integer
675
676
  bHouse = GetHouse(Left$(sAddress, 1), Right$(sAddress, 2))
677
  bUnit = GetUnit(Right$(sAddress, 2))
678
679
  SELECT UCase(sCmd)
680
    CASE "ON"
681
      iUnit = 0
682
    CASE "OFF"
683
      iUnit = &H20
684
    CASE "BRIGHT"
685
      iUnit = &H88
686
    CASE "DIM"
687
      iUnit = &H98
688
    CASE "ALL_LIGHTS_ON"
689
      iUnit = &H90
690
    CASE "ALL_LIGHTS_OFF", "ALL_UNITS_OFF"
691
      iUnit = &H80
692
    DEFAULT
693
      Main.WriteDebugLog(("[RFXComTX] Unknown command '") & UCase(sCmd) & ("' given!"))
694
      RETURN
695
  END SELECT
696
697
  IF UCase(sCmd) = "OFF" OR UCase(sCmd) = "ON" THEN
698
    IF bUnit > 8 THEN
699
      iUnithl = &H4 ' UNITS 9 TO 16
700
      iDc = bUnit - 8
701
    ELSE
702
      iUnithl = &H0 ' UNITS 1 TO 8
703
      iDc = bUnit
704
    ENDIF
705
706
    SELECT CASE iDc
707
      CASE 1
708
        iunit = &H0 OR iunit '1 OR 9
709
      CASE 2
710
        iunit = &H10 OR iunit '2 OR 10
711
      CASE 3
712
        iunit = &H8 OR iunit '3 OR 11
713
      CASE 4
714
        iunit = &H18 OR iunit '4 OR 12
715
      CASE 5
716
        iunit = &H40 OR iunit '5 OR 13
717
      CASE 6
718
        iunit = &H50 OR iunit '6 OR 14
719
      CASE 7
720
        iunit = &H48 OR iunit '7 OR 15
721
      CASE 8
722
        iunit = &H58 OR iunit '8 OR 16
723
    END SELECT
724
  ENDIF
725
726
  bBuf[0] = 32
727
  bBuf[1] = bHouse
728
  bBuf[2] = (NOT bHouse) AND &HFF
729
  bBuf[3] = iUnit
730
  bBuf[4] = (NOT iUnit) AND &HFF
731
732
  WriteMessage(bBuf)
733
734
END
735
736
' ARC / X10 / KAKU for RFXtransmitter
737
PUBLIC SUB ARC(sAddress AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
738
739
  DIM bLength AS Byte = &H20
740
  DIM bBuf AS Byte[5]
741
  DIM bHouse, bUnit AS Byte
742
743
  bHouse = GetHouse(Left$(sAddress, 1), Right$(sAddress, 2))
744
  bUnit = GetUnit(Right$(sAddress, 2))
745
746
  bBuf[0] = bLength
747
  bBuf[1] = bHouse AND &HF0
748
  bBuf[2] = &HFF - bBuf[1]
749
750
  SELECT UCase(sCmd)
751
    CASE "ON"
752
      bBuf[1] = bHouse
753
      bBuf[2] = &HFF - bBuf[1]
754
      bBuf[3] = bUnit
755
    CASE "OFF"
756
      bBuf[3] = bUnit OR &H20
757
    CASE "BRIGHT"
758
      bBuf[3] = &H88
759
    CASE "DIM"
760
      bBuf[3] = &H98
761
    CASE "ALL_LIGHTS_ON"
762
      bBuf[3] = &H90
763
    CASE "ALL_LIGHTS_OFF"
764
      bBuf[3] = &H80
765
    CASE "ALL_UNITS_OFF"
766
      ' not supported
767
    CASE "STOP"
768
      ' not supported
769
    DEFAULT
770
      Main.WriteDebugLog(("[RFXComTX] Unknown command '") & UCase(sCmd) & ("' given!"))
771
      RETURN
772
  END SELECT
773
774
  bBuf[4] = &HFF - bBuf[3]
775
776
  WriteMessage(bBuf)
777
778
END
779
780
PUBLIC SUB ACHouse(sCode AS String) AS Byte
781
782
  SELECT CASE UCase(sCode)
783
    CASE "A"
784
      RETURN &H60
785
    CASE "B"
786
      RETURN &H70
787
    CASE "C"
788
      RETURN &H40
789
    CASE "D"
790
      RETURN &H50
791
    CASE "E"
792
      RETURN &H80
793
    CASE "F"
794
      RETURN &H90
795
    CASE "G"
796
      RETURN &HA0
797
    CASE "H"
798
      RETURN &HB0
799
    CASE "I"
800
      RETURN &HE0
801
    CASE "J"
802
      RETURN &HF0
803
    CASE "K"
804
      RETURN &HC0
805
    CASE "L"
806
      RETURN &HD0
807
    CASE "M"
808
      RETURN &H0
809
    CASE "N"
810
      RETURN &H10
811
    CASE "O"
812
      RETURN &H20
813
    CASE "P"
814
      RETURN &H30
815
  END SELECT
816
817
END
818
819
' AC and HomeEasy UK for RFXtransmitter, HomeEasy EU for RFXmitter
820
PUBLIC SUB HEEU(sAddress AS String, sACAddress1 AS String, sACAddress2 AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
821
822
  DIM bLength AS Byte = 33
823
  DIM bBuf AS Byte[6]
824
  DIM iDim, iBrightness AS Integer
825
826
  IF bRFXmitter THEN bLength = 34
827
828
  bBuf[1] = ACHouse(Left$(sAddress, 1))
829
  bBuf[2] = CByte(Val("&H" & sACAddress1))
830
  bBuf[3] = CByte(Val("&H" & sACAddress2))
831
  bBuf[4] = CByte(Val(Right$(sAddress, 2)) - 1)
832
  bBuf[5] = 0
833
834
  sCmd = UCase(sCmd)
835
836
  IF InStr(sCmd, "ON") THEN
837
    bBuf[4] = CByte(bBuf[4] OR &H10)
838
  ELSE IF InStr(sCmd, "OFF") THEN
839
    ' nothing to do
840
  ELSE IF InStr(sCmd, "DIM ") THEN ' DIM 1 - 99
841
    iBrightness = Val(Replace(sCmd, "DIM ", ""))
842
    IF iBrightness > 0 THEN
843
      iDim = Round(0.32 * iBrightness) ' 32 steps
844
      iDim = CInt((iBrightness / 2) - 1)
845
      IF iDim >= 14 THEN
846
        bBuf[5] = CByte(bBuf[5] OR &HF0)
847
      ELSE IF iDim > 0 THEN
848
        bBuf[5] = CByte(bBuf[5] OR ((iDim * 16) AND &HF0))
849
      ENDIF
850
      bLength = 37
851
    ENDIF
852
  ELSE
853
    Main.WriteDebugLog(("[RFXComTX] Unknown command '") & UCase(sCmd) & ("' given!"))
854
  ENDIF
855
  bBuf[0] = bLength
856
857
  WriteMessage(bBuf)
858
859
END
860
861
' Koppla for RFXmitter
862
PUBLIC SUB Koppla(sAddress AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
863
864
  DIM bBuf AS Byte[5]
865
  DIM sHouse, sDevice AS String
866
  DIM iBrightness, iLevel AS Integer
867
868
  sHouse = Left$(sAddress, 1)
869
  sDevice = Right$(sAddress, 2)
870
871
  bBuf[0] = 26
872
  bBuf[2] = 0
873
  bBuf[3] = Asc(sHouse) - Asc("A")
874
  bBuf[4] = 0
875
876
  SELECT CASE CInt(sDevice)
877
    CASE 1
878
      bBuf[3] = bBuf[3] OR &H20
879
    CASE 2
880
      bBuf[3] = bBuf[3] OR &H40
881
    CASE 3
882
      bBuf[3] = bBuf[3] OR &H80
883
    CASE 4
884
      bBuf[2] = &H1
885
    CASE 5
886
      bBuf[2] = &H2
887
    CASE 6
888
      bBuf[2] = &H4
889
    CASE 7
890
      bBuf[2] = &H8
891
    CASE 8
892
      bBuf[2] = &H10
893
    CASE 9
894
      bBuf[2] = &H20
895
    CASE 10
896
      bBuf[3] = bBuf[3] OR &H10
897
    CASE ELSE
898
      RETURN
899
  END SELECT
900
901
  IF InStr(sCmd, "DIM") THEN
902
    iBrightness = Val(Replace(sCmd, "DIM ", ""))
903
    sCmd = "DIM"
904
  ENDIF
905
906
  SELECT CASE UCase(sCmd)
907
    CASE "ALL_LIGHTS_OFF", "ALL_UNITS_OFF"
908
      bBuf[1] = &H9A ' off
909
      bBuf[2] = &H3F
910
      bBuf[3] = bBuf[3] OR &HF0
911
    CASE "ALL_LIGHTS_ON"
912
      bBuf[1] = &H90 ' on
913
      bBuf[2] = &H3F
914
      bBuf[3] = bBuf[3] OR &HF0
915
    CASE "DIM"
916
      IF iBrightness = 0 THEN
917
        bBuf[1] = &H9A
918
      ELSE
919
        iLevel = CInt(iBrightness / 3)
920
        SELECT CASE iLevel
921
          CASE 0
922
            bBuf[1] = &H9A ' off
923
          CASE 1
924
            bBuf[1] = &HD1
925
          CASE 2
926
            bBuf[1] = &H12
927
          CASE 3
928
            bBuf[1] = &H53
929
          CASE 4
930
            bBuf[1] = &HD4
931
          CASE 5
932
            bBuf[1] = &H95
933
          CASE 6
934
            bBuf[1] = &H56
935
          CASE 7
936
            bBuf[1] = &H17
937
          CASE 8
938
            bBuf[1] = &H18
939
          CASE 9
940
            bBuf[1] = &H59
941
          CASE ELSE
942
            bBuf[1] = &H90 ' on
943
        END SELECT
944
      ENDIF
945
    CASE "OFF"
946
      bBuf[1] = &H9A
947
    CASE "ON"
948
      bBuf[1] = &H90
949
    CASE ELSE
950
      RETURN
951
  END SELECT
952
953
  bBuf[2] = CalcIkeaParity(bBuf[2], bBuf[3])
954
955
  WriteMessage(bBuf)
956
957
END
958
959
' calulate parity for koppla
960
PRIVATE FUNCTION CalcIkeaParity(bBuf1 AS Byte, bBuf2 AS Byte) AS Byte
961
962
  DIM iParity, iTemp, iIndex AS Integer
963
  DIM bReturn AS Byte
964
965
  bReturn = bBuf1
966
  iTemp = (bBuf1 * 256) + bBuf2
967
  iParity = 1
968
  FOR iIndex = 1 TO 7
969
    iParity = iParity + (iTemp AND &H1)
970
    iTemp = Lsr(iTemp, 2)
971
  NEXT
972
  IF (iParity AND &H1) = 1 THEN bReturn = bReturn OR &H40
973
974
  iTemp = (bReturn * 256) + bBuf2
975
  iParity = 0
976
  FOR iIndex = 1 TO 15
977
    iParity = iParity + (iTemp AND &H1)
978
    iTemp = Lsr(iTemp, 1)
979
  NEXT
980
  IF (iParity AND &H1) = 1 THEN bReturn = bReturn OR &H80
981
982
END
983
984
' Flamingo for RFXmitter
985
PUBLIC SUB Flamingo(sAddress AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
986
987
  DIM bBuf AS Byte[3]
988
  DIM sHouse, sDevice AS String
989
990
  sHouse = Left$(sAddress, 1)
991
  sDevice = Right$(sAddress, 2)
992
993
  bBuf[0] = 11
994
  bBuf[1] = ToHouse(sHouse)
995
  bBuf[2] = 0
996
997
  SELECT CASE CInt(sDevice)
998
    CASE 1
999
      bBuf[1] = bBuf[1] OR &H40
1000
    CASE 2
1001
      bBuf[1] = bBuf[1] OR &H20
1002
    CASE 3
1003
      bBuf[1] = bBuf[1] OR &H10
1004
    CASE 4
1005
      bBuf[2] = &H80
1006
    CASE 5
1007
      bBuf[2] = &H40
1008
    CASE 6
1009
      bBuf[1] = bBuf[1] OR &HC0
1010
    CASE 7
1011
      bBuf[1] = bBuf[1] OR &HA0
1012
    CASE 8
1013
      bBuf[1] = bBuf[1] OR &H90
1014
    CASE 9
1015
      bBuf[1] = bBuf[1] OR &H80
1016
      bBuf[2] = &H80
1017
    CASE 10
1018
      bBuf[1] = bBuf[1] OR &H80
1019
      bBuf[2] = &H40
1020
    CASE ELSE
1021
      RETURN
1022
  END SELECT
1023
1024
  SELECT CASE UCase(sCmd)
1025
    CASE "OFF"
1026
      'nothing to do
1027
    CASE "ON"
1028
    bBuf[2] = bBuf[2] OR &H20
1029
  END SELECT
1030
1031
  WriteMessage(bBuf)
1032
1033
END
1034
1035
' Waveman for RFXmitter
1036
PUBLIC SUB Waveman(sAddress AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
1037
1038
  DIM bBuf AS Byte[4]
1039
  DIM xLate AS Byte[] = [CByte(&H0), CByte(&H1), &H4, &H5, &H10, &H11, &H14, &H15, &H40, &H41, &H44, &H45, &H50, &H51, &H54, &H55]
1040
  DIM sHouse, sDevice AS String
1041
1042
  sHouse = Left$(sAddress, 1)
1043
  sDevice = Right$(sAddress, 2)
1044
1045
  bBuf[0] = 24
1046
1047
  SELECT CASE UCase(sCmd)
1048
    CASE "ON"
1049
      bBuf[1] = &H54
1050
    CASE "OFF"
1051
      bBuf[1] = &H0
1052
  END SELECT
1053
1054
  bBuf[2] = xLate[CInt(sDevice) - 1]
1055
  bBuf[3] = xLate[Asc(sHouse) - &H41]
1056
1057
  WriteMessage(bBuf)
1058
1059
END
1060
1061
' Harrison for RFXmitter
1062
PUBLIC SUB Harrison(sAddress AS String, sCmd AS String, OPTIONAL iDeviceId AS Integer)
1063
1064
  DIM bBuf AS Byte[5]
1065
  DIM sHouse AS String = Left$(sAddress, 1)
1066
  DIM iDevice AS Integer = CInt(Right$(sAddress, 2))
1067
1068
  bBuf[0] = 25
1069
  SELECT CASE sHouse
1070
    CASE "A"
1071
      bBuf[1] = &H3C
1072
    CASE "B"
1073
      bBuf[1] = &H3F
1074
    CASE "C"
1075
      bBuf[1] = &H30
1076
    CASE "D"
1077
      bBuf[1] = &H33
1078
    CASE "E"
1079
      bBuf[1] = &HC0
1080
    CASE "F"
1081
      bBuf[1] = &HC3
1082
    CASE "G"
1083
      bBuf[1] = &HCC
1084
    CASE "H"
1085
      bBuf[1] = &HCF
1086
    CASE "I"
1087
      bBuf[1] = &HFC
1088
    CASE "J"
1089
      bBuf[1] = &HFF
1090
    CASE "K"
1091
      bBuf[1] = &HF0
1092
    CASE "L"
1093
      bBuf[1] = &HF3
1094
    CASE "M"
1095
      bBuf[1] = &H0
1096
    CASE "N"
1097
      bBuf[1] = &H3
1098
    CASE "O"
1099
      bBuf[1] = &HC
1100
    CASE "P"
1101
      bBuf[1] = &HF
1102
  END SELECT
1103
1104
  SELECT CASE iDevice
1105
    CASE 1
1106
      bBuf[2] = &H0
1107
    CASE 2
1108
      bBuf[2] = &H3
1109
    CASE 3
1110
      bBuf[2] = &HC
1111
    CASE 4
1112
      bBuf[2] = &HF
1113
    CASE 5
1114
      bBuf[2] = &H30
1115
    CASE 6
1116
      bBuf[2] = &H33
1117
    CASE 7
1118
      bBuf[2] = &H3C
1119
    CASE 8
1120
      bBuf[2] = &H3F
1121
    CASE 9
1122
      bBuf[2] = &HC0
1123
    CASE 10
1124
      bBuf[2] = &HC3
1125
    CASE 11
1126
      bBuf[2] = &HCC
1127
    CASE 12
1128
      bBuf[2] = &HCF
1129
    CASE 13
1130
      bBuf[2] = &HF0
1131
    CASE 14
1132
      bBuf[2] = &HF3
1133
    CASE 15
1134
      bBuf[2] = &HFC
1135
    CASE 16
1136
      bBuf[2] = &HFF
1137
  END SELECT
1138
1139
  SELECT CASE UCase(sCmd)
1140
    CASE "OFF" ' open
1141
      bBuf[3] = &HCF
1142
    CASE "ON" ' close
1143
      bBuf[3] = &HF3
1144
    CASE "STOP" ' stop
1145
      bBuf[3] = &HFC
1146
  END SELECT
1147
  bBuf[4] = &H80
1148
1149
  WriteMessage(bBuf)
1150
1151
END
1152
1153
' implement properties
1154
PRIVATE FUNCTION TCPHost_Read() AS String
1155
1156
  RETURN sTCPHost
1157
1158
END
1159
1160
PRIVATE SUB TCPHost_Write(Value AS String)
1161
1162
  sTCPHost = Value
1163
1164
END
1165
1166
PRIVATE FUNCTION TCPPort_Read() AS Integer
1167
1168
  RETURN iTCPPort
1169
1170
END
1171
1172
PRIVATE SUB TCPPort_Write(Value AS Integer)
1173
1174
  iTCPPort = Value
1175
1176
END
1177
1178
PRIVATE FUNCTION Interface_Read() AS String
1179
1180
  RETURN sInterface
1181
1182
END
1183
1184
PRIVATE SUB Interface_Write(Value AS String)
1185
1186
  sInterface = Value
1187
1188
END
1189
1190
PRIVATE FUNCTION Baud_Read() AS String
1191
1192
  RETURN sBaud
1193
1194
END
1195
1196
PRIVATE SUB Baud_Write(Value AS String)
1197
1198
  sBaud = Value
1199
1200
END
1201
1202
PRIVATE FUNCTION SerPort_Read() AS String
1203
1204
  RETURN sSerPort
1205
1206
END
1207
1208
PRIVATE SUB SerPort_Write(Value AS String)
1209
1210
  sSerPort = Value
1211
1212
END
1213
1214
PRIVATE FUNCTION RFXComDebug_Read() AS Boolean
1215
1216
  RETURN bRFXComTXDebug
1217
1218
END
1219
1220
PRIVATE SUB RFXComDebug_Write(Value AS Boolean)
1221
1222
  bRFXComTXDebug = Value
1223
1224
END
1225
1226
PRIVATE SUB Handshake_Write(Value AS Boolean)
1227
1228
  bHandshake = Value
1229
1230
END
1231
1232
PRIVATE FUNCTION Handshake_Read() AS Boolean
1233
1234
  RETURN bHandshake
1235
1236
END
1237
1238
PRIVATE FUNCTION RelayPort_Read() AS Integer
1239
1240
  RETURN iRelayPort
1241
1242
END
1243
1244
PRIVATE SUB RelayPort_Write(Value AS Integer)
1245
1246
  iRelayPort = Value
1247
1248
END
1249
1250
PRIVATE SUB DisableX10_Write(Value AS Boolean)
1251
1252
  bDisableX10 = Value
1253
1254
END
1255
1256
PRIVATE FUNCTION DisableX10_Read() AS Boolean
1257
1258
  RETURN bDisableX10
1259
1260
END
1261
1262
PRIVATE SUB EnableARC_Write(Value AS Boolean)
1263
1264
  bEnableARC = Value
1265
1266
END
1267
1268
PRIVATE FUNCTION EnableARC_Read() AS Boolean
1269
1270
  RETURN bEnableARC
1271
1272
END
1273
1274
PRIVATE SUB EnableHarrison_Write(Value AS Boolean)
1275
1276
  bEnableHarrison = Value
1277
1278
END
1279
1280
PRIVATE FUNCTION EnableHarrison_Read() AS Boolean
1281
1282
  RETURN bEnableHarrison
1283
1284
END
1285
1286
PRIVATE SUB EnableKoppla_Write(Value AS Boolean)
1287
1288
  bEnableKoppla = Value
1289
1290
END
1291
1292
PRIVATE FUNCTION EnableKoppla_Read() AS Boolean
1293
1294
  RETURN bEnableKoppla
1295
1296
END
1297
1298
PRIVATE FUNCTION ACAddress1_Read() AS String
1299
1300
  RETURN sACAddress1
1301
1302
END
1303
1304
PRIVATE SUB ACAddress1_Write(Value AS String)
1305
1306
  sACAddress1 = Value
1307
1308
END
1309
1310
PRIVATE FUNCTION ACAddress2_Read() AS String
1311
1312
  RETURN sACAddress2
1313
1314
END
1315
1316
PRIVATE SUB ACAddress2_Write(Value AS String)
1317
1318
  sACAddress2 = Value
1319
1320
END
1321
1322
PRIVATE FUNCTION RFXmitter_Read() AS Boolean
1323
1324
  RETURN bRFXmitter
1325
1326
END
1327
1328
PRIVATE SUB RFXmitter_Write(Value AS Boolean)
1329
1330
  bRFXmitter = Value
1331
1332
END
1333
1334
PRIVATE FUNCTION InterfaceType_Read() AS String
1335
1336
  RETURN sInterfaceType
1337
1338
END
1339
1340
PRIVATE SUB InterfaceType_Write(Value AS String)
1341
1342
  sInterfaceType = Value
1343
1344
END