Skip to main content

std_rs/records/
dbd_generated.rs

1//! Record field tables generated from the vendored EPICS `.dbd` record
2//! declarations — the machine-readable spec every `FieldDesc` used to be
3//! hand-copied from.
4//!
5//! @generated by `tools/dbd-codegen` from `crates/std-rs/dbd/*.dbd`.
6//! DO NOT EDIT. Re-run `cargo run -p dbd-codegen -- --write` after changing a
7//! vendored `.dbd`. Drift is caught by `dbd_codegen::tests::generated_files_are_not_stale`,
8//! which `cargo nextest run` executes — locally and in CI — so a stale table
9//! is a failing test, not a comment asking you to remember.
10//!
11//! What is *not* here, and why:
12//!
13//! * **`dbCommon` fields.** The port models them once in
14//!   [`CommonFields`](epics_base_rs::server::record::CommonFields), so splicing them
15//!   into every record table would double-declare them. Base's table emits
16//!   them separately as `DB_COMMON_FIELDS` so the two models can be reconciled
17//!   (and so a `dbCommon` addition is a diff, not a silent gap).
18//! * **`DBF_NOACCESS` fields** (`RSET`, `DPVT`, `MLOK`, `BPTR`, `PPN`, ...).
19//!   These are C-internal pointers with no CA/PVA representation — C's
20//!   `mapDBFToDBR` sends them to `DBR_NOACCESS` and `dbChannelCreate` refuses
21//!   a channel on them. A Rust port has no pointer to expose, so they are
22//!   dropped rather than invented; the count is reported by the generator.
23
24#![allow(clippy::all)]
25
26use epics_base_rs::server::record::{Asl, FieldDesc, Special};
27use epics_base_rs::types::DbFieldType;
28
29// ---------------------------------------------------------------------
30// `menu(...)` choice tables. The index is the stored `epicsEnum16` and is
31// wire-visible (a `DBF_MENU` field is served as `DBR_ENUM`), so the order
32// here is the `.dbd` declaration order, verbatim.
33// ---------------------------------------------------------------------
34
35/// `menu(epidFeedbackMode)`
36pub static MENU_EPID_FEEDBACK_MODE: &[&str] = &["PID", "Max/Min"];
37
38/// `menu(epidFeedbackState)`
39pub static MENU_EPID_FEEDBACK_STATE: &[&str] = &["Off", "On"];
40
41/// `menu(throttleDRVLC)`
42pub static MENU_THROTTLE_DRVLC: &[&str] = &["Off", "On"];
43
44/// `menu(throttleDRVLS)`
45pub static MENU_THROTTLE_DRVLS: &[&str] = &["Normal", "Low Limit", "High Limit"];
46
47/// `menu(throttleOV)`
48pub static MENU_THROTTLE_OV: &[&str] = &["Ext PV NC", "Ext PV OK", "Local PV", "Constant"];
49
50/// `menu(throttleSTS)`
51pub static MENU_THROTTLE_STS: &[&str] = &["Unknown", "Error", "Success"];
52
53/// `menu(throttleSYNC)`
54pub static MENU_THROTTLE_SYNC: &[&str] = &["Idle", "Process"];
55
56/// `menu(throttleWAIT)`
57pub static MENU_THROTTLE_WAIT: &[&str] = &["False", "True"];
58
59/// `menu(timestampTST)`
60pub static MENU_TIMESTAMP_TST: &[&str] = &[
61    "YY/MM/DD HH:MM:SS",
62    "MM/DD/YY HH:MM:SS",
63    "Mon DD HH:MM:SS YY",
64    "Mon DD HH:MM:SS",
65    "HH:MM:SS",
66    "HH:MM",
67    "DD/MM/YY HH:MM:SS",
68    "DD Mon HH:MM:SS YY",
69    "DD-Mon-YYYY HH:MM:SS",
70    "Mon DD, YYYY HH:MM:SS.ns",
71    "MM/DD/YY HH:MM:SS.ns",
72];
73
74/// Every `menu()` declared by a vendored `.dbd`, keyed by its EPICS name.
75///
76/// This is the table `get_enum_strs` answers a `DBF_MENU` field from: the
77/// field's [`FieldDesc::menu`] already points at its choices, and this map
78/// exists for the by-name lookups (`.db` loading, `dbpr`).
79pub fn menu_choices(menu: &str) -> Option<&'static [&'static str]> {
80    Some(match menu {
81        "epidFeedbackMode" => MENU_EPID_FEEDBACK_MODE,
82        "epidFeedbackState" => MENU_EPID_FEEDBACK_STATE,
83        "throttleDRVLC" => MENU_THROTTLE_DRVLC,
84        "throttleDRVLS" => MENU_THROTTLE_DRVLS,
85        "throttleOV" => MENU_THROTTLE_OV,
86        "throttleSTS" => MENU_THROTTLE_STS,
87        "throttleSYNC" => MENU_THROTTLE_SYNC,
88        "throttleWAIT" => MENU_THROTTLE_WAIT,
89        "timestampTST" => MENU_TIMESTAMP_TST,
90        _ => return None,
91    })
92}
93
94// ---------------------------------------------------------------------
95// Per-record-type field tables. Record-*own* fields only: `dbCommon` is
96// modelled separately (see the module docs).
97// ---------------------------------------------------------------------
98
99/// `recordtype(epid)` — 49 CA-visible own fields from `dbd/epidRecord.dbd` (2 `DBF_NOACCESS` internals dropped).
100pub static EPID_FIELDS: &[FieldDesc] = &[
101    FieldDesc {
102        name: "VAL",
103        dbf_type: DbFieldType::Double,
104        runtime_typed: false,
105        read_only: false,
106        special: Special::None,
107        pp: true,
108        asl: Asl::Asl0,
109        size: 0,
110        menu: None,
111        initial: None,
112        interest: 0,
113        prop: false,
114    },
115    FieldDesc {
116        name: "SMSL",
117        dbf_type: DbFieldType::Enum,
118        runtime_typed: false,
119        read_only: false,
120        special: Special::None,
121        pp: false,
122        asl: Asl::Asl1,
123        size: 0,
124        menu: Some(epics_base_rs::server::record::dbd_generated::MENU_OMSL),
125        initial: None,
126        interest: 1,
127        prop: false,
128    },
129    FieldDesc {
130        name: "STPL",
131        dbf_type: DbFieldType::String,
132        runtime_typed: false,
133        read_only: false,
134        special: Special::None,
135        pp: false,
136        asl: Asl::Asl1,
137        size: 0,
138        menu: None,
139        initial: None,
140        interest: 1,
141        prop: false,
142    },
143    FieldDesc {
144        name: "INP",
145        dbf_type: DbFieldType::String,
146        runtime_typed: false,
147        read_only: false,
148        special: Special::None,
149        pp: false,
150        asl: Asl::Asl1,
151        size: 0,
152        menu: None,
153        initial: None,
154        interest: 1,
155        prop: false,
156    },
157    FieldDesc {
158        name: "OUTL",
159        dbf_type: DbFieldType::String,
160        runtime_typed: false,
161        read_only: false,
162        special: Special::None,
163        pp: false,
164        asl: Asl::Asl1,
165        size: 0,
166        menu: None,
167        initial: None,
168        interest: 1,
169        prop: false,
170    },
171    FieldDesc {
172        name: "TRIG",
173        dbf_type: DbFieldType::String,
174        runtime_typed: false,
175        read_only: false,
176        special: Special::None,
177        pp: false,
178        asl: Asl::Asl1,
179        size: 0,
180        menu: None,
181        initial: None,
182        interest: 1,
183        prop: false,
184    },
185    FieldDesc {
186        name: "TVAL",
187        dbf_type: DbFieldType::Double,
188        runtime_typed: false,
189        read_only: false,
190        special: Special::None,
191        pp: false,
192        asl: Asl::Asl1,
193        size: 0,
194        menu: None,
195        initial: None,
196        interest: 1,
197        prop: false,
198    },
199    FieldDesc {
200        name: "CVAL",
201        dbf_type: DbFieldType::Double,
202        runtime_typed: false,
203        read_only: true,
204        special: Special::NoMod,
205        pp: false,
206        asl: Asl::Asl1,
207        size: 0,
208        menu: None,
209        initial: None,
210        interest: 0,
211        prop: false,
212    },
213    FieldDesc {
214        name: "CVLP",
215        dbf_type: DbFieldType::Double,
216        runtime_typed: false,
217        read_only: true,
218        special: Special::NoMod,
219        pp: false,
220        asl: Asl::Asl1,
221        size: 0,
222        menu: None,
223        initial: None,
224        interest: 0,
225        prop: false,
226    },
227    FieldDesc {
228        name: "OVAL",
229        dbf_type: DbFieldType::Double,
230        runtime_typed: false,
231        read_only: true,
232        special: Special::NoMod,
233        pp: false,
234        asl: Asl::Asl1,
235        size: 0,
236        menu: None,
237        initial: None,
238        interest: 0,
239        prop: false,
240    },
241    FieldDesc {
242        name: "OVLP",
243        dbf_type: DbFieldType::Double,
244        runtime_typed: false,
245        read_only: true,
246        special: Special::NoMod,
247        pp: false,
248        asl: Asl::Asl1,
249        size: 0,
250        menu: None,
251        initial: None,
252        interest: 3,
253        prop: false,
254    },
255    FieldDesc {
256        name: "PREC",
257        dbf_type: DbFieldType::Short,
258        runtime_typed: false,
259        read_only: false,
260        special: Special::None,
261        pp: false,
262        asl: Asl::Asl1,
263        size: 0,
264        menu: None,
265        initial: None,
266        interest: 1,
267        prop: false,
268    },
269    FieldDesc {
270        name: "MDT",
271        dbf_type: DbFieldType::Double,
272        runtime_typed: false,
273        read_only: false,
274        special: Special::None,
275        pp: false,
276        asl: Asl::Asl1,
277        size: 0,
278        menu: None,
279        initial: None,
280        interest: 1,
281        prop: false,
282    },
283    FieldDesc {
284        name: "FMOD",
285        dbf_type: DbFieldType::Enum,
286        runtime_typed: false,
287        read_only: false,
288        special: Special::None,
289        pp: false,
290        asl: Asl::Asl1,
291        size: 0,
292        menu: Some(MENU_EPID_FEEDBACK_MODE),
293        initial: None,
294        interest: 1,
295        prop: false,
296    },
297    FieldDesc {
298        name: "FBON",
299        dbf_type: DbFieldType::Enum,
300        runtime_typed: false,
301        read_only: false,
302        special: Special::None,
303        pp: false,
304        asl: Asl::Asl1,
305        size: 0,
306        menu: Some(MENU_EPID_FEEDBACK_STATE),
307        initial: None,
308        interest: 1,
309        prop: false,
310    },
311    FieldDesc {
312        name: "FBOP",
313        dbf_type: DbFieldType::Enum,
314        runtime_typed: false,
315        read_only: false,
316        special: Special::None,
317        pp: false,
318        asl: Asl::Asl1,
319        size: 0,
320        menu: Some(MENU_EPID_FEEDBACK_STATE),
321        initial: None,
322        interest: 1,
323        prop: false,
324    },
325    FieldDesc {
326        name: "KP",
327        dbf_type: DbFieldType::Double,
328        runtime_typed: false,
329        read_only: false,
330        special: Special::None,
331        pp: false,
332        asl: Asl::Asl1,
333        size: 0,
334        menu: None,
335        initial: None,
336        interest: 1,
337        prop: false,
338    },
339    FieldDesc {
340        name: "KI",
341        dbf_type: DbFieldType::Double,
342        runtime_typed: false,
343        read_only: false,
344        special: Special::None,
345        pp: false,
346        asl: Asl::Asl1,
347        size: 0,
348        menu: None,
349        initial: None,
350        interest: 1,
351        prop: false,
352    },
353    FieldDesc {
354        name: "KD",
355        dbf_type: DbFieldType::Double,
356        runtime_typed: false,
357        read_only: false,
358        special: Special::None,
359        pp: false,
360        asl: Asl::Asl1,
361        size: 0,
362        menu: None,
363        initial: None,
364        interest: 1,
365        prop: false,
366    },
367    FieldDesc {
368        name: "EGU",
369        dbf_type: DbFieldType::String,
370        runtime_typed: false,
371        read_only: false,
372        special: Special::None,
373        pp: false,
374        asl: Asl::Asl1,
375        size: 16,
376        menu: None,
377        initial: None,
378        interest: 1,
379        prop: false,
380    },
381    FieldDesc {
382        name: "HOPR",
383        dbf_type: DbFieldType::Double,
384        runtime_typed: false,
385        read_only: false,
386        special: Special::None,
387        pp: false,
388        asl: Asl::Asl1,
389        size: 0,
390        menu: None,
391        initial: None,
392        interest: 1,
393        prop: false,
394    },
395    FieldDesc {
396        name: "LOPR",
397        dbf_type: DbFieldType::Double,
398        runtime_typed: false,
399        read_only: false,
400        special: Special::None,
401        pp: false,
402        asl: Asl::Asl1,
403        size: 0,
404        menu: None,
405        initial: None,
406        interest: 1,
407        prop: false,
408    },
409    FieldDesc {
410        name: "DRVH",
411        dbf_type: DbFieldType::Double,
412        runtime_typed: false,
413        read_only: false,
414        special: Special::None,
415        pp: false,
416        asl: Asl::Asl1,
417        size: 0,
418        menu: None,
419        initial: None,
420        interest: 1,
421        prop: false,
422    },
423    FieldDesc {
424        name: "DRVL",
425        dbf_type: DbFieldType::Double,
426        runtime_typed: false,
427        read_only: false,
428        special: Special::None,
429        pp: false,
430        asl: Asl::Asl1,
431        size: 0,
432        menu: None,
433        initial: None,
434        interest: 1,
435        prop: false,
436    },
437    FieldDesc {
438        name: "HIHI",
439        dbf_type: DbFieldType::Double,
440        runtime_typed: false,
441        read_only: false,
442        special: Special::None,
443        pp: false,
444        asl: Asl::Asl1,
445        size: 0,
446        menu: None,
447        initial: None,
448        interest: 1,
449        prop: false,
450    },
451    FieldDesc {
452        name: "LOLO",
453        dbf_type: DbFieldType::Double,
454        runtime_typed: false,
455        read_only: false,
456        special: Special::None,
457        pp: false,
458        asl: Asl::Asl1,
459        size: 0,
460        menu: None,
461        initial: None,
462        interest: 1,
463        prop: false,
464    },
465    FieldDesc {
466        name: "HIGH",
467        dbf_type: DbFieldType::Double,
468        runtime_typed: false,
469        read_only: false,
470        special: Special::None,
471        pp: false,
472        asl: Asl::Asl1,
473        size: 0,
474        menu: None,
475        initial: None,
476        interest: 1,
477        prop: false,
478    },
479    FieldDesc {
480        name: "LOW",
481        dbf_type: DbFieldType::Double,
482        runtime_typed: false,
483        read_only: false,
484        special: Special::None,
485        pp: false,
486        asl: Asl::Asl1,
487        size: 0,
488        menu: None,
489        initial: None,
490        interest: 1,
491        prop: false,
492    },
493    FieldDesc {
494        name: "HHSV",
495        dbf_type: DbFieldType::Enum,
496        runtime_typed: false,
497        read_only: false,
498        special: Special::None,
499        pp: false,
500        asl: Asl::Asl1,
501        size: 0,
502        menu: Some(epics_base_rs::server::record::dbd_generated::MENU_ALARM_SEVR),
503        initial: None,
504        interest: 1,
505        prop: false,
506    },
507    FieldDesc {
508        name: "LLSV",
509        dbf_type: DbFieldType::Enum,
510        runtime_typed: false,
511        read_only: false,
512        special: Special::None,
513        pp: false,
514        asl: Asl::Asl1,
515        size: 0,
516        menu: Some(epics_base_rs::server::record::dbd_generated::MENU_ALARM_SEVR),
517        initial: None,
518        interest: 1,
519        prop: false,
520    },
521    FieldDesc {
522        name: "HSV",
523        dbf_type: DbFieldType::Enum,
524        runtime_typed: false,
525        read_only: false,
526        special: Special::None,
527        pp: false,
528        asl: Asl::Asl1,
529        size: 0,
530        menu: Some(epics_base_rs::server::record::dbd_generated::MENU_ALARM_SEVR),
531        initial: None,
532        interest: 1,
533        prop: false,
534    },
535    FieldDesc {
536        name: "LSV",
537        dbf_type: DbFieldType::Enum,
538        runtime_typed: false,
539        read_only: false,
540        special: Special::None,
541        pp: false,
542        asl: Asl::Asl1,
543        size: 0,
544        menu: Some(epics_base_rs::server::record::dbd_generated::MENU_ALARM_SEVR),
545        initial: None,
546        interest: 1,
547        prop: false,
548    },
549    FieldDesc {
550        name: "HYST",
551        dbf_type: DbFieldType::Double,
552        runtime_typed: false,
553        read_only: false,
554        special: Special::None,
555        pp: false,
556        asl: Asl::Asl1,
557        size: 0,
558        menu: None,
559        initial: None,
560        interest: 1,
561        prop: false,
562    },
563    FieldDesc {
564        name: "ADEL",
565        dbf_type: DbFieldType::Double,
566        runtime_typed: false,
567        read_only: false,
568        special: Special::None,
569        pp: false,
570        asl: Asl::Asl1,
571        size: 0,
572        menu: None,
573        initial: None,
574        interest: 1,
575        prop: false,
576    },
577    FieldDesc {
578        name: "MDEL",
579        dbf_type: DbFieldType::Double,
580        runtime_typed: false,
581        read_only: false,
582        special: Special::None,
583        pp: false,
584        asl: Asl::Asl1,
585        size: 0,
586        menu: None,
587        initial: None,
588        interest: 1,
589        prop: false,
590    },
591    FieldDesc {
592        name: "ODEL",
593        dbf_type: DbFieldType::Double,
594        runtime_typed: false,
595        read_only: false,
596        special: Special::None,
597        pp: false,
598        asl: Asl::Asl1,
599        size: 0,
600        menu: None,
601        initial: None,
602        interest: 1,
603        prop: false,
604    },
605    FieldDesc {
606        name: "P",
607        dbf_type: DbFieldType::Double,
608        runtime_typed: false,
609        read_only: true,
610        special: Special::NoMod,
611        pp: false,
612        asl: Asl::Asl1,
613        size: 0,
614        menu: None,
615        initial: None,
616        interest: 2,
617        prop: false,
618    },
619    FieldDesc {
620        name: "PP",
621        dbf_type: DbFieldType::Double,
622        runtime_typed: false,
623        read_only: true,
624        special: Special::NoMod,
625        pp: false,
626        asl: Asl::Asl1,
627        size: 0,
628        menu: None,
629        initial: None,
630        interest: 2,
631        prop: false,
632    },
633    FieldDesc {
634        name: "I",
635        dbf_type: DbFieldType::Double,
636        runtime_typed: false,
637        read_only: false,
638        special: Special::None,
639        pp: false,
640        asl: Asl::Asl1,
641        size: 0,
642        menu: None,
643        initial: None,
644        interest: 2,
645        prop: false,
646    },
647    FieldDesc {
648        name: "IP",
649        dbf_type: DbFieldType::Double,
650        runtime_typed: false,
651        read_only: false,
652        special: Special::None,
653        pp: false,
654        asl: Asl::Asl1,
655        size: 0,
656        menu: None,
657        initial: None,
658        interest: 2,
659        prop: false,
660    },
661    FieldDesc {
662        name: "D",
663        dbf_type: DbFieldType::Double,
664        runtime_typed: false,
665        read_only: true,
666        special: Special::NoMod,
667        pp: false,
668        asl: Asl::Asl1,
669        size: 0,
670        menu: None,
671        initial: None,
672        interest: 2,
673        prop: false,
674    },
675    FieldDesc {
676        name: "DP",
677        dbf_type: DbFieldType::Double,
678        runtime_typed: false,
679        read_only: true,
680        special: Special::NoMod,
681        pp: false,
682        asl: Asl::Asl1,
683        size: 0,
684        menu: None,
685        initial: None,
686        interest: 2,
687        prop: false,
688    },
689    FieldDesc {
690        name: "DT",
691        dbf_type: DbFieldType::Double,
692        runtime_typed: false,
693        read_only: false,
694        special: Special::None,
695        pp: false,
696        asl: Asl::Asl1,
697        size: 0,
698        menu: None,
699        initial: None,
700        interest: 2,
701        prop: false,
702    },
703    FieldDesc {
704        name: "DTP",
705        dbf_type: DbFieldType::Double,
706        runtime_typed: false,
707        read_only: false,
708        special: Special::None,
709        pp: false,
710        asl: Asl::Asl1,
711        size: 0,
712        menu: None,
713        initial: None,
714        interest: 2,
715        prop: false,
716    },
717    FieldDesc {
718        name: "ERR",
719        dbf_type: DbFieldType::Double,
720        runtime_typed: false,
721        read_only: true,
722        special: Special::NoMod,
723        pp: false,
724        asl: Asl::Asl1,
725        size: 0,
726        menu: None,
727        initial: None,
728        interest: 2,
729        prop: false,
730    },
731    FieldDesc {
732        name: "ERRP",
733        dbf_type: DbFieldType::Double,
734        runtime_typed: false,
735        read_only: true,
736        special: Special::NoMod,
737        pp: false,
738        asl: Asl::Asl1,
739        size: 0,
740        menu: None,
741        initial: None,
742        interest: 2,
743        prop: false,
744    },
745    FieldDesc {
746        name: "LALM",
747        dbf_type: DbFieldType::Double,
748        runtime_typed: false,
749        read_only: true,
750        special: Special::NoMod,
751        pp: false,
752        asl: Asl::Asl1,
753        size: 0,
754        menu: None,
755        initial: None,
756        interest: 3,
757        prop: false,
758    },
759    FieldDesc {
760        name: "ALST",
761        dbf_type: DbFieldType::Double,
762        runtime_typed: false,
763        read_only: true,
764        special: Special::NoMod,
765        pp: false,
766        asl: Asl::Asl1,
767        size: 0,
768        menu: None,
769        initial: None,
770        interest: 3,
771        prop: false,
772    },
773    FieldDesc {
774        name: "MLST",
775        dbf_type: DbFieldType::Double,
776        runtime_typed: false,
777        read_only: true,
778        special: Special::NoMod,
779        pp: false,
780        asl: Asl::Asl1,
781        size: 0,
782        menu: None,
783        initial: None,
784        interest: 3,
785        prop: false,
786    },
787];
788
789/// `recordtype(throttle)` — 21 CA-visible own fields from `dbd/throttleRecord.dbd` (1 `DBF_NOACCESS` internals dropped).
790pub static THROTTLE_FIELDS: &[FieldDesc] = &[
791    FieldDesc {
792        name: "VAL",
793        dbf_type: DbFieldType::Double,
794        runtime_typed: false,
795        read_only: false,
796        special: Special::None,
797        pp: true,
798        asl: Asl::Asl1,
799        size: 0,
800        menu: None,
801        initial: None,
802        interest: 0,
803        prop: false,
804    },
805    FieldDesc {
806        name: "OVAL",
807        dbf_type: DbFieldType::Double,
808        runtime_typed: false,
809        read_only: true,
810        special: Special::NoMod,
811        pp: false,
812        asl: Asl::Asl1,
813        size: 0,
814        menu: None,
815        initial: None,
816        interest: 3,
817        prop: false,
818    },
819    FieldDesc {
820        name: "SENT",
821        dbf_type: DbFieldType::Double,
822        runtime_typed: false,
823        read_only: true,
824        special: Special::NoMod,
825        pp: false,
826        asl: Asl::Asl1,
827        size: 0,
828        menu: None,
829        initial: None,
830        interest: 0,
831        prop: false,
832    },
833    FieldDesc {
834        name: "OSENT",
835        dbf_type: DbFieldType::Double,
836        runtime_typed: false,
837        read_only: true,
838        special: Special::NoMod,
839        pp: false,
840        asl: Asl::Asl1,
841        size: 0,
842        menu: None,
843        initial: None,
844        interest: 0,
845        prop: false,
846    },
847    FieldDesc {
848        name: "WAIT",
849        dbf_type: DbFieldType::Enum,
850        runtime_typed: false,
851        read_only: true,
852        special: Special::NoMod,
853        pp: false,
854        asl: Asl::Asl1,
855        size: 0,
856        menu: Some(MENU_THROTTLE_WAIT),
857        initial: Some("0"),
858        interest: 1,
859        prop: false,
860    },
861    FieldDesc {
862        name: "HOPR",
863        dbf_type: DbFieldType::Double,
864        runtime_typed: false,
865        read_only: false,
866        special: Special::None,
867        pp: false,
868        asl: Asl::Asl1,
869        size: 0,
870        menu: None,
871        initial: None,
872        interest: 1,
873        prop: false,
874    },
875    FieldDesc {
876        name: "LOPR",
877        dbf_type: DbFieldType::Double,
878        runtime_typed: false,
879        read_only: false,
880        special: Special::None,
881        pp: false,
882        asl: Asl::Asl1,
883        size: 0,
884        menu: None,
885        initial: None,
886        interest: 1,
887        prop: false,
888    },
889    FieldDesc {
890        name: "DRVLH",
891        dbf_type: DbFieldType::Double,
892        runtime_typed: false,
893        read_only: false,
894        special: Special::Mod,
895        pp: false,
896        asl: Asl::Asl1,
897        size: 0,
898        menu: None,
899        initial: Some("0.0"),
900        interest: 0,
901        prop: false,
902    },
903    FieldDesc {
904        name: "DRVLL",
905        dbf_type: DbFieldType::Double,
906        runtime_typed: false,
907        read_only: false,
908        special: Special::Mod,
909        pp: false,
910        asl: Asl::Asl1,
911        size: 0,
912        menu: None,
913        initial: Some("0.0"),
914        interest: 0,
915        prop: false,
916    },
917    FieldDesc {
918        name: "DRVLS",
919        dbf_type: DbFieldType::Enum,
920        runtime_typed: false,
921        read_only: true,
922        special: Special::NoMod,
923        pp: false,
924        asl: Asl::Asl1,
925        size: 0,
926        menu: Some(MENU_THROTTLE_DRVLS),
927        initial: Some("0"),
928        interest: 1,
929        prop: false,
930    },
931    FieldDesc {
932        name: "DRVLC",
933        dbf_type: DbFieldType::Enum,
934        runtime_typed: false,
935        read_only: false,
936        special: Special::None,
937        pp: false,
938        asl: Asl::Asl1,
939        size: 0,
940        menu: Some(MENU_THROTTLE_DRVLC),
941        initial: Some("0"),
942        interest: 0,
943        prop: false,
944    },
945    FieldDesc {
946        name: "VER",
947        dbf_type: DbFieldType::String,
948        runtime_typed: false,
949        read_only: true,
950        special: Special::NoMod,
951        pp: false,
952        asl: Asl::Asl1,
953        size: 20,
954        menu: None,
955        initial: Some(""),
956        interest: 0,
957        prop: false,
958    },
959    FieldDesc {
960        name: "STS",
961        dbf_type: DbFieldType::Enum,
962        runtime_typed: false,
963        read_only: true,
964        special: Special::NoMod,
965        pp: false,
966        asl: Asl::Asl1,
967        size: 0,
968        menu: Some(MENU_THROTTLE_STS),
969        initial: Some("0"),
970        interest: 1,
971        prop: false,
972    },
973    FieldDesc {
974        name: "PREC",
975        dbf_type: DbFieldType::Short,
976        runtime_typed: false,
977        read_only: false,
978        special: Special::None,
979        pp: false,
980        asl: Asl::Asl1,
981        size: 0,
982        menu: None,
983        initial: None,
984        interest: 1,
985        prop: false,
986    },
987    FieldDesc {
988        name: "DPREC",
989        dbf_type: DbFieldType::Short,
990        runtime_typed: false,
991        read_only: false,
992        special: Special::None,
993        pp: false,
994        asl: Asl::Asl1,
995        size: 0,
996        menu: None,
997        initial: None,
998        interest: 1,
999        prop: false,
1000    },
1001    FieldDesc {
1002        name: "DLY",
1003        dbf_type: DbFieldType::Double,
1004        runtime_typed: false,
1005        read_only: false,
1006        special: Special::Mod,
1007        pp: false,
1008        asl: Asl::Asl1,
1009        size: 0,
1010        menu: None,
1011        initial: Some("0.0"),
1012        interest: 0,
1013        prop: false,
1014    },
1015    FieldDesc {
1016        name: "OUT",
1017        dbf_type: DbFieldType::String,
1018        runtime_typed: false,
1019        read_only: false,
1020        special: Special::Mod,
1021        pp: false,
1022        asl: Asl::Asl1,
1023        size: 0,
1024        menu: None,
1025        initial: None,
1026        interest: 1,
1027        prop: false,
1028    },
1029    FieldDesc {
1030        name: "OV",
1031        dbf_type: DbFieldType::Enum,
1032        runtime_typed: false,
1033        read_only: true,
1034        special: Special::NoMod,
1035        pp: false,
1036        asl: Asl::Asl1,
1037        size: 0,
1038        menu: Some(MENU_THROTTLE_OV),
1039        initial: Some("1"),
1040        interest: 1,
1041        prop: false,
1042    },
1043    FieldDesc {
1044        name: "SINP",
1045        dbf_type: DbFieldType::String,
1046        runtime_typed: false,
1047        read_only: false,
1048        special: Special::Mod,
1049        pp: false,
1050        asl: Asl::Asl1,
1051        size: 0,
1052        menu: None,
1053        initial: None,
1054        interest: 1,
1055        prop: false,
1056    },
1057    FieldDesc {
1058        name: "SIV",
1059        dbf_type: DbFieldType::Enum,
1060        runtime_typed: false,
1061        read_only: true,
1062        special: Special::NoMod,
1063        pp: false,
1064        asl: Asl::Asl1,
1065        size: 0,
1066        menu: Some(MENU_THROTTLE_OV),
1067        initial: Some("1"),
1068        interest: 1,
1069        prop: false,
1070    },
1071    FieldDesc {
1072        name: "SYNC",
1073        dbf_type: DbFieldType::Enum,
1074        runtime_typed: false,
1075        read_only: false,
1076        special: Special::Mod,
1077        pp: false,
1078        asl: Asl::Asl1,
1079        size: 0,
1080        menu: Some(MENU_THROTTLE_SYNC),
1081        initial: Some("Idle"),
1082        interest: 0,
1083        prop: false,
1084    },
1085];
1086
1087/// `recordtype(timestamp)` — 4 CA-visible own fields from `dbd/timestampRecord.dbd` (0 `DBF_NOACCESS` internals dropped).
1088pub static TIMESTAMP_FIELDS: &[FieldDesc] = &[
1089    FieldDesc {
1090        name: "VAL",
1091        dbf_type: DbFieldType::String,
1092        runtime_typed: false,
1093        read_only: false,
1094        special: Special::None,
1095        pp: true,
1096        asl: Asl::Asl0,
1097        size: 40,
1098        menu: None,
1099        initial: None,
1100        interest: 0,
1101        prop: false,
1102    },
1103    FieldDesc {
1104        name: "OVAL",
1105        dbf_type: DbFieldType::String,
1106        runtime_typed: false,
1107        read_only: true,
1108        special: Special::NoMod,
1109        pp: false,
1110        asl: Asl::Asl1,
1111        size: 40,
1112        menu: None,
1113        initial: None,
1114        interest: 3,
1115        prop: false,
1116    },
1117    FieldDesc {
1118        name: "RVAL",
1119        dbf_type: DbFieldType::ULong,
1120        runtime_typed: false,
1121        read_only: false,
1122        special: Special::None,
1123        pp: true,
1124        asl: Asl::Asl1,
1125        size: 0,
1126        menu: None,
1127        initial: None,
1128        interest: 0,
1129        prop: false,
1130    },
1131    FieldDesc {
1132        name: "TST",
1133        dbf_type: DbFieldType::Enum,
1134        runtime_typed: false,
1135        read_only: false,
1136        special: Special::None,
1137        pp: false,
1138        asl: Asl::Asl1,
1139        size: 0,
1140        menu: Some(MENU_TIMESTAMP_TST),
1141        initial: None,
1142        interest: 2,
1143        prop: false,
1144    },
1145];
1146
1147/// The record-own field table for a record type name, or `None` for a type
1148/// no vendored `.dbd` declares.
1149pub fn record_fields(record_type: &str) -> Option<&'static [FieldDesc]> {
1150    Some(match record_type {
1151        "epid" => EPID_FIELDS,
1152        "throttle" => THROTTLE_FIELDS,
1153        "timestamp" => TIMESTAMP_FIELDS,
1154        _ => return None,
1155    })
1156}
1157
1158/// Every record type a vendored `.dbd` declares, in `.dbd` name order.
1159pub static RECORD_TYPES: &[&str] = &["epid", "throttle", "timestamp"];