avrdudequi funzionaaaaaaaaaa

Saluti a tutti, finalmente funzionia, ho dovuto faticare non poco per capire come far vedere AVRISP mkii ad avrdude
poi ho capito che dovevo ricompilare avrdude con supporto a libusb, a proposito e stata rilasciata la 5.11 di avrdude.

Durante lo sviluppo mi sono scontrato con problemi che dovrebbero essere risolti dal sistema operativo, sembra non esserci uno standard
per offrire servizi base al programmatore per ciò che riguarda i device. Alla fine sto usando Hal tramite DBus, ma già adesso c'è DeviceKit, insomma ci vorrebbe un servizio di sistema che mi informi quando un device è collegato/scollegato, che ritorni una lista di device con stesso vendor_id product_id ecc. Questo rappresenta un problema che fà perdere tempo.

Oltre a avrispmkii, c'è la possibilità di scegliere una delle schede arduino ma qui l'unica operazione possibile è la scrittura della flash e la lettura della signature, tutto dipende da ciò che c'è scritto sul micro di arduino, ora vorrei vedere di introdurre supporto ad arduino-2009-ISP.

Ciao.

HAL sta venendo abbandonato in favore di Udev/PolicyKit, non il contrario.

HAL sta venendo abbandonato in favore di Udev/PolicyKit, non il contrario.

Ci siamo quasi, Udev rimane, PolicyKit rimane ed al posto di hal ha già preso piede DeviceKit.
Udev ascolta ciò che dice il kernel event ed agisce in base ai rules file.
PolicyKit indifferentemente dai permessi dei device fornisce un modo per gestire gli accessi a tutti i device da parte degli utenti, ovviamente
ogni utente potrà fare un limitato uso dei device. Es possimo impedire il montaggio di device usb esterni o il montaggio di una o più partizione,
ma anche assegnare ad un utente standard (non root) la possibilità di installare applicazioni grazie a PackagesKit, insomma c'è da studiare ed anche tanto.

Ho capito uno dei motivi che hanno reso non funzionali tutti i front-end ad avrdude. Nella mia piccola mente era tutto molto
semplice; lancio il processo con tutti gli argomenti ricavo riga per riga l'output di avrdude lo dò in pasto al parser che mi ricava i dati sensibili, aggiornando la gui. Peccato che avrdude scrive tutto in stderr, ed alle volte alcune cose vengono scritte prima ed altre dopo ed è impossibile fare un parser affidabile così, andrebbe a finire che il front-end appare come un programma scritto male e malfunzionante.

Questo è l'output ricavato da avrdude:
Run: avrdude -q -u -p m328p -c avrispmkii -P usb:40:03 -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h

avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1e950f
avrdude: reading lfuse memory:
0xff
avrdude: writing output file ""
avrdude: reading hfuse memory:
0xda
avrdude: writing output file ""
avrdude: reading efuse memory:
0x5
avrdude: writing output file ""

avrdude done. Thank you.

The process avrdude exit with Exit code: 0 Exit status: 0

i valori dei fuse li scrive in stdout, ma tutto il resto su stderr, e qusesto mi rompe, posso anche miscelare i due flussi stderr e stdout, sperando di riuscire ad ottenere un parser affidabile, sono deluso da come lavora avrdude, per questo stavo cercando di costuire una shared lib da usare direttamente.

Ciao.

si, lo stderr e lo stdout sono 2 thread indipendenti, per questo la casualità dell'output

Alla fine sto usando Hal tramite DBus, ma già adesso c'è DeviceKit, insomma ci vorrebbe un servizio di sistema che mi informi quando un device è collegato/scollegato, che ritorni una lista di device con stesso vendor_id product_id ecc. Questo rappresenta un problema che fà perdere tempo.

per ora potresti fare un poll in base al SO di tty e com, magari con possibilità di inserire a mano il proprio percorso ( che viene ricordato e pollato pure lui :slight_smile: ), oppure scrivi in java che queste cose te le fa già lui, e probabilmente senza poll se non indispensabile :slight_smile:
potresti osservare come funziona la libreria RXTX in java e capire come fa a fare quanto sopra, tanto è open-source. A te in particolare interessa come è fatta la native, infatti le native sono il ponte tra java e i SO sottostanti

Ciao lesto, scusa ti sei perso un pezzo, che c'entra java, il programma è in C++ con le Qt.
Il principale problema è che l'output non è formattato per essere parsato in modo facile, il problema dei flussi l'ho risolto impostando l'avviatore di processi per fare il merge dei due flussi.

Non è che anche stanotte non hai chiuso occhio e sei un pò rinco. :smiley:

Ciao.

le native di java di solito son scritte in c++... sono il ponte tra java e il sistema operativo vero e proprio, quindi potresti "rubare" il codice della RXTX e vedere se ti va bene

