#!/usr/bin/env python3
# Laurent GUERBY 20210422
# Copyright licence: dedicated to the public domain
# on debian 10 : apt-get install python3-crcmod python3-hid
# Protocol for Superwatt inverter : https://github.com/jblance/mpp-solar/tree/master/docs/protocols
# https://github.com/jblance/mpp-solar/blob/master/docs/protocols/PI30_HS_MS_MSX_RS232_Protocol_20140822_after_current_upgrade.pdf
# https://github.com/jblance/mpp-solar/blob/master/docs/protocols/PI30_PIP-GK_MK-Protocol.pdf
# lsusb: Bus 001 Device 012: ID 0665:5161 Cypress Semiconductor USB to Serial

import serial
import sys
import hidraw
import crcmod.predefined

#PDa => disable buzzer
#PEa
#QFLAG
#QGMN
#QMCHGCR
#QMOD
#QMPPTV
#QMUCHGCR
#QPI
#QPIGS => param et valeurs actuelles volt battery charge current
#QPIRI => param Device Rating Information inquiry
#QDI => default settings
#QT
#QTPR
#QVFW
#QVFW2
#MCHGC010 => Setting max charging current
#MUCHGC010 => Setting utility max charging current
#QMCHGCR => Enquiry selectable value about max charging current
#QMUCHGCR => Enquiry selectable value about max utility charging current
#PSDV48.0 =>  Setting battery cut-off voltage (Battery under voltage)
#PCVV56.0 => Setting battery C.V. (constant voltage) charging voltage
#PBFT54.7 => Setting battery float charging voltage

crc16 = crcmod.predefined.Crc('xmodem')

hid=hidraw.device()
hid.open(0x0665,0x5161)

def encode(cmd):
    return cmd+crc16.new(cmd).digest()+b"\r"

cmd=sys.argv[1].encode()
s=encode(cmd)

while len(s)>0:
    i=min(len(s),8)
    print("write",i,s[:i])
    hid.write(s[:i])
    s=s[i:]
    
r=[]
while True:
   r1=hid.read(256)
   print("read",r1)
   print("read_bytes",bytes(r1))
   try:
       i=r1.index(13)
       r+=r1[:i+1]
       break
   except:
       r+=r1

print("result",r)
print("result_bytes",bytes(r))



