42 uint32_t ck = ((
s2 % 65535u) << 16) | (s1 % 65535u);
53#ifdef MONITOR_LINK_IS_STREAM
63 s_txS1 += w; s_txS2 += s_txS1;
67 uint32_t ck = fletcherFinish(s_txS1, s_txS2);
68 linkPutWord((uint16_t)(ck & 0xffff));
69 linkPutWord((uint16_t)((ck >> 16) & 0xffff));
79#ifdef MONITOR_LINK_IS_STREAM
87 uint8_t
b = linkGetByte();
97 while ((
b = linkGetByte()) == 0) {
108 s_rxS1 +=
t; s_rxS2 += s_rxS1;
109 s_rxS1 += l; s_rxS2 += s_rxS1;
119 uint16_t
t = linkGetWord();
120 s_rxS1 +=
t; s_rxS2 += s_rxS1;
121 uint16_t l = linkGetWord();
122 s_rxS1 += l; s_rxS2 += s_rxS1;
128#ifdef MONITOR_LINK_IS_STREAM
129#ifndef MONITOR_STOP_QUIET_SPINS
130#define MONITOR_STOP_QUIET_SPINS 20000
135 if (!linkTryGetByte(&
b))
return 0;
147 quiet = linkTryGetByte(&
b) ? 0 : quiet + 1;
148 }
while (quiet < MONITOR_STOP_QUIET_SPINS);
150#ifdef MONITOR_LINK_SIO1
160 uint16_t w = linkGetWord();
161 s_rxS1 += w; s_rxS2 += s_rxS1;
167 rxck |= ((
uint32_t)linkGetWord()) << 16;
168#ifdef MONITOR_LINK_IS_STREAM
178#ifdef MONITOR_LINK_HAS_RATE
179#ifndef MONITOR_RATE_WINDOW_SPINS
180#define MONITOR_RATE_WINDOW_SPINS 3000000
186static const uint8_t s_pingFrame[] = {0x00, 0xaa, 0x55, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00};
187static const uint8_t s_confirmFrame[] = {0x00, 0xaa, 0x55, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x03, 0x00, 0x06, 0x00};
192static int awaitFrame(
const uint8_t *f,
unsigned n) {
193 unsigned matched = 0;
195 for (
uint32_t spins = 0; spins < MONITOR_RATE_WINDOW_SPINS; spins++) {
197 if (!linkTryGetByte(&
b))
continue;
198 if (
b == f[matched]) {
199 if (++matched == n) {
204 matched = (
b == f[0]) ? 1 : 0;
211int transportTryRate(uint16_t reload, uint16_t pongType, uint16_t pongWord) {
212 uint16_t old = linkGetRate();
216 if (awaitFrame(s_pingFrame,
sizeof(s_pingFrame))) {
218 if (awaitFrame(s_confirmFrame,
sizeof(s_confirmFrame)))
return 1;
__attribute__((weak))
Definition clz.c:56
uint32_t t
Definition cop0.c:79
uint8_t b
Definition gte-depthcue.c:39
int i
Definition gte-regio.c:297
static const char * s2
Definition syscalls.h:92
void uint32_t(classId, spec)
#define CKSUM_NONE
Definition transport.c:36
int transportRecvFrame(uint16_t *type, uint16_t *payload, uint16_t maxLen, uint16_t *lenOut)
Definition transport.c:228
uint16_t transportRecvWord(void)
Definition transport.c:159
void transportSendWord(uint16_t w)
Definition transport.c:61
int transportRecvEnd(void)
Definition transport.c:165
void transportRecvBegin(uint16_t *type, uint16_t *len)
Definition transport.c:114
void transportSendEnd(void)
Definition transport.c:66
int transportStopPending(void)
Definition transport.c:156
int transportTryRate(uint16_t reload, uint16_t pongType, uint16_t pongWord)
Definition transport.c:225
int transportHasRate(void)
Definition transport.c:224
void transportInit(void)
Definition transport.c:46
void transportSendBegin(uint16_t type, uint16_t len)
Definition transport.c:51
void transportSendFrame(uint16_t type, const uint16_t *payload, uint16_t len)
Definition transport.c:72
#define TRANSPORT_OK
Definition transport.h:41
#define TRANSPORT_EBADLEN
Definition transport.h:42
#define FRAME_SYNC
Definition transport.h:38
#define TRANSPORT_ECKSUM
Definition transport.h:43
#define TRANSPORT_STREAM_MAX_LEN
Definition transport.h:47