diff options
author | Yves Fischer <yvesf-git@xapek.org> | 2012-02-26 19:49:39 +0100 |
---|---|---|
committer | Yves Fischer <yvesf-git@xapek.org> | 2012-02-26 19:49:39 +0100 |
commit | 36f42916cadd07bba5d0812566fba4546641cde9 (patch) | |
tree | 761cf941f01d36051e7582c9b863c44fffae5473 /ebus-racket/parser.rkt | |
parent | 0ebb35c9dbd4853924ec4124862eb26bc45b9f12 (diff) | |
download | ebus-alt-36f42916cadd07bba5d0812566fba4546641cde9.tar.gz ebus-alt-36f42916cadd07bba5d0812566fba4546641cde9.zip |
ebus-racked: rename to layer2-/layer7-
Diffstat (limited to 'ebus-racket/parser.rkt')
-rw-r--r-- | ebus-racket/parser.rkt | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/ebus-racket/parser.rkt b/ebus-racket/parser.rkt deleted file mode 100644 index 773e86e..0000000 --- a/ebus-racket/parser.rkt +++ /dev/null @@ -1,100 +0,0 @@ -#lang racket -(require (planet bzlib/parseq:1:3)) - -; Ebus SYN Byte-String -(define ebus-const-syn (string->bytes/latin-1 "\xaa")) -(define ebus-const-escape (string->bytes/latin-1 "\xa9")) -(define ebus-const-ackok (string->bytes/latin-1 "\x00")) -(define ebus-const-broadcastaddr 254) - -(struct ebus-body-broadcast (crc) #:transparent) - -(struct ebus-body-mastermaster (crc) #:transparent) - -(struct ebus-body-masterslave - (crc payloadSlaveLength payloadSlave crcSlave) - #:transparent) - -(struct ebus-paket - (source destination primaryCommand secondaryCommand payloadLength payload body) - #:transparent) - -;; single, maybe escaped, payload data byte -(define ebus-payload (choice (seq escape-seq <- (bytes= ebus-const-escape) - escape-code <- (byte-in (list 0 1)) - (return (cond - ((= escape-code 0) ebus-const-escape) - ((= escape-code 1) ebus-const-syn)))) - any-byte - )) - -(define parse-ebus-broadcast (token (seq crc <- any-byte - syn <- (bytes= ebus-const-syn) - (return (ebus-body-broadcast crc))))) - -(define parse-ebus-mastermaster (token (seq crc <- any-byte - ack <- (bytes= ebus-const-ackok) ; ACK des Empfängers - syn <- (bytes= ebus-const-syn) ; SYN des Senders - (return (ebus-body-mastermaster crc))))) - -(define parse-ebus-masterslave (token (seq crc <- any-byte - ack <- (bytes= ebus-const-ackok) ;ACK des Empfängers - payloadSlaveLength <- any-byte - payloadSlave <- (repeat ebus-payload payloadSlaveLength payloadSlaveLength) - crcSlave <- any-byte - ackSlave <- (bytes= ebus-const-ackok) ;ACK des Senders - synSlave <- (bytes= ebus-const-syn) ;SYN des Senders - (return (ebus-body-masterslave crc payloadSlaveLength payloadSlave crcSlave))))) - -(define parse-ebus-master-or-slave (token (choice parse-ebus-mastermaster parse-ebus-masterslave))) - -(define parse-ebus-paket (token (seq source <- any-byte - destination <- any-byte - primaryCommand <- any-byte - secondaryCommand <- any-byte - payloadLength <- any-byte - payload <- (repeat ebus-payload payloadLength payloadLength) - body <- (cond ((= destination ebus-const-broadcastaddr) parse-ebus-broadcast) - (else parse-ebus-master-or-slave)) - (return (ebus-paket source - destination - primaryCommand - secondaryCommand - payloadLength - payload - body))))) - -(define ebus-sync (tokens syncs <- (seq (repeat (string->bytes/latin-1 "\xaa"))) - (return (length syncs)))) - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(define (read-ebus input-port) - (let ([syn ((make-reader ebus-sync #:sof? #f #:eof? #f) input-port)] - [paket ((make-reader parse-ebus-paket #:sof? #f #:eof? #f) input-port)]) - (cond ((not (false? syn)) - (display (format "drop ~s x SYN (~s) ~n" syn ebus-const-syn)))) - (cond ((not (false? paket)) - paket) - ((eof-object? (peek-byte input-port)) - eof) - (else - (display (format "drop ~s ~n" (peek-byte input-port))) - ; skip one byte - (read-byte input-port) - ;(file-position input-port (+ 1 (file-position input-port))) - (read-ebus input-port))))) - -(define (read-ebus-loop input-port) - (let ([paket (read-ebus (current-input-port))]) - (display (format "Paket ~s~n" paket)) - (cond ((not (eof-object? paket)) (read-ebus-loop input-port))))) - -(provide read-ebus - read-ebus-loop - (struct-out ebus-paket) - (struct-out ebus-body-broadcast) - (struct-out ebus-body-mastermaster) - (struct-out ebus-body-masterslave))
\ No newline at end of file |