编辑代码

export type Time = {
    sec: number;
    nsec: number;
};

export type Header =  {
    timestamp: Time;    
    frame_id: String;
};


export const makeHeader = (frame_id = ""): Header => {
    const currentUnixTimeMs = new Date().getTime();
  
    return {
        timestamp: {
        sec: Math.floor(currentUnixTimeMs / 1000),
        nsec: (currentUnixTimeMs % 1000) * 1e6,
      },
      frame_id,
    };
};

export type MsmState= {
     INIT : number;
     STANDBY : number;
     BACKGROUND_SEARCH : number;
    
     SEARCH : number;
     PARKIN_SELECT : number;
     PARKIN_GUIDENCE : number;
     PARKIN_SUSPEND : number;
    
     PARKOUT: number;
     PARKOUT_ACTIVE : number;
     PARKOUT_SUSPEND : number;
    
     APA_ABORT : number;
     APA_FINISH : number;
    
     PILOT_ACTIVE : number;
     PILOT_SUSPEND : number;
     PILOT_ABORT : number;
    
     MAPBUILD_PRE: number;
     MAPBUILD : number;
     MAPBUILD_COMPLETE : number;
    
     FAILED : number;
     FAILURE : number;
     value: number;
};

export type MsmFcnMode= {
    APA : number;
    RPA : number;
    HAVP: number;
    PAVP : number;
    MEB : number;
    value: number;
};


export const makeMsmState = (a:number): MsmState => {  
    return {
        INIT : 0,
        STANDBY : 1,
        BACKGROUND_SEARCH : 2,       
        SEARCH : 3,
        PARKIN_SELECT : 4,
        PARKIN_GUIDENCE : 5,
        PARKIN_SUSPEND : 6,
       
        PARKOUT: 7,
        PARKOUT_ACTIVE : 8,
        PARKOUT_SUSPEND : 9,
       
        APA_ABORT : 10,
        APA_FINISH : 11,
       
        PILOT_ACTIVE : 12,
        PILOT_SUSPEND : 13,
        PILOT_ABORT : 14,       
        MAPBUILD_PRE: 15,
        MAPBUILD : 16,
        MAPBUILD_COMPLETE : 17,    
        FAILED : 18,
        FAILURE : 19,
        value: a
    };
};


export const makeMsmFcnMode = (b:number): MsmFcnMode => {  
    return {
        APA : 1,
        RPA : 2,
        HAVP : 3,       
        PAVP : 4,
        MEB : 5,        
        value: b
    };
};


export type SuspendReason = {
    SUSPEND_REASON_INVALID : number;
    SUSPEND_REASON_DOOR_OPEN: number;
    SUSPEND_REASON_SAFETY_BELT_UNTIE : number;
    SUSPEND_REASON_APP_REQ_SUSPEND : number;
    SUSPEND_REASON_OBSTACLE_REPLAN_WAITING: number;
    SUSPEND_REASON_MIRROR_FOLDED : number;
    SUSPEND_REASON_HOOD_OPEN : number;
    SUSPEND_REASON_TRUNK_OPEN : number;
    SUSPEND_REASON_PUT_PEDAL : number;    
    value : number
};

export const MakeSuspendReason = (v : number): SuspendReason => {
    return {
        SUSPEND_REASON_INVALID : 0,
        SUSPEND_REASON_DOOR_OPEN: 1,
        SUSPEND_REASON_SAFETY_BELT_UNTIE : 2,
        SUSPEND_REASON_APP_REQ_SUSPEND : 3,
        SUSPEND_REASON_OBSTACLE_REPLAN_WAITING: 4,
        SUSPEND_REASON_MIRROR_FOLDED : 5,
        SUSPEND_REASON_HOOD_OPEN : 6,
        SUSPEND_REASON_TRUNK_OPEN : 7,
        SUSPEND_REASON_PUT_PEDAL : 8,   
        value : v
    };
};


export type AbortReason = {    
    ABORT_REASON_INVALID: number;
    ABORT_REASON_PARKING_TIMES_OVER_LIMIT : number;
    ABORT_REASON_PARKING_TIME_TOO_LONG: number;
    ABORT_REASON_SLOT_TOO_SMALL: number;
    ABORT_REASON_PARKING_SUSPEND_OVER_TIME : number;
    ABORT_REASON_PARK_SUSPEND_RESUME_MISSING_CONFIRM: number;
    ABORT_REASON_PARK_SUSPEND_USER_CONFIRM_QUIT : number;
    ABORT_REASON_DRIVE_MODE_NOT_SUPPORT : number;
    ABORT_REASON_PARKING_SPEED_OVER_LIMIT : number;
    ABORT_REASON_SLOPE_OVER : number;
    ABORT_REASON_STEERING_INTERVENTION : number;
    ABORT_REASON_GEAR_INTERVENTION : number;
    ABORT_REASON_EPB_INTERVENTION : number;
    ABORT_REASON_VEHICLE_NOT_READY : number;
    ABORT_REASON_SYSTEM_ERROR: number;
    ABORT_REASON_CONTROL_UNIT_ERROR : number;
    ABORT_REASON_ACTIVE_SECURITY_FEATURE_ACTIVATION : number;
    ABORT_REASON_PLANNING_FAULT : number;
    value : number;
};

