main() { ADCON0 = 0b00001000; // Channel AN2 ADCON1 = 0b10110011; // Right jutified; fRC clock #if refVOLTAGE == 4 FVRCON = 0b10000011; // Fixed voltage set to 4.096 #elif refVOLTAGE == 2 FVRCON = 0b10000010; // Fixed voltage set to 2.048 #elif refVOLTAGE == 1 FVRCON = 0b10000001; // Fixed voltage set to 1.024 #else FVRCON = 0b00000000; // Fixed voltage OFF; set to supply voltage #endif ADON = 1; ANSELA = ANSELB = ANSELC = 0; // Internal 32MHz XTAL OSCCON = 0b11110000; //WDT setup WDTCON = 0; TRISA = ANSELA = 0b00000100; //RA2 analog input PORTA = 0; trisKEY1 = 1; KEY1 = 0; trisKEY2 = 1; KEY2 = 0; pullKEY1 = 1; pullKEY2 = 1; muxLED = 0; refreshLED = 0; ShowMode = eeprom_read(0x00); initDisplay(); divMesure = 0; ShowModeCountdown = 0; for (avgPos = 0; avgPos<8; avgPos++) avgMesure[avgPos].Val = 0; avgPos = 0; // capacitive sensing CPSON = 0; T0XCS = 0; // initialize timer 0; TMR0=0; OPTION_REG = 0b00111000; // no prescale TMR0IE = 1; //TMR0CS = 0; // intialize timer 1 T1CON = 0b01000000; // enable timer interrupt F/1 // 16 bit TMR1 = 0; TMR1ON=1; TMR1IF=0; TMR1IE=1; PEIE=1; /* PIN INTERUPTS */ INTF = 0; INTE = 0; IOCIF = 0; IOCIE = 0; IOCAP = 0b00000000; IOCAN = 0b00000000; /**/ __delay_ms(500); GIE = 1; // enable global interrupts while(1) { CLRWDT(); if ( refreshLED == 1 ) { refreshLED = 0; if (refreshMesurement == 1) { refreshMesurement = 0xffffffff; GIE = 0; // Start ADC conversion ADON = 1; ADGO = 1; while ((ADGO==1) && (refreshMesurement>4) ) { refreshMesurement--; } ADGO = 0; ADON = 0; // Conversion done // Get results mesurement.Val = 0; mesurement.byte.HB = ADRESH; mesurement.byte.LB = ADRESL; GIE=1; refreshMesurement = 0; } refreshSegment(); if (blink==1) muxLED = (++muxLED % 0x80); else muxLED = (++muxLED % 4); } /**/ if (KEY1 == 0) { __delay_ms(50); if (KEY1 == 0) { while (KEY1 == 0) {} ShowMode++; ShowMode &= 0x77; ShowModeCountdown = ShowModeDelay; eeprom_write(0x00, ShowMode); } } if (KEY2 == 0) { __delay_ms(50); if (KEY2 == 0) { while (KEY2 == 0) {} ShowMode += 0x10; ShowMode &= 0x77; ShowModeCountdown = ShowModeDelay; eeprom_write(0x00, ShowMode); } } /**/ } }
void ListEditView::paintEvent(QPaintEvent* e) { // QMainWindow::paintEvent(e); return;//&&& //!!! for experimental purposes // It is possible for this function to be called re-entrantly, // because a re-layout procedure may deliberately ask the event // loop to process some more events so as to keep the GUI looking // responsive. If that happens, we remember the events that came // in in the middle of one paintEvent call and process their union // again at the end of the call. /* if (m_inPaintEvent) { NOTATION_DEBUG << "ListEditView::paintEvent: in paint event already" << endl; if (e) { if (m_havePendingPaintEvent) { if (m_pendingPaintEvent) { QRect r = m_pendingPaintEvent->rect().unite(e->rect()); *m_pendingPaintEvent = QPaintEvent(r); } else { m_pendingPaintEvent = new QPaintEvent(*e); } } else { m_pendingPaintEvent = new QPaintEvent(*e); } } m_havePendingPaintEvent = true; return; } */ //!!! m_inPaintEvent = true; RG_DEBUG << "ListEditView::paintEvent" << endl; if (isCompositionModified()) { // Check if one of the segments we display has been removed // from the composition. // // For the moment we'll have to close the view if any of the // segments we handle has been deleted. for (unsigned int i = 0; i < m_segments.size(); ++i) { if (!m_segments[i]->getComposition()) { // oops, I think we've been deleted close(); return ; } } } m_needUpdate = false; // Scan all segments and check if they've been modified. // // If we have more than one segment modified, we need to update // them all at once with the same time range, otherwise we can run // into problems when the layout of one depends on the others. So // we use updateStart/End to calculate a bounding range for all // modifications. timeT updateStart = 0, updateEnd = 0; int segmentsToUpdate = 0; Segment *singleSegment = 0; for (unsigned int i = 0; i < m_segments.size(); ++i) { Segment* segment = m_segments[i]; unsigned int refreshStatusId = m_segmentsRefreshStatusIds[i]; SegmentRefreshStatus &refreshStatus = segment->getRefreshStatus(refreshStatusId); if (refreshStatus.needsRefresh() && isCompositionModified()) { // if composition is also modified, relayout everything refreshSegment(0); segmentsToUpdate = 0; break; } else if (m_timeSigNotifier->hasTimeSigChanged()) { // not exactly optimal! refreshSegment(0); segmentsToUpdate = 0; m_timeSigNotifier->reset(); break; } else if (refreshStatus.needsRefresh()) { timeT startTime = refreshStatus.from(), endTime = refreshStatus.to(); if (segmentsToUpdate == 0 || startTime < updateStart) { updateStart = startTime; } if (segmentsToUpdate == 0 || endTime > updateEnd) { updateEnd = endTime; } singleSegment = segment; ++segmentsToUpdate; refreshStatus.setNeedsRefresh(false); m_needUpdate = true; } } if (segmentsToUpdate > 1) { refreshSegment(0, updateStart, updateEnd); } else if (segmentsToUpdate > 0) { refreshSegment(singleSegment, updateStart, updateEnd); } if (e) QMainWindow::paintEvent(e); // moved this to the end of the method so that things called // from this method can still test whether the composition had // been modified (it's sometimes useful to know whether e.g. // any time signatures have changed) setCompositionModified(false); //!!! m_inPaintEvent = false; /* if (m_havePendingPaintEvent) { e = m_pendingPaintEvent; m_havePendingPaintEvent = false; m_pendingPaintEvent = 0; paintEvent(e); delete e; } */ }