void Encoder::end() { int i, j; #if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP) detachInterrupt(); io_DisableINT(); if(mode == MODE_NOSET) return; #elif defined (DMP_LINUX) lockMCMSIF(); if(mode == MODE_NOSET) {unLockMCMSIF(); return;} #endif mcsif_Disable(mcn, mdn); #if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP) if(mode == MODE_CAPTURE) { disable_MCINT(mcn, SIFB_CAP1INTBIT); disable_MCINT(mcn, SIFB_CAP2INTBIT); disable_MCINT(mcn, SIFB_CAP3INTBIT); } else { disable_MCINT(mcn, SIFB_TRIGRESETBIT); disable_MCINT(mcn, SIFB_USEREVTBIT); } #endif mode = _mcmode[mcn] = MODE_NOSET; _setZPol = false; _dir = 0; #if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP) io_RestoreINT(); #elif defined (DMP_LINUX) unLockMCMSIF(); #endif for(i=0; i<4; i++) { if(_encfunc[i] != NULL) break; for(j=0; j<3; j++) if(_pcapfunc[i][j] != NULL) break; } #if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP) if(i == 4 && j == 3) { mc_outp(MC_GENERAL, 0x38, mc_inp(MC_GENERAL, 0x38) | (1L << mcn)); if(used_irq == 0xff) return; if(irq_UninstallISR(used_irq, (void*)name) == false) printf("irq_uninstall fail\n"); else used_irq = 0xff; } #endif }
void Encoder::end() { int i, j; if(mode == MODE_NOSET) return; detachInterrupt(); io_DisableINT(); mcsif_Disable(mcn, mdn); if(mode == MODE_CAPTURE) { disable_MCINT(mcn, SIFB_CAP1INTBIT); disable_MCINT(mcn, SIFB_CAP2INTBIT); disable_MCINT(mcn, SIFB_CAP3INTBIT); } else { disable_MCINT(mcn, SIFB_TRIGRESETBIT); disable_MCINT(mcn, SIFB_USEREVTBIT); } mode = _mcmode[mcn] = MODE_NOSET; _setZPol = false; io_RestoreINT(); for(i=0; i<4; i++) { if(_encfunc[i] != NULL) break; for(j=0; j<3; j++) if(_pcapfunc[i][j] != NULL) break; } if(i == 4 && j == 3) { mc_outp(MC_GENERAL, 0x38, mc_inp(MC_GENERAL, 0x38) | (1L << mcn)); if(irq_UninstallISR(used_irq, (void*)name) == false) printf("irq_install fail\n"); else used_irq = 0xff; } }