Home | History | Annotate | Download | only in android

Lines Matching refs:sdkctl

136     SDKCtlSocket*           sdkctl;
164 SDKCtlSocket* sdkctl;
214 SDKCtlSocket* sdkctl;
310 SDKCtlSocket* sdkctl;
379 _sdkctl_socket_alloc_recycler(SDKCtlSocket* sdkctl, uint32_t size)
383 if (sdkctl->recycler != NULL && size <= sdkctl->recycler_block_size) {
384 assert(sdkctl->recycler_count > 0);
386 block = sdkctl->recycler;
387 sdkctl->recycler = block->next;
388 block->size = sdkctl->recycler_block_size;
389 sdkctl->recycler_count--;
390 } else if (size <= sdkctl->recycler_block_size) {
393 block = malloc(sdkctl->recycler_block_size);
395 APANIC("SDKCtl %s: Unable to allocate %d bytes block.",
396 sdkctl->service_name, sdkctl->recycler_block_size);
398 block->size = sdkctl->recycler_block_size;
403 APANIC("SDKCtl %s: Unable to allocate %d bytes block",
404 sdkctl->service_name, size);
414 _sdkctl_socket_free_recycler(SDKCtlSocket* sdkctl, void* mem)
418 if (block->size != sdkctl
419 sdkctl->recycler_count == sdkctl->recycler_max) {
424 assert(sdkctl->recycler_count >= 0);
425 block->next = sdkctl->recycler;
426 sdkctl->recycler = block;
427 sdkctl->recycler_count++;
433 _sdkctl_socket_empty_recycler(SDKCtlSocket* sdkctl)
435 SDKCtlRecycled* block = sdkctl->recycler;
441 sdkctl->recycler = NULL;
442 sdkctl->recycler_count = 0;
451 * sdkctl - SDKCtlSocket instance for the query.
457 SDKCtlSocket* const sdkctl = query->sdkctl;
458 if (sdkctl->query_head == NULL) {
459 assert(sdkctl->query_tail == NULL);
460 sdkctl->query_head = sdkctl->query_tail = query;
462 sdkctl->query_tail->next = query;
463 sdkctl->query_tail = query;
482 SDKCtlSocket* const sdkctl = query->sdkctl;
484 SDKCtlQuery* head = sdkctl->query_head;
487 if (sdkctl->io_dispatcher.current_query == query) {
489 sdkctl->io_dispatcher.current_query = NULL;
500 D("SDKCtl %s: Query %p is not found in the list.",
501 sdkctl->service_name, query);
507 assert(query == sdkctl->query_head);
508 sdkctl->query_head = query->next;
511 assert(query != sdkctl->query_head);
514 if (sdkctl->query_tail == query) {
517 sdkctl->query_tail = prev;
531 * sdkctl - SDKCtlSocket instance that owns the query.
540 _sdkctl_socket_remove_query_id(SDKCtlSocket* sdkctl, int query_id)
544 SDKCtlQuery* head = sdkctl->query_head;
547 if (sdkctl->io_dispatcher.current_query != NULL &&
548 sdkctl->io_dispatcher.current_query->header.query_id == query_id) {
550 query = sdkctl->io_dispatcher.current_query;
551 sdkctl->io_dispatcher.current_query = NULL;
561 D("SDKCtl %s: Query ID %d is not found in the list.",
562 sdkctl->service_name, query_id);
570 assert(query == sdkctl->query_head);
571 sdkctl->query_head = query->next;
574 assert(query != sdkctl->query_head);
577 if (sdkctl->query_tail == query) {
580 sdkctl->query_tail = prev;
589 * sdkctl - SDKCtlSocket instance that owns the query.
595 _sdkctl_socket_pull_first_query(SDKCtlSocket* sdkctl)
597 SDKCtlQuery* const query = sdkctl->query_head;
600 sdkctl->query_head = query->next;
601 if (sdkctl->query_head == NULL) {
602 sdkctl->query_tail = NULL;
608 /* Generates new query ID for the given SDKCtl. */
610 _sdkctl_socket_next_query_id(SDKCtlSocket* sdkctl)
612 return ++sdkctl->next_query_id;
621 _sdkctl_packet_new(SDKCtlSocket* sdkctl, uint32_t size, int type)
625 _sdkctl_socket_alloc_recycler(sdkctl, sizeof(SDKCtlPacket) + size);
627 packet->sdkctl = sdkctl;
634 sdkctl_socket_reference(sdkctl);
636 T("SDKCtl %s: Packet %p of type %d is allocated for %d bytes transfer.",
637 sdkctl->service_name, packet, type, size);
646 SDKCtlSocket* const sdkctl = packet->sdkctl;
649 _sdkctl_socket_free_recycler(packet->sdkctl, packet);
651 T("SDKCtl %s: Packet %p is freed.", sdkctl->service_name, packet);
654 sdkctl_socket_release(sdkctl);
701 T("SDKCtl %s: Packet %p transmission has succeeded.",
702 packet->sdkctl->service_name, packet);
706 T("SDKCtl %s: Packet %p is cancelled.",
707 packet->sdkctl->service_name, packet);
711 T("SDKCtl %s: Packet %p has failed: %d -> %s",
712 packet->sdkctl->service_name, packet, errno, strerror(errno));
743 async_socket_write_rel(packet->sdkctl->as, &packet->header, packet->header.size,
746 T("SDKCtl %s: Packet %p size %d is being sent.",
747 packet->sdkctl->service_name, packet, packet->header.size);
755 sdkctl_direct_packet_new(SDKCtlSocket* sdkctl)
758 _sdkctl_socket_alloc_recycler(sdkctl, sizeof(SDKCtlDirectPacket));
760 packet->sdkctl = sdkctl;
764 sdkctl_socket_reference(packet->sdkctl);
766 T("SDKCtl %s: Direct packet %p is allocated.", sdkctl->service_name, packet);
775 SDKCtlSocket* const sdkctl = packet->sdkctl;
778 _sdkctl_socket_free_recycler(packet->sdkctl, packet);
780 T("SDKCtl %s: Direct packet %p is freed.", sdkctl->service_name, packet);
783 sdkctl_socket_release(sdkctl);
831 T("SDKCtl %s: Direct packet %p transmission has succeeded.",
832 packet->sdkctl->service_name, packet);
837 T("SDKCtl %s: Direct packet %p is cancelled.",
838 packet->sdkctl->service_name, packet);
843 T("SDKCtl %s: Direct packet %p has failed: %d -> %s",
844 packet->sdkctl->service_name, packet, errno, strerror(errno));
878 async_socket_write_rel(packet->sdkctl->as, packet->packet, packet->packet->size,
881 T("SDKCtl %s: Direct packet %p size %d is being sent",
882 packet->sdkctl->service_name, packet, packet->packet->size);
891 _sdkctl_message_new(SDKCtlSocket* sdkctl, uint32_t msg_size, int msg_type)
894 (SDKCtlMessage*)_sdkctl_packet_new(sdkctl,
915 sdkctl_message_send(SDKCtlSocket* sdkctl,
920 SDKCtlMessage* const msg = _sdkctl_message_new(sdkctl, size, msg_type);
955 SDKCtlSocket* const sdkctl = query->sdkctl;
967 _sdkctl_socket_free_recycler(sdkctl, query);
969 T("SDKCtl %s: Query %p is freed.", sdkctl->service_name, query);
972 sdkctl_socket_release(sdkctl);
988 T("SDKCtl %s: Query %p ID %d deadline %lld is cancelled.",
989 query->sdkctl->service_name, query, query->header.query_id, query->deadline);
1002 T("SDKCtl %s: Query %p ID %d is completed.",
1003 query->sdkctl->service_name, query, query->header.query_id);
1035 D("SDKCtl %s: Query %p ID %d with deadline %lld has timed out at %lld",
1036 query->sdkctl->service_name, query, query->header.query_id,
1037 query->deadline, async_socket_deadline(query->sdkctl->as, 0));
1059 T("SDKCtl %s: Sent %d bytes of query %p ID %d of type %d",
1060 query->sdkctl->service_name, query->header.packet.size, query,
1096 T("SDKCtl %s: Query %p ID %d is cancelled in transmission.",
1097 query->sdkctl->service_name, query, query->header.query_id);
1104 D("SDKCtl %s: Query %p ID %d with deadline %lld has timed out in transmission at %lld",
1105 query->sdkctl->service_name, query, query->header.query_id,
1106 query->deadline, async_socket_deadline(query->sdkctl->as, 0));
1116 T("SDKCtl %s: Query %p ID %d failed in transmission: %d -> %s",
1117 query->sdkctl->service_name, query, query->header.query_id,
1148 sdkctl_query_new(SDKCtlSocket* sdkctl, int query_type, uint32_t in_data_size)
1151 _sdkctl_socket_alloc_recycler(sdkctl, sizeof(SDKCtlQuery) + in_data_size);
1153 query->sdkctl = sdkctl;
1165 query->header.query_id = _sdkctl_socket_next_query_id(sdkctl);
1169 loopTimer_init(query->timer, sdkctl->looper, _on_skdctl_query_timeout, query);
1172 sdkctl_socket_reference(sdkctl);
1174 T("SDKCtl %s: Query %p ID %d type %d is created for %d bytes of data.",
1175 query->sdkctl->service_name, query, query->header.query_id,
1182 sdkctl_query_new_ex(SDKCtlSocket* sdkctl,
1191 SDKCtlQuery* const query = sdkctl_query_new(sdkctl, query_type, in_data_size);
1217 SDKCtlSocket* const sdkctl = query->sdkctl;
1220 query->deadline = async_socket_deadline(query->sdkctl->as, to);
1230 async_socket_write_abs(sdkctl->as, &query->header, query->header.packet.size,
1233 T("SDKCtl %s: Query %p ID %d type %d is being sent with deadline at %lld",
1234 query->sdkctl->service_name, query, query->header.query_id,
1239 sdkctl_query_build_and_send(SDKCtlSocket* sdkctl,
1250 sdkctl_query_new_ex(sdkctl, query_type, in_data_size, in_data,
1300 _on_sdkctl_packet_received(SDKCtlSocket* sdkctl, SDKCtlPacket* packet)
1302 T("SDKCtl %s: Received packet size: %d, type: %d",
1303 sdkctl->service_name, packet->header.size, packet->header.type);
1311 sdkctl->port_status = SDKCTL_PORT_CONNECTED;
1312 sdkctl->on_port_connection(sdkctl->opaque, sdkctl,
1317 sdkctl->port_status = SDKCTL_PORT_DISCONNECTED;
1318 sdkctl->on_port_connection(sdkctl->opaque, sdkctl,
1323 sdkctl->port_status = SDKCTL_PORT_ENABLED;
1324 sdkctl->on_port_connection(sdkctl->opaque, sdkctl,
1329 sdkctl->port_status = SDKCTL_PORT_DISABLED;
1330 sdkctl->on_port_connection(sdkctl->opaque, sdkctl,
1337 sdkctl->on_message(sdkctl->opaque, sdkctl, msg, msg->msg_type, msg + 1,
1342 E("SDKCtl %s: Received unknown packet type %d size %d",
1343 sdkctl->service_name, packet->header.type, packet->header.size);
1363 _sdkctl_io_dispatcher_start(SDKCtlSocket* sdkctl) {
1364 SDKCtlIODispatcher* const dispatcher = &sdkctl->io_dispatcher;
1367 dispatcher->sdkctl = sdkctl;
1372 async_socket_read_rel(dispatcher->sdkctl->as, &dispatcher->packet_header,
1379 _sdkctl_io_dispatcher_reset(SDKCtlSocket* sdkctl) {
1380 SDKCtlIODispatcher* const dispatcher = &sdkctl->io_dispatcher;
1399 T("SDKCtl %s: I/O Dispatcher is reset", sdkctl->service_name);
1413 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1415 D("SDKCtl %s: Dispatcher I/O failure: %d -> %s",
1416 sdkctl->service_name, errno, strerror(errno));
1420 sdkctl_socket_disconnect(sdkctl);
1424 sdkctl->on_socket_connection(sdkctl->opaque, sdkctl, ASIO_STATE_FAILED);
1432 T("SDKCtl %s: Dispatcher I/O cancelled.", dispatcher->sdkctl->service_name);
1455 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1457 T("SDKCtl %s: Packet header type %d, size %d is received.",
1458 dispatcher->sdkctl->service_name, dispatcher->packet_header.type,
1463 E("SDKCtl %s: Invalid packet signature %x for packet type %d, size %d",
1464 sdkctl->service_name, dispatcher->packet_header.signature,
1487 async_socket_read_rel(sdkctl->as, &dispatcher->query_reply_header.query_id,
1496 _sdkctl_packet_new(sdkctl, dispatcher->packet_header.size,
1499 async_socket_read_rel(sdkctl->as, dispatcher->packet + 1,
1511 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1515 T("SDKCtl %s: Packet type %d, size %d is received.",
1516 dispatcher->sdkctl->service_name, dispatcher->packet_header.type,
1519 _on_sdkctl_packet_received(sdkctl, packet);
1524 async_socket_read_rel(sdkctl->as, &dispatcher->packet_header, sizeof(SDKCtlPacketHeader),
1534 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1537 T("SDKCtl %s: Query reply header is received for query ID %d",
1538 dispatcher->sdkctl->service_name, dispatcher->query_reply_header.query_id);
1543 _sdkctl_socket_remove_query_id(sdkctl, dispatcher->query_reply_header.query_id);
1551 dispatcher->sdkctl->service_name, dispatcher->query_reply_header.query_id);
1557 _sdkctl_packet_new(sdkctl, dispatcher->packet_header.size,
1562 async_socket_read_rel(sdkctl->as, dispatcher->packet + 1, query_data_size,
1574 sdkctl->service_name, query_data_size);
1581 async_socket_read_rel(sdkctl->as, *query->response_buffer,
1593 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1599 "SDKCtl %s: Query ID mismatch in I/O dispatcher",
1600 sdkctl->service_name);
1601 T("SDKCtl %s: Query reply is received for query %p ID %d. Reply size is %d",
1602 dispatcher->sdkctl->service_name, query, query->header.query_id,
1619 async_socket_read_rel(sdkctl->as, &dispatcher->packet_header, sizeof(SDKCtlPacketHeader),
1638 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1641 sdkctl_socket_reference(sdkctl);
1663 "SDKCtl %s: We should never receive ASIO_STATE_TIMED_OUT in SDKCtl I/O dispatcher.",
1664 sdkctl->service_name);
1679 _ANDROID_ASSERT(0, "SDKCtl %s: Unexpected I/O status %d in the dispatcher",
1680 sdkctl->service_name, status);
1688 sdkctl_socket_release(sdkctl);
1717 _ANDROID_ASSERT(0, "SDKCtl %s: Unexpected I/O dispacher state %d",
1718 sdkctl->service_name, dispatcher->state);
1722 sdkctl_socket_release(sdkctl);
1733 _sdkctl_socket_cancel_all_queries(SDKCtlSocket* sdkctl)
1735 SDKCtlIODispatcher* const dispatcher = &sdkctl->io_dispatcher;
1747 query = _sdkctl_socket_pull_first_query(sdkctl);
1752 query = _sdkctl_socket_pull_first_query(sdkctl);
1758 _sdkctl_socket_cancel_all_packets(SDKCtlSocket* sdkctl)
1764 _sdkctl_socket_cancel_all_io(SDKCtlSocket* sdkctl)
1767 _sdkctl_socket_cancel_all_queries(sdkctl);
1768 _sdkctl_socket_cancel_all_packets(sdkctl);
1773 _sdkctl_socket_disconnect_socket(SDKCtlSocket* sdkctl)
1775 if (sdkctl->as != NULL) {
1777 async_socket_disconnect(sdkctl->as);
1780 _sdkctl_socket_cancel_all_io(sdkctl);
1783 _sdkctl_io_dispatcher_reset(sdkctl);
1786 sdkctl->state = SDKCTL_SOCKET_DISCONNECTED;
1787 sdkctl->port_status = SDKCTL_PORT_DISCONNECTED;
1792 _sdkctl_socket_free(SDKCtlSocket* sdkctl)
1794 if (sdkctl != NULL) {
1795 T("SDKCtl %s: descriptor is destroing.", sdkctl->service_name);
1798 if (sdkctl->as != NULL) {
1799 async_socket_disconnect(sdkctl->as);
1800 async_socket_release(sdkctl->as);
1804 if (sdkctl->looper != NULL) {
1805 looper_free(sdkctl->looper);
1807 if (sdkctl->service_name != NULL) {
1808 free(sdkctl->service_name);
1810 _sdkctl_socket_empty_recycler(sdkctl);
1812 AFREE(sdkctl);
1821 static void _sdkctl_do_handshake(SDKCtlSocket* sdkctl);
1827 _on_async_socket_connected(SDKCtlSocket* sdkctl)
1829 D("SDKCtl %s: Socket is connected.", sdkctl->service_name);
1833 sdkctl->on_socket_connection(sdkctl->opaque, sdkctl, ASIO_STATE_SUCCEEDED);
1837 _sdkctl_io_dispatcher_start(sdkctl);
1840 _sdkctl_do_handshake(sdkctl);
1851 _on_async_socket_disconnected(SDKCtlSocket* sdkctl)
1853 D("SDKCtl %s: Socket has been disconnected.", sdkctl->service_name);
1855 _sdkctl_socket_disconnect_socket(sdkctl);
1857 AsyncIOAction action = sdkctl->on_socket_connection(sdkctl->opaque, sdkctl,
1864 sdkctl->state = SDKCTL_SOCKET_CONNECTING;
1880 SDKCtlSocket* const sdkctl = (SDKCtlSocket*)client_opaque;
1883 sdkctl_socket_reference(sdkctl);
1887 sdkctl->state = SDKCTL_SOCKET_CONNECTED;
1888 _on_async_socket_connected(sdkctl);
1892 if (sdkctl->state == SDKCTL_SOCKET_CONNECTED) {
1894 action = _on_async_socket_disconnected(sdkctl);
1908 sdkctl_socket_release(sdkctl);
1925 SDKCtlSocket* sdkctl;
1926 ANEW0(sdkctl);
1928 sdkctl->state = SDKCTL_SOCKET_DISCONNECTED;
1929 sdkctl->port_status = SDKCTL_PORT_DISCONNECTED;
1930 sdkctl->opaque = opaque;
1931 sdkctl->service_name = ASTRDUP(service_name);
1932 sdkctl->on_socket_connection = on_socket_connection;
1933 sdkctl->on_port_connection = on_port_connection;
1934 sdkctl->on_message = on_message;
1935 sdkctl->reconnect_to = reconnect_to;
1936 sdkctl->as = NULL;
1937 sdkctl->next_query_id = 0;
1938 sdkctl->query_head = sdkctl->query_tail = NULL;
1939 sdkctl->ref_count = 1;
1940 sdkctl->recycler = NULL;
1941 sdkctl->recycler_block_size = 0;
1942 sdkctl->recycler_max = 0;
1943 sdkctl->recycler_count = 0;
1945 T("SDKCtl %s: descriptor is created.", sdkctl->service_name);
1947 sdkctl->looper = looper_newCore();
1948 if (sdkctl->looper == NULL) {
1949 E("Unable to create I/O looper for SDKCtl socket '%s'",
1951 on_socket_connection(opaque, sdkctl, ASIO_STATE_FAILED);
1952 _sdkctl_socket_free(sdkctl);
1956 return sdkctl;
1959 int sdkctl_socket_reference(SDKCtlSocket* sdkctl)
1961 assert(sdkctl->ref_count > 0);
1962 sdkctl->ref_count++;
1963 return sdkctl->ref_count;
1967 sdkctl_socket_release(SDKCtlSocket* sdkctl)
1969 assert(sdkctl->ref_count > 0);
1970 sdkctl->ref_count--;
1971 if (sdkctl->ref_count == 0) {
1973 _sdkctl_socket_free(sdkctl);
1976 return sdkctl->ref_count;
1980 sdkctl_init_recycler(SDKCtlSocket* sdkctl,
1984 if (sdkctl->recycler != NULL) {
1985 D("SDKCtl %s: Recycler is already initialized. Ignoring recycler init.",
1986 sdkctl->service_name);
1993 sdkctl->recycler_block_size = data_size;
1994 sdkctl->recycler_max = max_recycled_num;
1995 sdkctl->recycler_count = 0;
1999 sdkctl_socket_connect(SDKCtlSocket* sdkctl, int port, int retry_to)
2001 T("SDKCtl %s: Handling connect request to port %d, retrying in %dms...",
2002 sdkctl->service_name, port, retry_to);
2004 sdkctl->state = SDKCTL_SOCKET_CONNECTING;
2005 sdkctl->as = async_socket_new(port, sdkctl->reconnect_to,
2006 _on_async_socket_connection, sdkctl,
2007 sdkctl->looper);
2008 if (sdkctl->as == NULL) {
2009 E("Unable to allocate AsyncSocket for SDKCtl socket '%s'",
2010 sdkctl->service_name);
2011 sdkctl->on_socket_connection(sdkctl->opaque, sdkctl, ASIO_STATE_FAILED);
2013 async_socket_connect(sdkctl->as, retry_to);
2018 sdkctl_socket_reconnect(SDKCtlSocket* sdkctl, int port, int retry_to)
2020 T("SDKCtl %s: Handling reconnection request to port %d, retrying in %dms...",
2021 sdkctl->service_name, port, retry_to);
2023 _sdkctl_socket_disconnect_socket(sdkctl);
2025 if (sdkctl->as == NULL) {
2026 sdkctl_socket_connect(sdkctl, port, retry_to);
2028 sdkctl->state = SDKCTL_SOCKET_CONNECTING;
2029 async_socket_reconnect(sdkctl->as, retry_to);
2034 sdkctl_socket_disconnect(SDKCtlSocket* sdkctl)
2036 T("SDKCtl %s: Handling disconnect request.", sdkctl->service_name);
2038 _sdkctl_socket_disconnect_socket(sdkctl);
2042 sdkctl_socket_is_connected(SDKCtlSocket* sdkctl)
2044 return (sdkctl->state == SDKCTL_SOCKET_CONNECTED) ? 1 : 0;
2048 sdkctl_socket_is_port_ready(SDKCtlSocket* sdkctl)
2050 return (sdkctl->port_status == SDKCTL_PORT_ENABLED) ? 1 : 0;
2054 sdkctl_socket_get_port_status(SDKCtlSocket* sdkctl)
2056 return sdkctl->port_status;
2060 sdkctl_socket_is_handshake_ok(SDKCtlSocket* sdkctl)
2062 switch (sdkctl->port_status) {
2095 SDKCtlSocket* const sdkctl = (SDKCtlSocket*)query_opaque;
2102 D("SDKCtl %s: Handshake succeeded. Port is connected",
2103 sdkctl->service_name);
2108 D("SDKCtl %s: Handshake succeeded. Port is not connected",
2109 sdkctl->service_name);
2114 D("SDKCtl %s: Handshake failed: duplicate connection.",
2115 sdkctl->service_name);
2120 D("SDKCtl %s: Handshake failed: unknown query.",
2121 sdkctl->service_name);
2126 E("SDKCtl %s: Unknown handshake response: %d",
2127 sdkctl->service_name, *res);
2131 sdkctl->port_status = handshake_status;
2132 sdkctl->on_port_connection(sdkctl->opaque, sdkctl, handshake_status);
2139 D("SDKCtl %s: Handshake failed: I/O state %d. Error: %d -> %s",
2140 sdkctl->service_name, status, errno, strerror(errno));
2141 sdkctl->on_socket_connection(sdkctl->opaque, sdkctl,
2156 SDKCtlSocket* const sdkctl = (SDKCtlSocket*)io_opaque;
2160 D("SDKCtl %s: Sending handshake query...", sdkctl->service_name);
2162 sdkctl_query_build_and_send(sdkctl, SDKCTL_QUERY_HANDSHAKE,
2163 strlen(sdkctl->service_name),
2164 sdkctl->service_name, NULL, NULL,
2165 _on_handshake_io, sdkctl, 3000);
2174 D("SDKCtl %s: endianness failed: I/O state %d. Error: %d -> %s",
2175 sdkctl->service_name, status, errno, strerror(errno));
2176 sdkctl->on_socket_connection(sdkctl->opaque, sdkctl, ASIO_STATE_FAILED);
2187 _sdkctl_do_handshake(SDKCtlSocket* sdkctl)
2195 D("SDKCtl %s: Sending endianness: %d", sdkctl->service_name, _host_end);
2199 async_socket_write_rel(sdkctl->as, &_host_end, 1,
2200 _on_sdkctl_endianness_io, sdkctl, 3000);