Gavin Whelan
/
LogicAlNucleoF411RE
Port of LogicalNucleo to F411RE
Fork of LogicAlNucleo by
main.cpp@0:41db3ed6754d, 2016-03-12 (annotated)
- Committer:
- jpbarraca
- Date:
- Sat Mar 12 00:18:53 2016 +0000
- Revision:
- 0:41db3ed6754d
- Child:
- 1:cf544bd09176
v0.1.2.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jpbarraca | 0:41db3ed6754d | 1 | /* |
jpbarraca | 0:41db3ed6754d | 2 | This program is free software: you can redistribute it and/or modify |
jpbarraca | 0:41db3ed6754d | 3 | it under the terms of the GNU General Public License as published by |
jpbarraca | 0:41db3ed6754d | 4 | the Free Software Foundation, either version 3 of the License, or |
jpbarraca | 0:41db3ed6754d | 5 | (at your option) any later version. |
jpbarraca | 0:41db3ed6754d | 6 | |
jpbarraca | 0:41db3ed6754d | 7 | This program is distributed in the hope that it will be useful, |
jpbarraca | 0:41db3ed6754d | 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
jpbarraca | 0:41db3ed6754d | 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
jpbarraca | 0:41db3ed6754d | 10 | GNU General Public License for more details. |
jpbarraca | 0:41db3ed6754d | 11 | |
jpbarraca | 0:41db3ed6754d | 12 | Author: Joao Paulo Barraca <jpbarraca@gmail.com> |
jpbarraca | 0:41db3ed6754d | 13 | */ |
jpbarraca | 0:41db3ed6754d | 14 | |
jpbarraca | 0:41db3ed6754d | 15 | #include "mbed.h" |
jpbarraca | 0:41db3ed6754d | 16 | #include "Sampler.h" |
jpbarraca | 0:41db3ed6754d | 17 | |
jpbarraca | 0:41db3ed6754d | 18 | #define SUMP_RESET 0x00 |
jpbarraca | 0:41db3ed6754d | 19 | #define SUMP_ARM 0x01 |
jpbarraca | 0:41db3ed6754d | 20 | #define SUMP_QUERY 0x02 |
jpbarraca | 0:41db3ed6754d | 21 | #define SUMP_TEST 0x03 |
jpbarraca | 0:41db3ed6754d | 22 | #define SUMP_GET_METADATA 0x04 |
jpbarraca | 0:41db3ed6754d | 23 | #define SUMP_RLE_FINISH 0x05 |
jpbarraca | 0:41db3ed6754d | 24 | #define SUMP_XON 0x11 |
jpbarraca | 0:41db3ed6754d | 25 | #define SUMP_XOFF 0x13 |
jpbarraca | 0:41db3ed6754d | 26 | #define SUMP_SET_TRIGGER_MASK 0xC0 |
jpbarraca | 0:41db3ed6754d | 27 | #define SUMP_SET_TRIGGER_VALUES 0xC1 |
jpbarraca | 0:41db3ed6754d | 28 | #define SUMP_SET_TRIGGER_CONF 0xC2 |
jpbarraca | 0:41db3ed6754d | 29 | #define SUMP_SET_DIVIDER 0x80 |
jpbarraca | 0:41db3ed6754d | 30 | #define SUMP_SET_READ_DELAY_COUNT 0x81 |
jpbarraca | 0:41db3ed6754d | 31 | #define SUMP_SET_FLAGS 0x82 |
jpbarraca | 0:41db3ed6754d | 32 | |
jpbarraca | 0:41db3ed6754d | 33 | |
jpbarraca | 0:41db3ed6754d | 34 | #define BYTE1(v) ((uint8_t)v & 0xff) //LSB |
jpbarraca | 0:41db3ed6754d | 35 | #define BYTE2(v) ((uint8_t)(v >> 8) & 0xff) // |
jpbarraca | 0:41db3ed6754d | 36 | #define BYTE3(v) ((uint8_t)(v >> 16) & 0xff) // |
jpbarraca | 0:41db3ed6754d | 37 | #define BYTE4(v) ((uint8_t)(v >> 24) & 0xff) //MSB |
jpbarraca | 0:41db3ed6754d | 38 | |
jpbarraca | 0:41db3ed6754d | 39 | #define printChar(v) pc.putc(v); while(!pc.writeable()); |
jpbarraca | 0:41db3ed6754d | 40 | |
jpbarraca | 0:41db3ed6754d | 41 | #define printUInt(v)\ |
jpbarraca | 0:41db3ed6754d | 42 | printChar(BYTE4(v));\ |
jpbarraca | 0:41db3ed6754d | 43 | printChar(BYTE3(v));\ |
jpbarraca | 0:41db3ed6754d | 44 | printChar(BYTE2(v));\ |
jpbarraca | 0:41db3ed6754d | 45 | printChar(BYTE1(v)); |
jpbarraca | 0:41db3ed6754d | 46 | |
jpbarraca | 0:41db3ed6754d | 47 | |
jpbarraca | 0:41db3ed6754d | 48 | #define printString(v)\ |
jpbarraca | 0:41db3ed6754d | 49 | for(unsigned int i =0;i<strlen(v);i++) printChar(v[i]); |
jpbarraca | 0:41db3ed6754d | 50 | |
jpbarraca | 0:41db3ed6754d | 51 | Serial pc(USBTX, USBRX); |
jpbarraca | 0:41db3ed6754d | 52 | DigitalOut led(LED2); |
jpbarraca | 0:41db3ed6754d | 53 | Sampler sampler(&pc); |
jpbarraca | 0:41db3ed6754d | 54 | |
jpbarraca | 0:41db3ed6754d | 55 | inline void blink(unsigned int onTime,unsigned int offTime, unsigned int num){ |
jpbarraca | 0:41db3ed6754d | 56 | for(unsigned int i=0;i<num;i++){ |
jpbarraca | 0:41db3ed6754d | 57 | led = 1; |
jpbarraca | 0:41db3ed6754d | 58 | wait_ms(onTime); |
jpbarraca | 0:41db3ed6754d | 59 | led = 0; |
jpbarraca | 0:41db3ed6754d | 60 | wait_ms(offTime); |
jpbarraca | 0:41db3ed6754d | 61 | } |
jpbarraca | 0:41db3ed6754d | 62 | } |
jpbarraca | 0:41db3ed6754d | 63 | |
jpbarraca | 0:41db3ed6754d | 64 | void handleSerial() |
jpbarraca | 0:41db3ed6754d | 65 | { |
jpbarraca | 0:41db3ed6754d | 66 | uint8_t cmd_buffer[5]; |
jpbarraca | 0:41db3ed6754d | 67 | uint8_t cmd_index = 0; |
jpbarraca | 0:41db3ed6754d | 68 | memset(cmd_buffer, 0, sizeof(cmd_buffer)); |
jpbarraca | 0:41db3ed6754d | 69 | |
jpbarraca | 0:41db3ed6754d | 70 | led = 0; |
jpbarraca | 0:41db3ed6754d | 71 | |
jpbarraca | 0:41db3ed6754d | 72 | //Looping through the serial. |
jpbarraca | 0:41db3ed6754d | 73 | while (1) { |
jpbarraca | 0:41db3ed6754d | 74 | led = 0; |
jpbarraca | 0:41db3ed6754d | 75 | |
jpbarraca | 0:41db3ed6754d | 76 | while(!pc.readable()); |
jpbarraca | 0:41db3ed6754d | 77 | |
jpbarraca | 0:41db3ed6754d | 78 | led = 1; |
jpbarraca | 0:41db3ed6754d | 79 | cmd_buffer[cmd_index] = pc.getc(); |
jpbarraca | 0:41db3ed6754d | 80 | switch(cmd_buffer[0]) { |
jpbarraca | 0:41db3ed6754d | 81 | case SUMP_RESET : { |
jpbarraca | 0:41db3ed6754d | 82 | break; |
jpbarraca | 0:41db3ed6754d | 83 | } |
jpbarraca | 0:41db3ed6754d | 84 | case SUMP_QUERY: { |
jpbarraca | 0:41db3ed6754d | 85 | printString("1ALS"); |
jpbarraca | 0:41db3ed6754d | 86 | break; |
jpbarraca | 0:41db3ed6754d | 87 | } |
jpbarraca | 0:41db3ed6754d | 88 | case SUMP_GET_METADATA: { |
jpbarraca | 0:41db3ed6754d | 89 | uint32_t bufferSize = sampler.getBufferSize(); |
jpbarraca | 0:41db3ed6754d | 90 | uint32_t maxFrequency = sampler.getMaxFrequency(); |
jpbarraca | 0:41db3ed6754d | 91 | |
jpbarraca | 0:41db3ed6754d | 92 | while(!pc.writeable()); |
jpbarraca | 0:41db3ed6754d | 93 | //NAME |
jpbarraca | 0:41db3ed6754d | 94 | printChar(0x01); |
jpbarraca | 0:41db3ed6754d | 95 | printString("LogicalNucleo"); |
jpbarraca | 0:41db3ed6754d | 96 | printChar(0x00); |
jpbarraca | 0:41db3ed6754d | 97 | |
jpbarraca | 0:41db3ed6754d | 98 | //SAMPLE MEM |
jpbarraca | 0:41db3ed6754d | 99 | printChar(0x21); |
jpbarraca | 0:41db3ed6754d | 100 | printUInt(bufferSize); |
jpbarraca | 0:41db3ed6754d | 101 | |
jpbarraca | 0:41db3ed6754d | 102 | //DYNAMIC MEM |
jpbarraca | 0:41db3ed6754d | 103 | printChar(0x22); |
jpbarraca | 0:41db3ed6754d | 104 | printUInt(0); |
jpbarraca | 0:41db3ed6754d | 105 | |
jpbarraca | 0:41db3ed6754d | 106 | //SAMPLE RATE |
jpbarraca | 0:41db3ed6754d | 107 | printChar(0x23); |
jpbarraca | 0:41db3ed6754d | 108 | printUInt(maxFrequency); |
jpbarraca | 0:41db3ed6754d | 109 | |
jpbarraca | 0:41db3ed6754d | 110 | //Number of Probes |
jpbarraca | 0:41db3ed6754d | 111 | printChar(0x40); |
jpbarraca | 0:41db3ed6754d | 112 | printChar(0x08); |
jpbarraca | 0:41db3ed6754d | 113 | |
jpbarraca | 0:41db3ed6754d | 114 | //Protocol Version |
jpbarraca | 0:41db3ed6754d | 115 | printChar(0x41); |
jpbarraca | 0:41db3ed6754d | 116 | printChar(0x02); |
jpbarraca | 0:41db3ed6754d | 117 | |
jpbarraca | 0:41db3ed6754d | 118 | //END |
jpbarraca | 0:41db3ed6754d | 119 | printChar(0x00); |
jpbarraca | 0:41db3ed6754d | 120 | break; |
jpbarraca | 0:41db3ed6754d | 121 | } |
jpbarraca | 0:41db3ed6754d | 122 | case SUMP_TEST:{ |
jpbarraca | 0:41db3ed6754d | 123 | sampler.runTest(); |
jpbarraca | 0:41db3ed6754d | 124 | break; |
jpbarraca | 0:41db3ed6754d | 125 | } |
jpbarraca | 0:41db3ed6754d | 126 | case SUMP_ARM: { |
jpbarraca | 0:41db3ed6754d | 127 | sampler.arm(); |
jpbarraca | 0:41db3ed6754d | 128 | break; |
jpbarraca | 0:41db3ed6754d | 129 | } |
jpbarraca | 0:41db3ed6754d | 130 | case SUMP_XON: { |
jpbarraca | 0:41db3ed6754d | 131 | sampler.start(); |
jpbarraca | 0:41db3ed6754d | 132 | break; |
jpbarraca | 0:41db3ed6754d | 133 | } |
jpbarraca | 0:41db3ed6754d | 134 | case SUMP_XOFF: { |
jpbarraca | 0:41db3ed6754d | 135 | sampler.stop(); |
jpbarraca | 0:41db3ed6754d | 136 | break; |
jpbarraca | 0:41db3ed6754d | 137 | } |
jpbarraca | 0:41db3ed6754d | 138 | case SUMP_SET_READ_DELAY_COUNT: { |
jpbarraca | 0:41db3ed6754d | 139 | cmd_index ++; |
jpbarraca | 0:41db3ed6754d | 140 | if(cmd_index < 5) |
jpbarraca | 0:41db3ed6754d | 141 | continue; |
jpbarraca | 0:41db3ed6754d | 142 | |
jpbarraca | 0:41db3ed6754d | 143 | uint16_t readCount = 1 + *((uint16_t*)(cmd_buffer + 1)); |
jpbarraca | 0:41db3ed6754d | 144 | uint16_t delayCount = * ((uint16_t*)(cmd_buffer + 3)); |
jpbarraca | 0:41db3ed6754d | 145 | sampler.setSampleNumber(4 * readCount); |
jpbarraca | 0:41db3ed6754d | 146 | sampler.setSamplingDelay(4 * delayCount); |
jpbarraca | 0:41db3ed6754d | 147 | break; |
jpbarraca | 0:41db3ed6754d | 148 | } |
jpbarraca | 0:41db3ed6754d | 149 | case SUMP_SET_DIVIDER: { |
jpbarraca | 0:41db3ed6754d | 150 | cmd_index ++; |
jpbarraca | 0:41db3ed6754d | 151 | if(cmd_index < 5) |
jpbarraca | 0:41db3ed6754d | 152 | continue; |
jpbarraca | 0:41db3ed6754d | 153 | |
jpbarraca | 0:41db3ed6754d | 154 | uint32_t divider = *((uint32_t *)(cmd_buffer + 1)); |
jpbarraca | 0:41db3ed6754d | 155 | sampler.setSamplingDivider(divider); |
jpbarraca | 0:41db3ed6754d | 156 | break; |
jpbarraca | 0:41db3ed6754d | 157 | } |
jpbarraca | 0:41db3ed6754d | 158 | case SUMP_SET_TRIGGER_MASK:{ |
jpbarraca | 0:41db3ed6754d | 159 | cmd_index ++; |
jpbarraca | 0:41db3ed6754d | 160 | if(cmd_index < 5) |
jpbarraca | 0:41db3ed6754d | 161 | continue; |
jpbarraca | 0:41db3ed6754d | 162 | sampler.setTriggerMask(*(uint32_t *)(cmd_buffer + 1)); |
jpbarraca | 0:41db3ed6754d | 163 | break; |
jpbarraca | 0:41db3ed6754d | 164 | } |
jpbarraca | 0:41db3ed6754d | 165 | case SUMP_SET_TRIGGER_VALUES:{ |
jpbarraca | 0:41db3ed6754d | 166 | cmd_index ++; |
jpbarraca | 0:41db3ed6754d | 167 | if(cmd_index < 5) |
jpbarraca | 0:41db3ed6754d | 168 | continue; |
jpbarraca | 0:41db3ed6754d | 169 | |
jpbarraca | 0:41db3ed6754d | 170 | sampler.setTriggerValue(*(uint32_t *)(cmd_buffer + 1)); |
jpbarraca | 0:41db3ed6754d | 171 | break; |
jpbarraca | 0:41db3ed6754d | 172 | } |
jpbarraca | 0:41db3ed6754d | 173 | case SUMP_SET_TRIGGER_CONF:{ |
jpbarraca | 0:41db3ed6754d | 174 | cmd_index ++; |
jpbarraca | 0:41db3ed6754d | 175 | if(cmd_index < 5) |
jpbarraca | 0:41db3ed6754d | 176 | continue; |
jpbarraca | 0:41db3ed6754d | 177 | |
jpbarraca | 0:41db3ed6754d | 178 | uint8_t serial = (*((uint8_t*)(cmd_buffer + 4)) & 0x04) > 0 ? 1 : 0; |
jpbarraca | 0:41db3ed6754d | 179 | uint8_t state = (*((uint8_t*)(cmd_buffer + 4)) & 0x08) > 0 ? 1 : 0; |
jpbarraca | 0:41db3ed6754d | 180 | |
jpbarraca | 0:41db3ed6754d | 181 | if(serial == 1) |
jpbarraca | 0:41db3ed6754d | 182 | sampler.setTriggerState(0);//Not supported |
jpbarraca | 0:41db3ed6754d | 183 | else |
jpbarraca | 0:41db3ed6754d | 184 | sampler.setTriggerState(state); |
jpbarraca | 0:41db3ed6754d | 185 | |
jpbarraca | 0:41db3ed6754d | 186 | break; |
jpbarraca | 0:41db3ed6754d | 187 | } |
jpbarraca | 0:41db3ed6754d | 188 | case SUMP_SET_FLAGS:{ |
jpbarraca | 0:41db3ed6754d | 189 | cmd_index ++; |
jpbarraca | 0:41db3ed6754d | 190 | if(cmd_index < 5) |
jpbarraca | 0:41db3ed6754d | 191 | continue; |
jpbarraca | 0:41db3ed6754d | 192 | |
jpbarraca | 0:41db3ed6754d | 193 | sampler.setFlags(*(uint32_t *)(cmd_buffer + 1)); |
jpbarraca | 0:41db3ed6754d | 194 | break; |
jpbarraca | 0:41db3ed6754d | 195 | } |
jpbarraca | 0:41db3ed6754d | 196 | default: { |
jpbarraca | 0:41db3ed6754d | 197 | } |
jpbarraca | 0:41db3ed6754d | 198 | } |
jpbarraca | 0:41db3ed6754d | 199 | |
jpbarraca | 0:41db3ed6754d | 200 | cmd_index = 0; |
jpbarraca | 0:41db3ed6754d | 201 | memset(cmd_buffer, 0, sizeof(cmd_buffer)); |
jpbarraca | 0:41db3ed6754d | 202 | } |
jpbarraca | 0:41db3ed6754d | 203 | } |
jpbarraca | 0:41db3ed6754d | 204 | |
jpbarraca | 0:41db3ed6754d | 205 | |
jpbarraca | 0:41db3ed6754d | 206 | |
jpbarraca | 0:41db3ed6754d | 207 | int main() |
jpbarraca | 0:41db3ed6754d | 208 | { |
jpbarraca | 0:41db3ed6754d | 209 | pc.baud(115200); |
jpbarraca | 0:41db3ed6754d | 210 | |
jpbarraca | 0:41db3ed6754d | 211 | //Flush it |
jpbarraca | 0:41db3ed6754d | 212 | while(pc.readable() == 1) |
jpbarraca | 0:41db3ed6754d | 213 | pc.getc(); |
jpbarraca | 0:41db3ed6754d | 214 | |
jpbarraca | 0:41db3ed6754d | 215 | blink(50,100,5); |
jpbarraca | 0:41db3ed6754d | 216 | |
jpbarraca | 0:41db3ed6754d | 217 | handleSerial(); |
jpbarraca | 0:41db3ed6754d | 218 | } |