mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2026-04-28 03:08:08 +00:00
dma fix priority and debug
This commit is contained in:
41082
ref/DMA_no_send__extRX.txt
Normal file
41082
ref/DMA_no_send__extRX.txt
Normal file
File diff suppressed because it is too large
Load Diff
14922
ref/DMA_self_frontlog.txt
Normal file
14922
ref/DMA_self_frontlog.txt
Normal file
File diff suppressed because it is too large
Load Diff
64
ref/IR_DMA_TX_backend.md
Normal file
64
ref/IR_DMA_TX_backend.md
Normal file
@ -0,0 +1,64 @@
|
||||
# Контракт бэкенда DMA-TX ИК (`IrDmaTxStm32`)
|
||||
|
||||
Платформа: **STM32G4**, Arduino STM32. Передача: **DMA memory → GPIO BSRR**, запрос от **TIM UPDATE** (частота `carrierFrec×2` из `IR_Encoder::beginClockOnly`).
|
||||
|
||||
### Число потоков (шаблон)
|
||||
|
||||
Класс: **`IrDmaTxStm32<MaxStreams>`**. Число слотов в `Config::streams[]` и внутреннем массиве задаётся **в коде**, без `-D` и без макроса до инклюда:
|
||||
|
||||
```cpp
|
||||
constexpr size_t kStreams = 2;
|
||||
static IrDmaTxStm32<kStreams> dma;
|
||||
IrDmaTxStm32<kStreams>::Config cfg;
|
||||
// IRQ: IrDmaTxStm32<kStreams>::instance()
|
||||
```
|
||||
|
||||
По умолчанию: **`IrDmaTxStm32<>`** эквивалентно **`IrDmaTxStm32<irproto::kDefaultDmaTxMaxStreams>`** (`IR_config.h`, обычно 4). Реализация в заголовке (отдельного `.cpp` нет).
|
||||
|
||||
## Роль библиотеки
|
||||
|
||||
- Разбор пакета в RLE-пробеги: `IR_Encoder::buildGateRuns`.
|
||||
- Генерация слов для BSRR (несущая/тишина по тикам), предзаполнение буфера и дозаполнение по прерываниям half/complete.
|
||||
- Настройка канала DMA, DMAMUX, кольцевой режим, старт/стоп DMA и таймера, колбэки HAL.
|
||||
- В `begin()` только `HAL_NVIC_EnableIRQ` для каналов DMA (без `SetPriority`).
|
||||
|
||||
## Роль прошивки (клиента)
|
||||
|
||||
### Буферы и размеры
|
||||
|
||||
На **каждый** поток в `StreamCfg` клиент передаёт:
|
||||
|
||||
| Поле | Смысл |
|
||||
|------|--------|
|
||||
| `dmaWords` | Указатель на массив `uint32_t` — слова для записи в BSRR. |
|
||||
| `dmaWordCount` | Число **слов** (32-bit), **чётное**, ≥ 2. Половина — один «полубуфер» для HT/TC IRQ. |
|
||||
| `gateRuns` | Массив `IR_Encoder::IR_TxGateRun` для выхода `buildGateRuns`. |
|
||||
| `maxGateRuns` | Длина этого массива. Должен быть достаточен для самого длинного кадра. |
|
||||
|
||||
Память и выравнивание — ответственность клиента; типичные порядки: 4096 слов DMA, 1024 ранов (как в машинке).
|
||||
|
||||
### Таймер и DMA
|
||||
|
||||
- `HardwareTimer` / тот же TIM, что и `beginClockOnly`, без конкурирующего `attachInterrupt` на UPDATE.
|
||||
- `instance`, `irq`, `dmamuxRequest` (например `DMA_REQUEST_TIM17_UP`) — из схемы платы; оба потока на одном TIM обычно используют **один** `TIMx_UP` в DMAMUX.
|
||||
|
||||
### Приоритеты NVIC
|
||||
|
||||
Не задаются в библиотеке. После `begin()` клиент выставляет preempt/sub для `DMA1_ChannelN` (и согласует с приёмом EXTI и др.), например общей функцией вроде `Car_applyInterruptPriorities()`.
|
||||
|
||||
### Прерывания DMA
|
||||
|
||||
Библиотека **не** объявляет `DMA1_ChannelN_IRQHandler`. В одном `.cpp` прошивки — единственное определение на канал, внутри:
|
||||
|
||||
`IrDmaTxStm32<N>::instance()->irqForStream(i)` (тот же **N**, что у объекта бэкенда) или `IrDmaTxStm32_onDmaHandle(hdma)`.
|
||||
|
||||
## Контракт `IR_Encoder::setExternalTxBackend`
|
||||
|
||||
Подключение: `setExternalTxBackend(startFn, busyFn, ctx)`.
|
||||
|
||||
- **`startFn(ctx, enc, packet, len)`** — должен вызвать `IrDmaTxStm32<N>::start(enc, packet, len)` (или обёртку). Возвращает успех старта DMA.
|
||||
- **`busyFn(ctx)`** — пока возвращает «занято», новая отправка не стартует. У `IrDmaTxStm32<N>::busy()`: **true**, если **все** настроенные потоки в передаче (для двух передатчиков — оба активны); иначе можно запустить второй канал.
|
||||
|
||||
## Сбой `begin()`
|
||||
|
||||
При ошибке `HAL_DMA_Init` и т.п. `begin()` возвращает `false`, `instance()` не используется для IRQ до успешного `begin()`.
|
||||
87
ref/IR_EDGE_TRACE_FORMAT.md
Normal file
87
ref/IR_EDGE_TRACE_FORMAT.md
Normal file
@ -0,0 +1,87 @@
|
||||
# Формат журнала фронтов ИК (`IR_EDGE_TRACE`)
|
||||
|
||||
Включается в `IR_config.h`: раскомментируйте `#define IR_EDGE_TRACE`.
|
||||
Размер кольца задаётся `IR_EDGE_TRACE_CAPACITY` (по умолчанию 512 записей).
|
||||
Память: примерно `IR_EDGE_TRACE_CAPACITY × 6` байт на экземпляр `IR_DecoderRaw`.
|
||||
|
||||
## Назначение
|
||||
|
||||
В ISR на каждый аппаратный фронт на линии приёмника пишется запись: абсолютное время `micros()`, уровень линии после фронта, флаги. Это **отдельное** кольцо от `subBuffer`: при переполнении `subBuffer` фронты в журнале всё равно сохраняются, пока не заполнится это кольцо.
|
||||
|
||||
При **передаче ИК по DMA** на STM32 важно, чтобы **прерывание приёма (EXTI)** имело **более высокий приоритет NVIC**, чем DMA канала передачи — иначе метки времени и сам поток фронтов в логе искажаются. См. **[`IR_DMA_ISR_signal_analysis.md`](../IR_DMA_ISR_signal_analysis.md)** (раздел 2.1).
|
||||
|
||||
## Вывод в Serial
|
||||
|
||||
При включённом `IR_EDGE_TRACE` протокол **сам** сбрасывает накопленные фронты в конце каждого `IR_DecoderRaw::tick()` (и на ветке «subBuffer пуст»): в цикле вызывается `edgeTraceFlushChunk(Serial, 48)`, пока в кольце есть записи.
|
||||
|
||||
Вручную тот же смысл: `edgeTraceFlushChunk(Print &out, maxRec)` печатает **ровно одну строку** (если есть что выгрузить; при пустом кольце выход без печати):
|
||||
|
||||
1. Символ перевода строки `\n` (отделяет блок от предыдущего вывода).
|
||||
2. Литеральный префикс **`@IRF1v1:`** (удобно grep-ать; не используйте этот текст в других `Serial.print`, чтобы строки не сливались).
|
||||
3. **Нижний регистр hex** без пробелов: полезная нагрузка бинарного блока ниже.
|
||||
4. `\n` в конце.
|
||||
|
||||
Другой текст (например `IR raw:` из `IRDEBUG_SERIAL_PACK`) не содержит `@IRF1v1:`, поэтому визуально и по парсеру блоки разделимы.
|
||||
|
||||
Если авто-сброс в `tick()` отключён или нужен другой `Print`, вызывайте `edgeTraceFlushChunk` в цикле, пока возвращаемое значение > 0.
|
||||
|
||||
## Бинарная полезная нагрузка (до кодирования в hex)
|
||||
|
||||
Все многобайтовые целые — **little-endian**, порядок байт от младшего к старшему.
|
||||
|
||||
| Смещение | Размер | Поле |
|
||||
|----------|--------|------|
|
||||
| 0 | 1 | **meta** |
|
||||
| 1 | 2 | **count** — число записей в этой строке (`uint16_t`) |
|
||||
| 3 | `count × 6` | Массив записей |
|
||||
|
||||
### meta (байт)
|
||||
|
||||
| Бит | Значение |
|
||||
|-----|----------|
|
||||
| 0 | **overflow**: кольцо хотя бы раз переполнилось с момента последнего `edgeTraceClear()`; новые фронты терялись, пока не освободилось место. Сбрасывается только `edgeTraceClear()`. |
|
||||
| 1 | **truncated**: после этой выгрузки в буфере ещё есть записи (chunk урезан лимитом `maxRec` или внутренним максимумом 64). |
|
||||
|
||||
Биты 2–7 зарезервированы (0).
|
||||
|
||||
### Одна запись (6 байт)
|
||||
|
||||
| Смещение в записи | Размер | Поле |
|
||||
|-------------------|--------|------|
|
||||
| 0 | 4 | **t_us** — значение `micros()` на момент фронта (`uint32_t`). При переполнении `micros()` (~70 мин) разницы между соседними записями всё ещё корректны, если обрабатывать как unsigned. |
|
||||
| 4 | 1 | **level** — уровень входа приёмника после фронта: `0` = LOW, `1` = HIGH (как `port->IDR & mask` в ISR). |
|
||||
| 5 | 1 | **flags** |
|
||||
| | | бит 0 **SKIP_DECODE** (`IR_EDGE_TRACE_F_SKIP_DECODE`): фронт записан, но в `subBuffer` **не** попал, потому что был активен `isPairSending` (пара передаёт). Алгоритм декодирования этот фронт не видит. |
|
||||
|
||||
## Минимальный разбор (Python 3)
|
||||
|
||||
```python
|
||||
import binascii, re
|
||||
|
||||
def parse_irf1_line(line: str):
|
||||
m = re.search(r"@IRF1v1:([0-9a-f]+)\s*$", line.strip())
|
||||
if not m:
|
||||
return None
|
||||
raw = binascii.unhexlify(m.group(1))
|
||||
meta, cnt_lo, cnt_hi = raw[0], raw[1], raw[2]
|
||||
count = cnt_lo | (cnt_hi << 8)
|
||||
recs = []
|
||||
p = 3
|
||||
for _ in range(count):
|
||||
t = raw[p] | (raw[p+1]<<8) | (raw[p+2]<<16) | (raw[p+3]<<24)
|
||||
level, flags = raw[p+4], raw[p+5]
|
||||
recs.append((t, level, flags))
|
||||
p += 6
|
||||
return {
|
||||
"overflow": bool(meta & 1),
|
||||
"truncated": bool(meta & 2),
|
||||
"count": count,
|
||||
"records": recs,
|
||||
}
|
||||
```
|
||||
|
||||
## Рекомендации по съёму
|
||||
|
||||
- При очень плотном потоке фронтов кольцо всё же может переполниться до следующего `tick()` — увеличьте `IR_EDGE_TRACE_CAPACITY` или уменьшите нагрузку на ISR.
|
||||
- Для «чистого» лога отключите или сильно урежьте `IRDEBUG_SERIAL_PACK`, иначе объём Serial будет очень большим.
|
||||
- Для полного сброса состояния перед тестом: `edgeTraceClear()`.
|
||||
289
ref/ISR_self.txt
Normal file
289
ref/ISR_self.txt
Normal file
@ -0,0 +1,289 @@
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
IR sendTimer()
|
||||
IR Laser();
|
||||
IR SKIP LASER
|
||||
|
||||
IR sendTimer()
|
||||
IR irSend()
|
||||
|
||||
|
||||
IR raw: => ERROR: TIMEOUT, rx_data_size = 10, but only 10 bytes received
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
|
||||
IR raw: 110 01010 101 00000000 101 00000000 100 11111101 010 11101000 101 01011000 101 00000000 101 00000000 100 11011101 010 11011000 => OK: SendInfo_v1_1, Empty_Command, Empty_Command
|
||||
IR hex: CA 00 00 FD E8 58 00 00 DD D8
|
||||
17170
ref/ISR_self_frontlog.txt
Normal file
17170
ref/ISR_self_frontlog.txt
Normal file
File diff suppressed because it is too large
Load Diff
13744
ref/OtherCar_DMA_send__NoSelfTx.txt
Normal file
13744
ref/OtherCar_DMA_send__NoSelfTx.txt
Normal file
File diff suppressed because it is too large
Load Diff
13
ref/point response.txt
Normal file
13
ref/point response.txt
Normal file
@ -0,0 +1,13 @@
|
||||
IR raw: 110 01001 011 01111101 011 00100110 101 00000000 100 00000000 101 01110110 101 00100111 010 10011100 101 01101100 => OK: Laser_ON, LED_Left_BlinkTest
|
||||
IR hex: C9 7D 26 00 00 76 27 9C 6C
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
IR raw: 110 01001 011 01111101 011 00100110 101 00000000 100 00000000 101 01110110 101 00100111 010 10011100 101 01101100 => OK: Laser_ON, LED_Left_BlinkTest
|
||||
|
||||
|
||||
Reference in New Issue
Block a user