Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 | } |