Radio Structures in OOP

Dependencies:   mbed mbed-rtos

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?

UserRevisionLine numberNew 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 }