Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-10-2010, 10:51   #1
TRF83
Senior Member
 
L'Avatar di TRF83
 
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1960
[C] Algoritmo gestione Single click/Double click/Right click

Ciao a tutti, avrei bisogno di un consulto su di un algoritmo scritto per un microcontrollore (ma tanto è c, quindi la destinazione conta poco! ) per la gestione di click singoli, singoli prolungati, doppio click, click destro e click destro prolungato. A me pare funzionare (e le prime prove mi davano ragione..), ma ora..non va più. Le soglie (SOGLIA_CLICK,SOGLIA_DCLICK e SOGLIA_RCLICK sono tutte impostate ad un generico 200..programmando col c non abbiamo un'ottima gestione dei timings, e quindi utilizzare tempi "veri" è praticamente impossibile..).
Vi chiederei un parere su quanto scritto e se trovate errori e me li riportaste..ve ne sarei grato!
Codice:
//variabili
// tasti=variabile che tiene traccia dello stato in cui mi trovo
// tempo=semplice contatore
// hid_report_in[0]=il tasto premuto
// action_sw=indica se il tasto è premuto o meno (NEGATO!)

switch(tasti){
	case 0:
                //stato iniziale
		mLED_1_Toggle();
		hid_report_in[0]=0;
		tempo=0;
		if(!action_sw){
			tasti=1;
			tempo=0;
		}
		break;
	case 1:
                //primo click
		hid_report_in[0]=0;
		tempo++;
		if(!action_sw){
			if(tempo>=floatData[SOGLIA_CLICK]){
				tempo=0;
				tasti=2;
			}
		}
		else{
			tempo=0;
			tasti=3;
		}
		break;
	case 2:
                // click singolo prolungato
		if(!action_sw)
			hid_report_in[0]=1;
		else{
			hid_report_in[0]=0;
			tasti=0;
		}
		break;
	case 3:
                // stato intermedio tra il primo click e il secondo
		tempo++;
		hid_report_in[0]=0;
		if(action_sw){
			if(tempo>floatData[SOGLIA_DCLICK]){
                                // click singolo
				tempo=0;
				hid_report_in[0]=1;
				tasti=0;
			}
		}
		else{
			tempo=0;
			tasti=4;
		}
		break;
	case 4:
		tempo++;
		hid_report_in[0]=0;
		if(!action_sw){
			if(tempo>floatData[SOGLIA_RCLICK])
				tasti=5;
		}
		else{
                        // doppio click
			hid_report_in[0]=1;
			tasti=0;
		}
		break;
	case 5:
                // click destro
		if(!action_sw)
			hid_report_in[0]=2;
		else{
			hid_report_in[0]=0;
			tasti=0;
		}
}

In pratica si comporta così:
finchè NON è premuto un tasto->aspetta;(stato 0)
se si preme un tasto, si cambia stato e si controlla cosa vuol fare l'utente;(stato 1)
se il tasto è premuto per più di SOGLIA_CLICK->click sinistro prolungato(stato 2, e al rilascio, stato 0)
altrimenti verifica se si vuole fare un click veloce, doppio click o click destro (stato 3)
se il tasto è rilasciato per più di SOGLIA_DCLICK->click singolo breve (e poi stato 0); altrimenti se si fa click, si verifica se si vuole fare doppio click o click destro (stato 4)
Se il tasto viene rilasciato prima di SOGLIA_RCLICK->doppio click (quindi si invia un semplice click, e poi si va a stato 0); altrimenti -> click destro (stato 5)


Resto in attesa di vostri pareri, e grazie per dargli un'occhiata!
__________________
My PC:
Case: BeQuiet! Pure Base 500 + BeQuiet! Pure Wings 2 140mm & Noctua NF-A14 PWM front intake + BeQuiet! Pure Wings 2 140mm rear exhaust - CPU: AMD Ryzen7 5800X3D (DVID: -0.1V) - CPU Cooler: Noctua NH-D15 - MB: MSI X570 Gaming Edge WiFi - PSU: Corsair RM850 full modular - GPU: Gigabyte 2070 Super Gaming OC 3X (fallata....! ) - RAM: 32GB G.Skill Ripjaws V 3200MHz CL16 (Samsung B-Die) - HDD: Crucial P5Plus 1TB NVME - Monitor: Samsung C24FG73

Ultima modifica di TRF83 : 01-10-2010 alle 13:16. Motivo: linguaggio errato!
TRF83 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
Annunciata la tuta di volo di Vast che s...
Vast presenta il nuovo Large Docking Ada...
Una denuncia getta ombre sulle batterie ...
DJI Avata 2 Fly Smart Combo a 526€: il d...
Alla guida della nuova auto elettrica ci...
GeForce RTX 3060 12 GB a giugno di nuovo...
Apple Music sarà sponsor ufficiale di Po...
The Mandalorian & Grogu: trailer fin...
Fedeltà record: Apple blinda gli utenti,...
Volkswagen ID.3 Neo: fino a 630 km di au...
GPU-Z mette i dati personali a rischio? ...
La PS6 potrebbe essere retrocompatibile ...
Amazfit Cheetah 2 Pro arriva in Italia: ...
Duolingo ammette l'errore dopo un anno: ...
Samsung Galaxy Tab S10 Lite a 249€: il t...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v