Skip to content

File syn_pmbus.h

File List > proto > syn_pmbus.h

Go to the documentation of this file

#ifndef SYN_PMBUS_H
#define SYN_PMBUS_H

#include "../common/syn_defs.h"
#include "syn_smbus.h"

#include <stdbool.h>
#include <stdint.h>

#if !defined(SYN_USE_PMBUS) || SYN_USE_PMBUS

#ifdef __cplusplus
extern "C" {
#endif

/* ── PMBus Command Codes ────────────────────────────────────────────────── */

#define SYN_PMBUS_CMD_PAGE 0x00                 
#define SYN_PMBUS_CMD_OPERATION 0x01            
#define SYN_PMBUS_CMD_ON_OFF_CONFIG 0x02        
#define SYN_PMBUS_CMD_CLEAR_FAULTS 0x03         
#define SYN_PMBUS_CMD_PHASE 0x04                
#define SYN_PMBUS_CMD_WRITE_PROTECT 0x10        
#define SYN_PMBUS_CMD_STORE_DEFAULT_ALL 0x11    
#define SYN_PMBUS_CMD_RESTORE_DEFAULT_ALL 0x12  
#define SYN_PMBUS_CMD_CAPABILITY 0x19           
#define SYN_PMBUS_CMD_VOUT_MODE 0x20            
#define SYN_PMBUS_CMD_VOUT_COMMAND 0x21         
#define SYN_PMBUS_CMD_VOUT_MAX 0x24             
#define SYN_PMBUS_CMD_VOUT_MARGIN_HIGH 0x25     
#define SYN_PMBUS_CMD_VOUT_MARGIN_LOW 0x26      
#define SYN_PMBUS_CMD_VOUT_TRANSITION_RATE 0x27 
#define SYN_PMBUS_CMD_VOUT_DROOP 0x28           
#define SYN_PMBUS_CMD_STATUS_BYTE 0x78          
#define SYN_PMBUS_CMD_STATUS_WORD 0x79          
#define SYN_PMBUS_CMD_STATUS_VOUT 0x7A          
#define SYN_PMBUS_CMD_STATUS_IOUT 0x7B          
#define SYN_PMBUS_CMD_STATUS_INPUT 0x7C         
#define SYN_PMBUS_CMD_STATUS_TEMPERATURE 0x7D   
#define SYN_PMBUS_CMD_STATUS_CBUFFER 0x7E       
#define SYN_PMBUS_CMD_STATUS_OTHER 0x7F         
#define SYN_PMBUS_CMD_STATUS_MFR_SPECIFIC 0x80  
#define SYN_PMBUS_CMD_STATUS_FANS_1_2 0x81      
#define SYN_PMBUS_CMD_READ_VIN 0x88             
#define SYN_PMBUS_CMD_READ_IIN 0x89             
#define SYN_PMBUS_CMD_READ_VOUT 0x8B            
#define SYN_PMBUS_CMD_READ_IOUT 0x8C            
#define SYN_PMBUS_CMD_READ_TEMPERATURE_1 0x8D   
#define SYN_PMBUS_CMD_READ_TEMPERATURE_2 0x8E   
#define SYN_PMBUS_CMD_READ_FAN_SPEED_1 0x90     
#define SYN_PMBUS_CMD_READ_DUTY_CYCLE 0x94      
#define SYN_PMBUS_CMD_READ_FREQUENCY 0x95       
#define SYN_PMBUS_CMD_READ_POUT 0x96            
#define SYN_PMBUS_CMD_READ_PIN 0x97             
#define SYN_PMBUS_CMD_PMBUS_REVISION 0x98       
/* ── PMBus Status Bitmask Definitions ───────────────────────────────────── */

#define SYN_PMBUS_STATUS_BYTE_BUSY (1u << 7)
#define SYN_PMBUS_STATUS_BYTE_OFF (1u << 6)
#define SYN_PMBUS_STATUS_BYTE_VOUT_OV (1u << 5)
#define SYN_PMBUS_STATUS_BYTE_IOUT_OC (1u << 4)
#define SYN_PMBUS_STATUS_BYTE_VIN_UV (1u << 3)
#define SYN_PMBUS_STATUS_BYTE_TEMP_FAULT (1u << 2)
#define SYN_PMBUS_STATUS_BYTE_CBUF_FAULT (1u << 1)
#define SYN_PMBUS_STATUS_BYTE_NONE_OF_ABOVE (1u << 0)

/* ── API Function Declarations ───────────────────────────────────────────── */

float syn_pmbus_linear11_to_float(uint16_t raw);

uint16_t syn_pmbus_float_to_linear11(float val);

float syn_pmbus_linear16_to_float(uint16_t raw, uint8_t vout_mode);

uint16_t syn_pmbus_float_to_linear16(float val, uint8_t vout_mode);

void syn_pmbus_encode_read_cmd(SYN_SMBUS_Packet *pkt, uint8_t slave_addr, uint8_t cmd,
                               bool use_pec);

#ifdef __cplusplus
}
#endif

#endif /* SYN_USE_PMBUS */
#endif /* SYN_PMBUS_H */