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.
master.cpp@60:b419ea9472de, 2017-01-19 (annotated)
- Committer:
- Bartosz Stebel
- Date:
- Thu Jan 19 13:19:55 2017 +0100
- Revision:
- 60:b419ea9472de
- Parent:
- 56:065bd3a75d97
- Child:
- 63:74df96c098e4
finally fix wifi
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pannaannap | 5:fbd5b1e953e6 | 1 | #include "common.h" |
pannaannap | 7:e51d0fbb1a25 | 2 | #include "master.h" |
pannaannap | 5:fbd5b1e953e6 | 3 | |
pannaanna | 39:381993764b40 | 4 | #include "cantcoap.h" |
sbarzowski | 10:869163c7929d | 5 | #include <sstream> |
sbarzowski | 10:869163c7929d | 6 | |
pannaannap | 7:e51d0fbb1a25 | 7 | int master_loop() { |
pannaannap | 7:e51d0fbb1a25 | 8 | Serial pc(USBTX, USBRX); // tx, rx |
pannaanna | 39:381993764b40 | 9 | Serial wifi(PA_9, PA_10); |
Bartosz Stebel |
53:b2c949470f4e | 10 | DigitalOut frm(PC_8); |
pannaannap | 7:e51d0fbb1a25 | 11 | nRF24L01P radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2); // mosi, miso, sck, csn, ce, irq |
Micha? ?azowik |
50:e83e38fece23 | 12 | |
Micha? ?azowik |
56:065bd3a75d97 | 13 | const unsigned long long RX_ADDRESS = MASTER_ADDRESS; |
Micha? ?azowik |
56:065bd3a75d97 | 14 | const unsigned long long TX_ADDRESS = BOARD1_ADDRESS; |
Micha? ?azowik |
56:065bd3a75d97 | 15 | |
pannaannap | 5:fbd5b1e953e6 | 16 | char rxData[TRANSFER_SIZE]; |
pannaannap | 5:fbd5b1e953e6 | 17 | |
pannaannap | 5:fbd5b1e953e6 | 18 | pc.baud(115200); |
pannaanna | 39:381993764b40 | 19 | wifi.baud(115200); |
Micha? ?azowik |
50:e83e38fece23 | 20 | |
Micha? ?azowik |
56:065bd3a75d97 | 21 | radio_init(&radio, RX_ADDRESS, TX_ADDRESS); |
pannaanna | 39:381993764b40 | 22 | |
pannaannap | 5:fbd5b1e953e6 | 23 | // Display the (default) setup of the nRF24L01+ chip |
pannaannap | 5:fbd5b1e953e6 | 24 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", radio.getRfFrequency() ); |
pannaannap | 5:fbd5b1e953e6 | 25 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", radio.getRfOutputPower() ); |
pannaannap | 5:fbd5b1e953e6 | 26 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", radio.getAirDataRate() ); |
pannaannap | 5:fbd5b1e953e6 | 27 | pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", radio.getTxAddress() ); |
pannaannap | 5:fbd5b1e953e6 | 28 | pc.printf( "nRF24L01+ RX0 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P0) ); |
pannaannap | 5:fbd5b1e953e6 | 29 | pc.printf( "nRF24L01+ RX1 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P1) ); |
pannaannap | 5:fbd5b1e953e6 | 30 | |
Bartosz Stebel |
60:b419ea9472de | 31 | frm = 0; |
pannaannap | 5:fbd5b1e953e6 | 32 | while (1) { |
Micha? ?azowik |
56:065bd3a75d97 | 33 | if(radio.readable(NRF24L01P_PIPE_P1)){ |
Bartosz Stebel |
60:b419ea9472de | 34 | frm = 1; |
Micha? ?azowik |
56:065bd3a75d97 | 35 | int rx_bytes = radio.read(NRF24L01P_PIPE_P1, rxData, sizeof(rxData)); |
Bartosz Stebel |
60:b419ea9472de | 36 | uint8_t pdu_buffer[100] = {0}; |
Bartosz Stebel |
60:b419ea9472de | 37 | CoapPDU pdu(pdu_buffer+1, 99, 0); |
Micha? ?azowik |
56:065bd3a75d97 | 38 | pdu.setVersion(1); |
Micha? ?azowik |
56:065bd3a75d97 | 39 | pdu.setType(CoapPDU::COAP_NON_CONFIRMABLE); |
Micha? ?azowik |
56:065bd3a75d97 | 40 | pdu.setCode(CoapPDU::COAP_POST); |
Bartosz Stebel |
60:b419ea9472de | 41 | //pdu.setToken((uint8_t*)"\3\2\1\1",4); |
Bartosz Stebel |
60:b419ea9472de | 42 | pdu.setToken(NULL,0); // *maybe* can be empty, see rfc7252 section 5.3.1 |
Bartosz Stebel |
60:b419ea9472de | 43 | static uint16_t msgid = 0; //TODO endian? |
Bartosz Stebel |
60:b419ea9472de | 44 | pdu.setMessageID(msgid++); //will overflow, that is okay (rfc again) |
Bartosz Stebel |
60:b419ea9472de | 45 | |
Micha? ?azowik |
56:065bd3a75d97 | 46 | std::string output = str_hex(rxData, rx_bytes); |
Micha? ?azowik |
56:065bd3a75d97 | 47 | //wifi.printf("received: %s\r\n", output.c_str()); |
Micha? ?azowik |
56:065bd3a75d97 | 48 | pc.printf("received: %s\r\n", output.c_str()); |
Micha? ?azowik |
56:065bd3a75d97 | 49 | Data d; |
Micha? ?azowik |
56:065bd3a75d97 | 50 | d.deserialize(std::string(rxData, 32)); |
Micha? ?azowik |
56:065bd3a75d97 | 51 | std::stringstream ss; |
Bartosz Stebel |
54:2551a3c781cf | 52 | |
Micha? ?azowik |
56:065bd3a75d97 | 53 | for (int i = 0; i < rx_bytes; ++i) { |
Micha? ?azowik |
56:065bd3a75d97 | 54 | ss << std::hex << rxData[i] / 16 << rxData[i] % 16; // ugly! |
Micha? ?azowik |
56:065bd3a75d97 | 55 | } |
Micha? ?azowik |
56:065bd3a75d97 | 56 | pc.printf("received: %s|id %d \r\n", ss.str().c_str(), d.type); |
Micha? ?azowik |
56:065bd3a75d97 | 57 | //wifi.printf("received: %s, pkt:", ss.str().c_str()); |
Bartosz Stebel |
52:917b3f31cad3 | 58 | |
Bartosz Stebel |
60:b419ea9472de | 59 | char uribuf[64] = {0}; |
Bartosz Stebel |
60:b419ea9472de | 60 | char pbuf[32] = {0}; |
Bartosz Stebel |
60:b419ea9472de | 61 | int psize = 0; |
Micha? ?azowik |
56:065bd3a75d97 | 62 | switch(d.type) { |
Micha? ?azowik |
56:065bd3a75d97 | 63 | case PIR1: |
Micha? ?azowik |
56:065bd3a75d97 | 64 | strcpy(uribuf, "pir1"); |
Bartosz Stebel |
60:b419ea9472de | 65 | psize = sprintf(pbuf, "%d", d.value.i); |
Micha? ?azowik |
56:065bd3a75d97 | 66 | break; |
Micha? ?azowik |
56:065bd3a75d97 | 67 | case PIR2: |
Micha? ?azowik |
56:065bd3a75d97 | 68 | strcpy(uribuf, "pir2"); |
Bartosz Stebel |
60:b419ea9472de | 69 | psize = sprintf(pbuf, "%d", d.value.i); |
Micha? ?azowik |
56:065bd3a75d97 | 70 | break; |
Micha? ?azowik |
56:065bd3a75d97 | 71 | case DISTANCE: |
Micha? ?azowik |
56:065bd3a75d97 | 72 | strcpy(uribuf, "distance"); |
Bartosz Stebel |
60:b419ea9472de | 73 | psize = sprintf(pbuf, "%f", d.value.f); |
Micha? ?azowik |
56:065bd3a75d97 | 74 | break; |
Micha? ?azowik |
56:065bd3a75d97 | 75 | case SOUND: |
Micha? ?azowik |
56:065bd3a75d97 | 76 | strcpy(uribuf, "sound"); |
Bartosz Stebel |
60:b419ea9472de | 77 | psize = sprintf(pbuf, "%f", d.value.f); |
Micha? ?azowik |
56:065bd3a75d97 | 78 | break; |
Micha? ?azowik |
56:065bd3a75d97 | 79 | } |
Micha? ?azowik |
56:065bd3a75d97 | 80 | pdu.setURI(uribuf,strlen(uribuf)); |
Bartosz Stebel |
54:2551a3c781cf | 81 | |
Micha? ?azowik |
56:065bd3a75d97 | 82 | pdu.setPayload((uint8_t*)pbuf, psize); |
Micha? ?azowik |
56:065bd3a75d97 | 83 | frm = 0; |
Bartosz Stebel |
60:b419ea9472de | 84 | //wait(0.1); |
Bartosz Stebel |
60:b419ea9472de | 85 | //wifi.write((uint8_t*)test, sizeof(test), 0, 0); |
Bartosz Stebel |
60:b419ea9472de | 86 | //uint8_t hdr[3] = {0x7e, 0, pdu.getPDULength()}; |
Bartosz Stebel |
60:b419ea9472de | 87 | //wifi.write(hdr, 3, 0, 0); |
Bartosz Stebel |
60:b419ea9472de | 88 | wait(0.01); |
Bartosz Stebel |
60:b419ea9472de | 89 | wifi.write(pdu_buffer, pdu.getPDULength()+1, 0, 0); |
Bartosz Stebel |
60:b419ea9472de | 90 | //wait(0.1); |
Bartosz Stebel |
60:b419ea9472de | 91 | //uint8_t end = 0xce; |
Bartosz Stebel |
60:b419ea9472de | 92 | //wifi.write(&end, 1, 0, 0); |
Micha? ?azowik |
56:065bd3a75d97 | 93 | wait(0.1); |
Micha? ?azowik |
56:065bd3a75d97 | 94 | frm = 1; |
Micha? ?azowik |
56:065bd3a75d97 | 95 | //wifi.printf("\n"); |
pannaannap | 5:fbd5b1e953e6 | 96 | } |
pannaannap | 5:fbd5b1e953e6 | 97 | } |
pannaannap | 5:fbd5b1e953e6 | 98 | } |