' ****************************************** ' * * ' * test and evaluation code * ' ****************************************** ' 12.02.2006: first coding. ' 13.02.2006: shaking tasks added by kl. ' 15.02.2006: lite tests added gwr. ' 18.11.2015: Revision of firmware ' 19.11.2015: Test code revised. gwr %Psch_Rep = 32 ' repetition test %Psch_shaketask = 34 'task 34 -> 45 for individual shaking tasks %Psch_lite1 = 48 %Psch_lite2 = 49 %Psch_lite3 = 50 %Psch_lite4 = 51 %Psch_Test = 63 ' hardware test without key-pressure %Psch_CC30 = 60 %Psch_CC66 = 61 %Psch_CC66_0 = 62 DECLARE FUNCTION Init_Psch () AS LONG DECLARE SUB Psch_Rep () DECLARE SUB Psch_Note_UD1 () DECLARE SUB Psch_Rep_Stop () DECLARE SUB Psch_Test () ' test for hardware velo scaling and repetition rate DECLARE SUB Psch_Shake(nr AS BYTE) DECLARE SUB PSch_ShakeTask1 () DECLARE SUB PSch_ShakeTask2 () DECLARE SUB PSch_ShakeTask3 () DECLARE SUB PSch_ShakeTask4 () DECLARE SUB PSch_ShakeTask5 () DECLARE SUB PSch_ShakeTask6 () DECLARE SUB PSch_ShakeTask7 () DECLARE SUB PSch_ShakeTask8 () DECLARE SUB PSch_ShakeTask9 () DECLARE SUB PSch_ShakeTask10 () DECLARE SUB PSch_ShakeTask11 () DECLARE SUB PSch_ShakeTask12 () DECLARE SUB Psch_lite1 () DECLARE SUB Psch_lite1_Stop () DECLARE SUB Psch_lite2 () DECLARE SUB Psch_lite2_Stop () DECLARE SUB Psch_lite3 () DECLARE SUB Psch_lite3_Stop () DECLARE SUB Psch_lite4 () DECLARE SUB Psch_lite4_Stop () DECLARE SUB Psch_CC30 () DECLARE SUB Psch_CC66 () DECLARE SUB Psch_CC66_0 () FUNCTION Init_Psch () AS LONG LOCAL retval AS LONG LOCAL m AS ASCIIZ * 20 LOCAL i AS LONG m = " test code" Sendmessage gh.Cockpit, %WM_SETTEXT,0, VARPTR(m) ' cockpit titel ' warning HEX$(Psch.channel) ' Progchange Psch.channel, 122 ' warning "set Psch to patch 122" ' Controller Psch.channel, 66, 127 Task(%Psch_Rep).naam = "Psch" Task(%Psch_Rep).cptr = CODEPTR(Psch_Rep) Task(%Psch_Rep).freq = 2 Task(%Psch_Rep).flags = %False TaskEx(%Psch_Rep).stopCptr = CODEPTR(Psch_Rep_Stop) ' hardware tests: Task(%Psch_Test).naam = "HardTst" Task(%Psch_test).cptr = CODEPTR(Psch_Test) Task(%Psch_Test).freq = 2 Task(%Psch_Test).flags = %False ' Task(%MM_SysxTask).naam = "SendSysx" ' version 1.0 only ' Task(%MM_SysxTask).freq = .33 ' Task(%MM_SysxTask).cptr = CODEPTR(MM_Sysx) 'in m_robots.inc FOR i = 0 TO 11 Task(%Psch_ShakeTask + i).naam = "Shk" + STR$(i) Task(%Psch_ShakeTask + i).freq = 1 NEXT Task(%Psch_ShakeTask).cptr = CODEPTR(PSch_ShakeTask1) Task(%Psch_ShakeTask + 1).cptr = CODEPTR(PSch_ShakeTask2) Task(%Psch_ShakeTask + 2).cptr = CODEPTR(PSch_ShakeTask3) Task(%Psch_ShakeTask + 3).cptr = CODEPTR(PSch_ShakeTask4) Task(%Psch_ShakeTask + 4).cptr = CODEPTR(PSch_ShakeTask5) Task(%Psch_ShakeTask + 5).cptr = CODEPTR(PSch_ShakeTask6) Task(%Psch_ShakeTask + 6).cptr = CODEPTR(PSch_ShakeTask7) Task(%Psch_ShakeTask + 7).cptr = CODEPTR(PSch_ShakeTask8) Task(%Psch_ShakeTask + 8).cptr = CODEPTR(PSch_ShakeTask9) Task(%Psch_ShakeTask + 9).cptr = CODEPTR(PSch_ShakeTask10) Task(%Psch_ShakeTask + 10).cptr = CODEPTR(PSch_ShakeTask11) Task(%Psch_ShakeTask + 11).cptr = CODEPTR(PSch_ShakeTask12) Task(%Psch_lite1).cptr = CODEPTR(Psch_Lite1) Task(%Psch_lite1).naam = "Lite1" Task(%Psch_lite1).freq = 1 TaskEx(%Psch_lite1).StopCptr = CODEPTR(Psch_Lite1_Stop) Task(%Psch_lite2).cptr = CODEPTR(Psch_Lite2) Task(%Psch_lite2).naam = "Lite2" Task(%Psch_lite2).freq = 1 TaskEx(%Psch_lite2).StopCptr = CODEPTR(Psch_Lite2_Stop) Task(%Psch_lite3).cptr = CODEPTR(Psch_Lite3) Task(%Psch_lite3).naam = "Lite3" Task(%Psch_lite3).freq = 1 TaskEx(%Psch_lite3).StopCptr = CODEPTR(Psch_Lite3_Stop) Task(%Psch_lite4).cptr = CODEPTR(Psch_Lite4) Task(%Psch_lite4).naam = "Lite4" Task(%Psch_lite4).freq = 1 TaskEx(%Psch_lite4).StopCptr = CODEPTR(Psch_Lite4_Stop) Task(%Psch_CC30).naam = "CC30" Task(%Psch_CC30).cptr = CODEPTR(Psch_CC30) Task(%Psch_CC30).freq = 25 Task(%Psch_CC30).flags = %False Task(%Psch_CC66).naam = "CC66_On" Task(%Psch_CC66).cptr = CODEPTR(Psch_CC66) Task(%Psch_CC66).freq = 25 Task(%Psch_CC66).flags = %False Task(%Psch_CC66_0).naam = "CC66_Off" Task(%Psch_CC66_0).cptr = CODEPTR(Psch_CC66_0) Task(%Psch_CC66_0).freq = 25 Task(%Psch_CC66_0).flags = %False FUNCTION = %True END FUNCTION SUB Psch_Rep () ' test note repeats ' modified 19.11.2015 to test the autorepeat function using keypressure STATIC note, v AS INTEGER STATIC slnr, udnr cnt AS DWORD IF ISFALSE Task(%Psch_Rep).tog THEN DIM TaskParamLabels(0 TO 3) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Velo" TaskParamLabels(2) = "Pres" TaskParamLabels(3) = "Note" IF ISFALSE Task(%Psch_rep).hParam THEN slnr = %False MakeTaskParameterDialog %Psch_Rep,3,Slider(),1,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Psch_Rep).SliderNumbers(0) UDctrl(TaskEX(%Psch_rep).UpdownNumbers(0)).cptr = CODEPTR(Psch_Note_UD1) ' note UDctrl(TaskEX(%Psch_rep).UpDownNumbers(0)).value = Psch.lowtes Task(%Psch_rep).freq = 2 Slider(slnr).value = Task(%Psch_rep).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, 0 ' off on init. udnr = TaskEX(%Psch_rep).UpDownNumbers(0) RESET cnt END IF ' reset repeats: Controller Psch.channel, 30, %False Task(%Psch_rep).tog = %True END IF IF ISFALSE cnt THEN note = UDctrl(udnr).value v = Slider(slnr+1).value IF v THEN Keypress Psch.channel, note, Slider(slnr+2).value mPlay Psch.channel, note, v END IF ELSE NoteOff Psch.channel, note END IF INCR cnt cnt = cnt MOD 2 Task(%Psch_Rep).freq = 0.1 + ((Slider(slnr).value) / 16!) END SUB SUB Psch_Note_UD1 () ' controls the repetition note to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Psch_Rep).UpDownNumbers(0) noot = UDCtrl(udnr).value IF noot < Psch.lowtes THEN UDctrl(udnr).value = Psch.lowtes : noot = Psch.lowtes IF noot > Psch.hightes THEN UDctrl(udnr).value = Psch.hightes : noot = Psch.hightes SetDlgItemText Task(%Psch_Rep).hparam, %GMT_TEXT0_ID + 16, "N=" & STR$(noot) END SUB SUB Psch_Rep_Stop () Controller Psch.channel, 30, %False ' reset all repeats Controller Psch.channel, 123, %False ' all notes off END SUB SUB Psch_Test () ' test note repeats up to 2015 we had no autorepeat implemented. ' modified 19.11.2015 ' this procedure does not use the autorepeat. STATIC note AS INTEGER LOCAL velo AS INTEGER STATIC slnr AS DWORD STATIC udnr AS DWORD IF ISFALSE Task(%Psch_Test).tog THEN DIM TaskParamLabels(0 TO 2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Level" TaskParamLabels(2) = "Note" IF ISFALSE Task(%Psch_Test).hParam THEN slnr = %False MakeTaskParameterDialog %Psch_Test,2,Slider(),1,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Psch_Test).SliderNumbers(0) UDctrl(TaskEX(%Psch_Test).UpdownNumbers(0)).cptr = CODEPTR(Psch_HWNote_UD1) ' note UDctrl(TaskEX(%Psch_Test).UpDownNumbers(0)).value = Psch.lowtes Task(%Psch_Test).freq = 2 Slider(slnr).value = Task(%Psch_Test).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 4 ' low level on init. udnr = TaskEX(%Psch_Test).UpDownNumbers(0) END IF Controller Psch.channel, 30, %False 'autorepeats OFF Task(%Psch_Test).tog = %True END IF note = UDctrl(udnr).value velo = Slider(slnr+1).value ' for PIC test, so no rescaling here. mPlay Psch.channel, note, velo Task(%Psch_Test).freq = (Slider(slnr).value) / 4! END SUB SUB Psch_HWNote_UD1 () ' controls the note to be played. LOCAL noot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Psch_Test).UpDownNumbers(0) noot = UDCtrl(udnr).value IF noot < Psch.lowtes THEN UDctrl(udnr).value = Psch.lowtes : noot = Psch.lowtes IF noot > Psch.hightes THEN UDctrl(udnr).value = Psch.hightes : noot = Psch.hightes SetDlgItemText Task(%Psch_Test).hparam, %GMT_TEXT0_ID + 16, "N=" & STR$(noot) END SUB 'individual shaking task prototype SUB Psch_Shake(nr AS BYTE) ' 19.11.2015: adapted to use autorepeat functionallity STATIC init AS DWORD STATIC slnr() AS DWORD STATIC pres(), vels() AS DWORD LOCAL velo AS BYTE IF ISFALSE init THEN DIM slnr(11) DIM pres(11) DIM vels(11) END IF IF ISFALSE BIT(init, nr) THEN BIT SET init, nr DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" ' now using key pressure TaskParamLabels(1) = "Velo" MakeTaskParameterDialog %Psch_shakeTask + nr, 2, Slider(), 0, UDctrl(), TaskParamLabels() slnr(nr) = TaskEx(%Psch_shakeTask + nr).SliderNumbers(0) Slider(slnr(nr)).value = 4 Slider(slnr(nr) + 1).value = 4 SendMessage Slider(slnr(nr)).h, %TBM_SetPos, %true, 4 SendMessage Slider(slnr(nr) + 1).h, %TBM_SetPos, %true, 1 END IF 'Task(%Psch_shakeTask + nr).freq = MAX (.125, Slider(slnr(nr)).value / 4) IF pres(nr) <> Slider(slnr(nr)).value THEN Keypress Psch.channel, Psch.LowTes + nr, Slider(slnr(nr)).value pres(nr) = Slider(slnr(nr)).value END IF IF vels(nr) <> Slider(slnr(nr)+1).value THEN vels(nr) = Slider(slnr(nr) + 1).value mPlay Psch.channel, Psch.LowTes + nr, velo END IF ' CONTROL SET TEXT gh.cockpit, %GMT_MSG1, STR$(nr) + STR$(Task(%Psch_shakeTask + nr).freq) + STR$(velo) END SUB SUB Psch_ShakeTask1 Psch_shake 0 END SUB SUB Psch_ShakeTask2 Psch_shake 1 END SUB SUB Psch_ShakeTask3 Psch_shake 2 END SUB SUB Psch_ShakeTask4 Psch_shake 3 END SUB SUB Psch_ShakeTask5 Psch_shake 4 END SUB SUB Psch_ShakeTask6 Psch_shake 5 END SUB SUB Psch_ShakeTask7 Psch_shake 6 END SUB SUB Psch_ShakeTask8 Psch_shake 7 END SUB SUB Psch_ShakeTask9 Psch_shake 8 END SUB SUB Psch_ShakeTask10 Psch_shake 9 END SUB SUB Psch_ShakeTask11 Psch_shake 10 END SUB SUB Psch_ShakeTask12 Psch_shake 11 END SUB SUB Psch_lite1 () ' for the lights we did not implement autorepeat! ' the lights just do ON/OFF STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS DWORD IF ISFALSE Task(%Psch_Lite1).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Psch_lite1).hParam THEN slnr = %False MakeTaskParameterDialog %Psch_Lite1,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Psch_Lite1).SliderNumbers(0) Task(%Psch_lite1).freq = 2 Slider(slnr).value = Task(%Psch_lite1).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = Psch.lowtes + 12 Task(%Psch_lite1).tog = %True END IF IF ISFALSE cnt THEN mPlay Psch.channel, noot, 127 cnt = %True ELSE NoteOff Psch.channel, noot cnt = %False END IF Task(%Psch_Lite1).freq = (Slider(slnr).value) / 2! END SUB SUB Psch_lite1_Stop () NoteOff Psch.channel, 120 ' double mapped on 84 or 120 END SUB SUB Psch_lite2 () STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS BYTE IF ISFALSE Task(%Psch_Lite2).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Psch_Lite2).hParam THEN slnr = %False MakeTaskParameterDialog %Psch_Lite2,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Psch_Lite2).SliderNumbers(0) Task(%Psch_Lite2).freq = 2 Slider(slnr).value = Task(%Psch_Lite2).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = Psch.lowtes + 13 Task(%Psch_Lite2).tog = %True END IF IF ISFALSE cnt THEN mPlay Psch.channel, noot, 127 cnt = %True ELSE NoteOff Psch.channel, noot cnt = %False END IF Task(%Psch_Lite2).freq = (Slider(slnr).value) / 2! END SUB SUB Psch_lite2_Stop () NoteOff Psch.channel, 121 ' double mapped on 85 or 121 END SUB SUB Psch_lite3 () STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS BYTE IF ISFALSE Task(%Psch_Lite3).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Psch_Lite3).hParam THEN slnr = %False MakeTaskParameterDialog %Psch_Lite3,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Psch_Lite3).SliderNumbers(0) Task(%Psch_Lite3).freq = 2 Slider(slnr).value = Task(%Psch_Lite3).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = psch.lowtes + 14 Task(%Psch_Lite3).tog = %True END IF IF ISFALSE cnt THEN mPlay Psch.channel, noot, 127 cnt = %True ELSE NoteOff Psch.channel, noot cnt = %False END IF Task(%Psch_Lite3).freq = (Slider(slnr).value) / 2! END SUB SUB Psch_lite3_Stop () NoteOff Psch.channel, 122 ' double mapped on 86 or 122 END SUB SUB Psch_lite4 () STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS BYTE IF ISFALSE Task(%Psch_Lite4).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" IF ISFALSE Task(%Psch_Lite4).hParam THEN slnr = %False MakeTaskParameterDialog %Psch_Lite4,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Psch_Lite4).SliderNumbers(0) Task(%Psch_Lite4).freq = 2 Slider(slnr).value = Task(%Psch_Lite4).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF cnt = %False noot = Psch.lowtes + 15 Task(%Psch_Lite4).tog = %True END IF IF ISFALSE cnt THEN mPlay Psch.channel, noot, 127 cnt = %True ELSE NoteOff Psch.channel, noot cnt = %False END IF Task(%Psch_Lite4).freq = (Slider(slnr).value) / 2! END SUB SUB Psch_lite4_Stop () NoteOff Psch.channel, 123 ' double mapped on 87 or 123 END SUB SUB Psch_CC30 () STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC noot AS BYTE IF ISFALSE Task(%Psch_CC30).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "CC30" IF ISFALSE Task(%Psch_CC30).hParam THEN slnr = %False MakeTaskParameterDialog %Psch_CC30,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Psch_CC30).SliderNumbers(0) Psch.ctrl(30) = 0 Slider(slnr).value = Psch.ctrl(30) SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value END IF Task(%Psch_CC30).tog = %True END IF IF Psch.ctrl(30) <> slider(slnr).value THEN Controller Psch.channel, 30, slider(slnr).value Psch.ctrl(30) = Slider(slnr).value END IF Task(%Psch_CC30).freq = 25 END SUB SUB Psch_CC66 () Controller Psch.channel, 66, 127 Psch.ctrl(66) = 127 stoptask %Psch_CC66 END SUB SUB Psch_CC66_0 () Controller Psch.channel, 66, 0 Psch.ctrl(66) = 0 stoptask %Psch_CC66_0 END SUB 'EOF