// read the attribute from one of the file's text line void ReadAttribute(tPvHandle aCamera,char* aLine) { char* lValue = strchr(aLine,'='); char* lLabel; if(lValue) { lValue[0] = '\0'; lValue++; lLabel = strtrim(aLine); lValue = strtrim(lValue); if(strlen(lLabel) && strlen(lValue)) { tPvAttributeInfo lInfo; if(!PvAttrInfo(aCamera,lLabel,&lInfo)) { if(lInfo.Datatype != ePvDatatypeCommand && (lInfo.Flags & ePvFlagWrite)) { if(!String2Value(aCamera,lLabel,lInfo.Datatype,lValue)) fprintf(stderr,"attribute %s couldn't be loaded\n",lLabel); } } } } }
// write a given attribute in a text file void WriteAttribute(tPvHandle aHandle,const char* aLabel,FILE* aFile) { tPvAttributeInfo lInfo; if(!PvAttrInfo(aHandle,aLabel,&lInfo)) { if(lInfo.Datatype != ePvDatatypeCommand) { char lValue[128]; if(Value2String(aHandle,aLabel,lInfo.Datatype,lValue,128)) fprintf(aFile,"%s = %s\n",aLabel,lValue); } } }
// write a given attribute in a text file void WriteAttribute(tPvHandle aCamera,const char* aLabel,FILE* aFile) { tPvAttributeInfo lInfo; if(!PvAttrInfo(aCamera,aLabel,&lInfo)) { if(lInfo.Datatype != ePvDatatypeCommand && (lInfo.Flags & ePvFlagWrite)) { char lValue[128]; if(Value2String(aCamera,aLabel,lInfo.Datatype,lValue,128)) fprintf(aFile,"%s = %s\n",aLabel,lValue); else fprintf(stderr,"attribute %s couldn't be saved\n",aLabel); } } }
// // idlPvAttrInfo // // Get data type and access mode information for an attribute // // command line arguments // argv[0]: IN/FLAG debug // argv[1]: IN camera index // argv[2]: IN attribute name // argv[3]: OUT data type // argv[4]: OUT flags int idlPvAttrInfo (int argc, char *argv[]) { unsigned long n; IDL_STRING * name; tPvAttributeInfo info; unsigned long err; debug = *(IDL_INT *) argv[0]; n = *(unsigned long *) argv[1]; name = (IDL_STRING *) argv[2]; CHECKINDEX(n); err = PvAttrInfo(camera[n], IDL_STRING_STR(name), &info); *(IDL_ULONG *) argv[3] = (IDL_ULONG) info.Datatype; *(IDL_ULONG *) argv[4] = (IDL_ULONG) info.Flags; return idlPvErrCode(err); }
// display info on a given attribute of the camera void QueryAttribute(const char* aLabel) { tPvAttributeInfo lInfo; if(!PvAttrInfo(GCamera.Handle,aLabel,&lInfo)) { char lFlags[5]; memset(lFlags,' ',sizeof(char) * 4); if(lInfo.Flags & ePvFlagRead) lFlags[0] = 'r'; if(lInfo.Flags & ePvFlagWrite) lFlags[1] = 'w'; if(lInfo.Flags & ePvFlagVolatile) lFlags[2] = 'v'; if(lInfo.Flags & ePvFlagConst) lFlags[3] = 'c'; lFlags[4] = '\0'; printf("%30s (%30s) [%7s][%s]",aLabel,lInfo.Category,DatatypeToString(lInfo.Datatype),lFlags); switch(lInfo.Datatype) { case ePvDatatypeString: { char lValue[128]; // we assume here that any string value will be less than 128 characters // long, wich we may not be the case if(!PvAttrStringGet(GCamera.Handle,aLabel,lValue,128,NULL)) printf(" = %s\n",lValue); else printf(" = ERROR!\n"); break; } case ePvDatatypeEnum: { char lValue[128]; // we assume here that any string value will be less than 128 characters // long, wich we may not be the case if(!PvAttrEnumGet(GCamera.Handle,aLabel,lValue,128,NULL)) printf(" = %s\n",lValue); else printf(" = ERROR!\n"); break; } case ePvDatatypeUint32: { tPvUint32 lValue; if(!PvAttrUint32Get(GCamera.Handle,aLabel,&lValue)) printf(" = %lu\n",lValue); else printf(" = ERROR!\n"); break; } case ePvDatatypeFloat32: { tPvFloat32 lValue; if(!PvAttrFloat32Get(GCamera.Handle,aLabel,&lValue)) printf(" = %f\n",lValue); else printf(" = ERROR!\n"); break; } default: printf("\n"); } } }
// display info on a given attribute of the camera void QueryAttribute(const char* aLabel) { tPvAttributeInfo lInfo; if(PvAttrInfo(GCamera.Handle,aLabel,&lInfo) == ePvErrSuccess) { char lFlags[5]; memset(lFlags,' ',sizeof(char) * 4); if(lInfo.Flags & ePvFlagRead) lFlags[0] = 'r'; if(lInfo.Flags & ePvFlagWrite) lFlags[1] = 'w'; if(lInfo.Flags & ePvFlagVolatile) lFlags[2] = 'v'; if(lInfo.Flags & ePvFlagConst) lFlags[3] = 'c'; lFlags[4] = '\0'; // printf("%30s (%30s) [%7s]{%s}",aLabel,lInfo.Category,DatatypeToString(lInfo.Datatype),lFlags); // printf("%s/%s = %s [%s]{%s}\n",lInfo.Category,aLabel,lValue,DatatypeToString(lInfo.Datatype),lFlags); switch(lInfo.Datatype) { case ePvDatatypeString: { char lValue[128]; // we assume here that any string value will be less than 128 characters // long, which we may not be the case if(PvAttrStringGet(GCamera.Handle,aLabel,lValue,128,NULL) == ePvErrSuccess) printf("%s/%s = %s [%s,%s]\n",lInfo.Category,aLabel,lValue,DatatypeToString(lInfo.Datatype),lFlags); else printf("ERROR!\n"); break; } case ePvDatatypeEnum: { char lValue[128]; // we assume here that any string value will be less than 128 characters // long, which we may not be the case if(PvAttrEnumGet(GCamera.Handle,aLabel,lValue,128,NULL) == ePvErrSuccess) printf("%s/%s = %s [%s,%s]\n",lInfo.Category,aLabel,lValue,DatatypeToString(lInfo.Datatype),lFlags); else printf("ERROR!\n"); break; } case ePvDatatypeUint32: { tPvUint32 lValue; if(PvAttrUint32Get(GCamera.Handle,aLabel,&lValue) == ePvErrSuccess) printf("%s/%s = %lu [%s,%s]\n",lInfo.Category,aLabel,lValue,DatatypeToString(lInfo.Datatype),lFlags); else printf("ERROR!\n"); break; } case ePvDatatypeInt64: { tPvInt64 lValue; if(PvAttrInt64Get(GCamera.Handle,aLabel,&lValue) == ePvErrSuccess) printf("%s/%s = %lld [%s,%s]\n",lInfo.Category,aLabel,lValue,DatatypeToString(lInfo.Datatype),lFlags); else printf("ERROR!\n"); break; } case ePvDatatypeFloat32: { tPvFloat32 lValue; if(PvAttrFloat32Get(GCamera.Handle,aLabel,&lValue) == ePvErrSuccess) printf("%s/%s = %f [%s,%s]\n",lInfo.Category,aLabel,lValue,DatatypeToString(lInfo.Datatype),lFlags); else printf("ERROR!\n"); break; } case ePvDatatypeBoolean: { tPvBoolean lValue; if(PvAttrBooleanGet(GCamera.Handle,aLabel,&lValue) == ePvErrSuccess) printf("%s/%s = %s [%s,%s]\n",lInfo.Category,aLabel,lValue ? "true" : "false",DatatypeToString(lInfo.Datatype),lFlags); else printf("ERROR!\n"); break; } default: //command printf("%s/%s [%s,%s]\n",lInfo.Category,aLabel,DatatypeToString(lInfo.Datatype),lFlags); } } }