AEB

Dependencies:   mbed

Committer:
clynamen
Date:
Sat Jul 30 13:58:52 2016 +0000
Revision:
3:4bb49a5dfa47
Parent:
2:5811e080f41d
m;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
clynamen 1:45911e86ffee 1 /*
clynamen 1:45911e86ffee 2 * Academic License - for use in teaching, academic research, and meeting
clynamen 1:45911e86ffee 3 * course requirements at degree granting institutions only. Not for
clynamen 1:45911e86ffee 4 * government, commercial, or other organizational use.
clynamen 1:45911e86ffee 5 *
clynamen 1:45911e86ffee 6 * File: AEB0.c
clynamen 1:45911e86ffee 7 *
clynamen 1:45911e86ffee 8 * Code generated for Simulink model 'AEB0'.
clynamen 1:45911e86ffee 9 *
clynamen 2:5811e080f41d 10 * Model version : 1.77
clynamen 1:45911e86ffee 11 * Simulink Coder version : 8.10 (R2016a) 10-Feb-2016
clynamen 2:5811e080f41d 12 * C/C++ source code generated on : Thu Jul 28 19:46:51 2016
clynamen 1:45911e86ffee 13 *
clynamen 1:45911e86ffee 14 * Target selection: ert.tlc
clynamen 1:45911e86ffee 15 * Embedded hardware selection: Intel->x86-64 (Windows64)
clynamen 1:45911e86ffee 16 * Code generation objectives: Unspecified
clynamen 1:45911e86ffee 17 * Validation result: Not run
clynamen 1:45911e86ffee 18 */
clynamen 1:45911e86ffee 19
clynamen 1:45911e86ffee 20 #include "AEB0.h"
clynamen 1:45911e86ffee 21 #include "AEB0_private.h"
clynamen 1:45911e86ffee 22
clynamen 1:45911e86ffee 23 /* Named constants for Chart: '<Root>/AEB ' */
clynamen 1:45911e86ffee 24 #define AEB0_IN_AEB_misbehaviour ((uint8_T)1U)
clynamen 1:45911e86ffee 25 #define AEB0_IN_AEB_ok ((uint8_T)2U)
clynamen 1:45911e86ffee 26 #define AEB0_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
clynamen 1:45911e86ffee 27 #define AEB0_IN_brake_fault ((uint8_T)1U)
clynamen 1:45911e86ffee 28 #define AEB0_IN_brake_off_ ((uint8_T)1U)
clynamen 1:45911e86ffee 29 #define AEB0_IN_brake_on_ ((uint8_T)2U)
clynamen 1:45911e86ffee 30 #define AEB0_IN_ok ((uint8_T)1U)
clynamen 1:45911e86ffee 31 #define AEB0_IN_ok2 ((uint8_T)3U)
clynamen 1:45911e86ffee 32 #define AEB0_IN_zero_dist ((uint8_T)2U)
clynamen 1:45911e86ffee 33 #define AEB0_IN_zero_dist_fault ((uint8_T)3U)
clynamen 1:45911e86ffee 34 #define AEB0_div (100.0)
clynamen 1:45911e86ffee 35
clynamen 1:45911e86ffee 36 /* Block states (auto storage) */
clynamen 1:45911e86ffee 37 DW_AEB0_T AEB0_DW;
clynamen 1:45911e86ffee 38
clynamen 1:45911e86ffee 39 /* External inputs (root inport signals with auto storage) */
clynamen 1:45911e86ffee 40 ExtU_AEB0_T AEB0_U;
clynamen 1:45911e86ffee 41
clynamen 1:45911e86ffee 42 /* External outputs (root outports fed by signals with auto storage) */
clynamen 1:45911e86ffee 43 ExtY_AEB0_T AEB0_Y;
clynamen 1:45911e86ffee 44
clynamen 1:45911e86ffee 45 /* Real-time model */
clynamen 1:45911e86ffee 46 RT_MODEL_AEB0_T AEB0_M_;
clynamen 1:45911e86ffee 47 RT_MODEL_AEB0_T *const AEB0_M = &AEB0_M_;
clynamen 1:45911e86ffee 48
clynamen 1:45911e86ffee 49 /* Model step function */
clynamen 1:45911e86ffee 50 void AEB0_step(void)
clynamen 1:45911e86ffee 51 {
clynamen 1:45911e86ffee 52 /* Chart: '<Root>/AEB ' incorporates:
clynamen 1:45911e86ffee 53 * Inport: '<Root>/distance_m'
clynamen 2:5811e080f41d 54 * Inport: '<Root>/speed_km_h'
clynamen 1:45911e86ffee 55 */
clynamen 1:45911e86ffee 56 if (AEB0_DW.temporalCounter_i1 < 7U) {
clynamen 1:45911e86ffee 57 AEB0_DW.temporalCounter_i1++;
clynamen 1:45911e86ffee 58 }
clynamen 1:45911e86ffee 59
clynamen 1:45911e86ffee 60 if (AEB0_DW.temporalCounter_i2 < 7U) {
clynamen 1:45911e86ffee 61 AEB0_DW.temporalCounter_i2++;
clynamen 1:45911e86ffee 62 }
clynamen 1:45911e86ffee 63
clynamen 1:45911e86ffee 64 /* Gateway: AEB
clynamen 1:45911e86ffee 65 */
clynamen 1:45911e86ffee 66 /* During: AEB
clynamen 1:45911e86ffee 67 */
clynamen 1:45911e86ffee 68 if (AEB0_DW.is_active_c3_AEB0 == 0U) {
clynamen 1:45911e86ffee 69 /* Entry: AEB
clynamen 1:45911e86ffee 70 */
clynamen 1:45911e86ffee 71 AEB0_DW.is_active_c3_AEB0 = 1U;
clynamen 1:45911e86ffee 72
clynamen 1:45911e86ffee 73 /* Entry Internal: AEB
clynamen 1:45911e86ffee 74 */
clynamen 1:45911e86ffee 75 /* Transition: '<S1>:37' */
clynamen 1:45911e86ffee 76 AEB0_DW.is_AEB_distance_sensor_fault_de = AEB0_IN_ok;
clynamen 1:45911e86ffee 77
clynamen 2:5811e080f41d 78 /* Outport: '<Root>/fault' */
clynamen 2:5811e080f41d 79 /* Entry 'ok': '<S1>:21' */
clynamen 2:5811e080f41d 80 /* '<S1>:21:1' fault=0 */
clynamen 2:5811e080f41d 81 AEB0_Y.fault = 0.0;
clynamen 2:5811e080f41d 82
clynamen 1:45911e86ffee 83 /* Entry Internal 'AEB_brake_fault_detection': '<S1>:41' */
clynamen 1:45911e86ffee 84 /* Transition: '<S1>:44' */
clynamen 1:45911e86ffee 85 AEB0_DW.is_AEB_brake_fault_detection = AEB0_IN_ok2;
clynamen 1:45911e86ffee 86
clynamen 1:45911e86ffee 87 /* Entry Internal 'AEB_ALGO': '<S1>:40' */
clynamen 1:45911e86ffee 88 /* Transition: '<S1>:4' */
clynamen 1:45911e86ffee 89 AEB0_DW.is_AEB_ALGO = AEB0_IN_AEB_ok;
clynamen 1:45911e86ffee 90 AEB0_DW.is_AEB_ok = AEB0_IN_brake_off_;
clynamen 1:45911e86ffee 91
clynamen 1:45911e86ffee 92 /* Outport: '<Root>/brake' */
clynamen 1:45911e86ffee 93 /* Entry 'brake_off_': '<S1>:3' */
clynamen 1:45911e86ffee 94 /* '<S1>:3:1' brake=0 */
clynamen 1:45911e86ffee 95 AEB0_Y.brake = 0.0;
clynamen 1:45911e86ffee 96 } else {
clynamen 1:45911e86ffee 97 /* During 'AEB': '<S1>:39' */
clynamen 1:45911e86ffee 98 /* During 'AEB_fault_detection': '<S1>:43' */
clynamen 1:45911e86ffee 99 /* During 'AEB_distance_sensor_fault_detection': '<S1>:42' */
clynamen 1:45911e86ffee 100 switch (AEB0_DW.is_AEB_distance_sensor_fault_de) {
clynamen 1:45911e86ffee 101 case AEB0_IN_ok:
clynamen 1:45911e86ffee 102 /* During 'ok': '<S1>:21' */
clynamen 1:45911e86ffee 103 /* '<S1>:23:1' sf_internal_predicateOutput = ... */
clynamen 1:45911e86ffee 104 /* '<S1>:23:1' distance_m == 0; */
clynamen 1:45911e86ffee 105 if (AEB0_U.distance_m == 0.0) {
clynamen 1:45911e86ffee 106 /* Transition: '<S1>:23' */
clynamen 1:45911e86ffee 107 AEB0_DW.is_AEB_distance_sensor_fault_de = AEB0_IN_zero_dist;
clynamen 1:45911e86ffee 108 AEB0_DW.temporalCounter_i1 = 0U;
clynamen 1:45911e86ffee 109 }
clynamen 1:45911e86ffee 110 break;
clynamen 1:45911e86ffee 111
clynamen 1:45911e86ffee 112 case AEB0_IN_zero_dist:
clynamen 1:45911e86ffee 113 /* During 'zero_dist': '<S1>:28' */
clynamen 1:45911e86ffee 114 /* '<S1>:24:1' sf_internal_predicateOutput = ... */
clynamen 1:45911e86ffee 115 /* '<S1>:24:1' distance_m > 0; */
clynamen 1:45911e86ffee 116 if (AEB0_U.distance_m > 0.0) {
clynamen 1:45911e86ffee 117 /* Transition: '<S1>:24' */
clynamen 1:45911e86ffee 118 AEB0_DW.is_AEB_distance_sensor_fault_de = AEB0_IN_ok;
clynamen 2:5811e080f41d 119
clynamen 2:5811e080f41d 120 /* Outport: '<Root>/fault' */
clynamen 2:5811e080f41d 121 /* Entry 'ok': '<S1>:21' */
clynamen 2:5811e080f41d 122 /* '<S1>:21:1' fault=0 */
clynamen 2:5811e080f41d 123 AEB0_Y.fault = 0.0;
clynamen 1:45911e86ffee 124 } else {
clynamen 1:45911e86ffee 125 /* '<S1>:26:1' sf_internal_predicateOutput = ... */
clynamen 1:45911e86ffee 126 /* '<S1>:26:1' after(500, msec); */
clynamen 1:45911e86ffee 127 if (AEB0_DW.temporalCounter_i1 >= 5U) {
clynamen 1:45911e86ffee 128 /* Transition: '<S1>:26' */
clynamen 1:45911e86ffee 129 AEB0_DW.is_AEB_distance_sensor_fault_de = AEB0_IN_zero_dist_fault;
clynamen 1:45911e86ffee 130
clynamen 1:45911e86ffee 131 /* Outport: '<Root>/fault' */
clynamen 1:45911e86ffee 132 /* Entry 'zero_dist_fault': '<S1>:25' */
clynamen 1:45911e86ffee 133 /* '<S1>:25:1' fault=1 */
clynamen 1:45911e86ffee 134 AEB0_Y.fault = 1.0;
clynamen 1:45911e86ffee 135 }
clynamen 1:45911e86ffee 136 }
clynamen 1:45911e86ffee 137 break;
clynamen 1:45911e86ffee 138
clynamen 1:45911e86ffee 139 default:
clynamen 1:45911e86ffee 140 /* During 'zero_dist_fault': '<S1>:25' */
clynamen 1:45911e86ffee 141 break;
clynamen 1:45911e86ffee 142 }
clynamen 1:45911e86ffee 143
clynamen 1:45911e86ffee 144 /* During 'AEB_brake_fault_detection': '<S1>:41' */
clynamen 1:45911e86ffee 145 switch (AEB0_DW.is_AEB_brake_fault_detection) {
clynamen 1:45911e86ffee 146 case AEB0_IN_brake_fault:
clynamen 1:45911e86ffee 147 /* During 'brake_fault': '<S1>:34' */
clynamen 1:45911e86ffee 148 break;
clynamen 1:45911e86ffee 149
clynamen 1:45911e86ffee 150 case AEB0_IN_brake_on_:
clynamen 1:45911e86ffee 151 /* During 'brake_on_': '<S1>:32' */
clynamen 1:45911e86ffee 152 /* '<S1>:35:1' sf_internal_predicateOutput = ... */
clynamen 2:5811e080f41d 153 /* '<S1>:35:1' (after(500, msec)) && (speed_km_h>=speed_at_brake_start && speed_km_h > 0 && brake>0.1); */
clynamen 2:5811e080f41d 154 if ((AEB0_DW.temporalCounter_i2 >= 5U) && (AEB0_U.speed_km_h >=
clynamen 2:5811e080f41d 155 AEB0_DW.speed_at_brake_start) && (AEB0_U.speed_km_h > 0.0) &&
clynamen 2:5811e080f41d 156 (AEB0_Y.brake > 0.1)) {
clynamen 1:45911e86ffee 157 /* Transition: '<S1>:35' */
clynamen 1:45911e86ffee 158 AEB0_DW.is_AEB_brake_fault_detection = AEB0_IN_brake_fault;
clynamen 1:45911e86ffee 159
clynamen 1:45911e86ffee 160 /* Outport: '<Root>/fault' */
clynamen 1:45911e86ffee 161 /* Entry 'brake_fault': '<S1>:34' */
clynamen 1:45911e86ffee 162 /* '<S1>:34:1' fault=1 */
clynamen 1:45911e86ffee 163 AEB0_Y.fault = 1.0;
clynamen 1:45911e86ffee 164 } else {
clynamen 1:45911e86ffee 165 /* '<S1>:46:1' sf_internal_predicateOutput = ... */
clynamen 2:5811e080f41d 166 /* '<S1>:46:1' (after(500, msec)) && (speed_km_h<speed_at_brake_start); */
clynamen 2:5811e080f41d 167 if ((AEB0_DW.temporalCounter_i2 >= 5U) && (AEB0_U.speed_km_h <
clynamen 1:45911e86ffee 168 AEB0_DW.speed_at_brake_start)) {
clynamen 1:45911e86ffee 169 /* Transition: '<S1>:46' */
clynamen 1:45911e86ffee 170 AEB0_DW.is_AEB_brake_fault_detection = AEB0_IN_brake_on_;
clynamen 1:45911e86ffee 171 AEB0_DW.temporalCounter_i2 = 0U;
clynamen 1:45911e86ffee 172
clynamen 1:45911e86ffee 173 /* Entry 'brake_on_': '<S1>:32' */
clynamen 2:5811e080f41d 174 /* '<S1>:32:1' speed_at_brake_start = speed_km_h */
clynamen 2:5811e080f41d 175 AEB0_DW.speed_at_brake_start = AEB0_U.speed_km_h;
clynamen 1:45911e86ffee 176 } else {
clynamen 1:45911e86ffee 177 /* '<S1>:47:1' sf_internal_predicateOutput = ... */
clynamen 1:45911e86ffee 178 /* '<S1>:47:1' brake==0; */
clynamen 1:45911e86ffee 179 if (AEB0_Y.brake == 0.0) {
clynamen 1:45911e86ffee 180 /* Transition: '<S1>:47' */
clynamen 1:45911e86ffee 181 AEB0_DW.is_AEB_brake_fault_detection = AEB0_IN_ok2;
clynamen 1:45911e86ffee 182 }
clynamen 1:45911e86ffee 183 }
clynamen 1:45911e86ffee 184 }
clynamen 1:45911e86ffee 185 break;
clynamen 1:45911e86ffee 186
clynamen 1:45911e86ffee 187 default:
clynamen 1:45911e86ffee 188 /* During 'ok2': '<S1>:31' */
clynamen 1:45911e86ffee 189 /* '<S1>:33:1' sf_internal_predicateOutput = ... */
clynamen 1:45911e86ffee 190 /* '<S1>:33:1' brake==1; */
clynamen 1:45911e86ffee 191 if (AEB0_Y.brake == 1.0) {
clynamen 1:45911e86ffee 192 /* Transition: '<S1>:33' */
clynamen 1:45911e86ffee 193 AEB0_DW.is_AEB_brake_fault_detection = AEB0_IN_brake_on_;
clynamen 1:45911e86ffee 194 AEB0_DW.temporalCounter_i2 = 0U;
clynamen 1:45911e86ffee 195
clynamen 1:45911e86ffee 196 /* Entry 'brake_on_': '<S1>:32' */
clynamen 2:5811e080f41d 197 /* '<S1>:32:1' speed_at_brake_start = speed_km_h */
clynamen 2:5811e080f41d 198 AEB0_DW.speed_at_brake_start = AEB0_U.speed_km_h;
clynamen 1:45911e86ffee 199 }
clynamen 1:45911e86ffee 200 break;
clynamen 1:45911e86ffee 201 }
clynamen 1:45911e86ffee 202
clynamen 1:45911e86ffee 203 /* During 'AEB_ALGO': '<S1>:40' */
clynamen 1:45911e86ffee 204 if (AEB0_DW.is_AEB_ALGO != AEB0_IN_AEB_misbehaviour) {
clynamen 1:45911e86ffee 205 /* During 'AEB_ok': '<S1>:14' */
clynamen 1:45911e86ffee 206 /* '<S1>:16:1' sf_internal_predicateOutput = ... */
clynamen 1:45911e86ffee 207 /* '<S1>:16:1' fault==1; */
clynamen 1:45911e86ffee 208 if (AEB0_Y.fault == 1.0) {
clynamen 1:45911e86ffee 209 /* Transition: '<S1>:16' */
clynamen 1:45911e86ffee 210 /* Exit Internal 'AEB_ok': '<S1>:14' */
clynamen 1:45911e86ffee 211 AEB0_DW.is_AEB_ok = AEB0_IN_NO_ACTIVE_CHILD;
clynamen 1:45911e86ffee 212 AEB0_DW.is_AEB_ALGO = AEB0_IN_AEB_misbehaviour;
clynamen 1:45911e86ffee 213
clynamen 1:45911e86ffee 214 /* Outport: '<Root>/brake' */
clynamen 1:45911e86ffee 215 /* Entry 'AEB_misbehaviour': '<S1>:15' */
clynamen 1:45911e86ffee 216 /* '<S1>:15:1' brake=0 */
clynamen 1:45911e86ffee 217 AEB0_Y.brake = 0.0;
clynamen 1:45911e86ffee 218 } else if (AEB0_DW.is_AEB_ok == AEB0_IN_brake_off_) {
clynamen 1:45911e86ffee 219 /* During 'brake_off_': '<S1>:3' */
clynamen 1:45911e86ffee 220 /* '<S1>:5:1' sf_internal_predicateOutput = ... */
clynamen 2:5811e080f41d 221 /* '<S1>:5:1' speed_km_h^2/div>distance_m; */
clynamen 2:5811e080f41d 222 if (AEB0_U.speed_km_h * AEB0_U.speed_km_h / AEB0_div > AEB0_U.distance_m)
clynamen 2:5811e080f41d 223 {
clynamen 1:45911e86ffee 224 /* Transition: '<S1>:5' */
clynamen 1:45911e86ffee 225 AEB0_DW.is_AEB_ok = AEB0_IN_brake_on_;
clynamen 1:45911e86ffee 226
clynamen 1:45911e86ffee 227 /* Outport: '<Root>/brake' */
clynamen 1:45911e86ffee 228 /* Entry 'brake_on_': '<S1>:1' */
clynamen 2:5811e080f41d 229 /* brake is proportional to the inverse of distance */
clynamen 2:5811e080f41d 230 /* and to the speed. This was required */
clynamen 2:5811e080f41d 231 /* since it was requested that the led frequency */
clynamen 2:5811e080f41d 232 /* must be proportional to the brake request */
clynamen 2:5811e080f41d 233 /* '<S1>:1:3' brake=1 */
clynamen 1:45911e86ffee 234 AEB0_Y.brake = 1.0;
clynamen 1:45911e86ffee 235 }
clynamen 1:45911e86ffee 236 } else {
clynamen 1:45911e86ffee 237 /* During 'brake_on_': '<S1>:1' */
clynamen 1:45911e86ffee 238 /* '<S1>:6:1' sf_internal_predicateOutput = ... */
clynamen 2:5811e080f41d 239 /* '<S1>:6:1' speed_km_h^2/div<distance_m; */
clynamen 2:5811e080f41d 240 if (AEB0_U.speed_km_h * AEB0_U.speed_km_h / AEB0_div < AEB0_U.distance_m)
clynamen 2:5811e080f41d 241 {
clynamen 1:45911e86ffee 242 /* Transition: '<S1>:6' */
clynamen 1:45911e86ffee 243 AEB0_DW.is_AEB_ok = AEB0_IN_brake_off_;
clynamen 1:45911e86ffee 244
clynamen 1:45911e86ffee 245 /* Outport: '<Root>/brake' */
clynamen 1:45911e86ffee 246 /* Entry 'brake_off_': '<S1>:3' */
clynamen 1:45911e86ffee 247 /* '<S1>:3:1' brake=0 */
clynamen 1:45911e86ffee 248 AEB0_Y.brake = 0.0;
clynamen 1:45911e86ffee 249 }
clynamen 1:45911e86ffee 250 }
clynamen 1:45911e86ffee 251 } else {
clynamen 1:45911e86ffee 252 /* During 'AEB_misbehaviour': '<S1>:15' */
clynamen 1:45911e86ffee 253 }
clynamen 1:45911e86ffee 254 }
clynamen 1:45911e86ffee 255
clynamen 1:45911e86ffee 256 /* End of Chart: '<Root>/AEB ' */
clynamen 1:45911e86ffee 257 }
clynamen 1:45911e86ffee 258
clynamen 1:45911e86ffee 259 /* Model initialize function */
clynamen 1:45911e86ffee 260 void AEB0_initialize(void)
clynamen 1:45911e86ffee 261 {
clynamen 1:45911e86ffee 262 /* Registration code */
clynamen 1:45911e86ffee 263
clynamen 1:45911e86ffee 264 /* initialize error status */
clynamen 1:45911e86ffee 265 rtmSetErrorStatus(AEB0_M, (NULL));
clynamen 1:45911e86ffee 266
clynamen 1:45911e86ffee 267 /* states (dwork) */
clynamen 1:45911e86ffee 268 (void) memset((void *)&AEB0_DW, 0,
clynamen 1:45911e86ffee 269 sizeof(DW_AEB0_T));
clynamen 1:45911e86ffee 270
clynamen 1:45911e86ffee 271 /* external inputs */
clynamen 1:45911e86ffee 272 (void) memset((void *)&AEB0_U, 0,
clynamen 1:45911e86ffee 273 sizeof(ExtU_AEB0_T));
clynamen 1:45911e86ffee 274
clynamen 1:45911e86ffee 275 /* external outputs */
clynamen 1:45911e86ffee 276 (void) memset((void *)&AEB0_Y, 0,
clynamen 1:45911e86ffee 277 sizeof(ExtY_AEB0_T));
clynamen 1:45911e86ffee 278
clynamen 1:45911e86ffee 279 /* SystemInitialize for Chart: '<Root>/AEB ' */
clynamen 1:45911e86ffee 280 AEB0_DW.is_AEB_ALGO = AEB0_IN_NO_ACTIVE_CHILD;
clynamen 1:45911e86ffee 281 AEB0_DW.is_AEB_ok = AEB0_IN_NO_ACTIVE_CHILD;
clynamen 1:45911e86ffee 282 AEB0_DW.is_AEB_brake_fault_detection = AEB0_IN_NO_ACTIVE_CHILD;
clynamen 1:45911e86ffee 283 AEB0_DW.temporalCounter_i2 = 0U;
clynamen 1:45911e86ffee 284 AEB0_DW.is_AEB_distance_sensor_fault_de = AEB0_IN_NO_ACTIVE_CHILD;
clynamen 1:45911e86ffee 285 AEB0_DW.temporalCounter_i1 = 0U;
clynamen 1:45911e86ffee 286 AEB0_DW.is_active_c3_AEB0 = 0U;
clynamen 1:45911e86ffee 287
clynamen 1:45911e86ffee 288 /* SystemInitialize for Outport: '<Root>/fault' incorporates:
clynamen 1:45911e86ffee 289 * SystemInitialize for Chart: '<Root>/AEB '
clynamen 1:45911e86ffee 290 */
clynamen 1:45911e86ffee 291 AEB0_Y.fault = 0.0;
clynamen 1:45911e86ffee 292 }
clynamen 1:45911e86ffee 293
clynamen 1:45911e86ffee 294 /* Model terminate function */
clynamen 1:45911e86ffee 295 void AEB0_terminate(void)
clynamen 1:45911e86ffee 296 {
clynamen 1:45911e86ffee 297 /* (no terminate code required) */
clynamen 1:45911e86ffee 298 }
clynamen 1:45911e86ffee 299
clynamen 1:45911e86ffee 300 /*
clynamen 1:45911e86ffee 301 * File trailer for generated code.
clynamen 1:45911e86ffee 302 *
clynamen 1:45911e86ffee 303 * [EOF]
clynamen 1:45911e86ffee 304 */