1 /* Copyright JS Foundation and other contributors, http://js.foundation 2 * 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef JERRYSCRIPT_DEBUGGER_TRANSPORT_H 17 #define JERRYSCRIPT_DEBUGGER_TRANSPORT_H 18 19 #include <stdbool.h> 20 #include <stddef.h> 21 #include <stdint.h> 22 23 #ifdef __cplusplus 24 extern "C" 25 { 26 #endif /* __cplusplus */ 27 28 /** \addtogroup jerry-debugger-transport Jerry engine debugger interface - transport control 29 * @{ 30 */ 31 32 /** 33 * Maximum number of bytes transmitted or received. 34 */ 35 #define JERRY_DEBUGGER_TRANSPORT_MAX_BUFFER_SIZE 128 36 37 /** 38 * Receive message context. 39 */ 40 typedef struct 41 { 42 uint8_t *buffer_p; /**< buffer for storing the received data */ 43 size_t received_length; /**< number of currently received bytes */ 44 uint8_t *message_p; /**< start of the received message */ 45 size_t message_length; /**< length of the received message */ 46 size_t message_total_length; /**< total length for datagram protocols, 47 * 0 for stream protocols */ 48 } jerry_debugger_transport_receive_context_t; 49 50 /** 51 * Forward definition of jerry_debugger_transport_header_t. 52 */ 53 struct jerry_debugger_transport_interface_t; 54 55 /** 56 * Close connection callback. 57 */ 58 typedef void (*jerry_debugger_transport_close_t) (struct jerry_debugger_transport_interface_t *header_p); 59 60 /** 61 * Send data callback. 62 */ 63 typedef bool (*jerry_debugger_transport_send_t) (struct jerry_debugger_transport_interface_t *header_p, 64 uint8_t *message_p, size_t message_length); 65 66 /** 67 * Receive data callback. 68 */ 69 typedef bool (*jerry_debugger_transport_receive_t) (struct jerry_debugger_transport_interface_t *header_p, 70 jerry_debugger_transport_receive_context_t *context_p); 71 72 /** 73 * Transport layer header. 74 */ 75 typedef struct jerry_debugger_transport_interface_t 76 { 77 /* The following fields must be filled before calling jerry_debugger_transport_add(). */ 78 jerry_debugger_transport_close_t close; /**< close connection callback */ 79 jerry_debugger_transport_send_t send; /**< send data callback */ 80 jerry_debugger_transport_receive_t receive; /**< receive data callback */ 81 82 /* The following fields are filled by jerry_debugger_transport_add(). */ 83 struct jerry_debugger_transport_interface_t *next_p; /**< next transport layer */ 84 } jerry_debugger_transport_header_t; 85 86 void jerry_debugger_transport_add (jerry_debugger_transport_header_t *header_p, 87 size_t send_message_header_size, size_t max_send_message_size, 88 size_t receive_message_header_size, size_t max_receive_message_size); 89 void jerry_debugger_transport_start (void); 90 91 bool jerry_debugger_transport_is_connected (void); 92 void jerry_debugger_transport_close (void); 93 94 bool jerry_debugger_transport_send (const uint8_t *message_p, size_t message_length); 95 bool jerry_debugger_transport_receive (jerry_debugger_transport_receive_context_t *context_p); 96 void jerry_debugger_transport_receive_completed (jerry_debugger_transport_receive_context_t *context_p); 97 98 void jerry_debugger_transport_sleep (void); 99 100 /** 101 * @} 102 */ 103 104 #ifdef __cplusplus 105 } 106 #endif /* __cplusplus */ 107 #endif /* !JERRYSCRIPT_DEBUGGER_TRANSPORT_H */ 108