fd4d52365daf87baeb64a38b4727c7b62fc5c45a
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

1) /* Blinker
2)    Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #ifndef SENDER_H
7) #define SENDER_H
8) 
9) #include <list>
10) #include <string>
11) 
12) #include <BlinkenLib/BlinkenFrame.h>
13) 
14) #include "CallMgr.h"
15) #include "Directory.h"
16) #include "File.h"
17) #include "Module.h"
18) #include "SettingFile.h"
19) #include "StreamMgr.h"
20) #include "StreamRecv.h"
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

21) #include "TimeCallee.h"
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

22) 
23) namespace Blinker {
24) 
25) /// stream sender
26) template<typename ADDR, typename SOCK>
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

27) class Sender: public Module, public StreamRecv, public TimeCallee
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

28) {
29) protected:
30)   /// static destination
31)   struct Dest {
32)     std::string m_name; ///< name of static destination
33)     SettingFile m_file; ///< setting file object
34)     ADDR        m_addr; ///< parsed address
35)     Dest(const std::string &name, const File &file); ///< constructor
36)     bool parse();       ///< parse address from current file
37)   };
38) 
39)   /// static destinations
40)   typedef std::list<Dest> Dests;
41) 
42) public:
43)   /**
44)    * @brief constructor
45)    * @param[in] callMgr callback manager
46)    * @param[in] streamMgr stream manager
47)    * @param[in] dirBase base directory
48)    */
49)   Sender(CallMgr &callMgr, StreamMgr &streamMgr, const Directory &dirBase);
50) 
51)   /// virtual destructor
52)   virtual ~Sender();
53) 
54) private:
55)   /// copy constructor disabled
56)   Sender(const Sender &that);
57) 
58)   /// assignment operator disabled
59)   const Sender & operator=(const Sender &that);
60) 
61) public:
62)   /// check for update of configuration
63)   virtual void updateConfig();
64) 
65)   /**
66)    * @brief set current frame
67)    * @param[in] pFrame current frame
68)    */
69)   virtual void setFrame(stBlinkenFrame *pFrame);
70) 
71)   /// set current frame to none
72)   virtual void setNoFrame();
73) 
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

74)   /// callback when requsted time reached
75)   virtual void timeCall();
76) 
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

77) protected:
78)   /// get input stream and attach to it
79)   void getInStream();
80) 
81)   /// detach from input stream and release it
82)   void releaseInStream();
83) 
84)   /// create socket and bind it
85)   void createSock();
86) 
87)   /// destroy socket
88)   void destroySock();
89) 
90)   /**
91)    * @brief light update of static destinations,
92)    *        i.e. stat all files in current static destination directory
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

93)    * @param[in] dests static destinations for protocol
94)    * @param[in] proto Blinken protocol identifier
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

95)    */
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

96)   void updateDestsLight(Dests &dests, etBlinkenProto proto);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

97) 
98)   /**
99)    * @brief full update of static destinations,
100)    *        i.e. scan files in playlist directory
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

101)    * @param[in] dirDests static destinations directory for protocol
102)    * @param[in] dests static destinations for protocol
103)    * @param[in] proto Blinken protocol identifier
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

104)    */
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

105)   void updateDestsFull(Directory &dirDests, Dests &dests,
106)                        etBlinkenProto proto);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

107) 
108)   /**
109)    * @brief send current frame to address
110)    * @param[in] addr address to send to
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

111)    * @param[in] proto Blinken protocol identifier
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

112)    */
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

113)   void sendCurFrame(const ADDR &addr, etBlinkenProto proto);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

114) 
115)   /**
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

116)    * @brief send "no frame" to address
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

117)    * @param[in] addr address to send to
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

118)    * @param[in] proto Blinken protocol identifier
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

119)    */
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

120)   void sendNoFrame(const ADDR &addr, etBlinkenProto proto);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

121) 
122)   /**
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

123)    * @brief send frame to address
124)    * @param[in] data protcol data of frame
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

125)    * @param[in] addr address to send to
126)    */
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

127)   void sendFrame(const std::string &data, const ADDR &addr);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

128) 
129)   /**
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

130)    * @brief convert frame to protocol data
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

131)    * @param[in] pFrame frame
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

132)    * @param[in] proto Blinken protocol identifier
133)    * @param[out] data protcol data
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

134)    */
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

135)   void frame2data(stBlinkenFrame *pFrame, etBlinkenProto proto,
136)                   std::string &data);
137) 
138)   /**
139)    * @brief get "no frame" protocol data
140)    * @param[in] proto Blinken protocol identifier
141)    * @param[out] data protcol data
142)    */
143)   void noFrame2data(etBlinkenProto proto, std::string &data);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

