00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00025 #include "Component.h"
00026 #include <rcuxx/Altro.h>
00027 #include "SingleValue.h"
00028 #include <rcudb/Server.h>
00029 #include <rcudb/Row.h>
00030 #include <rcudb/Sql.h>
00031
00032
00033
00034 void
00035 RcuConf::Component::Create(RcuDb::Server& s, const std::string& name,
00036 Parameter::Where dest, bool isBlob,
00037 unsigned int mask) throw(bool)
00038 {
00039 Parameter p(name, dest, isBlob, mask);
00040 if (p.Insert(s)) return;
00041 throw false;
00042 }
00043
00044
00045 unsigned int
00046 RcuConf::BusComponent::DoWrite(const Parameter& p,
00047 const SingleValue& v,
00048 int board, unsigned int chip,
00049 unsigned int channel)
00050 {
00051
00052
00053 if (p.IsBlob()) return kInvalidValue;
00054
00055
00056 Rcuxx::AltroRegister* reg = Name2Register(p.Name());
00057
00058 if (reg) {
00059 if (board < 0) {
00060 if (!reg->IsBroadcastable()) return kInvalidAddress;
00061 reg->SetBroadcast();
00062 }
00063 else
00064 reg->SetAddress(board, chip, channel);
00065
00066 reg->Decode(v.Values());
00067 return - reg->Commit();
00068 }
00069
00070
00071 Rcuxx::AltroCommand* cmd = Name2Command(p.Name());
00072 if (cmd) {
00073 if (board < 0) cmd->SetBroadcast();
00074 else cmd->SetAddress(board, chip, channel);
00075
00076 return - cmd->Commit();
00077 }
00078 return kUnknownParameter;
00079 }
00080
00081
00082 unsigned int
00083 RcuConf::BusComponent::DoRead(const Parameter& p,
00084 SingleValue& v,
00085 int board, unsigned int chip,
00086 unsigned int channel)
00087 {
00088
00089 if (p.IsBlob()) return kInvalidValue;
00090
00091
00092 Rcuxx::AltroRegister* reg = Name2Register(p.Name());
00093
00094 if (reg) {
00095 if (board < 0 && !reg->IsBroadcastable()) return kInvalidAddress;
00096 unsigned ret = reg->Update();
00097 v.Set(reg->Encode());
00098 return - ret;
00099 }
00100
00101
00102 Rcuxx::AltroCommand* cmd = Name2Command(p.Name());
00103 if (cmd) {
00104
00105 return kSuccess;
00106 }
00107 return kUnknownParameter;
00108 }
00109
00110
00111
00112
00113