Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
bluefruit_controller.cpp@31:b08cc3c126d6, 22 months ago (annotated)
- Committer:
- jaybalar
- Date:
- Fri Dec 09 21:28:32 2022 +0000
- Revision:
- 31:b08cc3c126d6
- Parent:
- 12:5d913b57da7c
update
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jstephens78 | 12:5d913b57da7c | 1 | #include "bluefruit_controller.h" |
jstephens78 | 12:5d913b57da7c | 2 | |
jstephens78 | 12:5d913b57da7c | 3 | enum State { |
jstephens78 | 12:5d913b57da7c | 4 | STATE_IDLE, // Waiting for a message |
jstephens78 | 12:5d913b57da7c | 5 | STATE_MSG, // '!' received, read in a tag |
jstephens78 | 12:5d913b57da7c | 6 | STATE_PAYLOAD, // tag received, read in payload bytes |
jstephens78 | 12:5d913b57da7c | 7 | }; |
jstephens78 | 12:5d913b57da7c | 8 | |
jstephens78 | 12:5d913b57da7c | 9 | |
jstephens78 | 12:5d913b57da7c | 10 | BluefruitController::BluefruitController(PinName tx, PinName rx, int baud) |
jstephens78 | 12:5d913b57da7c | 11 | : Serial(tx, rx, baud) |
jstephens78 | 12:5d913b57da7c | 12 | { |
jstephens78 | 12:5d913b57da7c | 13 | buff_len = 0; |
jstephens78 | 12:5d913b57da7c | 14 | buff_i = 0; |
jstephens78 | 12:5d913b57da7c | 15 | } |
jstephens78 | 12:5d913b57da7c | 16 | |
jstephens78 | 12:5d913b57da7c | 17 | void BluefruitController::parseMessage() |
jstephens78 | 12:5d913b57da7c | 18 | { |
jstephens78 | 12:5d913b57da7c | 19 | while (readable()) { |
jstephens78 | 12:5d913b57da7c | 20 | switch (state) { |
jstephens78 | 12:5d913b57da7c | 21 | // Read until the '!' |
jstephens78 | 12:5d913b57da7c | 22 | case STATE_IDLE: { |
jstephens78 | 12:5d913b57da7c | 23 | if (getc() == '!') |
jstephens78 | 12:5d913b57da7c | 24 | state = STATE_MSG; |
jstephens78 | 12:5d913b57da7c | 25 | break; |
jstephens78 | 12:5d913b57da7c | 26 | } |
jstephens78 | 12:5d913b57da7c | 27 | |
jstephens78 | 12:5d913b57da7c | 28 | // Read in the msg tag and begin reading that many bytes |
jstephens78 | 12:5d913b57da7c | 29 | case STATE_MSG: { |
jstephens78 | 12:5d913b57da7c | 30 | msg_tag = getc(); |
jstephens78 | 12:5d913b57da7c | 31 | buff_i = 0; |
jstephens78 | 12:5d913b57da7c | 32 | state = STATE_PAYLOAD; |
jstephens78 | 12:5d913b57da7c | 33 | |
jstephens78 | 12:5d913b57da7c | 34 | switch (msg_tag) { |
jstephens78 | 12:5d913b57da7c | 35 | case 'B': |
jstephens78 | 12:5d913b57da7c | 36 | buff_len = 3; |
jstephens78 | 12:5d913b57da7c | 37 | break; |
jstephens78 | 12:5d913b57da7c | 38 | case 'Q': |
jstephens78 | 12:5d913b57da7c | 39 | buff_len = 4*4; |
jstephens78 | 12:5d913b57da7c | 40 | break; |
jstephens78 | 12:5d913b57da7c | 41 | |
jstephens78 | 12:5d913b57da7c | 42 | // For unrecognized message types, go back to waiting for |
jstephens78 | 12:5d913b57da7c | 43 | // the next '!' |
jstephens78 | 12:5d913b57da7c | 44 | default: |
jstephens78 | 12:5d913b57da7c | 45 | state = STATE_IDLE; |
jstephens78 | 12:5d913b57da7c | 46 | } |
jstephens78 | 12:5d913b57da7c | 47 | break; |
jstephens78 | 12:5d913b57da7c | 48 | } |
jstephens78 | 12:5d913b57da7c | 49 | |
jstephens78 | 12:5d913b57da7c | 50 | // Read in payload bytes |
jstephens78 | 12:5d913b57da7c | 51 | case STATE_PAYLOAD: { |
jstephens78 | 12:5d913b57da7c | 52 | // Read in bytes |
jstephens78 | 12:5d913b57da7c | 53 | if (buff_i < buff_len) { |
jstephens78 | 12:5d913b57da7c | 54 | buff[buff_i] = getc(); |
jstephens78 | 12:5d913b57da7c | 55 | buff_i++; |
jstephens78 | 12:5d913b57da7c | 56 | } |
jstephens78 | 12:5d913b57da7c | 57 | |
jstephens78 | 12:5d913b57da7c | 58 | // When done, parse the messages |
jstephens78 | 12:5d913b57da7c | 59 | if (buff_i == buff_len) { |
jstephens78 | 12:5d913b57da7c | 60 | state = STATE_IDLE; |
jstephens78 | 12:5d913b57da7c | 61 | switch(msg_tag) { |
jstephens78 | 12:5d913b57da7c | 62 | case 'B': |
jstephens78 | 12:5d913b57da7c | 63 | parseButton(); |
jstephens78 | 12:5d913b57da7c | 64 | break; |
jstephens78 | 12:5d913b57da7c | 65 | case 'Q': |
jstephens78 | 12:5d913b57da7c | 66 | parseQuaternion(); |
jstephens78 | 12:5d913b57da7c | 67 | break; |
jstephens78 | 12:5d913b57da7c | 68 | } |
jstephens78 | 12:5d913b57da7c | 69 | } |
jstephens78 | 12:5d913b57da7c | 70 | break; |
jstephens78 | 12:5d913b57da7c | 71 | } |
jstephens78 | 12:5d913b57da7c | 72 | } |
jstephens78 | 12:5d913b57da7c | 73 | } |
jstephens78 | 12:5d913b57da7c | 74 | } |
jstephens78 | 12:5d913b57da7c | 75 | |
jstephens78 | 12:5d913b57da7c | 76 | |
jstephens78 | 12:5d913b57da7c | 77 | void BluefruitController::reset() |
jstephens78 | 12:5d913b57da7c | 78 | { |
jstephens78 | 12:5d913b57da7c | 79 | state = STATE_IDLE; |
jstephens78 | 12:5d913b57da7c | 80 | buff_len = 0; |
jstephens78 | 12:5d913b57da7c | 81 | buff_i = 0; |
jstephens78 | 12:5d913b57da7c | 82 | } |
jstephens78 | 12:5d913b57da7c | 83 | |
jstephens78 | 12:5d913b57da7c | 84 | void BluefruitController::parseButton() |
jstephens78 | 12:5d913b57da7c | 85 | { |
jstephens78 | 12:5d913b57da7c | 86 | unsigned int id = buff[0] - '1'; |
jstephens78 | 12:5d913b57da7c | 87 | bool val = buff[1] - '0'; |
jstephens78 | 12:5d913b57da7c | 88 | |
jstephens78 | 12:5d913b57da7c | 89 | if (id >= 8) return; |
jstephens78 | 12:5d913b57da7c | 90 | |
jstephens78 | 12:5d913b57da7c | 91 | button[id] = val; |
jstephens78 | 12:5d913b57da7c | 92 | } |
jstephens78 | 12:5d913b57da7c | 93 | |
jstephens78 | 12:5d913b57da7c | 94 | void BluefruitController::parseQuaternion() |
jstephens78 | 12:5d913b57da7c | 95 | { |
jstephens78 | 12:5d913b57da7c | 96 | for (int i = 0; i < 4; i++) { |
jstephens78 | 12:5d913b57da7c | 97 | quaternion[i] = *(((float*)buff) + i); |
jstephens78 | 12:5d913b57da7c | 98 | } |
jstephens78 | 12:5d913b57da7c | 99 | } |