mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
S60 Support (#1692)
* Mock S60 * cleanup * Start refactor of OLED init * Setup timers roughly * Set Vector table offset correctly Update system_stm32f1xx.c * Update OLED.cpp * Update stm32f1xx_hal_msp.c * Update configuration.h * I2C init before GPIO From Errata Update stm32f1xx_hal_msp.c Update Software_I2C.h Allow no hardware I2C * I2C BB run bus unlock at init * cleanups * Software I2C for now * Mildly more graceful Interpolate * Handle is powered by DC Update Power.cpp Update drawPowerSourceIcon.cpp Update configuration.h Update Setup.cpp * Cleanup HomeScreen * Segment remap oled at init * Cleanup * Update MOVThread.cpp * Fix PWM Init * Fix adc2 trigger * Update configs * Fixup warning * Saner default config * Update ThermoModel.cpp * Util for current@voltage * Hub238 warning * Add hub238 handling in power mode * Update USBPDDebug_FUSB.cpp * HUSB238 debug * Hook PSU Limit * Use wrapping section of GRAM for scroll Update OLED.hpp * Update NTC table * Fix HUB voltage picker * Cleanup * Larger tip filter * Calibrate in a bunch closer Update ThermoModel.cpp * Update configuration.h * Update HUB238.cpp * Update configuration.h * Movement Pin * Update BSP.cpp * tim2 irq * Rough timer conversion (adc broken) but movement working * Fix tim2 start * Faster base PWM * Ensure utils grabs config * Add wattage limiter tolerance for device * Speed up PWM and enable PWM current limiting * tune for 12v * Prevent start until PD done * Update configuration.h * Add HUB238 check for have re-negotiated * Adjust timer to avoid noise when its possible
This commit is contained in:
51
source/Core/Drivers/HUB238.hpp
Normal file
51
source/Core/Drivers/HUB238.hpp
Normal file
@@ -0,0 +1,51 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef _DRIVERS_HUB238_HPP_
|
||||
#define _DRIVERS_HUB238_HPP_
|
||||
#include "configuration.h"
|
||||
#if POW_PD_EXT == 1
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define HUB238_ADDR 0x08 << 1
|
||||
|
||||
#define HUB238_REG_PD_STATUS0 0x00
|
||||
#define HUB238_REG_PD_STATUS1 0x01
|
||||
#define HUB238_REG_SRC_PDO_5V 0x02
|
||||
#define HUB238_REG_SRC_PDO_9V 0x03
|
||||
#define HUB238_REG_SRC_PDO_12V 0x04
|
||||
#define HUB238_REG_SRC_PDO_15V 0x05
|
||||
#define HUB238_REG_SRC_PDO_18V 0x06
|
||||
#define HUB238_REG_SRC_PDO_20V 0x07
|
||||
#define HUB238_REG_SRC_PDO 0x08
|
||||
#define HUB238_REG_GO_COMMAND 0x09
|
||||
|
||||
#define HUB238_PDO_DETECTED (0x01 << 7)
|
||||
// The HUB238 is fairly simple device to interact to, with fairly few registers all in all
|
||||
// It only appears to support fixed PDO's up to 20V
|
||||
// And they have just dedicated registers to each potential option
|
||||
// Given a tip resistance we try and pick the best possible PDO option to suit that resistance
|
||||
// (Using I2C overrides any hardware strapping).
|
||||
|
||||
// Probe if the hub238 exists on the I2C bus
|
||||
bool hub238_probe();
|
||||
// If we have not manually picked a PDO,
|
||||
// but there is an active PD supply, try for our preference
|
||||
|
||||
void hub238_check_negotiation();
|
||||
|
||||
// Returns true when negotiation has finished
|
||||
bool hub238_has_negotiated();
|
||||
// Returns true when we have run selection and negotiated higher current
|
||||
bool hub238_has_run_selection();
|
||||
// Return an encoded state for debugging
|
||||
uint16_t hub238_debug_state();
|
||||
// Return selected source voltage in V
|
||||
uint16_t hub238_source_voltage();
|
||||
// Return selected source current in Amps * 100
|
||||
uint8_t hub238_source_currentX100();
|
||||
|
||||
uint16_t hub238_getVoltagePDOCurrent(uint8_t voltage);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
Reference in New Issue
Block a user