Go to the documentation of this file.00001 #ifndef DEVCADIMINTERFACESOFT_H_
00002 #define DEVCADIMINTERFACESOFT_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 void error_routine (int severity, int error_code, char* message);
00013 void client_exit_routine (int *tag);
00014 void exit_routine (int *code);
00015 bool makeServerName(struct dbCommon* pRecord);
00016 int errorDeactivateRecord(struct dbCommon *pRecord, int line, char* fcn, char* format, ... );
00017
00018 char* setRecordVariablesString(char **element, char argument[], char discription[], char key);
00019
00020 typedef struct recordVariables
00021 {
00022 void *dimData;
00023 unsigned int dataSize;
00024 void *recordAddress;
00025 unsigned int index;
00026 int dimCommandServiceID;
00027 int dimServiceServiceID;
00028 char dimTierType;
00029 int calledFromCallback;
00030 char *dimCommandName;
00031 char *dimServiceName;
00032 char *dimCommandFormat;
00033 char *dimServiceFormat;
00034 char *dimServiceDataTypes;
00035 char *dimCommandDataTypes;
00036 unsigned int dimNumberOfServiceFormats;
00037 unsigned int dimNumberOfCommandFormats;
00038 unsigned int *dimNumberOfServiceDataTypesPerFormat;
00039 unsigned int *dimNumberOfCommandDataTypesPerFormat;
00040 char *dimDnsAddress;
00041 int dimDnsPort;
00042 char *recordType;
00043 int recordTypeIndex;
00044 char *dimServicesNamePrefix;
00045 bool dimServiceExists;
00046 bool dimCommandExists;
00047 char* dimGetDefaultSuffix;
00048 char* dimPutDefaultSuffix;
00049 int dimServiceScanType;
00050 int dimServiceScanInterval;
00051 bool clientServiceCallbackOk;
00052 bool serverCommandCallbackOk;
00053 unsigned int dimDataTypeFormatIndexOfInterest;
00054 bool stringTransportCommand;
00055 bool stringTransportService;
00056 bool stringTransportBoth;
00057 char *dimStringTransportCommandFormat;
00058 char *dimStringTransportServiceFormat;
00059 char *dimStringTransportServiceDataTypes;
00060 char *dimStringTransportCommandDataTypes;
00061 unsigned int dimStringTransportNumberOfServiceFormats;
00062 unsigned int dimStringTransportNumberOfCommandFormats;
00063 unsigned int *dimStringTransportNumberOfServiceDataTypesPerFormat;
00064 unsigned int *dimStringTransportNumberOfCommandDataTypesPerFormat;
00065
00066 bool dimCreateBoth;
00067 bool complexDataType;
00068 bool isString;
00069 #ifdef DABC_SUPPORT
00070 bool dabcRecord;
00071 unsigned int dabcRecordTypeIndex;
00072 #endif
00073
00074 } recordVariables;
00075
00076 void dumpStruct ( struct recordVariables *rec, FILE *stream );
00077 recordVariables* createAndInitVariables( struct dbCommon *pRecord );
00078 void clearStructRecordVariables( struct recordVariables *thisRecord );
00079 epicsEnum16 determineRecordType(struct dbCommon* pRecord);
00080 bool checkValidType(char *type);
00081 bool disassembleFormat(char formatString[],
00082 unsigned int* dimNumberOfCommandFormats,
00083 char** dimCommandDataTypes,
00084 unsigned int** dimNumberOfCommandDataTypesPerFormat );
00085 bool supplementServersNamesAndFormats(struct recordVariables *thisRecord);
00086 bool supplementServersFormat(struct recordVariables *thisRecord);
00087 bool supplementStringTransportServersFormat(struct recordVariables *thisRecord);
00088 bool recreateServersSupplementNames(char** element, char name[], char suffix[], char title[]);
00089 bool setCombinedDnsAddressAndPort(struct recordVariables* thisRecord, char argumentArray[]);
00090 bool setCombinedClientServiceScanTypeAndInterval(struct recordVariables* thisRecord, char argument[]);
00091 bool checkValidUnsignedInt(char arg[]);
00092 bool setDnsAddress(struct recordVariables *thisRecord);
00093 bool setDnsPort(struct recordVariables *thisRecord);
00094 long copyEpicsToDimData(struct recordVariables *thisRecord);
00095 long copyDimToEpicsData(struct recordVariables *thisRecord);
00096 unsigned int calculateDataSize(unsigned int numberOfFormats,
00097 char dataTypes[],
00098 unsigned int numberOfDataTypesPerFormat[]);
00099 unsigned int determineDataSize(struct recordVariables *thisRecord);
00100 bool checkConsistencyFormatTypes(struct recordVariables *thisRecord);
00101 bool checkConsistencyRecordSpecific(struct recordVariables *thisRecord);
00102 bool addServersPrefix(struct recordVariables *thisRecord);
00103 bool setServersDefaultDataFormat(struct recordVariables *thisRecord);
00104 bool getServiceFormat(char *serviceFormat, struct recordVariables *thisRecord);
00105 bool getCommandFormat(char *serviceFormat, struct recordVariables *thisRecord);
00106 bool retrieveAndSetClientServicesFormat(struct recordVariables *thisRecord);
00107 int clearString( char string[], uint size);
00108 epicsUInt16 getArrayIndexOfMatchingStringElement( const char* string, char* array[], epicsUInt16 arraySize );
00109
00110 epicsBoolean DIMextensionComplexStructureStringFormatChecks(char format[], int dimNumberOfFormats, char dimDataTypes[], char key[], char argument[], unsigned int dataTypeFormatIndexOfInterest);
00111 epicsBoolean parseDIMextensionComplexStructureString(struct recordVariables *thisRecord, char key[], char argument[]);
00112 epicsBoolean getInputOutputLink(struct dbCommon* pRecord, DBLINK *inputOutputLink);
00113 epicsBoolean setDimTierType(struct recordVariables *thisRecord, const char dimTierType);
00114
00115 void processRecordByCallback(struct recordVariables *calledBackRecord);
00116
00117 extern const char *DIMInterfaceSupportedRecordNames[];
00118 extern const char DIMInterfaceSupportedDIMDataTypesNames [];
00119 extern char *DIMextensionsComplexStructureNames [];
00120
00121 #endif