WizziCom System command handling library.
WizziComSys.cpp@0:0556fb79780a, 2017-05-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |