rfcomm.c (f25e60dece291970e0c7612fc7fda3d74ae3ceba) rfcomm.c (b93f89661ecd1d19be40311be96b92932960a800)
1/*
2 * Copyright (C) 2014 BlueKitchen GmbH
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright

--- 904 unchanged lines hidden (view full) ---

913
914static void rfcomm_multiplexer_timer_handler(btstack_timer_source_t *timer){
915 rfcomm_multiplexer_t * multiplexer = (rfcomm_multiplexer_t*) btstack_run_loop_get_timer_context(timer);
916 if (rfcomm_multiplexer_has_channels(multiplexer)) return;
917
918 log_info("handler timeout: shutting down multiplexer! (no channels)");
919 uint16_t l2cap_cid = multiplexer->l2cap_cid;
920 rfcomm_multiplexer_finalize(multiplexer);
1/*
2 * Copyright (C) 2014 BlueKitchen GmbH
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright

--- 904 unchanged lines hidden (view full) ---

913
914static void rfcomm_multiplexer_timer_handler(btstack_timer_source_t *timer){
915 rfcomm_multiplexer_t * multiplexer = (rfcomm_multiplexer_t*) btstack_run_loop_get_timer_context(timer);
916 if (rfcomm_multiplexer_has_channels(multiplexer)) return;
917
918 log_info("handler timeout: shutting down multiplexer! (no channels)");
919 uint16_t l2cap_cid = multiplexer->l2cap_cid;
920 rfcomm_multiplexer_finalize(multiplexer);
921 l2cap_disconnect(l2cap_cid, 0x13);
921 l2cap_disconnect(l2cap_cid);
922}
923
924static void rfcomm_multiplexer_prepare_idle_timer(rfcomm_multiplexer_t * multiplexer){
925 if (multiplexer->timer_active) {
926 btstack_run_loop_remove_timer(&multiplexer->timer);
927 multiplexer->timer_active = 0;
928 }
929 if (rfcomm_multiplexer_has_channels(multiplexer)) return;

--- 307 unchanged lines hidden (view full) ---

1237 rfcomm_multiplexer_set_state_and_request_can_send_now_event(multiplexer, RFCOMM_MULTIPLEXER_SEND_UA_0_AND_DISC);
1238 return 1;
1239
1240 case BT_RFCOMM_DM:
1241 // DM #0 - we shouldn't get this, just give up
1242 log_info("Received DM #0");
1243 log_info("-> Closing down multiplexer");
1244 rfcomm_multiplexer_finalize(multiplexer);
922}
923
924static void rfcomm_multiplexer_prepare_idle_timer(rfcomm_multiplexer_t * multiplexer){
925 if (multiplexer->timer_active) {
926 btstack_run_loop_remove_timer(&multiplexer->timer);
927 multiplexer->timer_active = 0;
928 }
929 if (rfcomm_multiplexer_has_channels(multiplexer)) return;

--- 307 unchanged lines hidden (view full) ---

1237 rfcomm_multiplexer_set_state_and_request_can_send_now_event(multiplexer, RFCOMM_MULTIPLEXER_SEND_UA_0_AND_DISC);
1238 return 1;
1239
1240 case BT_RFCOMM_DM:
1241 // DM #0 - we shouldn't get this, just give up
1242 log_info("Received DM #0");
1243 log_info("-> Closing down multiplexer");
1244 rfcomm_multiplexer_finalize(multiplexer);
1245 l2cap_disconnect(l2cap_cid, 0x13);
1245 l2cap_disconnect(l2cap_cid);
1246 return 1;
1247
1248 case BT_RFCOMM_UIH:
1249 if (payload_offset >= size) return 0;
1250
1251 if (packet[payload_offset] == BT_RFCOMM_CLD_CMD){
1252 // Multiplexer close down (CLD) -> close mutliplexer
1253 log_info("Received Multiplexer close down command");
1254 log_info("-> Closing down multiplexer");
1255 rfcomm_multiplexer_finalize(multiplexer);
1246 return 1;
1247
1248 case BT_RFCOMM_UIH:
1249 if (payload_offset >= size) return 0;
1250
1251 if (packet[payload_offset] == BT_RFCOMM_CLD_CMD){
1252 // Multiplexer close down (CLD) -> close mutliplexer
1253 log_info("Received Multiplexer close down command");
1254 log_info("-> Closing down multiplexer");
1255 rfcomm_multiplexer_finalize(multiplexer);
1256 l2cap_disconnect(l2cap_cid, 0x13);
1256 l2cap_disconnect(l2cap_cid);
1257 return 1;
1258 }
1259 switch (packet[payload_offset]){
1260 case BT_RFCOMM_CLD_CMD:
1261 // Multiplexer close down (CLD) -> close mutliplexer
1262 log_info("Received Multiplexer close down command");
1263 log_info("-> Closing down multiplexer");
1264 rfcomm_multiplexer_finalize(multiplexer);
1257 return 1;
1258 }
1259 switch (packet[payload_offset]){
1260 case BT_RFCOMM_CLD_CMD:
1261 // Multiplexer close down (CLD) -> close mutliplexer
1262 log_info("Received Multiplexer close down command");
1263 log_info("-> Closing down multiplexer");
1264 rfcomm_multiplexer_finalize(multiplexer);
1265 l2cap_disconnect(l2cap_cid, 0x13);
1265 l2cap_disconnect(l2cap_cid);
1266 return 1;
1267
1268 case BT_RFCOMM_FCON_CMD:
1269 multiplexer->fcon = 0x81;
1270 l2cap_request_can_send_now_event(multiplexer->l2cap_cid);
1271 return 1;
1272
1273 case BT_RFCOMM_FCOFF_CMD:

--- 94 unchanged lines hidden (view full) ---

1368 break;
1369 case RFCOMM_MULTIPLEXER_SEND_UA_0_AND_DISC:
1370 log_info("Sending UA #0");
1371 log_info("Closing down multiplexer");
1372 multiplexer->state = RFCOMM_MULTIPLEXER_CLOSED;
1373 rfcomm_send_ua(multiplexer, 0);
1374
1375 rfcomm_multiplexer_finalize(multiplexer);
1266 return 1;
1267
1268 case BT_RFCOMM_FCON_CMD:
1269 multiplexer->fcon = 0x81;
1270 l2cap_request_can_send_now_event(multiplexer->l2cap_cid);
1271 return 1;
1272
1273 case BT_RFCOMM_FCOFF_CMD:

--- 94 unchanged lines hidden (view full) ---

1368 break;
1369 case RFCOMM_MULTIPLEXER_SEND_UA_0_AND_DISC:
1370 log_info("Sending UA #0");
1371 log_info("Closing down multiplexer");
1372 multiplexer->state = RFCOMM_MULTIPLEXER_CLOSED;
1373 rfcomm_send_ua(multiplexer, 0);
1374
1375 rfcomm_multiplexer_finalize(multiplexer);
1376 l2cap_disconnect(l2cap_cid, 0x13);
1376 l2cap_disconnect(l2cap_cid);
1377 break;
1378 case RFCOMM_MULTIPLEXER_OPEN:
1379 // respond to test command
1380 if (multiplexer->test_data_len){
1381 int len = multiplexer->test_data_len;
1382 log_info("Sending TEST Response with %u bytes", len);
1383 multiplexer->test_data_len = 0;
1384 rfcomm_send_uih_test_rsp(multiplexer, multiplexer->test_data, len);

--- 1297 unchanged lines hidden ---
1377 break;
1378 case RFCOMM_MULTIPLEXER_OPEN:
1379 // respond to test command
1380 if (multiplexer->test_data_len){
1381 int len = multiplexer->test_data_len;
1382 log_info("Sending TEST Response with %u bytes", len);
1383 multiplexer->test_data_len = 0;
1384 rfcomm_send_uih_test_rsp(multiplexer, multiplexer->test_data, len);

--- 1297 unchanged lines hidden ---