; this routine takes a packet (either from MISG or APID30) and returns the instrument message.

function mav_inst_msg,wbuffer,time,pkt=pkt
;  wbuffer = pkt.buffer
  if keyword_set(pkt) then begin
      wbuffer = pkt.data
      if size(/type,wbuffer) eq  1 then begin                  ; convert from bytes to words
          wbuffer = uint(wbuffer,0,n_elements(wbuffer)/2)
          byteorder,wbuffer,/swap_if_little_endian
      endif
      time = pkt.time
  endif
  hdr = wbuffer[0]
  id = ishft(hdr,-10)
  length = (hdr and '03ff'x) + 1
  valid  = n_elements(wbuffer)  ge length+1         ; should be eq  - extra word slipping in somewhere
  if valid eq 0 then data=0   else    data = wbuffer[1:length]
  ;data = wbuffer[1:length]
  imsg = {time:time,valid:valid, id:id, length:length, hdr:hdr, data:data}
  return,imsg
end

; this routine takes a packet (either from MISG or APID30) and processes it.


pro mav_inst_msg_handler,pkt,status=status

    msg = mav_inst_msg(pkt=pkt)
    if (msg.valid eq 0) then begin
         tstr='Invalid MISG Message'
         dprint,dlevel=3,tstr
         store_data,'CMNBLK_ERROR',pkt.time,tstr,/append,dlim={tplot_routine:'strplot'}
    endif 

 ;   mav_sep_msg_handler,msg,status=status
    mav_sta_msg_handler,msg
   ; printdat,msg,/hex
  ;  hexprint,msg.data
    
   
;    mav_lpw_msg_handler,msg


end