Confirmed pairing works

This commit is contained in:
jaseg 2018-11-12 12:48:47 +09:00
parent 2f4f3e13aa
commit 70d8dcb6f6
9 changed files with 616 additions and 68 deletions

260
adjectives.py Normal file
View file

@ -0,0 +1,260 @@
ADJECTIVES = [
"wrathful", # 0
"worthy", # 1
"weird", # 2
"warm", # 3
"volatile", # 4
"veiled", # 5
"vacuous", # 6
"useless", # 7
"upset", # 8
"unsoiled", # 9
"unsightly", # 10
"unpronounceable", # 11
"unfriendly", # 12
"unfree", # 13
"unfit", # 14
"unfaithful", # 15
"unchaste", # 16
"unbroken", # 17
"unbound", # 18
"unblessed", # 19
"unbefitting", # 20
"unaltered", # 21
"unabused", # 22
"unable", # 23
"ugly", # 24
"tongued", # 25
"thorny", # 26
"thirsty", # 27
"thick", # 28
"terminal", # 29
"ten-sided", # 30
"teeming", # 31
"tangerine", # 32
"taken", # 33
"substantial", # 34
"stupefying", # 35
"stringy", # 36
"strange", # 37
"stillborn", # 38
"sticky", # 39
"stagnant", # 40
"spongy", # 41
"sour", # 42
"soul-destroying", # 43
"smoldering", # 44
"smitten", # 45
"slain", # 46
"six-sided", # 47
"shifting", # 48
"shadowy", # 49
"severed", # 50
"seven-sided", # 51
"serene", # 52
"salty", # 53
"rust-red", # 54
"royal", # 55
"rotten", # 56
"riddled", # 57
"resentful", # 58
"regrettable", # 59
"reeking", # 60
"rare", # 61
"rank", # 62
"rancid", # 63
"quiescent", # 64
"putrid", # 65
"putrid", # 66
"putrescent", # 67
"prehistoric", # 68
"predatory", # 69
"predaceous", # 70
"porous", # 71
"poisonous", # 72
"pierced", # 73
"phlegmatic", # 74
"petrifying", # 75
"pessimal", # 76
"pathetic", # 77
"odorless", # 78
"oddish", # 79
"obsessed", # 80
"obscene", # 81
"numb", # 82
"nine-sided", # 83
"nasty", # 84
"mysterious", # 85
"mute", # 86
"musky", # 87
"morose", # 88
"moribund", # 89
"moldy", # 90
"miasmic", # 91
"material", # 92
"many-lobed", # 93
"malodorous", # 94
"malign", # 95
"maimed", # 96
"luminescent", # 97
"low-cut", # 98
"lousy", # 99
"live", # 100
"limp", # 101
"lifeless", # 102
"leering", # 103
"leaky", # 104
"layered", # 105
"latent", # 106
"lackluster", # 107
"jagged", # 108
"irregular", # 109
"iridescent", # 110
"intangible", # 111
"infinite", # 112
"inept", # 113
"incomprehensible", # 114
"in-between", # 115
"improper", # 116
"idle", # 117
"hunted", # 118
"hideous", # 119
"heavy", # 120
"hairy", # 121
"guilty", # 122
"grotesque", # 123
"grey", # 124
"greedy", # 125
"gory", # 126
"gorgeous", # 127
"gooey", # 128
"golden-brown", # 129
"golden", # 130
"ghastly", # 131
"frostbitten", # 132
"fresh-cut", # 133
"freakish", # 134
"frantic", # 135
"fossilized", # 136
"formless", # 137
"formidable", # 138
"floccose", # 139
"five-lobed", # 140
"firstborn", # 141
"filthy", # 142
"fickle", # 143
"fetid", # 144
"fertile", # 145
"fearful", # 146
"fatal", # 147
"familiar", # 148
"fallen", # 149
"fallacious", # 150
"faint", # 151
"faceless", # 152
"extinct", # 153
"esoteric", # 154
"errant", # 155
"emergent", # 156
"elastic", # 157
"eight-sided", # 158
"eerie", # 159
"ebon", # 160
"dysphoric", # 161
"dying", # 162
"dumb", # 163
"dull-purple", # 164
"dull", # 165
"dull", # 166
"dull", # 167
"dormant", # 168
"doomed", # 169
"disfigured", # 170
"dirty", # 171
"defenseless", # 172
"deep-pink", # 173
"deep", # 174
"deconsecrated", # 175
"deathlike", # 176
"deadly", # 177
"dead", # 178
"dark-blue", # 179
"dark", # 180
"curly", # 181
"curious", # 182
"cured", # 183
"cunning", # 184
"crystalline", # 185
"cryptic", # 186
"crying", # 187
"crumbly", # 188
"crimson", # 189
"crested", # 190
"creepy", # 191
"crazy", # 192
"corrupt", # 193
"corporeal", # 194
"contemptible", # 195
"contained", # 196
"concrete", # 197
"cloudy", # 198
"chopped", # 199
"chained", # 200
"caustic", # 201
"catholic", # 202
"cathartic", # 203
"captive", # 204
"cancerous", # 205
"cabalistic", # 206
"burnt", # 207
"buoyant", # 208
"bronze-red", # 209
"bronze", # 210
"broken", # 211
"bright-red", # 212
"breathless", # 213
"bound", # 214
"bound", # 215
"bottomless", # 216
"bony", # 217
"bodiless", # 218
"blue-lilac", # 219
"blue", # 220
"bloody", # 221
"bloodthirsty", # 222
"bloodsucking", # 223
"bloodstained", # 224
"bloodcurdling", # 225
"blonde", # 226
"blistered", # 227
"blank", # 228
"bitter", # 229
"bilgy", # 230
"bewitched", # 231
"befouled", # 232
"beardless", # 233
"bastardly", # 234
"barbed", # 235
"baleful", # 236
"balding", # 237
"awkward", # 238
"awful", # 239
"atrocious", # 240
"arcane", # 241
"appalling", # 242
"antic", # 243
"anonymous", # 244
"angry", # 245
"ample", # 246
"ambiguous", # 247
"amber-green", # 248
"amber", # 249
"aghast", # 250
"activated", # 251
"acidic", # 252
"abused", # 253
"abstruse", # 254
"abject", # 255
]

