/*
 * 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,
    LED_BOARD                                   = 0x10000014,
	CSU_MLO				                        = 0x10000015,
	CCS_BOARD_MLO	                            = 0x10000016,
    AC_CORDSET_CONTROLLER                       = 0x20000001,
    AC_WALLMOUNT_CONTROLLER                     = 0x20000002,
    CMU_IN_BMS                                  = 0x30000001,
    BMU_IN_BMS                                  = 0x30000002,
};

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,
};

enum Upgrade_Flag
{
	UPGRADE_FLAG_DTS							= 0x7fffd,
	UPGRADE_FLAG_KERNEL							= 0x7fffe,
	UPGRADE_FLAG_ROOTFS							= 0x7ffff
};

int Upgrade_Flash(unsigned int Type,char *SourcePath,char *ModelName);
int Upgrade_UART(int uartfdOrd,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);
int Upgrade_CCS(int canfd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName);
extern int runShellCmd(const char*cmd);
#endif /* MODULE_UPGRADE_H_ */