func main() global SpeedStep(29) as integer global LowStep as single global HighStep as single global Address as integer global Port as integer global IP as string dim Connected as integer SpeedStep(1) = 1 SpeedStep(14) = 127 SpeedStep(28) = 255 Address = 1234 Connected = 0 print "Loconet Speed Table Creator V0.1" print "(c) Michael Mosher 2007" print " " print "Requires Loconet over TCP server" print " " if FileInfo(".\IP.dat",2) = "True" then IP = FileQuickLoad(".\IP.dat") print "load IP " + IP else IP = "127.0.0.1" print "defualt IP " + IP endif if FileInfo(".\Port.dat",2) = "True" then Port = FileQuickLoad(".\Port.dat") print "load Port " + Port else Port = 1234 print "defualt Port " + Port endif Connect_DisplayForm() Loop: if FormAllButtons() = 1 then if FormButton(Button_Quit,0) > 0 then '------ Quit Handler ----- End endif if Connected = 0 then if FormButton(Button_Save,0) > 0 then '------ Save Handler ----- IP = FormTextBox(Text_IP) Port = FormTextBox(Text_Port) FileQuickSave(".\IP.dat", IP) FileQuickSave(".\Port.dat", Port) endif if FormButton(Button_Connect,0) > 0 then '------ Connect Handler ----- IP = FormTextBox(Text_IP) Port = FormTextBox(Text_Port) if ConnectTCP() = 0 then Main_DisplayForm() CalcSpeedTable() Connected = 1 endif endif else SpeedStep(1) = FormTextBox(Text_Step1) SpeedStep(14) = FormTextBox(Text_Step14) SpeedStep(28) = FormTextBox(Text_Step28) Address = FormTextBox(Text_Address) if FormButton(Button_Calc,0) > 0 then '------ Calc Handler ----- CalcSpeedTable() endif if FormButton(Button_Prog,0) > 0 then '------ Prog Handler ----- CalcSpeedTable() Program() endif if FormButton(Button_File,0) > 0 then '------ File Handler ----- CalcSpeedTable() SaveFile() endif endif endif Goto Loop endfunc '------------------------------------------------------------------------------- func CalcSpeedTable() dim i as integer if SpeedStep(1) < 0 then SpeedStep(1) = 0 if SpeedStep(1) > 255 then SpeedStep(1) = 255 if SpeedStep(14) < 0 then SpeedStep(14) = 0 if SpeedStep(14) > 255 then SpeedStep(14) = 255 if SpeedStep(28) < 0 then SpeedStep(28) = 0 if SpeedStep(28) > 255 then SpeedStep(28) = 255 if SpeedStep(14) < SpeedStep(1) then SpeedStep(14) = SpeedStep(1) if SpeedStep(14) > SpeedStep(28) then SpeedStep(14) = SpeedStep(28) if Address < 0 then Address = 0 if Address > 10239 then Address = 10239 LowStep = SpeedStep(14) - SpeedStep(1) / 13 For i=2 to 13 SpeedStep(i) = SpeedStep(1) + ((i-1) * LowStep) Next HighStep = SpeedStep(28) - SpeedStep(14) / 14 For i=15 to 27 SpeedStep(i) = SpeedStep(14) + ((i-14) * HighStep) Next UpdateForm() endfunc '------------------------------------------------------------------------------- func ConnectTCP() as integer TimerClear(1) SocketConnect(1,IP,Port) WaitLoop: if SocketState(1) = 4 then print "Connected" exit(0) else print "Waiting.... "+SocketData(1,6)+" / "+SocketData(1,5) endif pause(100) if Timer(1) > 30000 then MsgBox("Can't Connect", 0) exit(1) endif Goto WaitLoop endfunc '------------------------------------------------------------------------------- func Program() dim B(15) as integer dim F(4) as string dim i as integer dim j as integer dim k as integer dim Output as string F(0) = "|" F(1) = "/" F(2) = "-" F(3) = "\" k = 0 B(1) = 239 B(2) = 14 B(3) = 124 B(4) = 100 B(5) = 0 B(8) = 0 B(12) = 0 B(13) = 0 B(7) = Address // 128 B(6) = Address \ 128 FOR i = 1 TO 28 B(10) = i + 65 B(11) = SpeedStep(i) // 128 if SpeedStep(i) > 127 then B(9) = 2 else B(9) = 0 endif B(14) = 0 FOR j = 1 TO 13 B(14) = B(14) ^ B(j) NEXT B(14) = B(14) ^ 255 Output = "SEND " + Convert(B(1),"X")+" "+Convert(B(2),"X")+" "+Convert(B(3),"X")+" "+Convert(B(4),"X")+" "+Convert(B(5),"X")+" "+Convert(B(6),"X")+" "+Convert(B(7),"X")+" "+Convert(B(8),"X")+" "+Convert(B(9),"X")+" "+Convert(B(10),"X")+" "+Convert(B(11),"X")+" "+Convert(B(12),"X")+" "+Convert(B(13),"X")+" "+Convert(B(14),"X")+chr(13)+chr(10) SocketOutput(1,Output) print Mid(Output,6,Len(Output)-7) k = k+1 if k > 3 then k = 0 FormLabel(Label_Flip,220,215,20,20,F(k)) pause(100) NEXT FormLabel(Label_Flip,220,215,20,20," ") endfunc '------------------------------------------------------------------------------- func SaveFile() dim i as integer dim CV as integer dim Output as string dim FileName as string FileName = ".ST-" + Address + ".DEC" FileOpen(1,FileName,Create) FileWriteLine(1,"[DecoderData]") FOR i = 1 TO 28 CV = i + 66 Output = "CV" + CV + "=" + SpeedStep(i) FileWriteLine(1,Output) NEXT FileClose(1) endfunc '------------------------------------------------------------------------------- func Main_DisplayForm() ' FormRes(240,268) FormNew() FormBGColor(228,228,228) FormCLS() FormTextColor(0,0,0) FormFont("-",10,1) FormSettings(AlignCenter) FormLabel(Label_Heading,5,1,228,20,"Loconet Speed Table Creator") FormFont("-",9,0) FormSettings(AlignRight) FormLabel(Label_Add,1,25,60,20,"Address:") FormLabel(Label_Step2,24,65,30,20,SpeedStep(2)) FormLabel(Label_Step3,24,85,30,20,SpeedStep(3)) FormLabel(Label_Step4,24,105,30,20,SpeedStep(4)) FormLabel(Label_Step5,24,125,30,20,SpeedStep(5)) FormLabel(Label_Step6,24,145,30,20,SpeedStep(6)) FormLabel(Label_Step7,24,165,30,20,SpeedStep(7)) FormLabel(Label_Step8,78,45,30,20,SpeedStep(8)) FormLabel(Label_Step9,78,65,30,20,SpeedStep(9)) FormLabel(Label_Step10,78,85,30,20,SpeedStep(10)) FormLabel(Label_Step11,78,105,30,20,SpeedStep(11)) FormLabel(Label_Step12,78,125,30,20,SpeedStep(12)) FormLabel(Label_Step13,78,145,30,20,SpeedStep(13)) FormLabel(Label_Step15,132,45,30,20,SpeedStep(15)) FormLabel(Label_Step16,132,65,30,20,SpeedStep(16)) FormLabel(Label_Step17,132,85,30,20,SpeedStep(17)) FormLabel(Label_Step18,132,105,30,20,SpeedStep(18)) FormLabel(Label_Step19,132,125,30,20,SpeedStep(19)) FormLabel(Label_Step20,132,145,30,20,SpeedStep(20)) FormLabel(Label_Step21,132,165,30,20,SpeedStep(21)) FormLabel(Label_Step22,186,45,30,20,SpeedStep(22)) FormLabel(Label_Step23,186,65,30,20,SpeedStep(23)) FormLabel(Label_Step24,186,85,30,20,SpeedStep(24)) FormLabel(Label_Step25,186,105,30,20,SpeedStep(25)) FormLabel(Label_Step26,186,125,30,20,SpeedStep(26)) FormLabel(Label_Step27,186,145,30,20,SpeedStep(27)) FormLine(1,190,240,190) FormSettings(AlignLeft) FormLabel(Label_Step_Lab_Low,10,195,80,20,"Step Low") FormLabel(Label_Step_Lab_High,10,215,80,20,"Step High") FormLabel(Label_Step_Low,100,195,80,20,LowStep) FormLabel(Label_Step_High,100,215,80,20,HighStep) FormBGColor(255,255,255) FormFont("-",9,0) FormSettings(AlignRight) FormTextBox(Text_Address,65,25,40,20,Address) FormTextBox(Text_Step1 ,24,45,30,20,SpeedStep(1)) FormTextBox(Text_Step14 ,78,165,30,20,SpeedStep(14)) FormTextBox(Text_Step28,186,165,30,20,SpeedStep(28)) FormBGColor(211,211,211) FormFont("-",9,1) FormButton(Button_Quit, 0,245,60,20,"Quit") FormButton(Button_Prog, 60,245,60,20,"Prog") FormButton(Button_Calc,120,245,60,20,"Calc") FormButton(Button_File,180,245,60,20,"File") FormBGColor(228,228,228) endfunc '------------------------------------------------------------------------------- func UpdateForm() FormBGColor(228,228,228) FormTextColor(0,0,0) FormFont("-",9,0) FormSettings(AlignRight) FormLabel(Label_Step2,-1,65,30,20,SpeedStep(2)) FormLabel(Label_Step3,-1,85,30,20,SpeedStep(3)) FormLabel(Label_Step4,-1,105,30,20,SpeedStep(4)) FormLabel(Label_Step5,-1,125,30,20,SpeedStep(5)) FormLabel(Label_Step6,-1,145,30,20,SpeedStep(6)) FormLabel(Label_Step7,-1,165,30,20,SpeedStep(7)) FormLabel(Label_Step8,-1,45,30,20,SpeedStep(8)) FormLabel(Label_Step9,-1,65,30,20,SpeedStep(9)) FormLabel(Label_Step10,-1,85,30,20,SpeedStep(10)) FormLabel(Label_Step11,-1,105,30,20,SpeedStep(11)) FormLabel(Label_Step12,-1,125,30,20,SpeedStep(12)) FormLabel(Label_Step13,-1,145,30,20,SpeedStep(13)) ' FormLabel(Label_Step14,-1,165,30,20,SpeedStep(14)) FormLabel(Label_Step15,-1,45,30,20,SpeedStep(15)) FormLabel(Label_Step16,-1,65,30,20,SpeedStep(16)) FormLabel(Label_Step17,-1,85,30,20,SpeedStep(17)) FormLabel(Label_Step18,-1,105,30,20,SpeedStep(18)) FormLabel(Label_Step19,-1,125,30,20,SpeedStep(19)) FormLabel(Label_Step20,-1,145,30,20,SpeedStep(20)) FormLabel(Label_Step21,-1,165,30,20,SpeedStep(21)) FormLabel(Label_Step22,-1,45,30,20,SpeedStep(22)) FormLabel(Label_Step23,-1,65,30,20,SpeedStep(23)) FormLabel(Label_Step24,-1,85,30,20,SpeedStep(24)) FormLabel(Label_Step25,-1,105,30,20,SpeedStep(25)) FormLabel(Label_Step26,-1,125,30,20,SpeedStep(26)) FormLabel(Label_Step27,-1,145,30,20,SpeedStep(27)) FormSettings(AlignLeft) FormLabel(Label_Step_Low,-1,195,80,20,LowStep) FormLabel(Label_Step_High,-1,215,80,20,HighStep) FormBGColor(255,255,255) FormFont("-",9,0) FormSettings(AlignRight) FormTextBox(Text_Address,-1,25,40,20,Address) FormTextBox(Text_Step1 ,24,45,30,20,SpeedStep(1)) FormTextBox(Text_Step14 ,78,165,30,20,SpeedStep(14)) FormTextBox(Text_Step28,186,165,30,20,SpeedStep(28)) FormBGColor(228,228,228) endfunc '------------------------------------------------------------------------------- func Connect_DisplayForm() Console(1) ' No console for PPC '--- Buttons --- gconst Button_Quit 0 gconst Button_Prog 1 gconst Button_Calc 2 gconst Button_Connect 3 gconst Button_Save 4 gconst Button_File 5 '--- Labels --- gconst Label_Heading 0 gconst Label_Add 1 gconst Label_Step2 2 gconst Label_Step3 3 gconst Label_Step4 4 gconst Label_Step5 5 gconst Label_Step6 6 gconst Label_Step7 7 gconst Label_Step8 8 gconst Label_Step9 9 gconst Label_Step10 10 gconst Label_Step11 11 gconst Label_Step12 12 gconst Label_Step13 13 gconst Label_Step15 15 gconst Label_Step16 16 gconst Label_Step17 17 gconst Label_Step18 18 gconst Label_Step19 19 gconst Label_Step20 20 gconst Label_Step21 21 gconst Label_Step22 22 gconst Label_Step23 23 gconst Label_Step24 24 gconst Label_Step25 25 gconst Label_Step26 26 gconst Label_Step27 27 gconst Label_Step_Low 28 gconst Label_Step_Lab_Low 29 gconst Label_Step_High 30 gconst Label_Step_Lab_High 31 gconst Label_Flip 32 gconst Label_IP 33 gconst Label_Port 34 '--- TextBoxes --- gconst Text_Address 0 gconst Text_Step1 1 gconst Text_IP 2 gconst Text_Port 3 gconst Text_Step14 4 gconst Text_Step28 5 ' FormRes(240,268) FormNew() FormBGColor(228,228,228) FormCLS() FormTextColor(0,0,0) FormFont("-",10,1) FormSettings(AlignCenter) FormLabel(Label_Heading,0,0,240,20,"Loconet over TCP connection") FormFont("-",9,0) FormSettings(AlignRight) FormLabel(Label_IP, 0, 20,60,20,"IP:") FormLabel(Label_Port, 0, 40,60,20,"Port:") FormBGColor(255,255,255) FormSettings(AlignLeft) FormTextBox(Text_IP, 65, 20,100,20,IP) FormTextBox(Text_Port, 65, 40,100,20,Port) FormSettings(Alignleft) FormBGColor(211,211,211) FormFont("-",9,1) FormButton(Button_Quit, 10,245,60,20,"Quit") FormButton(Button_Connect, 80,245,70,20,"Connect") FormButton(Button_Save, 160,245,70,20,"Save") endfunc