OIC Open Source Work Group
1 Architecture IoTivity v1.0 CA API CA Control Network Config. Network Config. CoAP Protocol CoAP Protocol Interface Controller Interface Controller Transport Adapter BLE Adapter BLE Adapter BT Adapter BT Adapter Platform Adapter Ubuntu Android Tizen Arduino Android Interface Android Interface Ubuntu Interface Ubuntu Interface Tizen Interface Tizen Interface Arduino Interface Arduino Interface TCP Adapter TCP Adapter IP Adapter IP Adapter Resource Encapsulation IoTivity Application NFC Adapter NFC Adapter Message Switching Routing Manager Message Forwarder Configuration Resource Introspection Legend CA ComponentCA ModuleExternalUbuntuAndroidTizenArduino CA Control Component Target network selection and interface control and monitoring CoAP message serialization and parsing Blockwise messaging flow control Transport Adapter Component Data transmission over UDP, TCP, BLE( GATT ), BT( SPP ) and NFC Secure data exchanging using DTLS Platform Adapter Component Ubuntu Wifi, Ethernet and BLE Android Wifi, BLE and BT Tizen Wifi, BLE and BT Arduino Wifi, Ethernet and BLE Message Switching Gateway resource discovery Routing table update and managing Message routing( forwarding ) Blockwise Transfer
2 CA API CAResult_t CAInitialize(); void CATerminate(); CAResult_t CAStartListeningServer(); CAResult_t CAStopListeningServer(); CAResult_t CAStartDiscoveryServer(); void CARegisterHandler( CARequestCallback ReqHandler, CAResponseCallback RespHandler, CAErrorCallback ErrorHandler ); CAResult_t CACreateEndpoint( CATransportFlags_t flags, CATransportAdapter_t adapter, const char *addr, uint16_t port, CAEndpoint_t **object ); void CADestroyEndpoint(CAEndpoint_t *object); CAResult_t CAGenerateToken(CAToken_t *token, uint8_t tokenLength); void CADestroyToken(CAToken_t token); CAResult_t CASendRequest(const CAEndpoint_t *object, const CARequestInfo_t *requestInfo); CAResult_t CASendResponse(const CAEndpoint_t *object, const CAResponseInfo_t *responseInfo); CAResult_t CASelectNetwork(CATransportAdapter_t interestedNetwork); CAResult_t CAUnSelectNetwork(CATransportAdapter_t nonInterestedNetwork); CAResult_t CAGetNetworkInformation(CAEndpoint_t **info, uint32_t *size); CAResult_t CAHandleRequestResponse(); CAResult_t CASetRAInfo(const CARAInfo_t *caraInfo); *input parameter *output parameter
3 CA API | Dynamic View (Operation: Initialize) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler > Adapter Common 1. API Request (CAInitialize) 1.1 Request 6. Request 6.1 Request 4. init > Block Wise Transfer 6.2 Init 3. Initialize Common Queue / Thread 5. init 2. CB init > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter >
4 CA API | Dynamic View (Operation: Select Network) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler 1. API Request(CASelectNetwork) > Block Wise Transfer 2. Add Network type 3. Start adapter 3.1 Request 4. Initialize&Start Adapter Thread > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter > 5. Start Network
5 CA API | Dynamic View (Operation: Start Server) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler 1. API Request (CAStartDiscoveryServer) 3. Request 1.1 Request > Block Wise Transfer > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter > 4. Start Multicast Server 2. Get Network list
6 CA API | Dynamic View (Operation: Start Server) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler 1. API Request (CAStartDiscoveryServer) 3. Request 1.1 Request > Block Wise Transfer > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter > 4. Start Multicast Server 2. Get Network list
7 CA API | Dynamic View (Operation: Create Endpoint ) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler 1. API Request (CACreateEndPoint) 2. Create Endpoint Object > Block Wise Transfer > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter >
8 CA API | Dynamic View (Operation: Generate Token) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler 1. API Request (CAGenerateToken) 2. Request > Block Wise Transfer > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter >
9 CA API | Dynamic View (Operation: Send Request/Response) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler 4. Generate PDU 6.2 Add PDU Data 7. Process PDU Data 7.1 Send Data 1. API Request (CASendRequest) > Block Wise Transfer 3.1 Add CA Data 1.1 Request 6. Request 6.1 Request 6.4 Request Retry 3.2 Process CA Data 2. Prepare Send Data > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter > 6.3 if CON, Add Retransmission List 3. Request 5. Request
10 CA API | Dynamic View (Operation: Send Request/Response) if BLE, TCP Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler 4. Generate PDU 5.2 Add PDU Data 6. Process PDU Data 7. Send Data 1. API Request (CASendRequest) > Block Wise Transfer 3. Add CA Data 1.1 Request 5. Request 5.1 Request 5.4 Request Retry 2. Prepare Send Data 5.3 if CON, Add Retransmission List > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter > 3.1 Process CA Data
11 CA API | Dynamic View (Operation: Receive Request/Response) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler > Block Wise Transfer 1.2 Response 1.1 Response 1. Receive Data 7. Response 4. Stop if ACK/RST 2. Parsing PDU 3. Generate CA Data 5. Response > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter > 6.1 Process CA Data 6. Add CA Data
12 CA API | Dynamic View (Operation: Receive Request/Response) if more blocks follow Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler > Block Wise Transfer 1.2 Response 1.1 Response 1. Receive Data 2. Parsing PDU 3. Generate CA Data 5. Response > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter > 7. Add CA Data to sendThread 6. Send Block message 4. Stop if ACK/RST
13 CA API | Dynamic View (Operation: Receive Response) if BLE, TCP Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler > Block Wise Transfer 1.2 Response 1.1 Response 1. Receive Data 6. Response 4. Stop if ACK/RST 2. Parsing PDU 3. Generate CA Data 5. Add CA Data > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter > 5.1 Process CA Data
14 CA API | Dynamic View (Operation: Retransmission Fail – time out) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler > Block Wise Transfer 1. Add CA Data (timeout) 3. Response 2. Process CA Data > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter >
15 CA API | Dynamic View (Operation: Get Network Information) Connectivity Abstraction Layer > ConnectivityManager Resource Introspection Layer > Ubuntu / Tizen / Android / Arduino platform «thread» CA Common Queue > Interface Controller > Adapter Common > Message Handler > Remote Handler > Network Configurator «thread» CA Adapter Queue > Protocol Message > Retransmission Handler > Block Wise Transfer 1. Request 1.1 Request 1.2 Request 2. Get Network info > IPAdapter EDRAdapter > BLEAdapter > TCPAdapter > RAAdapter >