144) 
145) protected:
146)   SettingFile m_fileInStream; ///< input stream name file
147)   SettingFile m_fileBind;     ///< bind address file
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

148)   Directory   m_dirDestsMcuf; ///< static MCUF destinations directory
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

149)   std::string m_nameInStream; ///< name of input stream
150)   Stream      *m_pInStream;   ///< input stream
151)   SOCK        *m_pSock;       ///< socket to use for sending streams
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

152)   Dests        m_destsMcuf;   ///< current static MCUF destinations
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

153) }; // class Sender
154) 
155) /* ##########
156)    # Sender #
157)    ########## */
158) 
159) /**
160)  * @brief constructor
161)  * @param[in] callMgr callback manager
162)  * @param[in] streamMgr stream manager
163)  * @param[in] dirBase base directory
164)  */
165) template<typename ADDR, typename SOCK>
166) Sender<ADDR, SOCK>::Sender(CallMgr &callMgr, StreamMgr &streamMgr,
167)                            const Directory &dirBase):
168)   Module(callMgr, streamMgr, dirBase),
169)   m_fileInStream(dirBase.getFile("instream")),
170)   m_fileBind(dirBase.getFile("bind")),
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

171)   m_dirDestsMcuf(dirBase.getSubdir("mcuf")),
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

172)   m_pInStream(NULL),
173)   m_pSock(NULL)
174) {
175)   // get input stream and attach to it
176)   getInStream();
177)   // create and bind socket
178)   createSock();
179) 
180)   // load static destinations
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

181)   updateDestsFull(m_dirDestsMcuf, m_destsMcuf, BlinkenProtoMcuf);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

182) }
183) 
184) /// virtual destructor
185) template<typename ADDR, typename SOCK>
186) Sender<ADDR, SOCK>::~Sender()
187) {
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

188)   // send no frame to all destinations
189)   setNoFrame();
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

190) 
191)   // destroy socket
192)   destroySock();
193)   // detach from input stream and release it
194)   releaseInStream();
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

195)   // cancel time callback
196)   m_callMgr.cancelTimeCall(this);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

197) }
198) 
199) /// check for update of configuration
200) template<typename ADDR, typename SOCK>
201) void Sender<ADDR, SOCK>::updateConfig()
202) {
203)   // input stream name file was modified -> re-get input stream
204)   if (m_fileInStream.checkModified()) {
205)     releaseInStream();
206)     getInStream();
207)   }
208) 
209)   // bind address file was modified -> re-create socket
210)   if (m_fileBind.checkModified()) {
211)     destroySock();
212)     createSock();
213)   }
214) 
215)   // static destinations update
216)   // (directory modified -> full, otherwise -> light)
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

217)   if (m_dirDestsMcuf.checkModified())
218)     updateDestsFull(m_dirDestsMcuf, m_destsMcuf, BlinkenProtoMcuf);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

219)   else
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

220)     updateDestsLight(m_destsMcuf, BlinkenProtoMcuf);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

221) }
222) 
223) /**
224)  * @brief set current frame
225)  * @param[in] pFrame current frame
226)  */
227) template<typename ADDR, typename SOCK>
228) void Sender<ADDR, SOCK>::setFrame(stBlinkenFrame *pFrame)
229) {
230)   std::string mcuf;
231) 
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

232)   // convert frame to protocol data
233)   if (!m_destsMcuf.empty())
234)     frame2data(pFrame, BlinkenProtoMcuf, mcuf);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

235) 
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

236)   // send frame to all static MCUF destinations
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

237)   typename Dests::const_iterator itDest;
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

238)   for (itDest = m_destsMcuf.begin(); itDest != m_destsMcuf.end(); ++itDest)
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

239)     sendFrame(mcuf, itDest->m_addr);
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

240) 
241)   // request time callback in one second
242)   m_callMgr.requestTimeCall(this, Time::now() + Time(1));
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

243) }
244) 
245) /// set current frame to none
246) template<typename ADDR, typename SOCK>
247) void Sender<ADDR, SOCK>::setNoFrame()
248) {
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

249)   std::string mcuf;
250) 
251)   // get "no frame" protocol data
252)   if (!m_destsMcuf.empty())
253)     noFrame2data(BlinkenProtoMcuf, mcuf);
254) 
255)   // send "no frame" to all static MCUF destinations
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

256)   typename Dests::const_iterator itDest;
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

