Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
connector_sm_def.h
00001 /* 00002 * Copyright (c) 2013 Digi International Inc., 00003 * All rights not expressly granted are reserved. 00004 * 00005 * This Source Code Form is subject to the terms of the Mozilla Public 00006 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 00007 * You can obtain one at http://mozilla.org/MPL/2.0/. 00008 * 00009 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343 00010 * ======================================================================= 00011 */ 00012 #ifndef CONNECTOR_SM_DEF_H 00013 #define CONNECTOR_SM_DEF_H 00014 00015 #if (defined CONNECTOR_COMPRESSION) 00016 #include "zlib.h" 00017 #endif 00018 00019 #include "ei_packet.h" 00020 00021 #define SM_UDP_VERSION 0x01 00022 00023 #if defined SM_PACKET_SIZE_UDP 00024 #if defined CONNECTOR_SM_MULTIPART 00025 #error "SM_PACKET_SIZE_UDP cannot be override if multi-packet messaging is ON (defined CONNECTOR_SM_MULTIPART)" 00026 #endif 00027 #else 00028 #define SM_PACKET_SIZE_UDP 1472 00029 #endif 00030 00031 #define SM_PACKET_SIZE_SMS 128 00032 #define SM_PACKET_SIZE_SMS_ENCODED ((SM_PACKET_SIZE_SMS/4) * 5) 00033 #define SM_REQUEST_ID_MASK 0x3FF /* 10 bits */ 00034 #define SM_DEFAULT_REQUEST_ID 0x01 00035 #define SM_WAIT_FOREVER 0 00036 00037 /* NOTE: Some of these bits are tied to protocol, so please don't change them 00038 without referring to SM protocol */ 00039 #define SM_ERROR 0x0001 00040 #define SM_LAST_DATA 0x0002 00041 #define SM_MULTI_PART 0x0004 00042 #define SM_RESPONSE_NEEDED 0x0008 00043 #define SM_RESPONSE_DATA 0x0010 00044 #define SM_CLIENT_OWNED 0x0020 00045 #define SM_ENCODED 0x0040 00046 #define SM_COMPRESSED 0x0080 00047 #define SM_REBOOT 0x0100 00048 #define SM_TARGET_IN_PAYLOAD 0x0200 00049 #define SM_DATA_POINT 0x8000 00050 00051 #define SmIsBitSet(flag, bit) (connector_bool(((flag) & (bit)) == (bit))) 00052 #define SmIsBitClear(flag, bit) (connector_bool(((flag) & (bit)) == 0)) 00053 #define SmBitSet(flag, bit) ((flag) |= (bit)) 00054 #define SmBitClear(flag, bit) ((flag) &= ~(bit)) 00055 00056 #define SmIsError(flag) SmIsBitSet((flag), SM_ERROR) 00057 #define SmIsResponse(flag) SmIsBitSet((flag), SM_RESPONSE_DATA) 00058 #define SmIsResponseNeeded(flag) SmIsBitSet((flag), SM_RESPONSE_NEEDED) 00059 #define SmIsLastData(flag) SmIsBitSet((flag), SM_LAST_DATA) 00060 #define SmIsMultiPart(flag) SmIsBitSet((flag), SM_MULTI_PART) 00061 #define SmIsCompressed(flag) SmIsBitSet((flag), SM_COMPRESSED) 00062 #define SmIsClientOwned(flag) SmIsBitSet((flag), SM_CLIENT_OWNED) 00063 #define SmIsEncoded(flag) SmIsBitSet((flag), SM_ENCODED) 00064 #define SmIsReboot(flag) SmIsBitSet((flag), SM_REBOOT) 00065 #define SmIsDatapoint(flag) SmIsBitSet((flag), SM_DATA_POINT) 00066 #define SmIsTargetInPayload(flag) SmIsBitSet((flag), SM_TARGET_IN_PAYLOAD) 00067 00068 #define SmIsRequest(flag) SmIsBitClear((flag), SM_RESPONSE_DATA) 00069 #define SmIsNotLastData(flag) SmIsBitClear((flag), SM_LAST_DATA) 00070 #define SmIsNotMultiPart(flag) SmIsBitClear((flag), SM_MULTI_PART) 00071 #define SmIsCloudOwned(flag) SmIsBitClear((flag), SM_CLIENT_OWNED) 00072 #define SmNotCompressed(flag) SmIsBitClear((flag), SM_COMPRESSED) 00073 #define SmIsNoResponseNeeded(flag) SmIsBitClear((flag), SM_RESPONSE_NEEDED) 00074 00075 #define SmSetError(flag) SmBitSet((flag), SM_ERROR) 00076 #define SmSetResponse(flag) SmBitSet((flag), SM_RESPONSE_DATA) 00077 #define SmSetResponseNeeded(flag) SmBitSet((flag), SM_RESPONSE_NEEDED) 00078 #define SmSetLastData(flag) SmBitSet((flag), SM_LAST_DATA) 00079 #define SmSetMultiPart(flag) SmBitSet((flag), SM_MULTI_PART) 00080 #define SmSetCompressed(flag) SmBitSet((flag), SM_COMPRESSED) 00081 #define SmSetClientOwned(flag) SmBitSet((flag), SM_CLIENT_OWNED) 00082 #define SmSetEncoded(flag) SmBitSet((flag), SM_ENCODED) 00083 #define SmSetReboot(flag) SmBitSet((flag), SM_REBOOT) 00084 #define SmSetDatapoint(flag) SmBitSet((flag), SM_DATA_POINT) 00085 #define SmSetTargetInPayload(flag) SmBitSet((flag), SM_TARGET_IN_PAYLOAD) 00086 00087 #define SmClearError(flag) SmBitClear((flag), SM_ERROR) 00088 #define SmClearResponse(flag) SmBitClear((flag), SM_RESPONSE_DATA) 00089 #define SmClearResponseNeeded(flag) SmBitClear((flag), SM_RESPONSE_NEEDED) 00090 #define SmClearLastData(flag) SmBitClear((flag), SM_LAST_DATA) 00091 #define SmClearMultiPart(flag) SmBitClear((flag), SM_MULTI_PART) 00092 #define SmClearCompressed(flag) SmBitClear((flag), SM_COMPRESSED) 00093 #define SmClearTargetInPayload(flag) SmBitClear((flag), SM_TARGET_IN_PAYLOAD) 00094 00095 #define SMS_SERVICEID_WRAPPER_TX_SIZE 1 /* 'service-id ' */ 00096 #define SMS_SERVICEID_WRAPPER_RX_SIZE 3 /* '(service-id):' */ 00097 00098 typedef enum 00099 { 00100 connector_sm_cmd_ping, 00101 connector_sm_cmd_connect, 00102 connector_sm_cmd_reboot, 00103 connector_sm_cmd_cli, 00104 connector_sm_cmd_pack, 00105 connector_sm_cmd_pad, 00106 connector_sm_cmd_config, 00107 connector_sm_cmd_data, 00108 connector_sm_cmd_no_path_data, 00109 /* Add new commands here */ 00110 connector_sm_cmd_opaque_response 00111 } connector_sm_cmd_t; 00112 00113 typedef enum 00114 { 00115 connector_sm_id_type_device_id, 00116 connector_sm_id_type_imei, 00117 connector_sm_id_type_none, 00118 connector_sm_id_type_service_id 00119 } connector_sm_id_type_t; 00120 00121 typedef enum 00122 { 00123 connector_sm_state_get_total_length, 00124 connector_sm_state_prepare_payload, 00125 connector_sm_state_more_data, 00126 connector_sm_state_compress, 00127 connector_sm_state_prepare_segment, 00128 connector_sm_state_encoding, 00129 connector_sm_state_send_data, 00130 connector_sm_state_receive_data, 00131 connector_sm_state_decompress, 00132 connector_sm_state_process_payload, 00133 connector_sm_state_complete, 00134 connector_sm_state_error 00135 } connector_sm_state_t; 00136 00137 typedef enum 00138 { 00139 connector_sm_error_none, 00140 connector_sm_error_in_request, 00141 connector_sm_error_unavailable, 00142 connector_sm_error_unknown, 00143 connector_sm_error_complete, 00144 connector_sm_error_cancel, 00145 connector_sm_error_timeout, 00146 connector_sm_error_no_resource 00147 } connector_sm_error_id_t; 00148 00149 typedef struct 00150 { 00151 uint8_t * data; 00152 size_t bytes; 00153 } sm_data_block_t; 00154 00155 typedef struct connector_sm_session_t 00156 { 00157 struct 00158 { 00159 void * context; 00160 void const * header; 00161 } user; 00162 00163 connector_transport_t transport; 00164 connector_sm_state_t sm_state; 00165 connector_sm_cmd_t command; 00166 connector_sm_error_id_t error; 00167 unsigned long start_time; 00168 uint32_t request_id; 00169 uint32_t flags; 00170 00171 sm_data_block_t in; 00172 size_t bytes_processed; 00173 00174 #if (defined CONNECTOR_COMPRESSION) 00175 struct 00176 { 00177 z_stream zlib; 00178 sm_data_block_t out; 00179 } compress; 00180 #endif 00181 00182 struct connector_sm_session_t * next; 00183 struct connector_sm_session_t * prev; 00184 00185 struct 00186 { 00187 uint16_t * size_array; 00188 uint8_t count; 00189 uint8_t processed; 00190 } segments; 00191 } connector_sm_session_t; 00192 00193 typedef struct connector_sm_packet_t 00194 { 00195 uint8_t * data; 00196 size_t total_bytes; 00197 size_t processed_bytes; 00198 connector_sm_session_t * pending_session; 00199 } connector_sm_packet_t; 00200 00201 typedef struct connector_sm_data_t 00202 { 00203 connector_status_t error_code; 00204 unsigned long timeout_in_seconds; /* 0 means wait forever */ 00205 00206 struct 00207 { 00208 size_t mtu; 00209 size_t sm_mtu_tx; 00210 size_t sm_mtu_rx; 00211 uint8_t * id; 00212 size_t id_length; 00213 connector_sm_id_type_t id_type; 00214 connector_transport_state_t state; 00215 connector_connect_auto_type_t connect_type; 00216 unsigned long int connect_at; 00217 } transport; 00218 00219 struct 00220 { 00221 connector_close_status_t status; 00222 connector_stop_condition_t stop_condition; 00223 void * user_context; 00224 connector_bool_t callback_needed; 00225 } close; 00226 00227 struct 00228 { 00229 connector_sm_packet_t send_packet; 00230 connector_sm_packet_t recv_packet; 00231 connector_network_handle_t * handle; 00232 connector_class_id_t class_id; 00233 connector_transport_t transport; 00234 } network; 00235 00236 struct 00237 { 00238 void const * data; 00239 connector_initiate_request_t request; 00240 uint32_t request_id; 00241 connector_bool_t pending_internal; 00242 } pending; 00243 00244 struct 00245 { 00246 connector_sm_session_t * head; 00247 connector_sm_session_t * tail; 00248 connector_sm_session_t * current; 00249 size_t max_sessions; 00250 size_t active_client_sessions; 00251 size_t active_cloud_sessions; 00252 size_t max_segments; 00253 } session; 00254 00255 } connector_sm_data_t; 00256 00257 enum sm_segment_t 00258 { 00259 field_define(segment, info, uint8_t), 00260 field_define(segment, request, uint8_t), 00261 field_define(segment, cmd_status, uint8_t), 00262 field_define(segment, crc, uint16_t), 00263 record_end(segment) 00264 }; 00265 00266 enum sm_segment0_t 00267 { 00268 field_define(segment0, info, uint8_t), 00269 field_define(segment0, request, uint8_t), 00270 field_define(segment0, segment, uint8_t), 00271 field_define(segment0, count, uint8_t), 00272 field_define(segment0, cmd_status, uint8_t), 00273 field_define(segment0, crc, uint16_t), 00274 record_end(segment0) 00275 }; 00276 00277 enum sm_segmentn_t 00278 { 00279 field_define(segmentn, info, uint8_t), 00280 field_define(segmentn, request, uint8_t), 00281 field_define(segmentn, segment, uint8_t), 00282 field_define(segmentn, crc, uint16_t), 00283 record_end(segmentn) 00284 }; 00285 00286 #endif 00287
Generated on Tue Jul 12 2022 19:18:38 by
 1.7.2
 1.7.2