diff --git a/test/l2test.c b/test/l2test.c
index 3b606d2..4f341c3 100644
--- a/test/l2test.c
+++ b/test/l2test.c
static int timestamp = 0;
static int defer_setup = 0;
+static struct {
+ char *name;
+ int flag;
+} l2cap_modes[] = {
+ { "basic", L2CAP_MODE_BASIC },
+ /* Not implemented
+ { "flowctl", L2CAP_MODE_FLOWCTL },
+ { "retrans", L2CAP_MODE_RETRANS },
+ */
+ { "ertm", L2CAP_MODE_ERTM },
+ { "streaming", L2CAP_MODE_STREAMING },
+ { 0 }
+};
+
+static void list_l2cap_modes(void)
+{
+ int i;
+
+ printf("l2test - L2CAP testing\n"
+ "List L2CAP modes:\n");
+ for (i=0; l2cap_modes[i].name; i++)
+ printf("\t%s\n", l2cap_modes[i].name);
+}
+
static float tv2fl(struct timeval tv)
{
return (float)tv.tv_sec + (float)(tv.tv_usec/1000000.0);
"\t[-N num] send num frames (default = infinite)\n"
"\t[-C num] send num frames before delay (default = 1)\n"
"\t[-D milliseconds] delay after sending num frames (default = 0)\n"
- "\t[-X mode] select retransmission/flow-control mode\n"
+ "\t[-X mode] l2cap mode (help for list, default = basic)\n"
"\t[-F fcs] use CRC16 check (default = 1)\n"
"\t[-Q num] Max Transmit value (default = 3)\n"
"\t[-Z size] Transmission Window size (default = 63)\n"
int main(int argc, char *argv[])
{
struct sigaction sa;
- int opt, sk, mode = RECV, need_addr = 0;
+ int opt, sk, i, mode = RECV, need_addr = 0;
bacpy(&bdaddr, BDADDR_ANY);
break;
case 'X':
- if (strcasecmp(optarg, "ertm") == 0)
- rfcmode = L2CAP_MODE_ERTM;
- else
- rfcmode = atoi(optarg);
+ rfcmode = -1;
+
+ for (i = 0; l2cap_modes[i].name; i++)
+ if (!strcasecmp(l2cap_modes[i].name, optarg))
+ rfcmode = l2cap_modes[i].flag;
+
+ if (!strcasecmp(optarg, "help") || rfcmode == -1) {
+ list_l2cap_modes();
+ exit(1);
+ }
+
break;
case 'F':