void uiState_t :: setState ( input_e input, bool setNotCleared ) { unsigned char const imgBits = lock_e | gateOpen_e ; unsigned char const oldState = state_ ; if( setNotCleared ) state_ |= input ; else state_ &= ~input ; if( ( oldState & imgBits ) != ( state_ & imgBits ) ) { image_t const &image = *images_[state_ & imgBits]; if( image.pixData_ ) getFB().render( 0, 0, image.width_, image.height_, (unsigned short *)image.pixData_ ); if( state_ & touch_e ) { invertScreen(); } } else if( ( state_ & touch_e ) != ( oldState & touch_e ) ) { invertScreen(); } }
void udpTouch_t :: onTouch( int x, int y, unsigned pressure, timeval const &tv ) { bool send ; if( first_ || ( !wasTouched_ ) ) { ioctl( audioFd_, SNDCTL_DSP_RESET, 0 ); invertScreen(); wasTouched_ = true ; send = true ; // first press if( 0 < dingBytes_ ) write( audioFd_, dingData_, dingBytes_ ); first_ = false ; } else { long long nowMs = tickMs(); send = ( nowMs - prevTime_ ) > 500 ; } if( send ) { udpHeader_t header ; header.type_ = header.touch ; header.length_ = 0 ; int numSent = sendto( udpSock_, &header, sizeof( header ), 0, (struct sockaddr *)&remote_, sizeof( remote_ ) ); if( sizeof( header ) != numSent ) perror( "touch sendto" ); prevTime_ = tickMs(); } }
void flashScreen( void ) { int i; for( i = 0; i < 4; ++i ) { invertScreen(); SysCtrlDelay( 1000000 ); // Abount 50ms } }
void udpTouch_t :: onRelease( timeval const &tv ) { if( wasTouched_ ) { invertScreen(); ioctl( audioFd_, SNDCTL_DSP_RESET, 0 ); if( 0 < dongBytes_ ) write( audioFd_, dongData_, dongBytes_ ); wasTouched_ = false ; udpHeader_t header ; header.type_ = header.release ; header.length_ = 0 ; int numSent = sendto( udpSock_, &header, sizeof( header ), 0, (struct sockaddr *)&remote_, sizeof( remote_ ) ); if( sizeof( header ) != numSent ) perror( "release sendto" ); prevTime_ = tickMs(); } }