Im Buttonmenü für Cursor und quick measure das Löschen der Planes richtigstellen: { Achtung: ix läuft jetzt ab 407} //-------------------------------------------- // Cursor Menu Button pressed //-------------------------------------------- case 16: { MenuButtonCheck(-1); if (MenuPopupActive > -1) { Display::DRAWMENUPOPDOWN(); } //CursorChanged = 7; if ((Cursor_Enabled) && (Active_Menu == MenuKey)) { Cursor_Enabled_Old = Cursor_Enabled; Cursor_Enabled = false; Cursor_Data_First_Draw = 0; //Quick_Measure_First_Draw = 0; MenuStatusChanged = 1; // remove the cursor data for (ix = 407 * 20; ix < 430 * 20; ix++) { *(UI_Plane1 + ix) = 0; // delete //*(Buffer_UI2Plane + ix) = 0; // delete Text Guido:del *(UI_Plane2 + ix) =0; //Guido add: delete button-text *(UI_Plane4 + ix) = 0; // delete *(UI_Plane5 + ix) = 0; // delete } LED_ON[5] = 0; LED_ON[6] = 0; Send_LED(); New_Menu = 16; Menu_Changed = 1; MenuAktive = 0; Display::DRAW_ALL_CURSOR(); } else { LED_ON[5] = 1; LED_ON[6] = 1; if (QM_Enabled) { QM_Enabled_Old = QM_Enabled; QM_Enabled = false; Quick_Measure_First_Draw = 0; MenuStatusChanged = 1; LED_ON[7] = 0; //New_Menu = 19; Menu_Changed = 1; //MenuAktive = 0; Display::CALCQMDATA(); } Cursor_Vertical_Active = 1; Cursor_Horizontal_Active = 3; Send_LED(); Cursor_Enabled_Old = Cursor_Enabled; Cursor_Enabled = true; Cursor_Data_First_Draw = 1; MenuStatusChanged = 1; //SelectedChannel = 0; CursorChanged = 1; CursorChanged = 4; //CursorChanged = 3; // remove the cursor data for (ix = 407 * 20; ix < 430 * 20; ix++) { *(UI_Plane1 + ix) = 0; // delete //*(Buffer_UI2Plane + ix) = 0; // delete Text Guido:del *(UI_Plane2 + ix) =0; //Guido add: delete button-text *(UI_Plane4 + ix) = 0; // delete *(UI_Plane5 + ix) = 0; // delete } Display::CALCCURSORDATA(); //Display::DRAWCURSORDATA(0); Display::DRAW_ALL_CURSOR(); New_Menu = 16; Menu_Changed = 1; MenuAktive = 1; } #ifdef _Debug_Cursor_ if (Debug_Mode) printf("CE : %d CB : %d CVA : %d CHA : %d \n", Cursor_Enabled, Cursor_Both_Selected, Cursor_Vertical_Active, Cursor_Horizontal_Active); #endif UpdateMenuTextPlane = true; break; } //-------------------------------------------- // Quick Measure Button pressed //-------------------------------------------- case 19: { // if ((MenuStatus[10][2] == 1) || (XY_Mode == 1)) return; if (XY_Mode == 1) return; MenuButtonCheck(-1); if (MenuPopupActive > -1) { Display::DRAWMENUPOPDOWN(); } if ((QM_Enabled) && (Active_Menu == MenuKey)) { if (MenuPopupActive > -1) { Display::DRAWMENUPOPDOWN(); } QM_Type_Old[0] = QM_Type[0]; QM_Type_Old[1] = QM_Type[1]; QM_Type_Old[2] = QM_Type[2]; QM_Type[0] = 0; QM_Type[1] = 0; QM_Type[2] = 0; QM_Channel[0] = MenuStatus[19][0] - 26; QM_Channel[1] = MenuStatus[19][0] - 26; QM_Channel[2] = MenuStatus[19][0] - 26; QM_Changed[0] = 0; QM_Changed[1] = 0; QM_Changed[2] = 0; Quick_Measure_First_Draw = 1; LED_ON[5] = 0; LED_ON[7] = 0; New_Menu = 19; Menu_Changed = 1; QM_Enabled_Old = QM_Enabled; QM_Enabled = false; // Guido add: remove QM-data // remove the cursor data for (ix = 407 * 20; ix < 430 * 20; ix++) { *(UI_Plane1 + ix) = 0; // delete //*(Buffer_UI2Plane + ix) = 0; // delete Text Guido:del *(UI_Plane2 + ix) = 0; //Guido add: delete button-text *(UI_Plane4 + ix) = 0; // delete *(UI_Plane5 + ix) = 0; // delete } QM_Vertical_Active = 0; QM_Horizontal_Active = 0; Display::CALCQMDATA(); } else { LED_ON[5] = 1; LED_ON[7] = 1; QM_Enabled_Old = QM_Enabled; QM_Enabled = true; QM_Vertical_Active = 3; QM_Horizontal_Active = 3; Quick_Measure_First_Draw = 1; MenuStatusChanged = 1; if (QM_Type[0] == 0) { if (QM_Type_Old[0] == 0) { QM_Type_Old[0] = 5; // Freqency QM_Type_Old[1] = 8; // Peak-Peak QM_Type_Old[2] = 0; } QM_Type[0] = QM_Type_Old[0]; QM_Type[1] = QM_Type_Old[1]; QM_Type[2] = QM_Type_Old[2]; QM_Channel[0] = MenuStatus[19][0] - 26; QM_Channel[1] = MenuStatus[19][0] - 26; QM_Channel[2] = MenuStatus[19][0] - 26; } if (QM_Type[0] > 0) QM_Changed[0] = 1; if (QM_Type[1] > 0) QM_Changed[1] = 1; if (QM_Type[2] > 0) QM_Changed[2] = 1; if (Cursor_Enabled) { Cursor_Enabled_Old = Cursor_Enabled; Cursor_Enabled = false; Cursor_Data_First_Draw = 0; //MenuStatusChanged = 1; // remove the cursor data for (ix = 407 * 20; ix < 430 * 20; ix++) { *(UI_Plane1 + ix) = 0; // delete //*(Buffer_UI2Plane + ix) = 0; // delete Text Guido:del *(UI_Plane2 + ix) = 0; //Guido add: delete button-text *(UI_Plane4 + ix) = 0; // delete *(UI_Plane5 + ix) = 0; // delete } LED_ON[6] = 0; //New_Menu = 16; //Menu_Changed = 1; //MenuAktive = 0; Display::DRAW_ALL_CURSOR(); } Display::CALCQMDATA(); New_Menu = 19; Menu_Changed = 1; MenuAktive = 1; UpdateMenuTextPlane = true; } Send_LED(); break; } In TransferPlanes habe ich eine Fallunterscheidung eingebaut. Man könnte auch die ursprünglichen Werte wieder aktivieren, mir gefällt es aber nicht, wenn unnötige Zeilen transferiert werden. if (UpdateMenuTextPlane) { if ((QM_Enabled == 1) || (Cursor_Enabled == 1)) { TransferDataPlane_asm_persistant(0x008DBB24, 0x00970F30); //BF del -> pixel error } else { TransferDataPlane_asm_persistant(0x008DC254, 0x00971660); //BF -> fixed by Guido } //TransferDataPlane_asm_persistant(0x008DC254, 0x00971660); //BF -> fixed by Guido } Dasselbe Spiel in TransferDataPlane_asm_persistant: void Hardware::TransferDataPlane_asm_persistant(unsigned long Buffer_Adr1, unsigned long Plane_Adr1) { if ((QM_Enabled == 1) || (Cursor_Enabled == 1)) { asm(" PFX %hi(1460) ; Set Counter BF-> change from 1460 to 1000 for new grid to avoid pixel error MOVI %l1,%lo(1460) ; BF-> new values calculated by Guido loopmtpp1: LD %l0, [%i0] ; Load Buffer Data to %r0 ST [%i1], %l0 ; Store it to Plane ADDI %i0, 4 ; Add Address Counter ADDI %i1, 4 SUBI %l1, 1 ; Decrement Line Counter SKPS cc_z BR loopmtpp1 NOP "); } else { asm(" PFX %hi(1000) ; Set Counter BF-> change from 1460 to 1000 for new grid to avoid pixel error MOVI %l1,%lo(1000) ; BF-> new values calculated by Guido loopmtpp1_a: LD %l0, [%i0] ; Load Buffer Data to %r0 ST [%i1], %l0 ; Store it to Plane ADDI %i0, 4 ; Add Address Counter ADDI %i1, 4 SUBI %l1, 1 ; Decrement Line Counter SKPS cc_z BR loopmtpp1_a NOP "); } }