'''Caculate CRC16 for ChangAn E16 Project'''
import binascii
import hashlib
import re
import os
try:
    import bincopy
except ImportError:
    os.system("pip install bincopy --default -timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple") # pip install bincopy
    import bincopy

File_s19_Drv = 'CanoeFBLFlash/s19/Flash_Drv.S19'
File_s19_Coding_App = 'CanoeFBLFlash/s19/Coding_App.S19'
File_s19_FLU_FBL = 'CanoeFBLFlash/s19/FLU_FBL_HH.S19'

Drv_StartAddress = 0x20000000
Drv_Size = 0x800
Coding_App_StartAddress = 0x00034000
Coding_App_Size = 0x1CC000
Flu_Fbl_StartAddress = 0x00040000
Flu_Fbl_Size = 0x18000
CRC16_InitVal = 0xFFFF

print('\n########### CRC Calculate Start ###########')

ObjFile = bincopy.BinFile(File_s19_Drv)
ObjFile.crop(Drv_StartAddress, Drv_StartAddress + Drv_Size)
string = ', ' + ObjFile.as_array()
list = string.split(', 0x')
byte = b''.join((binascii.unhexlify(i) for i in list))
Drv_Crc = binascii.crc_hqx(byte,CRC16_InitVal)& 0xffff
print('Flash Driver CRC:' + hex(Drv_Crc).upper())

ObjFile = bincopy.BinFile(File_s19_Coding_App)
ObjFile.crop(Coding_App_StartAddress, Coding_App_StartAddress + Coding_App_Size)
string = ', ' + ObjFile.as_array()
list = string.split(', 0x')
byte = b''.join((binascii.unhexlify(i) for i in list))
Coding_App_Crc = binascii.crc_hqx(byte,CRC16_InitVal)& 0xffff
print('Coding_App   CRC:' + hex(Coding_App_Crc).upper())

ObjFile = bincopy.BinFile(File_s19_FLU_FBL)
ObjFile.crop(Flu_Fbl_StartAddress, Flu_Fbl_StartAddress + Flu_Fbl_Size)
#print(ObjFile.as_srec())
string = ', ' + ObjFile.as_array()
list = string.split(', 0x')
byte = b''.join((binascii.unhexlify(i) for i in list))
Flu_Fbl_Crc = binascii.crc_hqx(byte,CRC16_InitVal)& 0xffff
print('FLU and FBL  CRC:' + hex(Flu_Fbl_Crc).upper())

print('\n########### CRC Calculate End ###########')