le native di java di solito son scritte in c++... sono il ponte tra java e il sistema operativo vero e proprio, quindi potresti "rubare" il codice della RXTX e vedere se ti va bene

Ok, ora capisco a cosa ti riferisci. Non capivo perchè ho già tutto pronto grazie alle classi di Qt, QProcess quando si presenta un dato in stderr emette un segnale che posso collegare con uno slot (funzione) così anche per stdout quindi il problema non esiste.

Il problema che ho risolto è questo:
se scrivo in std|out|err per ogni linea dovrei terminare con \n se è il caso, avrdude scrive:

avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1e950f
avrdude: reading lfuse memory:
avrdude: writing output file ""
0xff
avrdude: reading hfuse memory:
avrdude: writing output file ""
0xda
avrdude: reading efuse memory:
avrdude: writing output file ""

La seguente è tutta una riga, non c'è ritorno a capo dopo il valore esa, non c'è neanche un terminatore. Non è la prima volta che faccio il parser dell'output di un programma, lo avrò fatto migliaia di volte, per con avrdude non c'è ne ho capito nulla, alla fine ho scritto tutto su una textEdit e poi ho arrangiato il tutto alla meglio.

0xff
avrdude: reading hfuse memory:

non ho scritto che HAL rimpiazza udev
ho scritto che da quando c'e' udev (nato con i device rimuovibili) c'e' un problema

Per me non era necessaria la precisazione, ti avevo compreso.

non ho ben capito il tuo problema
in ogni caso puoi sempre petchare avrdude, tagliando la testa al toro

No non voglio, l'ho fatto ma non voglio usare un avrdude patchato, deve usare quello ufficiale.

ma spiega meglio

Una libreria C++ per implementare tutte le funzionalità offerte da avrdude, come si potrebbe organizzare a livello di classi?, che astrazione?,
hai tempo da dedicare?

Ciao.

pocherrimo, ho una rognaccia terrificante con il min-Pci di una scheda
hai presente quelle cose che prevedi che vadano lisce
perche' ti dicono una cosa, lavori confidende di quanto ti hanno detto
ma quando ti arriva il lavoro altrui e sei pronto per fare integrazione
guardi i sorgenti, guardi l'hw, e al dunque dunque dovrai dire al capo:
"ripianifica, abbiamo un grosso problema" ? ecco, sto pensando a come dirglelo =P

Io un modo per dirglielo c'è l'ho:
Quando ti chiede; allora come andiamo?
Tu gli quardi i piedi e gli dici; capo stia attento si arrotoli i pantaloni
Lui; Perché
Tu; Siamo nella merda. :smiley:

Se il livello è molto alto allora digli di stare con la bocca all'insù :grin:

Quindi alla fine tocca sempre a mè sbattermi, pure per la lib. :roll_eyes:

Ho in mente di implementare l'intera applicazione in modo per me rivoluzionario, solo che a livello pratico non ho mai
affrontato questo tipo di implementazione. Ho studiato il codice di una applicazione totalmente basata sui plugin, incredibile
il main non fà altro che avviare dei plugin in base ad una lista delle dipendenze, poi questi una volta in memoria cominciano a
scambiarsi oggetti di qualunque tipo. Il bello (c'è altro) è l'object pool, che mi permette di registrare oggetti e di estrarli.

Devo ancora studiare per avere una vista d'insieme, specie per avrdude e protocolli perchè se un programmatore marca cavallo usa il protocollo STKxx, devo dare la possibilità agli sviluppatori di ereditare il protocollo, se invece usa STKxx.personalizzato devo dare la possibilità di ereditare la classe astratta, insomma non so bene come fare, sono al buoi tranne qualche bagliore in lontananza.

Ciao.

ps:
Comunque ho risolto, il problema non era direttamente imputabile ad avrdude (forse si), il fatto è che quella classe QProcess è event drive, si vede che quella riga anche se ci sono gli endline viene scritta in stderr tutta nello stesso momento e questo scatena l'evento di qprocess che mi legge ciò che è stato scritto ultimamente in stderr.

Aggiornato il repo https://gitorious.org/avrdudequi

Nella wiki ci sono le istruzioni per scaricare e compilare.

Mi servono i dati per inserire altri programmatori compatibili con avrdude.
in particolare mi serve il risultato di questo comando digitato da root:

lsusb -v

Ciao.

MauroTec:
Lui; Perché
Tu; Siamo nella merda. :smiley:

Tanti anni fa, nell'ambiente dell'assistenza tecnica, si usava dire passami l'attrezzo n° 69, ovvero la maschera da SUB, puoi immaginare da solo l'uso in questi casi :smiley: