blob: 76043fef0edb6d6c0ba95132684c7fea54bde844 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/serpoll.h"
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/nubevent.h"
#include "trk.h"
static TRKFramingState gTRKFramingState;
void* gTRKInputPendingPtr;
extern int TRKPollUART(void);
MessageBufferID TRKTestForPacket() {
u8 payloadBuf[0x880];
u8 packetBuf[0x40];
int bufID;
TRKBuffer* msg;
MessageBufferID result;
if (TRKPollUART() <= 0) {
return -1;
}
result = TRKGetFreeBuffer(&bufID, &msg);
TRKSetBufferPosition(msg, 0);
if (TRKReadUARTN(packetBuf, 0x40) == UART_NoError) {
int readSize;
TRKAppendBuffer_ui8(msg, packetBuf, 0x40);
readSize = ((u32*)packetBuf)[0] - 0x40;
result = bufID;
if (readSize > 0) {
if (TRKReadUARTN(payloadBuf, ((u32*)packetBuf)[0] - 0x40) == UART_NoError) {
TRKAppendBuffer_ui8(msg, payloadBuf, ((u32*)packetBuf)[0]);
} else {
TRKReleaseBuffer(result);
result = -1;
}
}
} else {
TRKReleaseBuffer(result);
result = -1;
}
return result;
}
void TRKGetInput(void) {
MessageBufferID id = TRKTestForPacket();
if (id != -1) {
TRKEvent event;
TRKGetBuffer(id);
TRKConstructEvent(&event, NUBEVENT_Request);
event.msgBufID = id;
gTRKFramingState.msgBufID = -1;
TRKPostEvent(&event);
}
}
void TRKProcessInput(int bufferIdx) {
TRKEvent event;
TRKConstructEvent(&event, NUBEVENT_Request);
event.msgBufID = bufferIdx;
gTRKFramingState.msgBufID = -1;
TRKPostEvent(&event);
}
DSError TRKInitializeSerialHandler() {
gTRKFramingState.msgBufID = -1;
gTRKFramingState.receiveState = DSRECV_Wait;
gTRKFramingState.isEscape = FALSE;
return DS_NoError;
}
DSError TRKTerminateSerialHandler(void) {
return DS_NoError;
}
|