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.
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)
// Dump978Init must be the first function called in this package.
@ -38,3 +41,10 @@ func Dump978Init() {
func ProcessData(buf []byte) {
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
import (
"fmt"
"reflect"
"unsafe"
)
@ -17,21 +18,24 @@ import (
*/
import "C"
// outChan is a buffered output channel for demodulated data.
var OutChan = make(chan []byte, 100)
// OutChan is a buffered output channel for demodulated data.
var OutChan = make(chan string, 100)
//export dump978Cb
func dump978Cb(updown C.char, data *C.uint8_t, length C.int) {
outData := make([]byte, length+1)
// c buffer to go slice without copying
var buf []byte
b := (*reflect.SliceHeader)((unsafe.Pointer(&data)))
b := (*reflect.SliceHeader)((unsafe.Pointer(&buf)))
b.Cap = int(length)
b.Len = int(length)
b.Data = uintptr(unsafe.Pointer(data))
// copy incoming to outgoing
copy(outData, buf[1:])
outData[0] = byte(updown)
outData := string(updown)
for i := 0; i < int(length); i++ {
outData += fmt.Sprintf("%02x", buf[i])
}
OutChan <- outData
}