namespace eval cp2800 {} {
}

proc stdConfig::cp2800 {} {
  controller bin sycon-crc 10
  prop startcmd "int 99 hex 2b 0d 00 / skip4 int4 crc"
  prop read cp2800::read

  obj BIN wr
  prop hash 5f95
  prop label "compressor is running"
  # checkbox
  prop enum 1
  prop write cp2800::switch
  prop mmreset cp2800::mmreset
  poll 5 read mmreset
  kids "cp2800 monitor values" {
    cp2800_node comp_running_hrs 454c [expr 1/60.0]
    prop fmt %.1f

    cp2800_node cpu_t 3574

    cp2800_node motor_current_a 638b 1.0

    cp2800_temp inp_water_t 0
    cp2800_temp out_water_t 1
    cp2800_temp helium_t 2
    cp2800_temp oil_t 3

    cp2800_press high_side_p 0
    cp2800_node high_side_p_avg 7e90

    cp2800_press low_side_p 0
    cp2800_node low_side_p_avg bb94

    cp2800_node high_side_delta_p_avg 319c

    cp2800_node high_side_bounce 66fa
 
  }
}

proc stdConfig::cp2800_node {name hash {fact 0.1}} {
  node $name rd
  prop hash $hash
  if {$fact eq "0.1"} {
    prop fmt "%.1f"
  }
  prop fact $fact
}

proc stdConfig::cp2800_temp {name index} {
  cp2800_node $name "0d8f $index"
  cp2800_node ${name}_min "6e58 $index"
  cp2800_node ${name}_max "8a1c $index"
}

proc stdConfig::cp2800_press {name index} {
  cp2800_node $name "aa50 $index"
  cp2800_node ${name}_min "5e0b $index"
  cp2800_node ${name}_max "7a62 $index"
}

proc cp2800::read {} {
  set i 0
  scan [sct hash] "%x %d" hash i
  sct send "int 99 int2 $hash int1 $i / skip4 int4 crc"
  return cp2800::update
}

proc cp2800::update {} {
  set res [lindex [split [sct result]] 0]
  sct update [expr [silent 1 sct fact] * $res]
  return idle
}

proc cp2800::switch {} {
  if {[sct target] eq "1"} {
    scan d501 "%x" hash
    sct send "int 97 int2 $hash int1 0 int4 1 / crc "
    sct print "start compressor"
    sct update 1
  } else {
    scan c598 "%x" hash
    sct send "int 97 int2 $hash int1 0 int4 0 / crc "
    sct print "stop compressor"
    sct update 0
  }
  return stdSct::complete
}

proc cp2800::mmreset {} {
  scan d3db "%x" hash
  sct send "int 97 int2 $hash int1 0 int4 1 / crc "
  return stdSct::complete
}