View file

@ -52,8 +52,8 @@ def send_packet(ser, pkt_type, data, width=16):
def receive_packet(ser, width=16):
packet = ser.read_until(b'\0')
data = cobs.decode(packet[:-1])
print(f'\033[93mReceived {len(data)} bytes\033[0m')
hexdump(print, data, width)
#print(f'\033[93mReceived {len(data)} bytes\033[0m')
#hexdump(print, data, width)
return data[0], data[1:]
if __name__ == '__main__':
@ -67,6 +67,7 @@ if __name__ == '__main__':
args = parser.parse_args()
ser = serial.Serial(args.serial, args.baudrate)
ser.write(b'\0') # COBS synchronization
import uinput
ALL_KEYS = [ v for k, v in uinput.ev.__dict__.items() if k.startswith('KEY_') ]
@ -117,13 +118,24 @@ if __name__ == '__main__':
print('Handshake finished, handshake hash:')
hexdump(print, proto.get_handshake_hash(), args.width)
from nouns import NOUNS
from adjectives import ADJECTIVES
def map_bytes_to_incantation(data):
return " ".join(f'{ADJECTIVES[a]:>16} {NOUNS[b]:<16}' for a, b in zip(data[0::2], data[1::2]))
print('Handshake channel binding incantation:')
hhash = proto.get_handshake_hash()
print(' ' + map_bytes_to_incantation(hhash[:8 ]))
print(' ' + map_bytes_to_incantation(hhash[ 8:16 ]))
print(' ' + map_bytes_to_incantation(hhash[ 16:24 ]))
print(' ' + map_bytes_to_incantation(hhash[ 24:]))
old_kcs = set()
def noise_rx(received, ui):
global old_kcs
data = proto.decrypt(received)
print('Decrypted data:')
hexdump(print, data, args.width)
#print('Decrypted data:')
#hexdump(print, data, args.width)
rtype, rlen, *report = data
if rtype != 1 or rlen != 8:

260
nouns.py Normal file
View file

