May 2021 Commit

Dependencies:   sx128x sx12xx_hal

Committer:
Wayne Roberts
Date:
Mon Feb 05 15:03:27 2018 -0800
Revision:
5:1652e04809fb
Parent:
4:19056d9707ef
Child:
6:59ba1113b3c6
add target MOTE_L152RC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wayne Roberts 5:1652e04809fb 1 #include "platform.h"
dudmuck 0:cb38da4f4b04 2
dudmuck 3:d8b57eca8c45 3 SX127x_lora lora(radio);
dudmuck 0:cb38da4f4b04 4 Timer t;
dudmuck 3:d8b57eca8c45 5 #define CMD_PINA 0x02
dudmuck 3:d8b57eca8c45 6 #define CMD_PINB 0x03
dudmuck 3:d8b57eca8c45 7 #define CMD_PINC 0x06
dudmuck 3:d8b57eca8c45 8 #define CMD_PIND 0x08
dudmuck 0:cb38da4f4b04 9
dudmuck 0:cb38da4f4b04 10 static uint16_t crc_ccitt( uint8_t *buffer, uint16_t length )
dudmuck 0:cb38da4f4b04 11 {
dudmuck 0:cb38da4f4b04 12 // The CRC calculation follows CCITT
dudmuck 0:cb38da4f4b04 13 const uint16_t polynom = 0x1021;
dudmuck 0:cb38da4f4b04 14 // CRC initial value
dudmuck 0:cb38da4f4b04 15 uint16_t crc = 0x0000;
dudmuck 0:cb38da4f4b04 16
dudmuck 0:cb38da4f4b04 17 if( buffer == NULL )
dudmuck 0:cb38da4f4b04 18 {
dudmuck 0:cb38da4f4b04 19 return 0;
dudmuck 0:cb38da4f4b04 20 }
dudmuck 0:cb38da4f4b04 21
dudmuck 0:cb38da4f4b04 22 for( uint16_t i = 0; i < length; ++i )
dudmuck 0:cb38da4f4b04 23 {
dudmuck 0:cb38da4f4b04 24 crc ^= ( uint16_t ) buffer[i] << 8;
dudmuck 0:cb38da4f4b04 25 for( uint16_t j = 0; j < 8; ++j )
dudmuck 0:cb38da4f4b04 26 {
dudmuck 0:cb38da4f4b04 27 crc = ( crc & 0x8000 ) ? ( crc << 1 ) ^ polynom : ( crc << 1 );
dudmuck 0:cb38da4f4b04 28 }
dudmuck 0:cb38da4f4b04 29 }
dudmuck 0:cb38da4f4b04 30
dudmuck 0:cb38da4f4b04 31 return crc;
dudmuck 0:cb38da4f4b04 32 }
dudmuck 0:cb38da4f4b04 33
dudmuck 1:3199506bc2e5 34 void transmit(unsigned target, uint8_t cmd)
dudmuck 0:cb38da4f4b04 35 {
dudmuck 0:cb38da4f4b04 36 unsigned t_diff;
dudmuck 0:cb38da4f4b04 37 uint16_t crc;
dudmuck 0:cb38da4f4b04 38
dudmuck 1:3199506bc2e5 39 radio.tx_buf[0] = cmd;
dudmuck 0:cb38da4f4b04 40 t_diff = target - t.read_us();
dudmuck 0:cb38da4f4b04 41 radio.tx_buf[1] = t_diff >> 24;
dudmuck 0:cb38da4f4b04 42 radio.tx_buf[2] = t_diff >> 16;
dudmuck 0:cb38da4f4b04 43 radio.tx_buf[3] = t_diff >> 8;
dudmuck 0:cb38da4f4b04 44 radio.tx_buf[4] = t_diff & 0xff;
dudmuck 0:cb38da4f4b04 45 crc = crc_ccitt(radio.tx_buf, 5);
dudmuck 0:cb38da4f4b04 46 radio.tx_buf[5] = crc >> 8;
dudmuck 0:cb38da4f4b04 47 radio.tx_buf[6] = crc & 0xff;
dudmuck 0:cb38da4f4b04 48
dudmuck 0:cb38da4f4b04 49
dudmuck 0:cb38da4f4b04 50 lora.start_tx(lora.RegPayloadLength); /* begin transmission */
dudmuck 0:cb38da4f4b04 51
dudmuck 1:3199506bc2e5 52 while (lora.service() != SERVICE_TX_DONE) { /* wait for transmission to complete */
dudmuck 1:3199506bc2e5 53 }
dudmuck 0:cb38da4f4b04 54
dudmuck 0:cb38da4f4b04 55 printf("t_diff:%u crc:%04x\r\n", t_diff, crc);
dudmuck 0:cb38da4f4b04 56 }
dudmuck 0:cb38da4f4b04 57
dudmuck 0:cb38da4f4b04 58 #define TARGET_LATENCY 2000000
dudmuck 1:3199506bc2e5 59 void send_alarm(uint8_t cmd)
dudmuck 0:cb38da4f4b04 60 {
dudmuck 0:cb38da4f4b04 61 int i;
dudmuck 0:cb38da4f4b04 62 unsigned target = t.read_us() + TARGET_LATENCY;
dudmuck 0:cb38da4f4b04 63 printf("send_alarm() %u\n", target);
dudmuck 0:cb38da4f4b04 64
dudmuck 1:3199506bc2e5 65 for (i = 0; i < 5; i++) {
dudmuck 1:3199506bc2e5 66 transmit(target, cmd);
dudmuck 0:cb38da4f4b04 67 wait(0.1);
dudmuck 0:cb38da4f4b04 68 }
dudmuck 0:cb38da4f4b04 69 }
dudmuck 1:3199506bc2e5 70
dudmuck 1:3199506bc2e5 71 void debounce(DigitalIn* pin, uint8_t cmd)
dudmuck 1:3199506bc2e5 72 {
dudmuck 1:3199506bc2e5 73 if (!pin->read()) {
dudmuck 1:3199506bc2e5 74 int i;
dudmuck 1:3199506bc2e5 75 for (i = 0; i < 5; i++) {
dudmuck 1:3199506bc2e5 76 wait(0.01);
dudmuck 1:3199506bc2e5 77 if (pin->read()) {
dudmuck 1:3199506bc2e5 78 printf("trans\r\n");
dudmuck 1:3199506bc2e5 79 break;
dudmuck 1:3199506bc2e5 80 }
dudmuck 1:3199506bc2e5 81 }
dudmuck 1:3199506bc2e5 82 if (i == 5)
dudmuck 1:3199506bc2e5 83 send_alarm(cmd);
dudmuck 1:3199506bc2e5 84
dudmuck 1:3199506bc2e5 85 while (!pin->read())
dudmuck 1:3199506bc2e5 86 ;
dudmuck 1:3199506bc2e5 87 }
dudmuck 1:3199506bc2e5 88 }
dudmuck 2:0b7620bda2c9 89
dudmuck 4:19056d9707ef 90 void cmd_ocp(uint8_t ma)
dudmuck 4:19056d9707ef 91 {
dudmuck 4:19056d9707ef 92 if (ma < 130)
dudmuck 4:19056d9707ef 93 radio.RegOcp.bits.OcpTrim = (ma - 45) / 5;
dudmuck 4:19056d9707ef 94 else
dudmuck 4:19056d9707ef 95 radio.RegOcp.bits.OcpTrim = (ma + 30) / 10;
dudmuck 4:19056d9707ef 96 radio.write_reg(REG_OCP, radio.RegOcp.octet);
dudmuck 4:19056d9707ef 97
dudmuck 4:19056d9707ef 98 radio.RegOcp.octet = radio.read_reg(REG_OCP);
dudmuck 4:19056d9707ef 99 if (radio.RegOcp.bits.OcpTrim < 16)
dudmuck 4:19056d9707ef 100 ma = 45 + (5 * radio.RegOcp.bits.OcpTrim);
dudmuck 4:19056d9707ef 101 else if (radio.RegOcp.bits.OcpTrim < 28)
dudmuck 4:19056d9707ef 102 ma = (10 * radio.RegOcp.bits.OcpTrim) - 30;
dudmuck 4:19056d9707ef 103 else
dudmuck 4:19056d9707ef 104 ma = 240;
dudmuck 4:19056d9707ef 105 printf("Ocp: %dmA\r\n", ma);
dudmuck 4:19056d9707ef 106 }
dudmuck 4:19056d9707ef 107
dudmuck 0:cb38da4f4b04 108 int main()
dudmuck 0:cb38da4f4b04 109 {
dudmuck 0:cb38da4f4b04 110 printf("\r\nreset-tx\r\n");
dudmuck 0:cb38da4f4b04 111 t.start();
dudmuck 1:3199506bc2e5 112
dudmuck 3:d8b57eca8c45 113 pinA.mode(PullUp);
dudmuck 3:d8b57eca8c45 114 pinB.mode(PullUp);
dudmuck 3:d8b57eca8c45 115 pinC.mode(PullUp);
dudmuck 3:d8b57eca8c45 116 pinD.mode(PullUp);
dudmuck 1:3199506bc2e5 117
dudmuck 0:cb38da4f4b04 118 radio.rf_switch = rfsw_callback;
dudmuck 0:cb38da4f4b04 119
dudmuck 0:cb38da4f4b04 120 radio.set_frf_MHz(910.8);
dudmuck 0:cb38da4f4b04 121 lora.enable();
dudmuck 0:cb38da4f4b04 122 lora.setBw_KHz(500);
dudmuck 0:cb38da4f4b04 123 lora.setSf(11);
dudmuck 0:cb38da4f4b04 124
Wayne Roberts 5:1652e04809fb 125 board_init();
dudmuck 0:cb38da4f4b04 126
dudmuck 0:cb38da4f4b04 127 /* constant payload length */
dudmuck 0:cb38da4f4b04 128 lora.RegPayloadLength = 7;
dudmuck 0:cb38da4f4b04 129 radio.write_reg(REG_LR_PAYLOADLENGTH, lora.RegPayloadLength);
dudmuck 4:19056d9707ef 130
dudmuck 4:19056d9707ef 131 /* lora.RegModemConfig2.octet = radio.read_reg(REG_LR_MODEMCONFIG2);
dudmuck 4:19056d9707ef 132 lora.RegModemConfig2.sx1276bits.TxContinuousMode = 1;
dudmuck 4:19056d9707ef 133 radio.write_reg(REG_LR_MODEMCONFIG2, lora.RegModemConfig2.octet);
dudmuck 4:19056d9707ef 134 */
dudmuck 0:cb38da4f4b04 135 for (;;) {
dudmuck 3:d8b57eca8c45 136 debounce(&pinA, CMD_PINA);
dudmuck 3:d8b57eca8c45 137 debounce(&pinB, CMD_PINB);
dudmuck 3:d8b57eca8c45 138 debounce(&pinC, CMD_PINC);
dudmuck 3:d8b57eca8c45 139 debounce(&pinD, CMD_PIND);
dudmuck 0:cb38da4f4b04 140 } // ..for (;;)
dudmuck 0:cb38da4f4b04 141 }