WizziCom System command handling library.
Revision 0:0556fb79780a, committed 2017-05-09
- Comitter:
- Jeej
- Date:
- Tue May 09 13:45:14 2017 +0000
- Commit message:
- WizziCom System commands handling library.
Changed in this revision
WizziComSys.cpp | Show annotated file Show diff for this revision Revisions of this file |
WizziComSys.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WizziComSys.cpp Tue May 09 13:45:14 2017 +0000 @@ -0,0 +1,71 @@ +#include "WizziComSys.h" + +#if 1 + #define SYS_DPRINT(...) DPRINT(__VA_ARGS__) + #define SYS_DPRINT_DATA(...) DPRINT_DATA(__VA_ARGS__) + #define SYS_FPRINT(...) FPRINT(__VA_ARGS__) + #define SYS_FLUSH() FLUSH() +#else + #define SYS_DPRINT(...); + #define SYS_DPRINT_DATA(...); + #define SYS_FPRINT(...); + #define SYS_FLUSH(); +#endif + +void wizzi_sys_reset(WizziCom* com, WizziComPacket_t* pkt) +{ + SYS_DPRINT("RESET HOST COMMAND\r\n"); + SYS_FLUSH(); + + FREE(pkt); + + // Reset device + NVIC_SystemReset(); +} + +void wizzi_sys_pong(WizziCom* com, WizziComPacket_t* pkt) +{ + SYS_DPRINT("PING\r\n"); + + FREE(pkt); + + // Respond to PING + com->send(WizziComPacketSysPong, 0, NULL); +} + +WizziComSys::WizziComSys(WizziCom* com) : +_com(com), +_pong(0) +{ + // catch PING response + _com->attach(this, &WizziComSys::_catch_pong, WizziComPacketSysPong); + // Respond to external PING + _com->attach(wizzi_sys_pong, WizziComPacketSysPing); + // catch Reset command + _com->attach(wizzi_sys_reset, WizziComPacketSysReset); +} + +WizziComSys::~WizziComSys() +{} + +void WizziComSys::_catch_pong(WizziCom* com, WizziComPacket_t* pkt) +{ + FREE(pkt); + _pong.release(); +} + +int WizziComSys::ping(void) +{ + Timer tim; + int ret; + + // Empty pong semaphore + while(_pong.wait(0)); + + _com->send(WizziComPacketSysPing, 0, NULL); + tim.start(); + _pong.wait(1000); + + ret = tim.read_ms(); + return (ret >= 999)? -1 : ret; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WizziComSys.h Tue May 09 13:45:14 2017 +0000 @@ -0,0 +1,16 @@ +#include "WizziCom.h" +#include "WizziDebug.h" + +class WizziComSys { +private: + WizziCom* _com; + Semaphore _pong; + + void _catch_pong(WizziCom* com, WizziComPacket_t* pkt); + +public: + WizziComSys(WizziCom* com); + ~WizziComSys(); + + int ping(void); +}; \ No newline at end of file