local fix version of myBlueUSB (http://mbed.org/users/networker/code/myBlueUSB/). - merge deleted files which are required to compile. - enable echo back of received data via RFCOMM.
Dependencies: AvailableMemory FatFileSystem mbed myUSBHost
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 //Socket_GetOpt(sock, SO_RECBUF, &recbufsize, sizeof(recbufsize)); 00029 //Socket_GetOpt(sock, SO_SNDBUF, &sndbufsize, sizeof(sndbufsize)); 00030 port_settings ps;//defaults are ok 00031 ps.baud = 3; //9600 baud 00032 ps.bits = 3;//8 bits 00033 ps.stop = 0;//1 bit 00034 ps.par = 0; //no parity 00035 ps.mask = MASK_BITRATE|MASK_DATABITS|MASK_STOPBITS|MASK_PARITYBITS; 00036 //set_remote_port_parameters(sock, &ps); 00037 self->open = true; 00038 } 00039 else if (state == SocketState_Closed) 00040 self->open = false; 00041 } 00042 00043 void btserial::stash(const unsigned char *data, int len) { 00044 int i = 0; 00045 while (i < len && free>0) { 00046 recbuf[recptrin++] = data[i++]; 00047 if (recptrin == bufsize) recptrin = 0; 00048 free--; 00049 } 00050 } 00051 00052 int btserial::getc() { 00053 if (free == bufsize || !open) 00054 return -1; 00055 free++; 00056 recptrout++; 00057 if (recptrout == bufsize) recptrout = 0; 00058 return recbuf[recptrout]; 00059 } 00060 00061 int btserial::putc(int c) { 00062 if (sendptr==bufsize || !open) 00063 return -1; 00064 sendbuf[sendptr++] = c; 00065 if (sendptr==bufsize || c=='\n' || c=='\r') { 00066 Socket_Send(sock, sendbuf, sendptr); 00067 sendptr = 0; 00068 } 00069 return c; 00070 } 00071 00072 void btserial::baud(int br) { 00073 int rates[] = {2400,4800,7200,9600,19200,38400,57600,115200,230400}; 00074 if (!open) return; 00075 for (int i = 0; i < sizeof(rates)/sizeof(int);i++) 00076 if (rates[i] == br) { 00077 port_settings ps; 00078 ps.baud = i; 00079 ps.mask = MASK_BITRATE; 00080 set_remote_port_parameters(sock, &ps); 00081 return; 00082 } 00083 printf("Illegal baudrate requested %d\n", br); 00084 } 00085 00086 void btserial::format(int bits, Serial::Parity par, int stop) { 00087 if (!open) return; 00088 port_settings ps; 00089 ps.bits = bits-5; 00090 ps.stop = stop-1; 00091 switch (par) { 00092 case Serial::None: 00093 ps.par = 0; 00094 ps.par_t = 0; 00095 break; 00096 case Serial::Odd: 00097 ps.par = 1; 00098 ps.par_t = 0; 00099 break; 00100 case Serial::Even: 00101 ps.par = 1; 00102 ps.par_t = 1; 00103 break; 00104 case Serial::Forced0: 00105 ps.par = 1; 00106 ps.par_t = 3; 00107 break; 00108 case Serial::Forced1: 00109 ps.par = 1; 00110 ps.par_t = 2; 00111 break; 00112 } 00113 ps.mask = MASK_DATABITS|MASK_STOPBITS|MASK_PARITYBITS|MASK_PARITYTYPE; 00114 set_remote_port_parameters(sock, &ps); 00115 } 00116
Generated on Tue Jul 12 2022 18:48:53 by 1.7.2