text chat demo application for sx1232

Dependencies:   SX1232 mbed

summary

This is a demo-example application of using SX1232 driver.

It provides text console over SerialPC.

Committer:
dudmuck
Date:
Thu May 02 01:25:37 2013 +0000
Revision:
0:5b0e70b88863
Child:
1:e642eed3eac4
text chat demo application for sx1232

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudmuck 0:5b0e70b88863 1 #include "sx1232.h"
dudmuck 0:5b0e70b88863 2
dudmuck 0:5b0e70b88863 3 /* Chat application over text console via SerialPC.
dudmuck 0:5b0e70b88863 4 * Tested with teraterm.
dudmuck 0:5b0e70b88863 5 */
dudmuck 0:5b0e70b88863 6
dudmuck 0:5b0e70b88863 7 // pins for freescale freedom:
dudmuck 0:5b0e70b88863 8 // mosi, miso, sclk, cs, rst, dio0
dudmuck 0:5b0e70b88863 9 SX1232 radio(PTD2, PTD3, PTD1, PTD0, PTD5, PTA13);
dudmuck 0:5b0e70b88863 10
dudmuck 0:5b0e70b88863 11 Serial pc(USBTX, USBRX);
dudmuck 0:5b0e70b88863 12
dudmuck 0:5b0e70b88863 13 void radio_init_user()
dudmuck 0:5b0e70b88863 14 {
dudmuck 0:5b0e70b88863 15 // default narrow-band settings
dudmuck 0:5b0e70b88863 16 radio.set_bitrate(4800);
dudmuck 0:5b0e70b88863 17 radio.set_tx_fdev_hz(5000); // tx deviation
dudmuck 0:5b0e70b88863 18 radio.set_rx_dcc_bw_hz(0, 10000); // rx bandwidth
dudmuck 0:5b0e70b88863 19 radio.enable_afc(1);
dudmuck 0:5b0e70b88863 20
dudmuck 0:5b0e70b88863 21 // pick your own frequency within your regulatory limits.
dudmuck 0:5b0e70b88863 22 radio.set_frf_MHz(914.1);
dudmuck 0:5b0e70b88863 23
dudmuck 0:5b0e70b88863 24 /* radio.RegPaConfig.bits.OutputPower = X
dudmuck 0:5b0e70b88863 25 * radio.RegPaConfig.bits.PaSelect = 1 PA_BOOST
dudmuck 0:5b0e70b88863 26 * radio.write_reg(REG_PACONFIG, RegPaConfig.octet); */
dudmuck 0:5b0e70b88863 27 }
dudmuck 0:5b0e70b88863 28
dudmuck 0:5b0e70b88863 29 void
dudmuck 0:5b0e70b88863 30 service_radio()
dudmuck 0:5b0e70b88863 31 {
dudmuck 0:5b0e70b88863 32 int len;
dudmuck 0:5b0e70b88863 33
dudmuck 0:5b0e70b88863 34 switch (radio.service_action) {
dudmuck 0:5b0e70b88863 35 case SERVICE_READ_FIFO: // this occurs when CrcOk in DIO1 pin from radio
dudmuck 0:5b0e70b88863 36 radio.service_action = SERVICE_NONE;
dudmuck 0:5b0e70b88863 37 len = radio.read_fifo();
dudmuck 0:5b0e70b88863 38 radio.rx_buf[len] = 0; // null terminate for printing text
dudmuck 0:5b0e70b88863 39 printf("%s\r\n", radio.rx_buf);
dudmuck 0:5b0e70b88863 40 break;
dudmuck 0:5b0e70b88863 41 case SERVICE_ERROR:
dudmuck 0:5b0e70b88863 42 radio.service_action = SERVICE_NONE;
dudmuck 0:5b0e70b88863 43 printf("dio0_callback() %d\r\n", radio.RegDioMapping1.bits.Dio0Mapping);
dudmuck 0:5b0e70b88863 44 break;
dudmuck 0:5b0e70b88863 45 case SERVICE_TX_DONE:
dudmuck 0:5b0e70b88863 46 radio.service_action = SERVICE_NONE;
dudmuck 0:5b0e70b88863 47 radio.start_rx();
dudmuck 0:5b0e70b88863 48 break;
dudmuck 0:5b0e70b88863 49 default: // nothing necessary to do
dudmuck 0:5b0e70b88863 50 break;
dudmuck 0:5b0e70b88863 51 } // ...switch (radio.service_action)
dudmuck 0:5b0e70b88863 52 }
dudmuck 0:5b0e70b88863 53
dudmuck 0:5b0e70b88863 54 int main()
dudmuck 0:5b0e70b88863 55 {
dudmuck 0:5b0e70b88863 56 int txbuf_idx = 0;
dudmuck 0:5b0e70b88863 57 const int maxmsg = sizeof(radio.tx_buf)-1;
dudmuck 0:5b0e70b88863 58
dudmuck 0:5b0e70b88863 59 radio_init_user();
dudmuck 0:5b0e70b88863 60 radio.start_rx();
dudmuck 0:5b0e70b88863 61
dudmuck 0:5b0e70b88863 62 printf("\r\nsx1232_chat\r\n");
dudmuck 0:5b0e70b88863 63 while (1) {
dudmuck 0:5b0e70b88863 64 if (pc.readable()) {
dudmuck 0:5b0e70b88863 65 char c = pc.getc();
dudmuck 0:5b0e70b88863 66 if (c == 8 && txbuf_idx > 0) { // backspace
dudmuck 0:5b0e70b88863 67 pc.putc(8);
dudmuck 0:5b0e70b88863 68 pc.putc(' ');
dudmuck 0:5b0e70b88863 69 pc.putc(8);
dudmuck 0:5b0e70b88863 70 txbuf_idx--;
dudmuck 0:5b0e70b88863 71 } else if (c == '\r') {
dudmuck 0:5b0e70b88863 72 //radio.tx_buf[txbuf_idx] = 0; // null terminate (if printing)
dudmuck 0:5b0e70b88863 73 radio.start_tx(txbuf_idx);
dudmuck 0:5b0e70b88863 74 printf("\r\n");
dudmuck 0:5b0e70b88863 75 txbuf_idx = 0;
dudmuck 0:5b0e70b88863 76 } else if (txbuf_idx < maxmsg) {
dudmuck 0:5b0e70b88863 77 radio.tx_buf[txbuf_idx++] = c;
dudmuck 0:5b0e70b88863 78 pc.putc(c);
dudmuck 0:5b0e70b88863 79 }
dudmuck 0:5b0e70b88863 80 } else
dudmuck 0:5b0e70b88863 81 service_radio();
dudmuck 0:5b0e70b88863 82 } // ...while(1)
dudmuck 0:5b0e70b88863 83
dudmuck 0:5b0e70b88863 84 }