Input channel. Output in same format as dump978 cmdline tool.

pull/14/head
Christopher Young 2015-08-21 04:49:18 -04:00
rodzic f7505e10a6
commit 34e71f16db
2 zmienionych plików z 20 dodań i 6 usunięć

Wyświetl plik

@ -27,6 +27,9 @@ import "unsafe"
// Current version. // Current version.
var PackageVersion = "v0.1" var PackageVersion = "v0.1"
// InChan is a buffered input channel for raw data.
var InChan = make(chan []byte, 100)
type UserCbT func(C.char, *C.uint8_t, C.int) type UserCbT func(C.char, *C.uint8_t, C.int)
// Dump978Init must be the first function called in this package. // Dump978Init must be the first function called in this package.
@ -38,3 +41,10 @@ func Dump978Init() {
func ProcessData(buf []byte) { func ProcessData(buf []byte) {
C.process_data((*C.char)(unsafe.Pointer(&buf[0])), C.int(len(buf))) C.process_data((*C.char)(unsafe.Pointer(&buf[0])), C.int(len(buf)))
} }
func ProcessDataFromChannel() {
for {
inData := <-InChan
ProcessData(inData)
}
}

Wyświetl plik

@ -7,6 +7,7 @@
package dump978 package dump978
import ( import (
"fmt"
"reflect" "reflect"
"unsafe" "unsafe"
) )
@ -17,21 +18,24 @@ import (
*/ */
import "C" import "C"
// outChan is a buffered output channel for demodulated data. // OutChan is a buffered output channel for demodulated data.
var OutChan = make(chan []byte, 100) var OutChan = make(chan string, 100)
//export dump978Cb //export dump978Cb
func dump978Cb(updown C.char, data *C.uint8_t, length C.int) { func dump978Cb(updown C.char, data *C.uint8_t, length C.int) {
outData := make([]byte, length+1)
// c buffer to go slice without copying // c buffer to go slice without copying
var buf []byte var buf []byte
b := (*reflect.SliceHeader)((unsafe.Pointer(&data)))
b := (*reflect.SliceHeader)((unsafe.Pointer(&buf)))
b.Cap = int(length) b.Cap = int(length)
b.Len = int(length) b.Len = int(length)
b.Data = uintptr(unsafe.Pointer(data)) b.Data = uintptr(unsafe.Pointer(data))
// copy incoming to outgoing // copy incoming to outgoing
copy(outData, buf[1:]) outData := string(updown)
outData[0] = byte(updown) for i := 0; i < int(length); i++ {
outData += fmt.Sprintf("%02x", buf[i])
}
OutChan <- outData OutChan <- outData
} }