Starting work on sending

This commit is contained in:
Eric Betts
2025-10-31 20:46:11 -07:00
parent 536f4a52b8
commit 9cbea676b9
3 changed files with 24 additions and 8 deletions
+16 -3
View File
@@ -38,6 +38,7 @@ void seader_t_1_reset() {
}
void seader_t_1_set_IFSD(Seader* seader) {
FURI_LOG_D(TAG, "Setting IFSD to %02X", IFSD_VALUE);
SeaderWorker* seader_worker = seader->worker;
SeaderUartBridge* seader_uart = seader_worker->uart;
uint8_t frame[5];
@@ -68,7 +69,11 @@ void seader_t_1_IFSD_response(Seader* seader) {
frame_len = seader_add_lrc(frame, frame_len);
seader_ccid_XfrBlock(seader_uart, frame, frame_len);
if(seader_worker->sam_comm_type == SeaderSamCommunicationTypeSec1210) {
seader_ccid_XfrBlock(seader_uart, frame, frame_len);
} else {
seader_uart_send(seader_uart, frame, frame_len);
}
}
void seader_t_1_send_ack(Seader* seader) {
@@ -86,7 +91,11 @@ void seader_t_1_send_ack(Seader* seader) {
//FURI_LOG_D(TAG, "Sending R-Block ACK: PCB: %02x", frame[1]);
seader_ccid_XfrBlock(seader_uart, frame, frame_len);
if(seader_worker->sam_comm_type == SeaderSamCommunicationTypeSec1210) {
seader_ccid_XfrBlock(seader_uart, frame, frame_len);
} else {
seader_uart_send(seader_uart, frame, frame_len);
}
}
BitBuffer* seader_t_1_tx_buffer;
@@ -112,7 +121,11 @@ void seader_send_t1_chunk(Seader* seader, uint8_t PCB, uint8_t* chunk, size_t le
frame_len = seader_add_lrc(frame, frame_len);
FURI_LOG_D(TAG, "seader_send_t1_chunk T=1 frame: PCB: %02x, LEN: %02x", PCB, len);
seader_ccid_XfrBlock(seader_uart, frame, frame_len);
if(seader_worker->sam_comm_type == SeaderSamCommunicationTypeSec1210) {
seader_ccid_XfrBlock(seader_uart, frame, frame_len);
} else {
seader_uart_send(seader_uart, frame, frame_len);
}
free(frame);
}
+7 -5
View File
@@ -137,11 +137,7 @@ size_t seader_uart_process_buffer_raw(Seader* seader, uint8_t* cmd, size_t cmd_l
if(seader_worker->callback) {
seader_worker->callback(SeaderWorkerEventSamPresent, seader_worker->context);
}
memset(cmd, 0, sizeof(SAM_ATR));
cmd_len -= sizeof(SAM_ATR);
if(cmd_len > 0) {
memmove(cmd, cmd + sizeof(SAM_ATR), cmd_len);
}
return 0;
}
cmd++;
@@ -241,6 +237,12 @@ SeaderUartBridge* seader_uart_enable(SeaderUartConfig* cfg, Seader* seader) {
return seader_uart;
}
void seader_uart_send(SeaderUartBridge* seader_uart, uint8_t* data, size_t len) {
memcpy(seader_uart->tx_buf, data, len);
seader_uart->tx_len = len;
furi_thread_flags_set(furi_thread_get_id(seader_uart->tx_thread), WorkerEvtSamRx);
}
int32_t seader_uart_tx_thread(void* context) {
Seader* seader = (Seader*)context;
SeaderUartBridge* seader_uart = seader->uart;
+1
View File
@@ -18,3 +18,4 @@ void seader_uart_sam_reset(SeaderUartBridge* seader_uart);
SeaderUartBridge* seader_uart_alloc(Seader* seader);
void seader_uart_free(SeaderUartBridge* seader_uart);
void seader_uart_send(SeaderUartBridge* seader_uart, uint8_t* data, size_t len);