/*
 * Module_Upgrade.h
 *
 *  Created on: 2019-12-24
 *      Author: Jerry Wang
 *     Version: D0.01
 */

#ifndef MODULE_UPGRADE_H_
#define MODULE_UPGRADE_H_

#include 	<sys/time.h>
#include 	<sys/timeb.h>
#include    <sys/types.h>
#include    <sys/stat.h>
#include 	<sys/types.h>
#include 	<sys/ioctl.h>
#include 	<sys/socket.h>
#include 	<sys/ipc.h>
#include 	<sys/shm.h>
#include 	<sys/shm.h>
#include 	<sys/mman.h>
#include 	<linux/wireless.h>
#include 	<linux/can.h>
#include 	<linux/can/raw.h>
#include 	<arpa/inet.h>
#include 	<netinet/in.h>

#include 	<unistd.h>
#include 	<stdarg.h>
#include    <stdio.h>
#include    <stdlib.h>
#include    <unistd.h>
#include    <fcntl.h>
#include    <termios.h>
#include    <errno.h>
#include 	<errno.h>
#include 	<string.h>
#include	<time.h>
#include	<ctype.h>
#include 	<ifaddrs.h>

enum Image_Type
{
	CSU_BOOTLOADER 		           = 0x10000001,
	CSU_KERNEL_CONFIGURATION       = 0x10000002,
	CSU_KERNEL_IMAGE 	           = 0x10000003,
	CSU_ROOT_FILE_SYSTEM	       = 0x10000004,
	CSU_USER_CONFIGURATION         = 0x10000005,
	CSU_PRIMARY_CONTROLLER 		   = 0x10000006,
	CCS_BOARD_BOOTLOADER 		   = 0x10000007,
	CCS_BOARD_KERNEL_CONFIGURATION = 0x10000008,
	CCS_BOARD_KERNEL_IMAGE 		   = 0x10000009,
	CCS_BOARD_FILE_SYSTEM		   = 0x1000000A,
	CHAdeMO_BOARD                  = 0x1000000B,
	GB_BOARD                       = 0x1000000C,
	RELAY_CONTROL_BOARD            = 0x1000000D,
	FAN_CONTROL_BOARD              = 0x1000000E,
	LCM                            = 0x1000000F,
	F750_PSU_PRIMARY_CONTROLLER    = 0x10000010,
	F750_PSU_SECONDARY_CONTROLLER  = 0x10000011,
	F950_PSU_PRIMARY_CONTROLLER    = 0x10000012,
	F950_PSU_SECONDARY_CONTROLLER  = 0x10000013,
	AC_CORDSET_CONTROLLER          = 0x20000001,
	AC_WALLMOUNT_CONTROLLER        = 0x20000002,
	CMU_IN_BMS                     = 0x30000001,
	BMU_IN_BMS                     = 0x30000002
};

enum Flash_ImageType
{
	FLASH_IMAGE_TYPE_SPL						= 0x01,
	FLASH_IMAGE_TYPE_UBOOT						= 0x02,
	FLASH_IMAGE_TYPE_DTB						= 0x03,
	FLASH_IMAGE_TYPE_KERNEL						= 0x04,
	FLASH_IMAGE_TYPE_ROOTFS						= 0x05,
	FLASH_IMAGE_TYPE_CONFIG						= 0x06
};

enum Canbus_ImageType
{
	CANBUS_IMAGE_TYPE_SPL						= 0x01,
	CANBUS_IMAGE_TYPE_UBOOT						= 0x02,
	CANBUS_IMAGE_TYPE_DTB						= 0x03,
	CANBUS_IMAGE_TYPE_KERNEL					= 0x04,
	CANBUS_IMAGE_TYPE_ROOTFS					= 0x05,
	CANBUS_IMAGE_TYPE_CONFIG					= 0x06,
	CANBUS_IMAGE_TYPE_MCU						= 0x07
};

enum Canbus_MessageId
{
	CANBUS_MESSAGE_ID_UPGRADE_REQUEST			= 0x00000e00,
	CANBUS_MESSAGE_ID_UPGRADE_TRANS_BLOCK		= 0x00000f00,
	CANBUS_MESSAGE_ID_UPGRADE_TRANS_DATA		= 0x00001000,
	CANBUS_MESSAGE_ID_UPGRADE_FINISH			= 0x00001100
};

enum Uart_Command
{
	UART_CMD_UPDATE_START 		= 0xe0,
	UART_CMD_UPDATE_ABORD 		= 0xe1,
	UART_CMD_UPDATE_TRANSFER 	= 0xe2,
	UART_CMD_UPDATE_FINISH 		= 0xe3
};


int Upgrade_Flash(unsigned int Type,char *SourcePath,char *ModelName);
int Upgrade_UART(unsigned char uartfd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName);
int Upgrade_CAN(int canfd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName);

#endif /* MODULE_UPGRADE_H_ */