Добавить переносимый планировщик PULSE

This commit is contained in:
2026-09-01 20:54:58 +03:00
parent e9ec078b38
commit af82687e42
5 changed files with 179 additions and 1 deletions

View File

@@ -27,9 +27,11 @@
/** Назначенный проекту тип сообщения SETCAN SETTINGS. */
#define CAN_SENSOR_MSGTYPE_SETTINGS 0xEU
#define CAN_SENSOR_MSGTYPE_PULSE 0xFU
/** Маска полей SETCAN от Priority до MsgType; Body под маской не находится. */
#define CAN_SENSOR_HEADER_MASK 0x1FFF0000UL
#define CAN_SENSOR_ADDRESS_MASK 0x1FF00000UL
#define CAN_SENSOR_BODY_MASK 0x0000FFFFUL
/** Базовые ID SETTINGS для выбранных DeviceType=0x7 и DeviceID=0xF. */
@@ -88,6 +90,7 @@ typedef struct {
uint32_t rx_id; /**< База запроса 0x17FE0000, Body должен быть нулевым. */
uint8_t extended; /**< 1 — Extended CAN ID. */
uint8_t retries; /**< Число попыток передачи. */
uint32_t pulse_period_ms; /**< Период PULSE; 0 полностью отключает PULSE. */
} CanSensor_Config;
/** Состояние транспорта и диагностические счётчики. */
@@ -98,6 +101,9 @@ typedef struct {
uint32_t send_errors;
uint32_t received_messages;
uint32_t dropped_frames;
uint32_t pulse_last_ms;
uint8_t pulse_counter;
uint8_t pulse_armed;
} CanSensor;
void CanSensor_ConfigDefault(CanSensor_Config *config);
@@ -124,4 +130,17 @@ uint8_t CanSensor_HandleFrame(CanSensor *link, const CanSensor_Frame *frame,
uint8_t CanSensor_Poll(CanSensor *link, CanSensor_Message *out);
/**
* @brief Меняет период PULSE во время работы.
*
* @param period_ms Период в миллисекундах; 0 выключает PULSE.
*/
void CanSensor_SetPulsePeriod(CanSensor *link, uint32_t period_ms);
/** Возвращает действующий период PULSE; 0 означает «выключено». */
uint32_t CanSensor_PulsePeriod(const CanSensor *link);
/** Вызывает планировщик PULSE из главного цикла. */
void CanSensor_Task(CanSensor *link, uint32_t now_ms);
#endif /* CAN_SENSOR_H */