export const MakeAbortReason = (v : number): AbortReason => {
    return {
        ABORT_REASON_INVALID: 0,
        ABORT_REASON_PARKING_TIMES_OVER_LIMIT : 1,
        ABORT_REASON_PARKING_TIME_TOO_LONG: 2,
        ABORT_REASON_SLOT_TOO_SMALL: 3, 
        ABORT_REASON_PARKING_SUSPEND_OVER_TIME : 4, 
        ABORT_REASON_PARK_SUSPEND_RESUME_MISSING_CONFIRM: 5,
        ABORT_REASON_PARK_SUSPEND_USER_CONFIRM_QUIT : 6,
        ABORT_REASON_DRIVE_MODE_NOT_SUPPORT : 7,
        ABORT_REASON_PARKING_SPEED_OVER_LIMIT : 8,
        ABORT_REASON_SLOPE_OVER : 9,
        ABORT_REASON_STEERING_INTERVENTION : 10,
        ABORT_REASON_GEAR_INTERVENTION : 11,
        ABORT_REASON_EPB_INTERVENTION : 12,
        ABORT_REASON_VEHICLE_NOT_READY : 13,
        ABORT_REASON_SYSTEM_ERROR: 14, 
        ABORT_REASON_CONTROL_UNIT_ERROR : 15,
        ABORT_REASON_ACTIVE_SECURITY_FEATURE_ACTIVATION : 16,
        ABORT_REASON_PLANNING_FAULT : 17,
        value : v
    };
};

export type SwitchReason = {
    INVALID :number;
    SYSTEM_ASSOCIATED_FAULT:number;
    HANDSHAKE_TIMEOUT: number;
    PLANNING_FAIL : number;
    PARKIN_SUSPEND_RESUME : number;
    SEARCH_OVER_SPEED : number;     
    UPDATE_SLOT_SELECT : number;
    PARKOUT_SUSPEND_RESUME : number;
    PARKIN_ABORT : number;
    PARK_SUSPEND_CANCLE_PARKING : number;     
    DETECT_PARKIN_SCENE : number;
    DETECT_PARKOUT_SCENE : number;    
    value : number;
};

export const MakeSwitchReason = (v : number): SwitchReason => {
    return {
        INVALID : 0,
        SYSTEM_ASSOCIATED_FAULT: 1,
        HANDSHAKE_TIMEOUT : 2,
        PLANNING_FAIL : 3,       
        PARKIN_SUSPEND_RESUME : 4,        
        SEARCH_OVER_SPEED: 5,
        UPDATE_SLOT_SELECT: 6,
        PARKOUT_SUSPEND_RESUME: 7,
        PARKIN_ABORT: 8,   
        PARK_SUSPEND_CANCLE_PARKING : 9,
        DETECT_PARKIN_SCENE : 10,
        DETECT_PARKOUT_SCENE : 11,    
        value : v,
    };
};

export type MsmStateInfo = {
    header : Header;
    msm_state : MsmState;
    msm_fcn_mod : MsmFcnMode;
    PARK_IN_SCENE : number;
    PARK_OUT_SCENE : number;
    park_scene : number;
    select_slot_id : number;
    PARK_TAIL_IN:number;
    PARK_HEAD_IN:number;
    PARK_TAIL_OUT:number;
    PARK_HEAD_OUT:number;
    park_method : number;
    PARK_OUT_DIR_LEFT:number;
    PARK_OUT_DIR_FORWARD:number;
    PARK_OUT_DIR_RIGHT:number;
    parkout_dir : number;
    suspend_reason : SuspendReason;
    abort_reason : AbortReason;
    switch_reason : SwitchReason; 
};

export const makeMsmStateInfo = (state:number, mode: number): MsmStateInfo => {  
    return {
        header:makeHeader(),
        msm_state: makeMsmState(state),
        msm_fcn_mod : makeMsmFcnMode(mode),
        PARK_IN_SCENE : 0,
        PARK_OUT_SCENE : 1,
        park_scene : 0,
        select_slot_id : 0,
        PARK_TAIL_IN:1,
        PARK_HEAD_IN:2,
        PARK_TAIL_OUT:3,
        PARK_HEAD_OUT:4,
        park_method : 1,
        PARK_OUT_DIR_LEFT: 0,
        PARK_OUT_DIR_FORWARD:1,
        PARK_OUT_DIR_RIGHT: 2,
        parkout_dir : 0,
        suspend_reason : MakeSuspendReason(0),
        abort_reason : MakeAbortReason(0),
        switch_reason : MakeSwitchReason(0),
    };
};
    let msm_state_ =  makeMsmStateInfo(0,0); 
    msm_state_.msm_state.value =  msm_state_.msm_state.APA_ABORT;
    msm_state_.select_slot_id = 0;
    msm_state_.abort_reason.value = 0;
    msm_state_.park_scene = msm_state_.PARK_IN_SCENE;
    msm_state_.msm_fcn_mod.value = msm_state_.msm_fcn_mod.APA; 
let rinfo ={
        req_info : {
            msm_state: {
                value: msm_state_.msm_state.value
            },
            select_slot_id: 0,
            park_scene :  msm_state_.park_scene, 
            msm_fcn_mod : { value : msm_state_.msm_fcn_mod.value},
            park_method: msm_state_.park_method,
            abort_reason :  { value : 0},
        }
}

let strJson = JSON.stringify(rinfo);
console.log(strJson)