Files
templates/c/set-protocol/include/tms2812.h

74 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Исторический протокол основного контроллера ПМ67/TMS320F2812. Формирование команд и проверка
* ответов находятся в общем ядре; адреса памяти C28x считаются словами, тогда как длины
* передачи могут задаваться байтами.
*/
/**
* @file tms2812.h
* @brief Shared PM67/TMS320F2812 legacy terminal and memory protocol.
*/
#ifndef TMS2812_H
#define TMS2812_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define TMS2812_CMD_UPLOAD 52U
#define TMS2812_CMD_PEEK 56U
#define TMS2812_CMD_POKE 57U
#define TMS2812_CMD_TEST_ALL 66U
#define TMS2812_PING_ADDRESS 0x00000100UL
#define TMS2812_UPLOAD_REQUEST_SIZE 12U
#define TMS2812_UPLOAD_RESPONSE_OVERHEAD 8U
typedef enum {
TMS2812_OK = 0,
TMS2812_ERROR_ARGUMENT = -1,
TMS2812_ERROR_RANGE = -2,
TMS2812_ERROR_LENGTH = -3,
TMS2812_ERROR_CRC = -4,
TMS2812_ERROR_HEADER = -5,
TMS2812_ERROR_CAPACITY = -6
} tms2812_status_t;
uint16_t tms2812_crc16(const uint8_t *data, size_t size);
size_t tms2812_build_fixed_request(uint8_t controller, uint8_t command,
const uint8_t *payload, size_t payload_size, uint8_t *output, size_t output_size);
/* command=0 is the host PING operation; on wire it is PEEK at 0x100. */
size_t tms2812_build_memory_request(uint8_t controller, uint8_t command,
uint32_t word_address, uint16_t value, uint8_t *output, size_t output_size);
size_t tms2812_build_test_request(uint8_t controller, uint16_t duration,
uint16_t pause, const uint8_t *digits, size_t digit_count,
uint8_t *output, size_t output_size);
/* Ordinary BALZAM responses reserve two bytes after CRC. If allow_short_tail
* is true only those bytes may be omitted; caller must observe the UART gap.
* UPLOAD responses use tms2812_validate_upload_response instead. */
int tms2812_validate_response(const uint8_t *data, size_t size,
uint8_t controller, uint8_t command, size_t full_size, int allow_short_tail);
size_t tms2812_build_upload_request(
uint8_t controller, uint32_t word_address, uint32_t byte_count,
uint8_t *output, size_t output_size);
size_t tms2812_expected_upload_response_size(uint32_t byte_count);
int tms2812_validate_upload_response(
const uint8_t *data, size_t size, uint8_t controller,
uint32_t byte_count);
int tms2812_decode_upload_response(
const uint8_t *data, size_t size, uint8_t controller,
uint32_t byte_count, uint8_t *output, size_t output_size);
#ifdef __cplusplus
}
#endif
#endif /* TMS2812_H */