tape: Progress on dynamically decoding OTAs
This commit is contained in:
parent
08fe3d45dd
commit
37eccc91c0
@ -157,7 +157,7 @@ func decodeAny(decoder *Decoder, destination reflect.Value, tag Tag) (n int, err
|
|||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
itemTag, nn, err := decoder.ReadTag()
|
itemTag, nn, err := decoder.ReadTag()
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
value, err := skeletonValue(itemTag)
|
value, err := skeletonValue(decoder, itemTag)
|
||||||
if err != nil { return n, err }
|
if err != nil { return n, err }
|
||||||
nn, err = decodeAny(decoder, value.Elem(), itemTag)
|
nn, err = decodeAny(decoder, value.Elem(), itemTag)
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
@ -304,7 +304,7 @@ func decodeAndSetFloat(decoder *Decoder, destination reflect.Value, bytes int) (
|
|||||||
|
|
||||||
// skeletonValue returns a pointer value. In order for it to be set, it must be
|
// skeletonValue returns a pointer value. In order for it to be set, it must be
|
||||||
// dereferenced using Elem().
|
// dereferenced using Elem().
|
||||||
func skeletonValue(tag Tag) (reflect.Value, error) {
|
func skeletonValue(decoder *Decoder, tag Tag) (reflect.Value, error) {
|
||||||
switch tag.WithoutCN() {
|
switch tag.WithoutCN() {
|
||||||
case SI:
|
case SI:
|
||||||
value := uint8(0)
|
value := uint8(0)
|
||||||
@ -325,12 +325,20 @@ func skeletonValue(tag Tag) (reflect.Value, error) {
|
|||||||
return reflect.Value { }, fmt.Errorf("unknown CN %d for FP", tag.CN())
|
return reflect.Value { }, fmt.Errorf("unknown CN %d for FP", tag.CN())
|
||||||
case SBA: value := []byte { }; return reflect.ValueOf(&value), nil
|
case SBA: value := []byte { }; return reflect.ValueOf(&value), nil
|
||||||
case LBA: value := []byte { }; return reflect.ValueOf(&value), nil
|
case LBA: value := []byte { }; return reflect.ValueOf(&value), nil
|
||||||
case OTA: value := unknownSlicePlaceholder { }; return reflect.ValueOf(&value), nil
|
case OTA: return skeletonValueSlice(decoder, tag)
|
||||||
case KTV: value := map[uint16] any { }; return reflect.ValueOf(&value), nil
|
case KTV: value := map[uint16] any { }; return reflect.ValueOf(&value), nil
|
||||||
}
|
}
|
||||||
return reflect.Value { }, fmt.Errorf("unknown TN %d", tag.TN())
|
return reflect.Value { }, fmt.Errorf("unknown TN %d", tag.TN())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// skeletonValueSlice returns a pointer value. In order for it to be set, it
|
||||||
|
// must be dereferenced using Elem().
|
||||||
|
func skeletonValueSlice(decoder *Decoder, tag Tag) (reflect.Value, error) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: delete fucntion below
|
||||||
|
|
||||||
// skeletonValueSlice returns a pointer value. In order for it to be set, it
|
// skeletonValueSlice returns a pointer value. In order for it to be set, it
|
||||||
// must be dereferenced using Elem().
|
// must be dereferenced using Elem().
|
||||||
func skeletonValueSlice(tag Tag, length int) (reflect.Value, error) {
|
func skeletonValueSlice(tag Tag, length int) (reflect.Value, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user