WizziCom System command handling library.

Committer:
Jeej
Date:
Tue May 09 13:45:14 2017 +0000
Revision:
0:0556fb79780a
WizziCom System commands handling library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 0:0556fb79780a 1 #include "WizziComSys.h"
Jeej 0:0556fb79780a 2
Jeej 0:0556fb79780a 3 #if 1
Jeej 0:0556fb79780a 4 #define SYS_DPRINT(...) DPRINT(__VA_ARGS__)
Jeej 0:0556fb79780a 5 #define SYS_DPRINT_DATA(...) DPRINT_DATA(__VA_ARGS__)
Jeej 0:0556fb79780a 6 #define SYS_FPRINT(...) FPRINT(__VA_ARGS__)
Jeej 0:0556fb79780a 7 #define SYS_FLUSH() FLUSH()
Jeej 0:0556fb79780a 8 #else
Jeej 0:0556fb79780a 9 #define SYS_DPRINT(...);
Jeej 0:0556fb79780a 10 #define SYS_DPRINT_DATA(...);
Jeej 0:0556fb79780a 11 #define SYS_FPRINT(...);
Jeej 0:0556fb79780a 12 #define SYS_FLUSH();
Jeej 0:0556fb79780a 13 #endif
Jeej 0:0556fb79780a 14
Jeej 0:0556fb79780a 15 void wizzi_sys_reset(WizziCom* com, WizziComPacket_t* pkt)
Jeej 0:0556fb79780a 16 {
Jeej 0:0556fb79780a 17 SYS_DPRINT("RESET HOST COMMAND\r\n");
Jeej 0:0556fb79780a 18 SYS_FLUSH();
Jeej 0:0556fb79780a 19
Jeej 0:0556fb79780a 20 FREE(pkt);
Jeej 0:0556fb79780a 21
Jeej 0:0556fb79780a 22 // Reset device
Jeej 0:0556fb79780a 23 NVIC_SystemReset();
Jeej 0:0556fb79780a 24 }
Jeej 0:0556fb79780a 25
Jeej 0:0556fb79780a 26 void wizzi_sys_pong(WizziCom* com, WizziComPacket_t* pkt)
Jeej 0:0556fb79780a 27 {
Jeej 0:0556fb79780a 28 SYS_DPRINT("PING\r\n");
Jeej 0:0556fb79780a 29
Jeej 0:0556fb79780a 30 FREE(pkt);
Jeej 0:0556fb79780a 31
Jeej 0:0556fb79780a 32 // Respond to PING
Jeej 0:0556fb79780a 33 com->send(WizziComPacketSysPong, 0, NULL);
Jeej 0:0556fb79780a 34 }
Jeej 0:0556fb79780a 35
Jeej 0:0556fb79780a 36 WizziComSys::WizziComSys(WizziCom* com) :
Jeej 0:0556fb79780a 37 _com(com),
Jeej 0:0556fb79780a 38 _pong(0)
Jeej 0:0556fb79780a 39 {
Jeej 0:0556fb79780a 40 // catch PING response
Jeej 0:0556fb79780a 41 _com->attach(this, &WizziComSys::_catch_pong, WizziComPacketSysPong);
Jeej 0:0556fb79780a 42 // Respond to external PING
Jeej 0:0556fb79780a 43 _com->attach(wizzi_sys_pong, WizziComPacketSysPing);
Jeej 0:0556fb79780a 44 // catch Reset command
Jeej 0:0556fb79780a 45 _com->attach(wizzi_sys_reset, WizziComPacketSysReset);
Jeej 0:0556fb79780a 46 }
Jeej 0:0556fb79780a 47
Jeej 0:0556fb79780a 48 WizziComSys::~WizziComSys()
Jeej 0:0556fb79780a 49 {}
Jeej 0:0556fb79780a 50
Jeej 0:0556fb79780a 51 void WizziComSys::_catch_pong(WizziCom* com, WizziComPacket_t* pkt)
Jeej 0:0556fb79780a 52 {
Jeej 0:0556fb79780a 53 FREE(pkt);
Jeej 0:0556fb79780a 54 _pong.release();
Jeej 0:0556fb79780a 55 }
Jeej 0:0556fb79780a 56
Jeej 0:0556fb79780a 57 int WizziComSys::ping(void)
Jeej 0:0556fb79780a 58 {
Jeej 0:0556fb79780a 59 Timer tim;
Jeej 0:0556fb79780a 60 int ret;
Jeej 0:0556fb79780a 61
Jeej 0:0556fb79780a 62 // Empty pong semaphore
Jeej 0:0556fb79780a 63 while(_pong.wait(0));
Jeej 0:0556fb79780a 64
Jeej 0:0556fb79780a 65 _com->send(WizziComPacketSysPing, 0, NULL);
Jeej 0:0556fb79780a 66 tim.start();
Jeej 0:0556fb79780a 67 _pong.wait(1000);
Jeej 0:0556fb79780a 68
Jeej 0:0556fb79780a 69 ret = tim.read_ms();
Jeej 0:0556fb79780a 70 return (ret >= 999)? -1 : ret;
Jeej 0:0556fb79780a 71 }