Parasound zTuner
ondrovic
Junior Member
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
Comments
-
Is the 92.7 coming from the turner or is tat the buttons pressed on the touch panel? If its just buttons pressed you could skip the step of formating the string one way just to reformat it later. Just keep track of the buttons pressed and build the string on the fly. Nothing says you can't build the human readable 92.7 string for the feedback and the rs-232 command at the same time from the same button presses.
-
ErikJackman wrote: »Is the 92.7 coming from the turner or is tat the buttons pressed on the touch panel? If its just buttons pressed you could skip the step of formating the string one way just to reformat it later. Just keep track of the buttons pressed and build the string on the fly. Nothing says you can't build the human readable 92.7 string for the feedback and the rs-232 command at the same time from the same button presses.

Buttons pressed on the touch panel ( im using the system keypad )
But never mind I just worked it out -
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.
-
I have finished everything with the code but I am having an issue displaying the feedback on the panel. I will upload the full workspace with panel. Here is the issue I am having:
The feedback is correctly updating if I use the following code :Send_Command dvPanel,"'^TXT-',Itoa(nZtuner_VText_Fields[5]),',0,',sRadio_Data.sBand" ;
It will display a1
for FM and a2
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 -
It looks like the 1 and 2 are ascii versions. Try this:
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 -
I will give that a try and let you know thanks Jeff
-
Just as an aside, the BREAK statements are not necessary in NetLinx. I suppose it doesn't hurt, but NetLinx won't drop through to the next case ever anyway. The same goes for SELECT...ACTIVE statements.
-
Spire_Jeff wrote: »It looks like the 1 and 2 are ascii versions. Try 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 -
Having an issue with the am tuning when done from a keypad. It only works on some of the am channels, any adive based on the code i have? Seems like it isn't working with 3-digit am stations works fine with 4-digits ones.
Thanks
*** EDIT : Fixed it
*** -
Would really like to turn this into a module instead of a include file, but I haven't ever made a module before could someone who has experience with modules help me out?
Thanks
Chris Ondrovic -
Module Progress
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 ProgramPROGRAM_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 *) (***********************************************************)
ModuleMODULE_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 -
Never mind just figured it out
hooray
Categories
- All Categories
- 2.5K AMX General Discussion
- 922 AMX Technical Discussion
- 514 AMX Hardware
- 502 AMX Control Products
- 3 AMX Video Distribution Products
- 9 AMX Networked AV (SVSI) Products
- AMX Workspace & Collaboration Products
- 3.4K AMX Software
- 151 AMX Resource Management Suite Software
- 386 AMX Design Tools
- 2.4K NetLinx Studio
- 135 Duet/Cafe Duet
- 248 NetLinx Modules & Duet Modules
- 57 AMX RPM Forum
- 228 MODPEDIA - The Public Repository of Modules for Everyone
- 943 AMX Specialty Forums
- 2.6K AMXForums Archive
- 2.6K AMXForums Archive Threads
- 1.5K AMX Hardware
- 432 AMX Applications and Solutions
- 249 Residential Forum
- 182 Tips and Tricks
- 146 AMX Website/Forums