Jonathan Jones
/
Radios
Radio Structures in OOP
main.cpp@4:989d51f3e6ef, 2015-01-03 (annotated)
- Committer:
- jjones646
- Date:
- Sat Jan 03 11:04:31 2015 +0000
- Revision:
- 4:989d51f3e6ef
- Parent:
- 3:dc7e9c6bc26c
- Child:
- 5:146523a0d1f4
adding separate methods for setting rx/tx callback functions with both regular and object functions and methods.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jjones646 | 1:c935902c73ef | 1 | #include "robot.h" |
jjones646 | 1:c935902c73ef | 2 | |
jjones646 | 2:7d523bdd2f50 | 3 | // Create a file system if needed for writing startup information to the boot log |
jjones646 | 2:7d523bdd2f50 | 4 | #if RJ_BOOT_LOG |
jjones646 | 2:7d523bdd2f50 | 5 | LocalFileSystem local("local"); // Create the local filesystem object |
jjones646 | 2:7d523bdd2f50 | 6 | #endif |
jjones646 | 2:7d523bdd2f50 | 7 | |
jjones646 | 3:dc7e9c6bc26c | 8 | DigitalOut led1(LED1); |
jjones646 | 3:dc7e9c6bc26c | 9 | DigitalOut led2(LED2); |
jjones646 | 3:dc7e9c6bc26c | 10 | DigitalOut led3(LED3); |
jjones646 | 3:dc7e9c6bc26c | 11 | DigitalOut led4(LED4); |
jjones646 | 3:dc7e9c6bc26c | 12 | |
jjones646 | 2:7d523bdd2f50 | 13 | // Dummy function |
jjones646 | 4:989d51f3e6ef | 14 | void primary_radio_rx_handle(void) |
jjones646 | 1:c935902c73ef | 15 | { |
jjones646 | 3:dc7e9c6bc26c | 16 | led3 != led3; |
jjones646 | 3:dc7e9c6bc26c | 17 | } |
jjones646 | 3:dc7e9c6bc26c | 18 | |
jjones646 | 3:dc7e9c6bc26c | 19 | // Dummy function |
jjones646 | 3:dc7e9c6bc26c | 20 | void primary_radio_tx_handle(RTP_t* p) |
jjones646 | 3:dc7e9c6bc26c | 21 | { |
jjones646 | 3:dc7e9c6bc26c | 22 | led4 = 1; |
jjones646 | 2:7d523bdd2f50 | 23 | } |
jjones646 | 1:c935902c73ef | 24 | |
jjones646 | 2:7d523bdd2f50 | 25 | // Sets the mbed's baudrate for debugging purposes |
jjones646 | 2:7d523bdd2f50 | 26 | void baud(int baudrate) |
jjones646 | 2:7d523bdd2f50 | 27 | { |
jjones646 | 2:7d523bdd2f50 | 28 | Serial s(USBTX, USBRX); |
jjones646 | 2:7d523bdd2f50 | 29 | s.baud(baudrate); |
jjones646 | 2:7d523bdd2f50 | 30 | } |
jjones646 | 2:7d523bdd2f50 | 31 | |
jjones646 | 2:7d523bdd2f50 | 32 | // Main program operations ======================= |
jjones646 | 2:7d523bdd2f50 | 33 | int main() |
jjones646 | 2:7d523bdd2f50 | 34 | { |
jjones646 | 3:dc7e9c6bc26c | 35 | led1 = 1; |
jjones646 | 3:dc7e9c6bc26c | 36 | led4 = 0; |
jjones646 | 2:7d523bdd2f50 | 37 | // Set the baud rate |
jjones646 | 2:7d523bdd2f50 | 38 | baud(57600); |
jjones646 | 2:7d523bdd2f50 | 39 | |
jjones646 | 2:7d523bdd2f50 | 40 | // Check the mbed's firmware if enabled |
jjones646 | 2:7d523bdd2f50 | 41 | #if RJ_CHECK_FIRMWARE |
jjones646 | 3:dc7e9c6bc26c | 42 | std::string firmware; |
jjones646 | 3:dc7e9c6bc26c | 43 | firmware_version(firmware); // this is from FirmwareHelper.h |
jjones646 | 3:dc7e9c6bc26c | 44 | LOG("Firmware Version: %s\r\n", firmware.c_str()); |
jjones646 | 3:dc7e9c6bc26c | 45 | |
jjones646 | 2:7d523bdd2f50 | 46 | // Write any errors to a log file if enabled |
jjones646 | 2:7d523bdd2f50 | 47 | #if RJ_BOOT_LOG |
jjones646 | 3:dc7e9c6bc26c | 48 | LOG("Begin logging\r\n"); |
jjones646 | 2:7d523bdd2f50 | 49 | #endif |
jjones646 | 3:dc7e9c6bc26c | 50 | |
jjones646 | 2:7d523bdd2f50 | 51 | #endif |
jjones646 | 2:7d523bdd2f50 | 52 | |
jjones646 | 2:7d523bdd2f50 | 53 | // Create a new physical hardware communication link |
jjones646 | 3:dc7e9c6bc26c | 54 | CC1101 radio_900( |
jjones646 | 3:dc7e9c6bc26c | 55 | RJ_SPI_BUS, |
jjones646 | 3:dc7e9c6bc26c | 56 | RJ_PRIMARY_RADIO_CS, |
jjones646 | 3:dc7e9c6bc26c | 57 | RJ_PRIMARY_RADIO_INT |
jjones646 | 3:dc7e9c6bc26c | 58 | ); |
jjones646 | 2:7d523bdd2f50 | 59 | |
jjones646 | 2:7d523bdd2f50 | 60 | // Create a Communication Module Object |
jjones646 | 2:7d523bdd2f50 | 61 | CommModule comm; |
jjones646 | 3:dc7e9c6bc26c | 62 | |
jjones646 | 4:989d51f3e6ef | 63 | comm.TxHandler((CommLink*)&radio_900, &CommLink::sendPacket, 8); |
jjones646 | 4:989d51f3e6ef | 64 | comm.RxHandler(primary_radio_rx_handle, 8); |
jjones646 | 4:989d51f3e6ef | 65 | comm.openSocket(8); |
jjones646 | 2:7d523bdd2f50 | 66 | |
jjones646 | 2:7d523bdd2f50 | 67 | // Open a socket for the Communication Module. Give it a port number and a function to call when a packet of that port number is received |
jjones646 | 4:989d51f3e6ef | 68 | //comm.openSocket((CommLink*)&radio_900, primary_radio_rx_handle, 8); |
jjones646 | 3:dc7e9c6bc26c | 69 | led3 = 1; |
jjones646 | 3:dc7e9c6bc26c | 70 | |
jjones646 | 3:dc7e9c6bc26c | 71 | // Create a dummy packet that is set to send out from socket connection 8 |
jjones646 | 3:dc7e9c6bc26c | 72 | RTP_t dummy_packet; |
jjones646 | 3:dc7e9c6bc26c | 73 | dummy_packet.port = 8; |
jjones646 | 3:dc7e9c6bc26c | 74 | dummy_packet.subclass = 1; |
jjones646 | 3:dc7e9c6bc26c | 75 | for (int i=0; i<20; i++) |
jjones646 | 3:dc7e9c6bc26c | 76 | dummy_packet.data[0] = i; |
jjones646 | 2:7d523bdd2f50 | 77 | |
jjones646 | 3:dc7e9c6bc26c | 78 | // Send the packet |
jjones646 | 3:dc7e9c6bc26c | 79 | comm.send(dummy_packet); |
jjones646 | 2:7d523bdd2f50 | 80 | |
jjones646 | 3:dc7e9c6bc26c | 81 | // Test sending a packet on a port that has not been setup yet |
jjones646 | 3:dc7e9c6bc26c | 82 | dummy_packet.port = 7; |
jjones646 | 3:dc7e9c6bc26c | 83 | comm.send(dummy_packet); |
jjones646 | 4:989d51f3e6ef | 84 | //comm.TxHandler(primary_radio_tx_handle, 7); |
jjones646 | 4:989d51f3e6ef | 85 | //comm.openSocket(&radio_900, primary_radio_rx_handle, 7); |
jjones646 | 2:7d523bdd2f50 | 86 | |
jjones646 | 2:7d523bdd2f50 | 87 | // Enable watchdog timer |
jjones646 | 3:dc7e9c6bc26c | 88 | //Watchdog watchdog; |
jjones646 | 3:dc7e9c6bc26c | 89 | //watchdog.set(RJ_WATCHDOG_TIMER_VALUE); |
jjones646 | 4:989d51f3e6ef | 90 | |
jjones646 | 4:989d51f3e6ef | 91 | radio_900.triggerReceive(); |
jjones646 | 3:dc7e9c6bc26c | 92 | |
jjones646 | 3:dc7e9c6bc26c | 93 | led2 = 0; |
jjones646 | 3:dc7e9c6bc26c | 94 | |
jjones646 | 4:989d51f3e6ef | 95 | if(false) { |
jjones646 | 4:989d51f3e6ef | 96 | for (int i=1; i<=1000000; i*=10) { |
jjones646 | 4:989d51f3e6ef | 97 | std::printf("Itterations: %u\r\n", i); |
jjones646 | 4:989d51f3e6ef | 98 | Timer t; |
jjones646 | 4:989d51f3e6ef | 99 | t.start(); |
jjones646 | 3:dc7e9c6bc26c | 100 | |
jjones646 | 4:989d51f3e6ef | 101 | for(int j=0; j<i; j++) { |
jjones646 | 4:989d51f3e6ef | 102 | comm.send(dummy_packet); |
jjones646 | 4:989d51f3e6ef | 103 | osDelay(1); |
jjones646 | 4:989d51f3e6ef | 104 | } |
jjones646 | 4:989d51f3e6ef | 105 | |
jjones646 | 4:989d51f3e6ef | 106 | t.stop(); |
jjones646 | 4:989d51f3e6ef | 107 | std::printf("Timer Reading: %uus (%.5fs)\r\n\r\n", t.read_us(), t.read()); |
jjones646 | 3:dc7e9c6bc26c | 108 | } |
jjones646 | 4:989d51f3e6ef | 109 | } |
jjones646 | 3:dc7e9c6bc26c | 110 | |
jjones646 | 4:989d51f3e6ef | 111 | led2 = 1; |
jjones646 | 3:dc7e9c6bc26c | 112 | |
jjones646 | 3:dc7e9c6bc26c | 113 | std::printf("Done\r\n"); |
jjones646 | 1:c935902c73ef | 114 | |
jjones646 | 1:c935902c73ef | 115 | while(1) { |
jjones646 | 2:7d523bdd2f50 | 116 | // Renew the watchdog timer through every itteration |
jjones646 | 3:dc7e9c6bc26c | 117 | //watchdog.renew(); |
jjones646 | 3:dc7e9c6bc26c | 118 | led2 = !led2; |
jjones646 | 3:dc7e9c6bc26c | 119 | |
jjones646 | 2:7d523bdd2f50 | 120 | // Delay 1 second |
jjones646 | 3:dc7e9c6bc26c | 121 | osDelay(1000); |
jjones646 | 3:dc7e9c6bc26c | 122 | led3 != led3; |
jjones646 | 3:dc7e9c6bc26c | 123 | osDelay(300); |
jjones646 | 1:c935902c73ef | 124 | } |
jjones646 | 1:c935902c73ef | 125 | } |