Parasound zTuner
I writing a program to handle the Parasound zTuner. I am having an issue tyring to use the system keypad for direct station entry.
The keypad will return the following
But the zTuner's command to go to a direct frequency is the following
Here is what I have so far but could really use some help getting it to parse correctly
Thanks
The keypad will return the following
92.7 -or- 100.7
But the zTuner's command to go to a direct frequency is the following
W 1 6 92 70 -or- W 1 6 100 70
Here is what I have so far but could really use some help getting it to parse correctly
PROGRAM_NAME='zTuner'
(***********************************************************)
(***********************************************************)
(* FILE_LAST_MODIFIED_ON: 04/05/2006 AT: 09:00:25 *)
(***********************************************************)
(* System Type : NetLinx *)
(***********************************************************)
(* REV HISTORY: *)
(***********************************************************)
(*
$History: $
200ms delay between commands or unit will lock up
Version 1:
----------
Control of the device; Presets, Tune, Band & Feedback
Version 2:
----------
Ability to push and hold Preset # and change the station
*)
(***********************************************************)
(* DEVICE NUMBER DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_DEVICE
dvZtuner = 5001:1:0
dvPanel = 10024:1:0
(***********************************************************)
(* CONSTANT DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_CONSTANT
Volatile Integer nZtuner_Preset_Buttons[]=
{
500, /// Preset 1
501, /// Preset 2
502, /// Preset 3
503, /// Preset 4
504, /// Preset 5
505, /// Preset 6
506, /// Preset 7
507, /// Preset 8
508, /// Preset 9
509, /// Preset 10
510, /// Preset 11
511, /// Preset 12
512, /// Preset 13
513, /// Preset 14
514, /// Preset 15
515, /// Preset 16
516, /// Preset 17
517, /// Preset 18
518, /// Preset 19
519, /// Preset 20
520, /// Preset 21
521, /// Preset 22
522, /// Preset 23
523, /// Preset 24
524, /// Preset 25
525, /// Preset 26
526, /// Preset 27
527, /// Preset 28
528, /// Preset 29
529 /// Preset 30
}
Volatile Integer nZtuner_Tune_Buttons[]=
{
530, /// Auto Tune Up
531, /// Auto Tune Down
532, /// Manual Step Up
533 /// Manual Step Down
}
Volatile Integer nZtuner_Band_Buttons[]=
{
534, /// FM
535, /// AM
536 /// Band Toggle
}
Volatile Integer nZtuner_VText_Fields[]=
{
1, /// Display 1
2, /// Display 2
3, /// Display 3
4 /// Display 4
}
Volatile Integer nZtuner_Preset_Control_Buttons[]=
{
537, /// Next Preset
538 /// Previous Preset
}
(***********************************************************)
(* DATA TYPE DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_TYPE
(***********************************************************)
(* VARIABLE DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_VARIABLE
Persistent Integer Debug_Status
(***********************************************************)
(* LATCHING DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_LATCHING
(***********************************************************)
(* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *)
(***********************************************************)
DEFINE_MUTUALLY_EXCLUSIVE
(***********************************************************)
(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *)
(***********************************************************)
(* EXAMPLE: DEFINE_FUNCTION <RETURN_TYPE> <NAME> (<PARAMETERS>) *)
(* EXAMPLE: DEFINE_CALL '<NAME>' (<PARAMETERS>) *)
(***********************************************************)
Define_Function Char debug(Char sMsg[])
{
If(Debug_Status)
Send_String 0,"'Debug : ',' Line : ',Itoa(__Line__),' :: ',sMsg"
}
Define_Function SysKP_Parsing(Char sQue[100])
{
Local_Var Char sWork[25]
Local_Var Char sTrash[25]
If(Debug_Status)
debug("'SysKP_Parsing :: ','sQue : ',sQue")
sFormat(sQue)
If(Debug_Status)
debug("'SysKP_Parsing :: ','sQue : ',sQue")
Send_String dvZtuner,"sQue,13"
}
Define_Function sFormat(Char sQue[100])
{
Local_Var Char sWork[25]
Local_Var Char sTrash[25]
Local_Var Char sWork_Temp_1[25]
Local_Var Char sWork_Temp_2[25]
Local_Var Char sNum_1[4]
Local_Var Char sNum_2[2]
If(Debug_Status) /// Debug information
debug("'sFormat :: ','Formatting data.'")
Select
{
Active(Find_String(sQue,'.',1)):
{
If(Debug_Status)
debug("'sFormat :: ','Found a . in the data.'")
}
Active(!(Find_String(sQue,'.',1))):
{
If(Debug_Status)
debug("'sFormat :: ','Not a . in the data.'")
sNum_1 = Left_String(sQue,2)
If(Debug_Status)
debug("'sFormat :: ','sNum_1 : ',sNum_1")
sNum_2 = Right_String(sQue,2)
If(Debug_Status)
debug("'sFormat :: ','sNum_2 : ',sNum_2")
sQue = "sNum_1,' ',sNum_2"
If(Debug_Status)
debug("'sFormat :: ','sQue : ',sQue")
}
}
}
(***********************************************************)
(* STARTUP CODE GOES BELOW *)
(***********************************************************)
DEFINE_START
(***********************************************************)
(* THE EVENTS GO BELOW *)
(***********************************************************)
DEFINE_EVENT
Data_Event[dvZtuner]
{
Online:
{
Send_Command dvZtuner,"'SET BAUD 9600,N,8,1'"
If(Debug_Status)
debug("'Device Online :: Setting Communication'")
}
String:
{
Local_Var Char sBuffer[500]
Local_Var Char sTrash[500]
Local_Var Char sTemp[500]
Local_Var Char sStation[10]
Local_Var Char sBand[2]
sBuffer = Data.Text
}
}
Data_Event[dvPanel]
{
String:
{
Local_Var Char sQue[1000]
Local_Var Char sTrash[100]
Local_Var Char sResponse[100]
sQue = Data.Text
If(Debug_Status)
debug("'Data.Text : ',Data.Text")
Select
{
Active(Find_String(sQue,'Radio-',1)):
{
sTrash = Remove_String(sQue,'Radio-',1)
If(Debug_Status)
debug("'Keypad Detection :: ','Set the keypad to Radio mode.'")
}
Active(Find_String(sQue,'KEYP-',1)):
{
sTrash = Remove_String(sQue,'KEYP-',1)
sResponse = Remove_String(sQue,sQue,1)
If(Debug_Status)
debug("'Keypad Detection :: ','Send the keypad string to the function.',' sResponse : ',sResponse")
SysKP_Parsing(sResponse)
}
Active(Find_String(sQue,'KEYB-',1)):
{
sTrash = Remove_String(sQue,'KEYB-',1)
sResponse = Remove_String(sQue,sQue,1)
If(Debug_Status)
debug("'Keypad Detection :: ','Send the keyboard string to the function.',' sResponse : ',sResponse")
SysKP_Parsing(sResponse)
}
}
}
}
Button_Event[dvPanel,nZtuner_Preset_Buttons]
{
Push:
{
/// Do Nothing :)
}
Release:
{
Local_Var Integer nButton
Local_Var Char sCmd[15]
nButton = Get_Last(nZtuner_Preset_Buttons)
sCmd = "'W 1 3 1 ',ITOA(nButton)"
If(Debug_Status)
debug("'Radio Presets :: ','sCmd : ',sCmd")
Send_String dvZtuner,"sCmd,13"
}
Hold[20]:
{
Local_Var Integer nButton
Local_Var Char sCmd[15]
nButton = Get_Last(nZtuner_Preset_Buttons)
sCmd = "'W 1 3 2 ',Itoa(nButton)"
If(Debug_Status)
debug("'Memorizing Channel into preset :: ','sCmd : ',sCmd")
Send_String dvZtuner,"sCmd,13"
}
}
Button_Event[dvPanel,nZtuner_Tune_Buttons]
{
Push:
{
Local_Var Integer nButton
Local_Var Char sCmd[15]
nButton = Get_Last(nZtuner_Tune_Buttons)
sCmd = "'W 1 7 ',ITOA(nButton)"
If(Debug_Status)
debug("'Radio Tune :: ','sCmd : ',sCmd")
Send_String dvZtuner,"sCmd,13"
}
}
Button_Event[dvPanel,nZtuner_Band_Buttons]
{
Push:
{
Local_Var Integer nButton
Local_Var Char sCmd[15]
nButton = Get_Last(nZtuner_Band_Buttons)
If(nButton == 3)
nButton = 10
sCmd = "'W 1 8 ',Itoa(nButton)"
If(Debug_Status)
debug("'Radio Band :: ','sCmd : ',sCmd")
Send_String dvZtuner,"sCmd,13"
}
}
Button_Event[dvPanel,nZtuner_Preset_Control_Buttons]
{
Push:
{
Local_Var Integer nButton
Local_Var Char sCmd[15]
nButton = Get_Last(nZtuner_Preset_Control_Buttons) + 2
sCmd = "'W 1 3 ',Itoa(nButton)"
If(Debug_Status)
debug("'Radio Preset Control :: ','sCmd : ',sCmd")
Send_String dvZtuner,"sCmd,13"
}
}
(***********************************************************)
(* THE ACTUAL PROGRAM GOES BELOW *)
(***********************************************************)
DEFINE_PROGRAM
(***********************************************************)
(* END OF PROGRAM *)
(* DO NOT PUT ANY CODE BELOW THIS COMMENT *)
(***********************************************************)
Thanks
0
Comments
Buttons pressed on the touch panel ( im using the system keypad )
But never mind I just worked it out
If it works great, but I think you did more work then you needed to. Good practice though.
The feedback is correctly updating if I use the following code :
It will display a for FM and a for AM
However it will not work when trying to do this :
Switch(sRadio_Data.sBand) { Case 1: {Send_Command dvPanel,"'^TXT-',Itoa(nZtuner_VText_Fields[5]),',0,','FM'" Break} Case 2: {Send_Command dvPanel,"'^TXT-',Itoa(nZtuner_VText_Fields[5]),',0,','AM'" Break} }What am I doing wrong?
Thanks for the advice / help
Switch(ATOI(sRadio_Data.sBand)) { Case 1: {Send_Command dvPanel,"'^TXT-',Itoa(nZtuner_VText_Fields[5]),',0,','FM'" Break} Case 2: {Send_Command dvPanel,"'^TXT-',Itoa(nZtuner_VText_Fields[5]),',0,','AM'" Break} }Or, you could do this:
Switch(sRadio_Data.sBand) { Case '1': {Send_Command dvPanel,"'^TXT-',Itoa(nZtuner_VText_Fields[5]),',0,','FM'" Break} Case '2': {Send_Command dvPanel,"'^TXT-',Itoa(nZtuner_VText_Fields[5]),',0,','AM'" Break} }You could also add a default condition that alerts you to the fact that there was a problem.
Jeff
Worked like a charm thanks again
Thanks
*** EDIT : Fixed it
Thanks
Chris Ondrovic
Here is as far as I have gotten. ( First attempt @ writing a module )
I can successfully control the zTuner via the CP4 & MVP.
The MVP I have control, debug statements & feedback.
The CP4 controls the device but will not update the feedback, it will also not trigger the debug that is programmed into the code.
Any ideas?
Main Program
PROGRAM_NAME='zTuner' (***********************************************************) (***********************************************************) (* FILE_LAST_MODIFIED_ON: 04/05/2006 AT: 09:00:25 *) (***********************************************************) (* System Type : NetLinx *) (***********************************************************) (* REV HISTORY: *) (***********************************************************) (* $History: $ 200ms delay between commands or unit will lock up [x] Version 1: - Done ---------- Control of the device; Presets, Tune, Band & Feedback [x] Version 2: - Still locks up tuner ---------- Ability to push and hold Preset # and change the station : Locks up tuner Version 3: - Still locks up tuner ---------- Add . to FM Stations for display [] Add Preset stored notification to panel when new preset is stored [x] : not using because it locks up the tuner Version 4: - Done ---------- AM stations with only 3-digits aren't working so need from keypad parsing, need to enter 0, then station to getit to work properly [x] Version 5: - Still locks up tuner ---------- Need to get Preset Storing working correctly a.> Push & Hold Sets Current Station to Preset b.> Updates Panel Information c.> Add vText that tells you the station has been added Version 6: - Done ---------- Rewritting string parsing to see if i can make it more efficent ( ztuner locks up and physically needs to be unplugged for 3 mins to clear everything : Its an issue with the ztuner itself, thats why they release new version of the protocol and firmware ) Version 7: - Not Done; controling on cp4 but not updating feedback ---------- Add CP4 Panels, create a way to determine which panel is being used and only update that panel Version 8: ---------- Turning into a module *) (***********************************************************) (* DEVICE NUMBER DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_DEVICE dvZtuner = 5001:1:0 dvMVP = 10024:1:0 dvCP4_1a = 128:1:1 dvCP4_1b = 129:1:1 dvCP4_1c = 130:1:1 dvCP4_1d = 131:1:1 dvCP4_2a = 132:1:1 dvCP4_2b = 133:1:1 dvCP4_2c = 134:1:1 dvCP4_2d = 135:1:1 (***********************************************************) (* CONSTANT DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_CONSTANT Volatile Integer nZtuner_Preset_Buttons[]= { 209, /// Preset 1 210, /// Preset 2 211, /// Preset 3 212, /// Preset 4 213, /// Preset 5 214, /// Preset 6 215, /// Preset 7 216, /// Preset 8 217, /// Preset 9 9999, /// Preset 10 9999, /// Preset 11 9999, /// Preset 12 9999, /// Preset 13 9999, /// Preset 14 9999, /// Preset 15 9999, /// Preset 16 9999, /// Preset 17 9999, /// Preset 18 9999, /// Preset 19 9999, /// Preset 20 9999, /// Preset 21 9999, /// Preset 22 9999, /// Preset 23 9999, /// Preset 24 9999, /// Preset 25 9999, /// Preset 26 9999, /// Preset 27 9999, /// Preset 28 9999, /// Preset 29 9999 /// Preset 30 } Volatile Integer nZtuner_Tune_Buttons[]= { 206, /// Auto Tune Up 207, /// Auto Tune Down 9999, /// Manual Step Up 9999 /// Manual Step Down } Volatile Integer nZtuner_Band_Buttons[]= { 9999, /// FM 9999, /// AM 208 /// Band Toggle } Volatile Integer nZtuner_VText_Fields[]= { 1, /// Power Status : Not used 2, /// Current Status 3, /// Current Preset # 4, /// Current Frequencey 5, /// Current Band 6 /// Station Preset Info } Volatile Integer nZtuner_Preset_Control_Buttons[]= { 9999, /// Next Preset 9999 /// Previous Preset } (***********************************************************) (* DATA TYPE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_TYPE (***********************************************************) (* VARIABLE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_VARIABLE Dev dvPanel[]= {dvCP4_1a,dvCP4_2a,dvMVP} (***********************************************************) (* LATCHING DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_LATCHING (***********************************************************) (* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_MUTUALLY_EXCLUSIVE (***********************************************************) (* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) (***********************************************************) (* EXAMPLE: DEFINE_FUNCTION <RETURN_TYPE> <NAME> (<PARAMETERS>) *) (* EXAMPLE: DEFINE_CALL '<NAME>' (<PARAMETERS>) *) (***********************************************************) (***********************************************************) (* STARTUP CODE GOES BELOW *) (***********************************************************) DEFINE_START DEFINE_MODULE 'Z-Tuner Mod' modTuner1(dvCP4_1a, dvZtuner, nZtuner_Preset_Buttons ,nZtuner_Tune_Buttons,nZtuner_Band_Buttons,nZtuner_VText_Fields,nZtuner_Preset_Control_Buttons) DEFINE_MODULE 'Z-Tuner Mod' modTuner2(dvCP4_2a, dvZtuner, nZtuner_Preset_Buttons ,nZtuner_Tune_Buttons,nZtuner_Band_Buttons,nZtuner_VText_Fields,nZtuner_Preset_Control_Buttons) DEFINE_MODULE 'Z-Tuner Mod' modTuner3(dvMVP, dvZtuner, nZtuner_Preset_Buttons ,nZtuner_Tune_Buttons,nZtuner_Band_Buttons,nZtuner_VText_Fields,nZtuner_Preset_Control_Buttons) (***********************************************************) (* THE EVENTS GO BELOW *) (***********************************************************) DEFINE_EVENT (***********************************************************) (* THE ACTUAL PROGRAM GOES BELOW *) (***********************************************************) DEFINE_PROGRAM (***********************************************************) (* END OF PROGRAM *) (* DO NOT PUT ANY CODE BELOW THIS COMMENT *) (***********************************************************)Module
MODULE_NAME='Z-Tuner Mod' (Dev dvTP, Dev dvDevice, Integer nPreset_Buttons[], Integer nTune_Buttons[], Integer nBand_Buttons[], Integer nVText_Fields[], Integer nPreset_Control_Buttons[] ) (***********************************************************) (***********************************************************) (* FILE_LAST_MODIFIED_ON: 04/04/2006 AT: 11:33:16 *) (***********************************************************) (* System Type : NetLinx *) (***********************************************************) (* REV HISTORY: *) (***********************************************************) (* $History: $ *) (***********************************************************) (* DEVICE NUMBER DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_DEVICE //dvZtuner = 5001:1:1 (***********************************************************) (* CONSTANT DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_CONSTANT (***********************************************************) (* DATA TYPE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_TYPE Structure _Radio_Information { Char sPower[1] Char sPreset[2] Char sFrequency[12] Char sStatus[1] Char sBand[1] } (***********************************************************) (* VARIABLE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_VARIABLE Integer Debug_Status Integer nPanel Persistent _Radio_Information sRadio_Data (***********************************************************) (* LATCHING DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_LATCHING (***********************************************************) (* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *) (***********************************************************) DEFINE_MUTUALLY_EXCLUSIVE (***********************************************************) (* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) (***********************************************************) (* EXAMPLE: DEFINE_FUNCTION <RETURN_TYPE> <NAME> (<PARAMETERS>) *) (* EXAMPLE: DEFINE_CALL '<NAME>' (<PARAMETERS>) *) Define_Function Char debug(Char sMsg[]) { If(Debug_Status) Send_String 0,"'Debug : ',sMsg" } Define_Function SysKP_Parsing(Char sQue[100]) { Local_Var Char sWork[25] Local_Var Char sTrash[25] If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' SysKP_Parsing :: ','sQue : ',sQue") If(Length_String(sQue = 3)) sQue = "'0',sQue" sFormat(sQue) If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' SysKP_Parsing :: ','sQue : ',sQue") Send_String dvDevice,"sQue,13" } Define_Function sFormat(Char sQue[100]) { Local_Var Char sWork[25] Local_Var Char sTrash[25] Local_Var Char sWork_Temp_1[25] Local_Var Char sWork_Temp_2[25] Local_Var Char sNum_1[4] Local_Var Char sNum_2[2] If(Debug_Status) /// Debug information debug("':: Line : ',Itoa(__Line__),' sFormat :: ','Formatting data.'") Select { Active(Find_String(sQue,'.',1)): { If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' sFormat :: ','Found a . in the data.'") sWork_Temp_1 = Remove_String(sQue,'.',1) If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' sFormat :: ','sWork_Temp_1 : ',sWork_Temp_1") sNum_1 = Left_String(sWork_Temp_1,Length_String(sWork_Temp_1) -1) If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' sFormat :: ','sNum_1 : ',sNum_1") sNum_2 = sQue If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' sFormat :: ','sNum_2 : ',sNum_2") sQue = "'W 1 6 ',sNum_1,' ',sNum_2,'0'" } Active(!(Find_String(sQue,'.',1))): { If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' sFormat :: ','Not a . in the data.'") sNum_1 = Left_String(sQue,2) If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' sFormat :: ','sNum_1 : ',sNum_1") sNum_2 = Right_String(sQue,2) If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' sFormat :: ','sNum_2 : ',sNum_2") sQue = "'W 1 6 ',sNum_1,' ',sNum_2" If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' sFormat :: ','sQue : ',sQue") } } } (* Read Commands 'R 1 1',13 = Display Power Status : 0=Off; 1=On [X] 'R 1 3 1',13 = Display Current Preset : Preset Number 1 -30 [X] 'R 1 6',13 = Display Current Frequency : Frequency Number [X] 'R 1 9',13 = Display Current Stereo Status : 1=Stereo; 2=Mono [X] 'R 1 8',13 = Display Current Band : 1=FM; 2=AM [X] *) Define_Function Update_Feedback_V2() { If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Updating Feedback on panel'") (* Send Preset Info to Panel *) Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[3]),',0,','P',sRadio_Data.sPreset" ; (* Send Frequency Info to Panel *) Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[4]),',0,',sRadio_Data.sFrequency" ; (* Send Band Info to Panel*) Switch(sRadio_Data.sBand) { Case '1': {Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[5]),',0,','FM'" Break} Case '2': {Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[5]),',0,','AM'" Break} } Switch(sRadio_Data.sStatus) { Case '1': {Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[2]),',0,','STEREO'" Break} Case '2': {Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[2]),',0,','MONO'" Break} } Switch(sRadio_Data.sPower) { Case '0': {Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[1]),',0,','OFF'" Break} Case '1': {Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[1]),',0,','ON'" Break} } } Define_Function Char Poll () { If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Poll :: ','Checking power status'") Send_String dvDevice,"'R 1 1',13" Wait 5 If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Poll :: ','Checking current preset'") Send_String dvDevice,"'R 1 3 1',13" Wait 10 If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Poll :: ','Checking current frequency'") Send_String dvDevice,"'R 1 6',13" Wait 15 If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Poll :: ','Checking current mode'") Send_String dvDevice,"'R 1 9',13" Wait 20 If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Poll :: ','Checking current band'") Send_String dvDevice,"'R 1 8',13" Wait 25 Update_Feedback_V2() } (***********************************************************) (* STARTUP CODE GOES BELOW *) (***********************************************************) DEFINE_START (***********************************************************) (* THE EVENTS GO BELOW *) (***********************************************************) DEFINE_EVENT Data_Event[dvDevice] { Online: { Send_Command dvDevice,"'SET BAUD 9600,N,8,1'" If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Device Online :: Setting Communication'") } String: { Local_Var Char sWork1[25] Local_Var Char sWork2[25] Local_Var Char sWork3[25] Local_Var Char sWork4[25] Local_Var Char sTrash1[25] Local_Var Char sTrash2[25] Local_Var Char sTrash3[25] Local_Var Char sTrash4[25] Local_Var Char sTmp1[25] Local_Var Char sTmp2[25] Local_Var Char sTmp3[25] Local_Var Char sTmp4[25] sWork1 = Remove_String(Data.Text,"13",1) sRadio_Data.sPower = Left_String(sWork1,1) sWork2 = Remove_String(Data.Text,"13",2) sRadio_Data.sPreset = Left_String(sWork2,1) sTrash1 = Remove_String(Data.Text,"13",2) sTmp1 = Right_String(sTrash1,Length_String(sTrash1) - 1) sTrash2 = Remove_String(Data.Text,"13",2) sTmp2 = Right_String(sTrash2,Length_String(sTrash2) - 1) sTmp3 = Left_String(sTmp1,Length_String(sTmp1) - 1) sTmp4 = Left_String(sTmp2,Length_String(sTmp2) - 1) sWork3 = Remove_String(Data.Text,"13",3) sRadio_Data.sStatus = Left_String(sWork3,Length_String(sWork3) - 1) sWork4 = Remove_String(Data.Text,"13",4) sRadio_Data.sBand = Left_String(sWork4,Length_String(sWork4) - 1) Switch(sRadio_Data.sBand) { Case '1': {sRadio_Data.sFrequency = "sTmp3,'.',sTmp4,' MHz'" Break} Case '2': {sRadio_Data.sFrequency = "sTmp3,sTmp4,' kHz'" Break} } } } Data_Event[dvTP] { Online: { Wait 25 Poll() } String: { Local_Var Char sQue[1000] Local_Var Char sTrash[100] Local_Var Char sResponse[100] sQue = Data.Text If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Data.Text : ',Data.Text") Select { Active(Find_String(sQue,'Radio-',1)): { sTrash = Remove_String(sQue,'Radio-',1) If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Keypad Detection :: ','Set the keypad to Radio mode.'") Wait 5 Poll() } Active(Find_String(sQue,'KEYP-',1)): { sTrash = Remove_String(sQue,'KEYP-',1) sResponse = Remove_String(sQue,sQue,1) If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Keypad Detection :: ','Send the keypad string to the function.',' sResponse : ',sResponse") SysKP_Parsing(sResponse) } Active(Find_String(sQue,'KEYB-',1)): { sTrash = Remove_String(sQue,'KEYB-',1) sResponse = Remove_String(sQue,sQue,1) If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Keypad Detection :: ','Send the keyboard string to the function.',' sResponse : ',sResponse") SysKP_Parsing(sResponse) } } } } Button_Event[dvTP,nPreset_Buttons] { Push: { /// Do Nothing :) } Release: { Local_Var Integer nButton Local_Var Char sCmd[15] nButton = Get_Last(nPreset_Buttons) sCmd = "'W 1 3 1 ',ITOA(nButton)" If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Radio Presets :: ','sCmd : ',sCmd") Send_String dvDevice,"sCmd,13" Wait 5 Poll() } Hold[10]: { Local_Var Integer nButton Local_Var Char sCmd[15] nButton = Get_Last(nPreset_Buttons) sCmd = "'W 1 3 2 ',Itoa(nButton)" If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Memorizing Channel into preset :: ','sCmd : ',sCmd") Send_Command dvTP,"'@PPG-[Tuner] - Preset;Main Page'" Send_Command dvTP,"'^TXT-',Itoa(nVText_Fields[6]),',0,','Station ',sRadio_Data.sFrequency,' stored into Preset # ',Itoa(nButton)" Send_String dvDevice,"sCmd,13" } } Button_Event[dvTP,nTune_Buttons] { Push: { Local_Var Integer nButton Local_Var Char sCmd[15] nButton = Get_Last(nTune_Buttons) sCmd = "'W 1 7 ',ITOA(nButton)" If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Radio Tune :: ','sCmd : ',sCmd") Send_String dvDevice,"sCmd,13" } Release: { Wait 5 Poll() } } Button_Event[dvTP,nBand_Buttons] { Push: { Local_Var Integer nButton Local_Var Char sCmd[15] nButton = Get_Last(nBand_Buttons) If(nButton == 3) nButton = 10 sCmd = "'W 1 8 ',Itoa(nButton)" If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Radio Band :: ','sCmd : ',sCmd") Send_String dvDevice,"sCmd,13" } Release: { Wait 5 Poll() } } Button_Event[dvTP,nPreset_Control_Buttons] { Push: { Local_Var Integer nButton Local_Var Char sCmd[15] nButton = Get_Last(nPreset_Control_Buttons) + 2 sCmd = "'W 1 3 ',Itoa(nButton)" If(Debug_Status) debug("':: Line : ',Itoa(__Line__),' Radio Preset Control :: ','sCmd : ',sCmd") Send_String dvDevice,"sCmd,13" } Release: { Wait 5 Poll() } } Button_Event[dvTP,1000] { Push: { Debug_Status = Debug_Status + 1 If(Debug_Status > 1) {Debug_Status = 0} Switch(Debug_Status) { Case 0: {Off[dvTP,1000] Break} Case 1: {On[dvTP,1000] Break} } } } (***********************************************************) (* THE ACTUAL PROGRAM GOES BELOW *) (***********************************************************) DEFINE_PROGRAM (***********************************************************) (* END OF PROGRAM *) (* DO NOT PUT ANY CODE BELOW THIS COMMENT *) (***********************************************************)Thanks for the help...... again
Chris Ondrovic