@@ -28,8 +28,10 @@ type server struct {
2828 devshm string
2929 cfgdir string
3030
31+ newDevice func (devmem , odir , devshm , cfgdir string , opts ... Option ) (device , error )
32+
3133 opts []Option
32- dev * Device
34+ dev device
3335}
3436
3537func Serve (addr , odir , devmem , devshm , cfgdir string ) error {
@@ -56,6 +58,10 @@ func newServer(addr, odir, devmem, devshm, cfgdir string, opts ...Option) (*serv
5658 devshm : devshm ,
5759 cfgdir : cfgdir ,
5860
61+ newDevice : func (devmem , odir , devshm , cfgdir string , opts ... Option ) (device , error ) {
62+ return newCDevice (devmem , odir , devshm , cfgdir , opts ... )
63+ },
64+
5965 opts : opts ,
6066 }
6167 return srv , nil
@@ -84,7 +90,7 @@ func (srv *server) handle(conn net.Conn) error {
8490 defer srv .msg .Printf ("serving %v... [done]" , conn .RemoteAddr ())
8591
8692 srv .dev = nil
87- dev , err := newDevice (
93+ dev , err := srv . newDevice (
8894 srv .devmem , srv .odir , srv .devshm , srv .cfgdir ,
8995 srv .opts ... ,
9096 )
@@ -94,9 +100,6 @@ func (srv *server) handle(conn net.Conn) error {
94100 defer dev .Close ()
95101 srv .dev = dev
96102
97- // FIXME(sbinet): use DIM hooks to configure those
98- dev .id = 1
99- dev .cfg .hr .rshaper = 3
100103 dim , _ , err := net .SplitHostPort (conn .RemoteAddr ().String ())
101104 if err != nil {
102105 return fmt .Errorf ("could not extract dim-host ip from %q: %+v" , conn .RemoteAddr ().String (), err )
@@ -123,19 +126,11 @@ loop:
123126 }
124127 continue
125128 }
126- dev .msg .Printf ("received request: name=%q" , req .Name )
129+ srv .msg .Printf ("received request: name=%q" , req .Name )
127130
128131 switch strings .ToLower (req .Name ) {
129132 case "scan" :
130- var args []struct {
131- RFM int `json:"rfm"`
132- EDA int `json:"eda"`
133- Slot int `json:"slot"`
134- DAQ struct {
135- RShaper int `json:"rshaper"`
136- TriggerMode int `json:"trigger_type"`
137- } `json:"daq_state"`
138- }
133+ var args []BootConfig
139134 err = json .Unmarshal (* req .Args , & args )
140135 if err != nil {
141136 srv .msg .Printf ("could not decode %q payload: %+v" ,
@@ -144,21 +139,14 @@ loop:
144139 srv .reply (conn , err )
145140 continue
146141 }
147- dev .rfms = nil
148- dev .difs = make (map [int ]uint8 , nRFM )
149- dev .cfg .daq .rfm = 0
150- for _ , arg := range args {
151- dev .msg .Printf (
152- "scan: rfm=%d, eda-id=%d, slot-id=%d" ,
153- arg .RFM , arg .EDA , arg .Slot ,
154- )
155- dev .rfms = append (dev .rfms , arg .Slot )
156- dev .difs [arg .Slot ] = uint8 (arg .RFM )
157- dev .id = uint32 (arg .EDA )
158- dev .cfg .daq .rfm |= (1 << arg .Slot )
159- dev .cfg .hr .rshaper = uint32 (arg .DAQ .RShaper )
142+
143+ err = dev .Boot (args )
144+ if err != nil {
145+ srv .msg .Printf ("could not bootstrap EDA: %+v" , err )
146+ srv .reply (conn , err )
147+ continue
160148 }
161- err = nil
149+
162150 srv .reply (conn , err )
163151 // FIXME(sbinet): compare expected scan-result with
164152 // EDA introspection functions.
@@ -170,7 +158,7 @@ loop:
170158 case "configure" :
171159 var args []struct {
172160 DIF uint8 `json:"dif"`
173- ASICS []conddb.ASIC `json:"asics"`
161+ ASICs []conddb.ASIC `json:"asics"`
174162 }
175163 err = json .Unmarshal (* req .Args , & args )
176164 if err != nil {
@@ -182,17 +170,11 @@ loop:
182170 }
183171
184172 for _ , arg := range args {
185- // FIXME(sbinet): handle hysteresis, make sure addrs are unique.
186- dev .cfg .daq .addrs = append (dev .cfg .daq .addrs , fmt .Sprintf (
187- "%s:%d" , dim , 10000 + int (arg .DIF ),
188- ))
189- srv .msg .Printf ("addrs: %q" , dev .cfg .daq .addrs )
190-
191- dev .setDBConfig (arg .DIF , arg .ASICS )
192-
193- err = dev .configASICs (arg .DIF )
173+ addr := fmt .Sprintf ("%s:%d" , dim , 10000 + int (arg .DIF ))
174+ srv .msg .Printf ("configuring DIF=%d with addr=%q" , arg .DIF , addr )
175+ err := dev .ConfigureDIF (addr , arg .DIF , arg .ASICs )
194176 if err != nil {
195- srv .msg .Printf ("could not configure EDA device: %+v" , err )
177+ srv .msg .Printf ("could not configure EDA device(dif=%d) : %+v" , arg . DIF , err )
196178 srv .reply (conn , err )
197179 continue
198180 }
0 commit comments