Page 1 of 1

Raw access σε input-output devices...

Posted: Thu Sep 21, 2006 1:19 pm
by Argi
Ο τίτλος του θέματος ίσως δεν είναι και πολύ πετυχημένος σχετικά με αυτό που θέλω να πω...

Θέλω μέσω προγραμματισμού να αποκτήσω πρόσβαση στην περιοχή της RAM (...buffer) στην οποία μια συσκευή γράφει (πχ το μικρόφωνο) και την οποία όταν γεμίσει την διαβάζει το πρόγραμμα ... ηχογράφησης για παράδειγμα. Η συσκευή μπορεί να χρησιμοποιεί τη μέθοδο DMA ή ό,τι άλλο θέλει.
(Έχει περάσει καιρός από τότε που διάβασα για την Οργάνωση Υπολογιστών και δεν είμαι σίγουρος αν τα λέω και πολύ καλά...)
Δηλαδή θέλω να μπορώ να διαβάσω και να γράψω σε αυτή την περιοχή της μνήμης πριν το πρόγραμμα ηχογράφησης την διαβάσει (κάθε φορά που γεμίζει το buffer βέβαια). Έτσι ξέρω εγώ να "ακούει" κάτι το μικρόφωνο και το πρόγραμμα ηχογράφησης να "ακούει" κάτι άλλο. Σαν να κοροϊδεύω το πρόγραμμα ηχογράφησης δηλαδή. Αυτό θέλω να ξέρω αν μπορώ να το κάνω και για ηχείο,κάμερα,σκληρό δίσκο κλπ
Υποθέτω ότι κάθε φορά που γεμίζει το εν λόγω buffer του μικροφώνου,
το σύστημα κάνει interrupt και καλείται το πρόγραμμα που έχει δευσμεύσει τον πόρο εκείνη τη στιγμή και ίσως το πρόγραμμά μου να μην έχει δικαίωμα να τον προσπελάσει εκείνη τη στιγμή.
Καμμιά ιδέα;
Άλλος τρόπος υπάρχει να κάνω αυτό που θέλω; Χωρίς δηλαδή να πειράξω εκείνο το buffer...
:smt017

Posted: Thu Sep 21, 2006 3:28 pm
by silegav
έχεις μπει πολύυυυυ χαμηλά φίλε μου...να δω πως θα φτάσεις εκεί κάτω!!!!!
:-) Καλή τύχη στις βουτιές!

Posted: Thu Sep 21, 2006 6:41 pm
by HdkiLLeR
Κοίτα μπορείς να το κάνεις αυτό. Σε γενικές γραμμές απο το userpsace όχι: δηλαδή με άλλο code να πάς να πειράξεις την περιοχή αυτή (θα φας segmentation fault - access violation γιατί το πρόγραμμα σου θα πάει να προσπελάσει περιοχή μνήμης που δεν της έχει δεσμευτεί και δεν θα σε αφήσει το OS). Tώρα αυτό μπορείς να το κάνει μέσα απο τον kernel (για Linux κάτι πάει και έρχεται μιας και δεν θα έχεις πρόβλημα πρόσβασης, ο πυρήνας τρέχει σε system mode - για Windows δεν ξέρω πως θα το κάνεις) ή πειράζοντας τον driver της συσκευής (πάλι σε Linux γιατί σε Windows δεν νομίζω ότι σου δίνουν open source drivers). Μέσα στον driver θα βρείς τα hooks για το πως γίνεται init η περιοχή που σε ενδιαφέρει και πως γίνεται η προσπέλλαση αυτής, οπότε εκεί μπορείς να βάλεις κάποια function που "πέιράζει" και κάνει αυτό που θέλεις.

Posted: Thu Sep 21, 2006 7:03 pm
by Argi
Το access violation μάλλον έχεις δίκιο ότι θα το φάω στη μάπα αν το προσπαθήσω με δικό μου κώδικα.
Για πείραγμα στους drivers σκεφτόμουν κι εγώ αλλά σε windows (αν είναι δυνατόν να το πετύχω αυτό μόνος μου...). Αλλά θα το κοιτάξω και για linux που είπες καθώς εκεί είναι open-source και θα το πειράξω σίγουρα πιο εύκολα. Πάντως με ενδιαφέρει αρκετά το θέμα και θα το ψάξω!
Ευχαριστώ!

Posted: Fri Sep 22, 2006 3:36 pm
by AmmarkoV
Για ποιό λόγο να κάνεις την βουτιά και να μην χρησιμοποιήσεις το MCI system του Win32 API ? :roll:
Προφανώς αυτό που θές θα γίνεται και όπως το σκέφτεσαι αλλά δεν βλέπω κανέναν λόγο μιλάμε για πολύπλοκα πράματα..
Και μετά θα πρέπει να λάβεις κ υπ`όψην σου διαφορετικές κάρτες ήχου κτλ πιστεύω.. Τρέχα γύρευε..
Ορίστε ένα link με κώδικα για Voice Recording :-p Ούτε 30 σειρές ;)
http://web6.codeproject.com/audio/Voice ... ect=958083

Υποθέτω οτι θα μπορούσες να δέχεσαι το microphone input με τον παραπάνω κώδικα και μετά να το mixaρεις με κάτι δικό σου να το κάνεις playback και να βάζεις το πρόγραμμα εγγραφής να κάνει record από το Wave Out (δεν ξέρω αν με πιάνεις..) Αυτή είναι μια πολύ απλή ιδέα.. Σαν εφαρμογή πάντως αυτό που θές να κάνεις θα είχε πολύ γούστο.. :) Ιδιαίτερα σαν spyware app..
Να το βάλεις σε κανέναν φίλο σου και όποτε πάει να μιλήσει να ακούγονται άλλα αντ`άλλων..

Posted: Fri Sep 22, 2006 8:06 pm
by Argi
Αν κατάλαβα καλά μου δείχνεις κώδικα που απλά κάνει recording.
Εγώ θέλω να κάνω τα παραπάνω που είπα έτσι ώστε ό,τι πρόγραμμα εγγραφής και να έχω στον υπολογιστή μου, να διαβάζει την έξοδο του προγράμματός μου, το οποίο θα διαβάζει πρώτο την είσοδο από το μικρόφωνο. Πως θα μπορούσα να κάνω ένα πρόγραμμα εγγραφής ήχου να διαβάζει την έξοδο από το πρόγραμμά μου και να νομίζει ότι διαβάζει από το μικρόφωνο χρησιμοποιώντας συμβατικούς τρόπους;
Μάλλον είναι αδύνατον να φτιάξω κάτι που να παίζει με διάφορες κάρτες ήχου.

Posted: Sat Sep 23, 2006 3:41 am
by AmmarkoV
Argi wrote:Αν κατάλαβα καλά μου δείχνεις κώδικα που απλά κάνει recording.
Εγώ θέλω να κάνω τα παραπάνω που είπα έτσι ώστε ό,τι πρόγραμμα εγγραφής και να έχω στον υπολογιστή μου, να διαβάζει την έξοδο του προγράμματός μου, το οποίο θα διαβάζει πρώτο την είσοδο από το μικρόφωνο.
AmmarkoV wrote:Υποθέτω οτι θα μπορούσες να δέχεσαι το microphone input με τον παραπάνω κώδικα και μετά να το mixaρεις με κάτι δικό σου να το κάνεις playback και να βάζεις το πρόγραμμα εγγραφής να κάνει record από το Wave Out (δεν ξέρω αν με πιάνεις..) Αυτή είναι μια πολύ απλή ιδέα..
Μάλλον δεν με πιάνεις.. Anywayz..

If you want to dive dive..
Το όλο πράμα είναι πολύ πιο μπελαλίδικο από οσο μπορεί να νομίζεις πάντως..
Επίσης δεν νομίζω οτι έχει καμμία σχέση με την Οργάνωση Υπολογιστών (τουλάχιστον το μάθημα που έχω κάνει εγώ , ήταν κυρίως βασικές αρχές , αυτό που λές θέλει να βάλεις στην σειρά 1000 πράματα και σε πολυ χαμηλό επίπεδο..)
Αν καταφέρεις τίποτα πες το μας πάντως..

Posted: Sat Sep 23, 2006 10:34 pm
by Argi
ναι...Μάλλον δε σε πιάνω,
δεν πειράζει.
Αν σε πιάνει κανένας άλλος ας μου εξηγήσει κι εμένα...
Την οργάνωση υπολογιστών δεν την ανέφερα για το λόγο που κατάλαβες...