@ -0,0 +1,260 @@
NOUNS = [
"yolk", # 0
"writing", # 1
"wrath", # 2
"wound", # 3
"worm", # 4
"wings", # 5
"whistle", # 6
"watchdog", # 7
"waste", # 8
"vomit", # 9
"vermin", # 10
"variation", # 11
"underachievement", # 12
"tusk", # 13
"troll", # 14
"trick", # 15
"transplant", # 16
"transgression", # 17
"tooth", # 18
"tongue", # 19
"tickle", # 20
"tick", # 21
"thorn", # 22
"thistle", # 23
"thing", # 24
"terror", # 25
"tentacle", # 26
"tease", # 27
"surrender", # 28
"surge", # 29
"sucker", # 30
"substance", # 31
"storm", # 32
"stone", # 33
"stew", # 34
"stalk", # 35
"squid", # 36
"sprout", # 37
"sponge", # 38
"spill", # 39
"spider", # 40
"sphere", # 41
"spectacle", # 42
"speck", # 43
"spawn", # 44
"soul", # 45
"solution", # 46
"snout", # 47
"snake", # 48
"smell", # 49
"sloth", # 50
"slime", # 51
"slice", # 52
"sleeper", # 53
"slave", # 54
"sinew", # 55
"shell", # 56
"shape", # 57
"seizure", # 58
"seed", # 59
"schism", # 60
"scam", # 61
"scale", # 62
"sainthood", # 63
"root", # 64
"robe", # 65
"roach", # 66
"rinse", # 67
"remains", # 68
"relay", # 69
"rejuvenation", # 70
"realization", # 71
"reaction", # 72
"ransom", # 73
"pupa", # 74
"pride", # 75
"prey", # 76
"predator", # 77
"potion", # 78
"pornography", # 79
"polyp", # 80
"plum", # 81
"pleasure", # 82
"pitch", # 83
"pigeon", # 84
"phenomenon", # 85
"pest", # 86
"periwinkle", # 87
"percolation", # 88
"parasite", # 89
"pair", # 90
"oyster", # 91
"orphan", # 92
"orgasm", # 93
"organism", # 94
"orchid", # 95
"object", # 96
"nail", # 97
"mushroom", # 98
"murder", # 99
"mucus", # 100
"movement", # 101
"mother", # 102
"mold", # 103
"mist", # 104
"mildew", # 105
"metal", # 106
"mesh", # 107
"meddling", # 108
"mayhem", # 109
"masterpiece", # 110
"masonry", # 111
"mask", # 112
"manhood", # 113
"maggot", # 114
"lust", # 115
"loop", # 116
"living_thing", # 117
"liquor", # 118
"liquid", # 119
"lining", # 120
"laceration", # 121
"knife", # 122
"kitten", # 123
"kiss", # 124
"jumper", # 125
"jest", # 126
"instrument", # 127
"injustice", # 128
"injury", # 129
"influence", # 130
"indulgence", # 131
"incursion", # 132
"impulse", # 133
"imago", # 134
"hound", # 135
"horn", # 136
"hook", # 137
"hoof", # 138
"heirloom", # 139
"heart", # 140
"hawk", # 141
"hare", # 142
"hair", # 143
"gulp", # 144
"guardian", # 145
"grass", # 146
"goat", # 147
"gnat", # 148
"gluttony", # 149
"glowworm", # 150
"gasp", # 151
"game", # 152
"fusion", # 153
"fungus", # 154
"frustration", # 155
"frog", # 156
"foul", # 157
"foot", # 158
"food", # 159
"fog", # 160
"foal", # 161
"fluke", # 162
"fluff", # 163
"flower", # 164
"flicker", # 165
"flea", # 166
"flattery", # 167
"flask", # 168
"flare", # 169
"firefly", # 170
"finger", # 171
"filtration", # 172
"female", # 173
"feeder", # 174
"feather", # 175
"fart", # 176
"fang", # 177
"failure", # 178
"face", # 179
"fabrication", # 180
"extract", # 181
"exodus", # 182
"evil", # 183
"envy", # 184
"enema", # 185
"embryo", # 186
"egress", # 187
"echo", # 188
"eater", # 189
"ear", # 190
"dwarf", # 191
"dust", # 192
"drop", # 193
"draft", # 194
"domestication", # 195
"distortion", # 196
"dew", # 197
"depravity", # 198
"deity", # 199
"death", # 200
"daughter", # 201
"dash", # 202
"dagger", # 203
"culture", # 204
"crutch", # 205
"crow", # 206
"critter", # 207
"creeper", # 208
"creation", # 209
"crab", # 210
"corruption", # 211
"cocoon", # 212
"claw", # 213
"chip", # 214
"child", # 215
"cell", # 216
"catch", # 217
"carving", # 218
"carrot", # 219
"carnival", # 220
"cancer", # 221
"butterfly", # 222
"burn", # 223
"buildup", # 224
"brush", # 225
"brew", # 226
"bottle", # 227
"boot", # 228
"book", # 229
"bone", # 230
"blunder", # 231
"blot", # 232
"blood", # 233
"blink", # 234
"bite", # 235
"bird", # 236
"benthos", # 237
"beak", # 238
"basket", # 239
"bark", # 240
"ball", # 241
"baby", # 242
"axolotl", # 243
"ashes", # 244
"artifact", # 245
"arson", # 246
"armor", # 247
"apparition", # 248
"antenna", # 249
"alms", # 250
"alienation", # 251
"advent", # 252
"adornment", # 253
"abomination", # 254
"abandonment", # 255
]

