kopia lustrzana https://github.com/cyoung/stratux
Input channel. Output in same format as dump978 cmdline tool.
rodzic
f7505e10a6
commit
34e71f16db
10
dump978.go
10
dump978.go
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
16
exports.go
16
exports.go
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue