chore: init bj_power monorepo (dashboard/mes/wms/wms_client/workstation), clear subproject git metadata and align naming to folder names
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"bjhardman.cn/bjhardman/hougai_insize_micrometer/insize"
|
||||
)
|
||||
|
||||
type Unit int8
|
||||
|
||||
const (
|
||||
UnitMM Unit = 0
|
||||
UnitInch Unit = 1
|
||||
)
|
||||
|
||||
const MmPerInch = 25.4
|
||||
|
||||
type Collector struct {
|
||||
values []float64
|
||||
filled []bool
|
||||
current int
|
||||
serial uint32
|
||||
lastSeq byte
|
||||
itemDefs []string
|
||||
}
|
||||
|
||||
func NewCollector(itemDefs []string) *Collector {
|
||||
n := len(itemDefs)
|
||||
return &Collector{
|
||||
values: make([]float64, n),
|
||||
filled: make([]bool, n),
|
||||
current: 0,
|
||||
itemDefs: itemDefs,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Collector) ApplyFrame(f insize.Frame) {
|
||||
mm := f.Value
|
||||
if f.Unit == insize.UnitInch {
|
||||
mm = f.Value * MmPerInch
|
||||
}
|
||||
c.values[c.current] = mm
|
||||
c.filled[c.current] = true
|
||||
c.serial = f.SerialNo
|
||||
c.lastSeq = f.SeqNo
|
||||
if c.current < len(c.values)-1 {
|
||||
c.current++
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Collector) SetValue(i int, mm float64) {
|
||||
if i < 0 || i >= len(c.values) {
|
||||
return
|
||||
}
|
||||
c.values[i] = mm
|
||||
c.filled[i] = true
|
||||
c.current = i
|
||||
}
|
||||
|
||||
func (c *Collector) SetCurrent(i int) {
|
||||
if i >= 0 && i < len(c.values) {
|
||||
c.current = i
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Collector) CurrentIndex() int { return c.current }
|
||||
|
||||
func (c *Collector) DisplayValue(i int, u Unit) (string, bool) {
|
||||
if i < 0 || i >= len(c.values) || !c.filled[i] {
|
||||
return "----", false
|
||||
}
|
||||
mm := c.values[i]
|
||||
if u == UnitInch {
|
||||
return fmt.Sprintf("%.5f", mm/MmPerInch), true
|
||||
}
|
||||
return fmt.Sprintf("%.3f", mm), true
|
||||
}
|
||||
|
||||
func (c *Collector) AllFilled() bool {
|
||||
for _, ok := range c.filled {
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (c *Collector) Clear() {
|
||||
for i := range c.values {
|
||||
c.values[i] = 0
|
||||
c.filled[i] = false
|
||||
}
|
||||
c.current = 0
|
||||
c.serial = 0
|
||||
c.lastSeq = 0
|
||||
}
|
||||
|
||||
func (c *Collector) Serial() (uint32, byte) {
|
||||
return c.serial, c.lastSeq
|
||||
}
|
||||
|
||||
func (c *Collector) Value(i int) float64 {
|
||||
if i < 0 || i >= len(c.values) {
|
||||
return 0
|
||||
}
|
||||
return c.values[i]
|
||||
}
|
||||
|
||||
func (c *Collector) Count() int {
|
||||
return len(c.values)
|
||||
}
|
||||
|
||||
func (c *Collector) ItemDefs() []string {
|
||||
return c.itemDefs
|
||||
}
|
||||
Reference in New Issue
Block a user