257)   for (itDest = m_destsMcuf.begin(); itDest != m_destsMcuf.end(); ++itDest)
258)     sendFrame(mcuf, itDest->m_addr);
259) 
260)   // request time callback in one second
261)   m_callMgr.requestTimeCall(this, Time::now() + Time(1));
262) }
263) 
264) /// callback when requsted time reached
265) template<typename ADDR, typename SOCK>
266) void Sender<ADDR, SOCK>::timeCall()
267) {
268)   stBlinkenFrame *pFrame;
269)   std::string data;
270) 
271)   // get current frame from stream
272)   if (m_pInStream && m_pInStream->getCurFrame(pFrame))
273)     // repeat frame - behave exactly like this frame had been set
274)     setFrame(pFrame);
275) 
276)   // no stream of no current frame
277)   else
278)     // repeat "no frame" - behave exactly like "no frame" had been set
279)     setNoFrame();
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

280) }
281) 
282) /// get input stream and attach to it
283) template<typename ADDR, typename SOCK>
284) void Sender<ADDR, SOCK>::getInStream()
285) {
286)   // get input stream
287)   m_fileInStream.getStr(m_nameInStream);
288)   m_pInStream = &m_streamMgr.refStream(m_nameInStream);
289) 
290)   // attach to input stream
291)   if (m_pInStream)
292)     m_pInStream->attach(this);
293) }
294) 
295) /// detach from input stream and release it
296) template<typename ADDR, typename SOCK>
297) void Sender<ADDR, SOCK>::releaseInStream()
298) {
299)   // detach from input stream
300)   if (m_pInStream)
301)     m_pInStream->detach(this);
302) 
303)   // unreference stream
304)   m_pInStream = NULL;
305)   m_streamMgr.unrefStream(m_nameInStream);
306) }
307) 
308) /// create socket and bind it
309) template<typename ADDR, typename SOCK>
310) void Sender<ADDR, SOCK>::createSock()
311) {
312)   std::string strAddr;
313)   ADDR addr;
314) 
315)   // create socket
316)   if (!m_pSock) {
317)     m_pSock = new SOCK();
318)     if (!m_pSock)
319)       return;
320)   }
321) 
322)   // get bind address from bind address setting file
323)   if (!m_fileBind.getStr(strAddr) || !addr.fromStr(strAddr)) {
324)     delete m_pSock;
325)     m_pSock = NULL;
326)     return;
327)   }
328) 
329)   // bind socket
330)   if (!m_pSock->bind(addr)) {
331)     delete m_pSock;
332)     m_pSock = NULL;
333)     return;
334)   }
335) }
336) 
337) /// destroy socket
338) template<typename ADDR, typename SOCK>
339) void Sender<ADDR, SOCK>::destroySock()
340) {
341)   // destroy socket
342)   if (m_pSock) {
343)     delete m_pSock;
344)     m_pSock = NULL;
345)   }
346) }
347) 
348) /**
349)  * @brief light update of static destinations,
350)  *        i.e. stat all files in current static destination directory
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

351)  * @param[in] dests static destinations for one protocol
352)  * @param[in] proto Blinken protocol identifier
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

353)  */
354) template<typename ADDR, typename SOCK>
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

355) void Sender<ADDR, SOCK>::updateDestsLight(Dests &dests, etBlinkenProto proto)
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

356) {
357)   // walk through all files in static dest dir and check for modification
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

358)   typename Dests::iterator itDest = dests.begin();
359)   while (itDest != dests.end()) {
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

360) 
361)     // address changed
362)     if (itDest->m_file.checkModified()) {
363)       // send "no frame" to old address
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

364)       sendNoFrame(itDest->m_addr, proto);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

365)       // re-load address
366)       if (!itDest->parse()) {
367)         // parsing address failed -> remove destination
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

368)         itDest = dests.erase(itDest);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

369)         // do not advance to next destination
370)         continue;
371)       }
372)       // send current frame to new address
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

373)       sendCurFrame(itDest->m_addr, proto);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

374)     }
375) 
376)     // advance to next destination
377)     ++itDest;
378) 
379)   } // while itDest
380) }
381) 
382) /**
383)  * @brief full update of static destinations,
384)  *        i.e. scan files in playlist directory
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

385)  * @param[in] dirDests static destinations directory for protocol
386)  * @param[in] dests static destinations for protocol
387)  * @param[in] proto Blinken protocol identifier
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

388)  */
389) template<typename ADDR, typename SOCK>
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

390) void Sender<ADDR, SOCK>::updateDestsFull(Directory &dirDests, Dests &dests,
391)                                          etBlinkenProto proto)
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

392) {
393)   // get list of files in static destinations directory
394)   typedef std::list<std::string> Filelist;
395)   Filelist curFiles;
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

396)   dirDests.getEntries(Directory::TypeFile, curFiles);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

397) 
398)   // walk through current static destinations and file list simultaneously
399)   Filelist::const_iterator itFile = curFiles.begin();
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

400)   typename Dests::iterator itDest = dests.begin();
401)   while (itFile != curFiles.end() || itDest != dests.end()) {
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

402) 
403)     // new static destination inserted
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

404)     if (itDest == dests.end() ||
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

405)         (itFile != curFiles.end() && *itFile < itDest->m_name)) {
406)       // parse new address
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

407)       Dest dest(*itFile, dirDests.getFile(*itFile));
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

408)       if (dest.parse()) {
409)         // insert new static destination
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

410)         dests.insert(itDest, dest);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

411)         // send current frame to new static destination
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

412)         sendCurFrame(itDest->m_addr, proto);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

413)       }
414)       // advance to next file
415)       ++itFile;
416)     }
417) 
418)     // static destination removed
419)     // static destination changed (=> remove and re-insert in next iteration)
420)     else if (itFile == curFiles.end() || *itFile > itDest->m_name ||
421)              itDest->m_file.checkModified()) {
422)       // send "no frame" to old static destination
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

423)       sendNoFrame(itDest->m_addr, proto);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

424)       // remove static destination
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

425)       itDest = dests.erase(itDest);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

426)       // do not advance to next file
427)     }
428) 
429)     // static destination stayed in playlist and did not change
430)     else {
431)       // advance to next file and next static destination
432)       ++itFile;
433)       ++itDest;
434)     }
435) 
436)   } // while itFile itDest
437) }
438) 
439) /**
440)  * @brief send current frame to address
441)  * @param[in] addr address to send to
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

442)  * @param[in] proto Blinken protocol identifier
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

443)  */
444) template<typename ADDR, typename SOCK>
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

445) void Sender<ADDR, SOCK>::sendCurFrame(const ADDR &addr, etBlinkenProto proto)
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

446) {
447)   stBlinkenFrame *pFrame;
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

448)   std::string data;
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

449) 
450)   // get current frame from stream
451)   if (m_pInStream && m_pInStream->getCurFrame(pFrame)) {
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

452)     // convert frame to protocal data
453)     frame2data(pFrame, proto, data);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

454)     // send frame to address
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

455)     sendFrame(data, addr);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

456)   }
457) 
458)   // no stream of no current frame
459)   else {
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

460)     // get "no frame" ad protocal data
461)     noFrame2data(proto, data);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

462)     // send "no frame" to address
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

463)     sendFrame(data, addr);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

464)   }
465) }
466) 
467) /**
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

468)  * @brief send "no frame" to address
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

469)  * @param[in] addr address to send to
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

470)  * @param[in] proto Blinken protocol identifier
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

471)  */
472) template<typename ADDR, typename SOCK>
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

473) void Sender<ADDR, SOCK>::sendNoFrame(const ADDR &addr, etBlinkenProto proto)
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

474) {
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

475)   std::string data;
476) 
477)   // get "no frame" ad protocal data
478)   noFrame2data(proto, data);
479) 
480)   // send "no frame" to address
481)   sendFrame(data, addr);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

482) }
483) 
484) /**
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

485)  * @brief send frame to address
486)  * @param[in] data protocol data of frame
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

487)  * @param[in] addr address to send to
488)  */
489) template<typename ADDR, typename SOCK>
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

490) void Sender<ADDR, SOCK>::sendFrame(const std::string &data, const ADDR &addr)
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

491) {
492)   if (m_pSock) {
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

493)     m_pSock->send(data, addr);
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

494)   }
495) }
496) 
497) /**
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

498)  * @brief convert frame to protocol data
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

499)  * @param[in] pFrame frame
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

500)  * @param[in] proto Blinken protocol identifier
501)  * @param[out] data protocol data
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

502)  */
503) template<typename ADDR, typename SOCK>
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

504) void Sender<ADDR, SOCK>::frame2data(stBlinkenFrame *pFrame,
505)                                     etBlinkenProto proto, std::string &data)
Stefan Schuermans MCUF sender module implemented

Stefan Schuermans authored 13 years ago

506) {
507)   char buf[65536];
508)   int len;
509) 
Stefan Schuermans now repeating frames after...

Stefan Schuermans authored 13 years ago

510)   // convert frame to protcol data
511)   len = BlinkenFrameToNetwork(pFrame, proto, buf, sizeof(buf));
512)   data.assign(buf, len);
513) }
514) 
515) /**
516)  * @brief get "no frame" protocol data
517)  * @param[in] proto Blinken protocol identifier
518)  * @param[out] data protcol data
519)  */
520) template<typename ADDR, typename SOCK>
521) void Sender<ADDR, SOCK>::noFrame2data(etBlinkenProto proto, std::string &data)
522) {
523)   // obtain "no frame" protcol data
524)   (void)proto; // FIXME
525)   data.clear(); // FIXME