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.
Dependencies: mbed myUSBHost AvailableMemory rfcomm myBlueUSB sdp
btserial.cpp
00001 #include "btserial.h" 00002 00003 btserial::btserial(char ba[6], char ch) { 00004 L2CAPAddr a; 00005 memcpy(&a.bdaddr, ba, 6); 00006 a.psm = ch; 00007 sendptr = 0; 00008 recptrin = 0; 00009 recptrout = bufsize - 1; 00010 free = bufsize; 00011 sock = Socket_Open(SOCKET_RFCOM, &a.hdr, cb, this); 00012 } 00013 00014 btserial::btserial(char ch) { 00015 sendptr = 0; 00016 recptrin = 0; 00017 recptrout = bufsize - 1; 00018 free = bufsize; 00019 sock = Socket_Listen(SOCKET_RFCOM, ch, cb, this); 00020 } 00021 00022 void btserial::cb(int socket, SocketState state, const unsigned char *data, int len, void* userData) { 00023 btserial *self = (btserial*)userData; 00024 if (state == SocketState_Open) 00025 if (len > 0) 00026 self->stash(data, len); 00027 else { 00028 port_settings ps;//defaults are ok 00029 ps.baud = 3; //9600 baud 00030 ps.bits = 3;//8 bits 00031 ps.stop = 0;//1 bit 00032 ps.par = 0; //no parity 00033 ps.mask = MASK_BITRATE|MASK_DATABITS|MASK_STOPBITS|MASK_PARITYBITS; 00034 //set_remote_port_parameters(sock, &ps); 00035 self->open = true; 00036 } 00037 else if (state == SocketState_Closed) 00038 self->open = false; 00039 } 00040 00041 void btserial::stash(const unsigned char *data, int len) { 00042 int i = 0; 00043 while (i < len && free>0) { 00044 recbuf[recptrin++] = data[i++]; 00045 if (recptrin == bufsize) recptrin = 0; 00046 free--; 00047 } 00048 } 00049 00050 int btserial::getc() { 00051 if (free == bufsize || !open) 00052 return -1; 00053 free++; 00054 recptrout++; 00055 if (recptrout == bufsize) recptrout = 0; 00056 return recbuf[recptrout]; 00057 } 00058 00059 int btserial::putc(int c) { 00060 if (sendptr==bufsize || !open) 00061 return -1; 00062 sendbuf[sendptr++] = c; 00063 if (sendptr==bufsize || c=='\n' || c=='\r') { 00064 Socket_Send(sock, sendbuf, sendptr); 00065 sendptr = 0; 00066 } 00067 return c; 00068 } 00069 00070 void btserial::baud(int br) { 00071 int rates[] = {2400,4800,7200,9600,19200,38400,57600,115200,230400}; 00072 if (!open) return; 00073 for (int i = 0; i < sizeof(rates)/sizeof(int);i++) 00074 if (rates[i] == br) { 00075 port_settings ps; 00076 ps.baud = i; 00077 ps.mask = MASK_BITRATE; 00078 set_remote_port_parameters(sock, &ps); 00079 return; 00080 } 00081 printf("Illegal baudrate requested %d\n", br); 00082 } 00083 00084 void btserial::format(int bits, Serial::Parity par, int stop) { 00085 if (!open) return; 00086 port_settings ps; 00087 ps.bits = bits-5; 00088 ps.stop = stop-1; 00089 switch (par) { 00090 case Serial::None: 00091 ps.par = 0; 00092 ps.par_t = 0; 00093 break; 00094 case Serial::Odd: 00095 ps.par = 1; 00096 ps.par_t = 0; 00097 break; 00098 case Serial::Even: 00099 ps.par = 1; 00100 ps.par_t = 1; 00101 break; 00102 case Serial::Forced0: 00103 ps.par = 1; 00104 ps.par_t = 3; 00105 break; 00106 case Serial::Forced1: 00107 ps.par = 1; 00108 ps.par_t = 2; 00109 break; 00110 } 00111 ps.mask = MASK_DATABITS|MASK_STOPBITS|MASK_PARITYBITS|MASK_PARITYTYPE; 00112 set_remote_port_parameters(sock, &ps); 00113 } 00114
Generated on Tue Jul 19 2022 19:13:50 by
1.7.2