Radio Structures in OOP

Dependencies:   mbed mbed-rtos

Committer:
jjones646
Date:
Sat Jan 03 04:35:32 2015 +0000
Revision:
3:dc7e9c6bc26c
Parent:
2:7d523bdd2f50
Child:
4:989d51f3e6ef
updating with threaded tasks for communication classes

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 3:dc7e9c6bc26c 14 void primary_radio_rx_handle(void const *arg)
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 3:dc7e9c6bc26c 63 //comm.TxHandler((CommLink*)&radio_900, &CommLink::sendPacket, 8);
jjones646 3:dc7e9c6bc26c 64 comm.TxHandler(primary_radio_tx_handle, 8);
jjones646 3:dc7e9c6bc26c 65
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 3:dc7e9c6bc26c 68 comm.openSocket((CommLink*)&radio_900, 8, primary_radio_rx_handle);
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 3:dc7e9c6bc26c 84
jjones646 3:dc7e9c6bc26c 85 comm.TxHandler(primary_radio_tx_handle, 7);
jjones646 3:dc7e9c6bc26c 86 comm.openSocket((CommLink*)&radio_900, 7, primary_radio_rx_handle);
jjones646 2:7d523bdd2f50 87
jjones646 2:7d523bdd2f50 88 // Enable watchdog timer
jjones646 3:dc7e9c6bc26c 89 //Watchdog watchdog;
jjones646 3:dc7e9c6bc26c 90 //watchdog.set(RJ_WATCHDOG_TIMER_VALUE);
jjones646 3:dc7e9c6bc26c 91
jjones646 3:dc7e9c6bc26c 92 led2 = 0;
jjones646 3:dc7e9c6bc26c 93
jjones646 3:dc7e9c6bc26c 94
jjones646 3:dc7e9c6bc26c 95 for (int i=1; i<=10000000; i*=10) {
jjones646 3:dc7e9c6bc26c 96 std::printf("Itterations: %u\r\n", i);
jjones646 3:dc7e9c6bc26c 97 Timer t;
jjones646 3:dc7e9c6bc26c 98 t.start();
jjones646 3:dc7e9c6bc26c 99
jjones646 3:dc7e9c6bc26c 100 led2 = 1;
jjones646 3:dc7e9c6bc26c 101
jjones646 3:dc7e9c6bc26c 102 for(int j=0; j<i; j++) {
jjones646 3:dc7e9c6bc26c 103 comm.send(dummy_packet);
jjones646 3:dc7e9c6bc26c 104 //osDelay(2);
jjones646 3:dc7e9c6bc26c 105 }
jjones646 3:dc7e9c6bc26c 106
jjones646 3:dc7e9c6bc26c 107 led2 = 0;
jjones646 3:dc7e9c6bc26c 108
jjones646 3:dc7e9c6bc26c 109 t.stop();
jjones646 3:dc7e9c6bc26c 110 std::printf("Timer Reading: %uus\r\n", t.read_us());
jjones646 3:dc7e9c6bc26c 111 }
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 }