View file

@ -136,21 +136,27 @@ int pairing_check(struct NoiseState *st, const char *buf);
void pairing_input(uint8_t keycode);
void pairing_parse_report(struct hid_report *buf, uint8_t len);
/* Minimum number of bytes of handshake hash to confirm during pairing */
#define MIN_PAIRING_SEQUENCE_LENGTH 8
int pairing_check(struct NoiseState *st, const char *buf) {
LOG_PRINTF("Checking pairing\n");
const char *p = buf;
int idx = 0;
do {
const char *found = strchr(p, ' ');
size_t plen = found ? (size_t)(found - p) : strlen(p); /* p >= found */
int num = -1;
/* FIXME ignore "and", ignore commata and dots, handle letter case correctly (currently it's ignored). */
for (int i=0; i<256; i++) {
if (!strncmp(p, adjectives[i], plen) || !strncmp(p, nouns[i], plen)) {
if ((!strncmp(p, adjectives[i], plen)) || (!strncmp(p, nouns[i], plen))) {
LOG_PRINTF(" idx=%02d h=%02x i=%02x adj=%s n=%s plen=%d s=%s\n", idx, st->handshake_hash[idx], i, adjectives[i], nouns[i], plen, p);
num = i;
break;
}
}
if (num == -1) {
LOG_PRINTF("Pairing word not found in dictionary\n");
LOG_PRINTF("Pairing word \"%s\" not found in dictionary\n", p);
return -1;
}
if (st->handshake_hash[idx] != num) {
@ -159,9 +165,12 @@ int pairing_check(struct NoiseState *st, const char *buf) {
}
idx++;
p = strchr(p, ' ');
} while (p != NULL && idx < BLAKE2S_HASH_SIZE);
if (!p)
break; /* end of string */
p++; /* skip space */
} while (idx < BLAKE2S_HASH_SIZE);
if (idx < 8) {
if (idx < MIN_PAIRING_SEQUENCE_LENGTH) {
LOG_PRINTF("Pairing sequence too short, only %d bytes of hash checked\n", idx);
return -1;
}
@ -180,20 +189,24 @@ void pairing_input(uint8_t keycode) {
break;
case KEY_BACKSPACE:
pairing_buf[pairing_buf_pos] = '\0'; /* FIXME debug */
if (pairing_buf_pos > 0)
pairing_buf_pos--;
break;
default:
for (size_t i=0; i<sizeof(keycode_mapping)/sizeof(keycode_mapping[0]); i++) {
for (size_t i=0; keycode_mapping[i].kc != KEY_NONE; i++) {
if (keycode_mapping[i].kc == keycode) {
if (pairing_buf_pos < sizeof(pairing_buf)-1) /* allow for terminating null byte */
if (pairing_buf_pos < sizeof(pairing_buf)-1) /* allow for terminating null byte */ {
pairing_buf[pairing_buf_pos++] = keycode_mapping[i].ch;
pairing_buf[pairing_buf_pos] = '\0'; /* FIXME debug */
}
break;
}
}
break;
}
LOG_PRINTF("Input: %s\n", pairing_buf);
}
void pairing_parse_report(struct hid_report *buf, uint8_t len) {
@ -228,7 +241,7 @@ static void hid_in_message_handler(uint8_t device_id, const uint8_t *data, uint3
return;
}
LOG_PRINTF("Sending event %02X %02X %02X %02X\n", data[0], data[1], data[2], data[3]);
//LOG_PRINTF("Sending event %02X %02X %02X %02X\n", data[0], data[1], data[2], data[3]);
struct hid_report_packet pkt = {
.len = length,
.report = {0}

View file

@ -1,33 +1,33 @@
#include "hid_keycodes.h"
struct keymap_entry keycode_mapping[37] = {
{ KEY_A, 'A' },
{ KEY_B, 'B' },
{ KEY_C, 'C' },
{ KEY_D, 'D' },
{ KEY_E, 'E' },
{ KEY_F, 'F' },
{ KEY_G, 'G' },
{ KEY_H, 'H' },
{ KEY_I, 'I' },
{ KEY_J, 'J' },
{ KEY_K, 'K' },
{ KEY_L, 'L' },
{ KEY_M, 'M' },
{ KEY_N, 'N' },
{ KEY_O, 'O' },
{ KEY_P, 'P' },
{ KEY_Q, 'Q' },
{ KEY_R, 'R' },
{ KEY_S, 'S' },
{ KEY_T, 'T' },
{ KEY_U, 'U' },
{ KEY_V, 'V' },
{ KEY_W, 'W' },
{ KEY_X, 'X' },
{ KEY_Y, 'Y' },
{ KEY_Z, 'Z' },
struct keymap_entry keycode_mapping[] = {
{ KEY_A, 'a' },
{ KEY_B, 'b' },
{ KEY_C, 'c' },
{ KEY_D, 'd' },
{ KEY_E, 'e' },
{ KEY_F, 'f' },
{ KEY_G, 'g' },
{ KEY_H, 'h' },
{ KEY_I, 'i' },
{ KEY_J, 'j' },
{ KEY_K, 'k' },
{ KEY_L, 'l' },
{ KEY_M, 'm' },
{ KEY_N, 'n' },
{ KEY_O, 'o' },
{ KEY_P, 'p' },
{ KEY_Q, 'q' },
{ KEY_R, 'r' },
{ KEY_S, 's' },
{ KEY_T, 't' },
{ KEY_U, 'u' },
{ KEY_V, 'v' },
{ KEY_W, 'w' },
{ KEY_X, 'x' },
{ KEY_Y, 'y' },
{ KEY_Z, 'z' },
{ KEY_1, '1' },
{ KEY_2, '2' },
{ KEY_3, '3' },
@ -38,6 +38,8 @@ struct keymap_entry keycode_mapping[37] = {
{ KEY_8, '8' },
{ KEY_9, '9' },
{ KEY_0, '0' },
{ KEY_MINUS, '-' },
{ KEY_SPACE, ' ' },
{ KEY_NONE, 0 }, /* end marker */
};

View file

@ -6,7 +6,7 @@ struct keymap_entry {
char ch;
};
extern struct keymap_entry keycode_mapping[37];
extern struct keymap_entry keycode_mapping[];
enum hid_keycode {
KEY_NONE = 0x00, // No key pressed

View file

@ -142,7 +142,6 @@ enum handshake_state try_continue_noise_handshake(struct NoiseState *st, uint8_t
goto errout;
}
HANDLE_NOISE_ERROR(noise_dhstate_get_public_key(remote_dh, st->remote_key, sizeof(st->remote_key)), "getting remote pubkey");
if (!memcmp(st->remote_key, st->remote_key_reference, sizeof(st->remote_key))) { /* keys match */

View file

@ -96,7 +96,7 @@ void hid_driver_init(const hid_config_t *config)
static void *init(usbh_device_t *usbh_dev)
{
if (!initialized) {
LOG_PRINTF("\n%s/%d : driver not initialized\r\n", __FILE__, __LINE__);
LOG_PRINTF("\n%s/%d : driver not initialized\n", __FILE__, __LINE__);
return 0;
}
@ -341,7 +341,7 @@ static void remove(void *drvdata)
bool hid_set_report(uint8_t device_id, uint8_t val)
{
if (device_id >= USBH_HID_MAX_DEVICES) {
LOG_PRINTF("invalid device id");
LOG_PRINTF("invalid device id\n");
return false;
}
@ -374,7 +374,7 @@ bool hid_set_report(uint8_t device_id, uint8_t val)
bool hid_is_connected(uint8_t device_id)
{
if (device_id >= USBH_HID_MAX_DEVICES) {
LOG_PRINTF("is connected: invalid device id");
LOG_PRINTF("is connected: invalid device id\n");
return false;
}
return hid_device[device_id].state_next == STATE_INACTIVE;

View file

@ -342,12 +342,13 @@ static void rxflvl_handle(void *drvdata)
if ( channels[channel].data_index < channels[channel].packet.datalen) {
if (len == channels[channel].packet.endpoint_size_max) {
REBASE_CH(OTG_HCCHAR, channel) |= OTG_HCCHAR_CHENA;
LOG_PRINTF("CHENA[%d/%d] ", channels[channel].data_index, channels[channel].packet.datalen);
//LOG_PRINTF("CHENA[%d/%d] ", channels[channel].data_index, channels[channel].packet.datalen);
}
}
} else if ((rxstsp&OTG_GRXSTSP_PKTSTS_MASK) == OTG_GRXSTSP_PKTSTS_IN_COMP) {
/*
#ifdef USART_DEBUG
uint32_t i;
LOG_PRINTF("\nDATA: ");
@ -356,6 +357,7 @@ static void rxflvl_handle(void *drvdata)
LOG_PRINTF("%02X ", data[i]);
}
#endif
*/
} else if ((rxstsp&OTG_GRXSTSP_PKTSTS_MASK) == OTG_GRXSTSP_PKTSTS_CHH) {
} else {
@ -441,7 +443,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
// To clear interrupt write 0 to PENA
// To disable port write 1 to PENCHNG
REBASE(OTG_HPRT) &= ~OTG_HPRT_PENA;
LOG_PRINTF("PENCHNG");
//LOG_PRINTF("PENCHNG");
if ((hprt & OTG_HPRT_PENA)) {
return USBH_POLL_STATUS_DEVICE_CONNECTED;
}
@ -451,13 +453,13 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (REBASE(OTG_HPRT) & OTG_HPRT_POCCHNG) {
// TODO: Check for functionality
REBASE(OTG_HPRT) |= OTG_HPRT_POCCHNG;
LOG_PRINTF("POCCHNG");
//LOG_PRINTF("POCCHNG");
}
}
if (REBASE(OTG_GINTSTS) & OTG_GINTSTS_DISCINT) {
REBASE(OTG_GINTSTS) = OTG_GINTSTS_DISCINT;
LOG_PRINTF("DISCINT");
//LOG_PRINTF("DISCINT");
/*
* When the voltage drops, DISCINT interrupt is generated although
@ -465,7 +467,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
* Often, DISCINT is bad interpreted upon insertion of device
*/
if (!(REBASE(OTG_HPRT) & OTG_HPRT_PCSTS)) {
LOG_PRINTF("discint processsing...");
//LOG_PRINTF("discint processsing...");
channels_init(dev);
}
REBASE(OTG_GINTSTS) = REBASE(OTG_GINTSTS);
@ -490,7 +492,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_NAK) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_NAK;
LOG_PRINTF("NAK\n");
//LOG_PRINTF("NAK\n");
free_channel(dev, channel);
@ -506,7 +508,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_ACK) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_ACK;
LOG_PRINTF("ACK");
//LOG_PRINTF("ACK");
if (eptyp == USBH_ENDPOINT_TYPE_CONTROL) {
channels[channel].packet.toggle[0] = 1;
} else {
@ -516,7 +518,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_XFRC) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_XFRC;
LOG_PRINTF("XFRC\n");
//LOG_PRINTF("XFRC\n");
free_channel(dev, channel);
@ -532,7 +534,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_FRMOR) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_FRMOR;
LOG_PRINTF("FRMOR");
//LOG_PRINTF("FRMOR");
free_channel(dev, channel);
@ -547,7 +549,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_TXERR) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_TXERR;
LOG_PRINTF("TXERR");
//LOG_PRINTF("TXERR");
free_channel(dev, channel);
@ -564,7 +566,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_STALL) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_STALL;
LOG_PRINTF("STALL");
//LOG_PRINTF("STALL");
free_channel(dev, channel);
@ -580,7 +582,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_CHH) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_CHH;
LOG_PRINTF("CHH");
//LOG_PRINTF("CHH");
free_channel(dev, channel);
}
@ -589,7 +591,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_NAK) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_NAK;
if (eptyp == USBH_ENDPOINT_TYPE_CONTROL) {
LOG_PRINTF("NAK");
//LOG_PRINTF("NAK");
}
REBASE_CH(OTG_HCCHAR, channel) |= OTG_HCCHAR_CHENA;
@ -598,12 +600,12 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_DTERR) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_DTERR;
LOG_PRINTF("DTERR");
//LOG_PRINTF("DTERR");
}
if (hcint & OTG_HCINT_ACK) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_ACK;
LOG_PRINTF("ACK");
//LOG_PRINTF("ACK");
channels[channel].packet.toggle[0] ^= 1;
@ -613,7 +615,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_XFRC) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_XFRC;
LOG_PRINTF("XFRC\n");
//LOG_PRINTF("XFRC\n");
free_channel(dev, channel);
usbh_packet_callback_data_t cb_data;
@ -633,7 +635,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_BBERR) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_BBERR;
LOG_PRINTF("BBERR");
//LOG_PRINTF("BBERR");
free_channel(dev, channel);
usbh_packet_callback_data_t cb_data;
@ -647,13 +649,13 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_FRMOR) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_FRMOR;
LOG_PRINTF("FRMOR");
//LOG_PRINTF("FRMOR");
}
if (hcint & OTG_HCINT_TXERR) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_TXERR;
LOG_PRINTF("TXERR");
//LOG_PRINTF("TXERR");
free_channel(dev, channel);
@ -669,7 +671,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (hcint & OTG_HCINT_STALL) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_STALL;
LOG_PRINTF("STALL");
//LOG_PRINTF("STALL");
free_channel(dev, channel);
@ -684,7 +686,7 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
}
if (hcint & OTG_HCINT_CHH) {
REBASE_CH(OTG_HCINT, channel) = OTG_HCINT_CHH;
LOG_PRINTF("CHH");
//LOG_PRINTF("CHH");
free_channel(dev, channel);
}
@ -694,12 +696,12 @@ static enum USBH_POLL_STATUS poll_run(usbh_lld_stm32f4_driver_data_t *dev)
if (REBASE(OTG_GINTSTS) & OTG_GINTSTS_MMIS) {
REBASE(OTG_GINTSTS) = OTG_GINTSTS_MMIS;
LOG_PRINTF("Mode mismatch");
//LOG_PRINTF("Mode mismatch");
}
if (REBASE(OTG_GINTSTS) & OTG_GINTSTS_IPXFR) {
REBASE(OTG_GINTSTS) = OTG_GINTSTS_IPXFR;
LOG_PRINTF("IPXFR");
//LOG_PRINTF("IPXFR");
}
return USBH_POLL_STATUS_NONE;
@ -847,7 +849,7 @@ static void poll_init(usbh_lld_stm32f4_driver_data_t *dev)
if (done) {
dev->poll_sequence++;
dev->timestamp_us = dev->time_curr_us;
LOG_PRINTF("\t\t POLL SEQUENCE %d\n", dev->poll_sequence);
//LOG_PRINTF("\t\t POLL SEQUENCE %d\n", dev->poll_sequence);
}
}
@ -859,7 +861,7 @@ static void poll_reset(usbh_lld_stm32f4_driver_data_t *dev)
dev->state = dev->state_prev;
dev->state_prev = DEVICE_STATE_RESET;
LOG_PRINTF("RESET");
//LOG_PRINTF("RESET");
} else {
LOG_PRINTF("waiting %d < %d\n",dev->time_curr_us, dev->timestamp_us);
}