add some things

This commit is contained in:
saji 2023-05-10 00:44:46 -05:00
parent 1bd003843c
commit 2dab308907
2 changed files with 78 additions and 1 deletions

77
gen_skylab.go Normal file
View file

@ -0,0 +1,77 @@
//go:build ignore
// this file is a generator for skylab code.
package main
import (
"gopkg.in/yaml.v3"
)
type Field interface {
Name() string
}
type PacketField struct {
Name string
Type string
Units string
Conversion float32
}
type PacketDef struct {
Name string
Description string
Id uint32
BigEndian bool
data: []PacketField
}
// we need to generate bitfield types.
// packet structs per each packet
// constancts for packet IDs or a map.
/*
example for a simple packet type
it also needs a json marshalling.
type BMSMeasurement struct {
BatteryVoltage uint16
AuxVoltage uint16
Current float32
}
func (b *BMSMeasurement)MarshalPacket() ([]byte, error) {
pkt := make([]byte, b.Size())
binary.LittleEndian.PutUint16(b.BatteryVoltage * 0.01)
binary.LittleEndian.PutUint16(b.AuxVoltage * 0.001)
binary.LittleEndian.PutFloat32(b.Current) // TODO: make float function
}
func (b *BMSMeasurement)UnmarshalPacket(p []byte) error {
}
func (b *BMSMeasurement) Id() uint32 {
return 0x010
}
func (b *BMSMeasurement) Size() int {
return 8
}
func (b *BMSMeasurement) String() string {
return 'blah blah"
}
we also need some kind of mechanism to lookup data type.
func getPkt (id uint32, data []byte) (Packet, error) {
// insert really massive switch case statement here.
}
*/

View file

@ -47,7 +47,7 @@ func (c *rpcConnTrack) Claim() (uint32, chan Response) {
// Clear deletes the connection from the tracker and returns the channel // Clear deletes the connection from the tracker and returns the channel
// associated with it. The caller can use the channel afterwards // associated with it. The caller can use the channel afterwards
// to send the response. // to send the response. It is the caller's responsibility to close the channel.
func (c *rpcConnTrack) Clear(val uint32) (chan Response, error) { func (c *rpcConnTrack) Clear(val uint32) (chan Response, error) {
c.mu.RLock() c.mu.RLock()
ch, ok := c.ct[val] ch, ok := c.ct[val]