Raw access σε input-output devices...

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
Argi
byte level
byte level
Posts: 122
Joined: Tue Nov 09, 2004 7:22 pm

Raw access σε input-output devices...

Post by Argi » Thu Sep 21, 2006 1:19 pm

Ο τίτλος του θέματος ίσως δεν είναι και πολύ πετυχημένος σχετικά με αυτό που θέλω να πω...

Θέλω μέσω προγραμματισμού να αποκτήσω πρόσβαση στην περιοχή της RAM (...buffer) στην οποία μια συσκευή γράφει (πχ το μικρόφωνο) και την οποία όταν γεμίσει την διαβάζει το πρόγραμμα ... ηχογράφησης για παράδειγμα. Η συσκευή μπορεί να χρησιμοποιεί τη μέθοδο DMA ή ό,τι άλλο θέλει.
(Έχει περάσει καιρός από τότε που διάβασα για την Οργάνωση Υπολογιστών και δεν είμαι σίγουρος αν τα λέω και πολύ καλά...)
Δηλαδή θέλω να μπορώ να διαβάσω και να γράψω σε αυτή την περιοχή της μνήμης πριν το πρόγραμμα ηχογράφησης την διαβάσει (κάθε φορά που γεμίζει το buffer βέβαια). Έτσι ξέρω εγώ να "ακούει" κάτι το μικρόφωνο και το πρόγραμμα ηχογράφησης να "ακούει" κάτι άλλο. Σαν να κοροϊδεύω το πρόγραμμα ηχογράφησης δηλαδή. Αυτό θέλω να ξέρω αν μπορώ να το κάνω και για ηχείο,κάμερα,σκληρό δίσκο κλπ
Υποθέτω ότι κάθε φορά που γεμίζει το εν λόγω buffer του μικροφώνου,
το σύστημα κάνει interrupt και καλείται το πρόγραμμα που έχει δευσμεύσει τον πόρο εκείνη τη στιγμή και ίσως το πρόγραμμά μου να μην έχει δικαίωμα να τον προσπελάσει εκείνη τη στιγμή.
Καμμιά ιδέα;
Άλλος τρόπος υπάρχει να κάνω αυτό που θέλω; Χωρίς δηλαδή να πειράξω εκείνο το buffer...
:smt017
I am a nobody, and nobody is perfect; therefore I am perfect.
User avatar
silegav
Venus Project Founder
Venus Project Founder
Posts: 2098
Joined: Tue Mar 09, 2004 4:03 pm
Academic status: Alumnus/a
Location: The Center of the World -> Piraeus

Post by silegav » Thu Sep 21, 2006 3:28 pm

έχεις μπει πολύυυυυ χαμηλά φίλε μου...να δω πως θα φτάσεις εκεί κάτω!!!!!
:-) Καλή τύχη στις βουτιές!
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Post by HdkiLLeR » Thu Sep 21, 2006 6:41 pm

Κοίτα μπορείς να το κάνεις αυτό. Σε γενικές γραμμές απο το userpsace όχι: δηλαδή με άλλο code να πάς να πειράξεις την περιοχή αυτή (θα φας segmentation fault - access violation γιατί το πρόγραμμα σου θα πάει να προσπελάσει περιοχή μνήμης που δεν της έχει δεσμευτεί και δεν θα σε αφήσει το OS). Tώρα αυτό μπορείς να το κάνει μέσα απο τον kernel (για Linux κάτι πάει και έρχεται μιας και δεν θα έχεις πρόβλημα πρόσβασης, ο πυρήνας τρέχει σε system mode - για Windows δεν ξέρω πως θα το κάνεις) ή πειράζοντας τον driver της συσκευής (πάλι σε Linux γιατί σε Windows δεν νομίζω ότι σου δίνουν open source drivers). Μέσα στον driver θα βρείς τα hooks για το πως γίνεται init η περιοχή που σε ενδιαφέρει και πως γίνεται η προσπέλλαση αυτής, οπότε εκεί μπορείς να βάλεις κάποια function που "πέιράζει" και κάνει αυτό που θέλεις.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
User avatar
Argi
byte level
byte level
Posts: 122
Joined: Tue Nov 09, 2004 7:22 pm

Post by Argi » Thu Sep 21, 2006 7:03 pm

Το access violation μάλλον έχεις δίκιο ότι θα το φάω στη μάπα αν το προσπαθήσω με δικό μου κώδικα.
Για πείραγμα στους drivers σκεφτόμουν κι εγώ αλλά σε windows (αν είναι δυνατόν να το πετύχω αυτό μόνος μου...). Αλλά θα το κοιτάξω και για linux που είπες καθώς εκεί είναι open-source και θα το πειράξω σίγουρα πιο εύκολα. Πάντως με ενδιαφέρει αρκετά το θέμα και θα το ψάξω!
Ευχαριστώ!
I am a nobody, and nobody is perfect; therefore I am perfect.
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Post by AmmarkoV » Fri Sep 22, 2006 3:36 pm

Για ποιό λόγο να κάνεις την βουτιά και να μην χρησιμοποιήσεις το 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..
Να το βάλεις σε κανέναν φίλο σου και όποτε πάει να μιλήσει να ακούγονται άλλα αντ`άλλων..
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
Argi
byte level
byte level
Posts: 122
Joined: Tue Nov 09, 2004 7:22 pm

Post by Argi » Fri Sep 22, 2006 8:06 pm

Αν κατάλαβα καλά μου δείχνεις κώδικα που απλά κάνει recording.
Εγώ θέλω να κάνω τα παραπάνω που είπα έτσι ώστε ό,τι πρόγραμμα εγγραφής και να έχω στον υπολογιστή μου, να διαβάζει την έξοδο του προγράμματός μου, το οποίο θα διαβάζει πρώτο την είσοδο από το μικρόφωνο. Πως θα μπορούσα να κάνω ένα πρόγραμμα εγγραφής ήχου να διαβάζει την έξοδο από το πρόγραμμά μου και να νομίζει ότι διαβάζει από το μικρόφωνο χρησιμοποιώντας συμβατικούς τρόπους;
Μάλλον είναι αδύνατον να φτιάξω κάτι που να παίζει με διάφορες κάρτες ήχου.
I am a nobody, and nobody is perfect; therefore I am perfect.
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Post by AmmarkoV » Sat Sep 23, 2006 3:41 am

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

If you want to dive dive..
Το όλο πράμα είναι πολύ πιο μπελαλίδικο από οσο μπορεί να νομίζεις πάντως..
Επίσης δεν νομίζω οτι έχει καμμία σχέση με την Οργάνωση Υπολογιστών (τουλάχιστον το μάθημα που έχω κάνει εγώ , ήταν κυρίως βασικές αρχές , αυτό που λές θέλει να βάλεις στην σειρά 1000 πράματα και σε πολυ χαμηλό επίπεδο..)
Αν καταφέρεις τίποτα πες το μας πάντως..
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
Argi
byte level
byte level
Posts: 122
Joined: Tue Nov 09, 2004 7:22 pm

Post by Argi » Sat Sep 23, 2006 10:34 pm

ναι...Μάλλον δε σε πιάνω,
δεν πειράζει.
Αν σε πιάνει κανένας άλλος ας μου εξηγήσει κι εμένα...
Την οργάνωση υπολογιστών δεν την ανέφερα για το λόγο που κατάλαβες...
I am a nobody, and nobody is perfect; therefore I am perfect.
Post Reply

Return to “Προγραμματισμός”