Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of d7a_1x by
src/d7a_sys.cpp@90:eaf980532613, 2017-03-28 (annotated)
- Committer:
- trond
- Date:
- Tue Mar 28 13:07:36 2017 +0000
- Revision:
- 90:eaf980532613
- Parent:
- 84:e5388f1b8ed9
Updated for testing at WizziLab
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jeej | 25:aac250164497 | 1 | #include "mbed.h" |
Jeej | 25:aac250164497 | 2 | #include "rtos.h" |
Jeej | 25:aac250164497 | 3 | #include "dbg.h" |
Jeej | 25:aac250164497 | 4 | #include "d7a_com.h" |
Jeej | 25:aac250164497 | 5 | #include "d7a_common.h" |
Jeej | 25:aac250164497 | 6 | #include "d7a_fs.h" |
Jeej | 25:aac250164497 | 7 | #include "d7a_sys.h" |
Jeej | 43:28202405094d | 8 | #include "d7a.h" |
Jeej | 84:e5388f1b8ed9 | 9 | #include "d7a_typedefs.h" |
Jeej | 25:aac250164497 | 10 | |
Jeej | 79:82b01c1a62f6 | 11 | #if 0 |
Jeej | 79:82b01c1a62f6 | 12 | #define SYS_DPRINT(...) DPRINT(__VA_ARGS__) |
Jeej | 79:82b01c1a62f6 | 13 | #define SYS_DPRINT_DATA(...) DPRINT_DATA(__VA_ARGS__) |
Jeej | 83:f4054d0b29ba | 14 | #define SYS_FPRINT(...) FPRINT(__VA_ARGS__) |
Jeej | 79:82b01c1a62f6 | 15 | #else |
Jeej | 79:82b01c1a62f6 | 16 | #define SYS_DPRINT(...); |
Jeej | 79:82b01c1a62f6 | 17 | #define SYS_DPRINT_DATA(...); |
Jeej | 83:f4054d0b29ba | 18 | #define SYS_FPRINT(...); |
Jeej | 79:82b01c1a62f6 | 19 | #endif |
Jeej | 79:82b01c1a62f6 | 20 | |
Jeej | 84:e5388f1b8ed9 | 21 | static OS_Thread g_sys_thread(osPriorityHigh, 512, NULL); |
Jeej | 84:e5388f1b8ed9 | 22 | static OS_Queue<d7a_com_rx_msg_t, 8> g_sys_pkt_queue; |
Jeej | 84:e5388f1b8ed9 | 23 | static OS_Queue<bool, 1> g_sys_wait_pong; |
Jeej | 25:aac250164497 | 24 | |
Jeej | 76:fda2e34ff19d | 25 | void d7a_sys_thread(); |
Jeej | 25:aac250164497 | 26 | |
Jeej | 56:da34fc11e760 | 27 | d7a_errors_t d7a_sys_open(void) |
Jeej | 25:aac250164497 | 28 | { |
Jeej | 83:f4054d0b29ba | 29 | SYS_FPRINT("\r\n"); |
Jeej | 76:fda2e34ff19d | 30 | |
Jeej | 77:8c792719a1fc | 31 | osStatus err = g_sys_thread.start(d7a_sys_thread); |
Jeej | 76:fda2e34ff19d | 32 | ASSERT(err == osOK, "Failed to start d7a_sys_thread (err: %d)\r\n", err); |
Jeej | 49:81d5bddb02f0 | 33 | |
Jeej | 49:81d5bddb02f0 | 34 | return D7A_ERR_NONE; |
Jeej | 25:aac250164497 | 35 | } |
Jeej | 25:aac250164497 | 36 | |
Jeej | 56:da34fc11e760 | 37 | d7a_errors_t d7a_sys_close(void) |
Jeej | 56:da34fc11e760 | 38 | { |
Jeej | 83:f4054d0b29ba | 39 | SYS_FPRINT("\r\n"); |
Jeej | 56:da34fc11e760 | 40 | |
Jeej | 77:8c792719a1fc | 41 | g_sys_thread.terminate(); |
Jeej | 56:da34fc11e760 | 42 | |
Jeej | 56:da34fc11e760 | 43 | return D7A_ERR_NONE; |
Jeej | 56:da34fc11e760 | 44 | } |
Jeej | 56:da34fc11e760 | 45 | |
Jeej | 25:aac250164497 | 46 | void d7a_sys_new_pkt(d7a_com_rx_msg_t* pkt) |
Jeej | 25:aac250164497 | 47 | { |
Jeej | 83:f4054d0b29ba | 48 | SYS_FPRINT("\r\n"); |
Jeej | 77:8c792719a1fc | 49 | ASSERT(g_sys_pkt_queue.put(pkt) == osOK, "SYS queue full!\r\n"); |
Jeej | 25:aac250164497 | 50 | } |
Jeej | 25:aac250164497 | 51 | |
Jeej | 25:aac250164497 | 52 | d7a_com_rx_msg_t* d7a_sys_wait_pkt( uint32_t millisec ) |
Jeej | 25:aac250164497 | 53 | { |
Jeej | 83:f4054d0b29ba | 54 | SYS_FPRINT("\r\n"); |
Jeej | 77:8c792719a1fc | 55 | osEvent evt = g_sys_pkt_queue.get(millisec); |
Jeej | 25:aac250164497 | 56 | return (evt.status == osEventMessage)? (d7a_com_rx_msg_t*)evt.value.p : NULL; |
Jeej | 25:aac250164497 | 57 | } |
Jeej | 25:aac250164497 | 58 | |
Jeej | 28:0376b97b4b55 | 59 | void d7a_sys_tlev(uint8_t mod, uint16_t lev) |
Jeej | 28:0376b97b4b55 | 60 | { |
Jeej | 83:f4054d0b29ba | 61 | SYS_FPRINT("\r\n"); |
Jeej | 28:0376b97b4b55 | 62 | uint8_t buf[3]; |
Jeej | 30:d775c1409849 | 63 | |
Jeej | 28:0376b97b4b55 | 64 | buf[0] = mod; |
Jeej | 28:0376b97b4b55 | 65 | buf[1] = (uint8_t)(lev << 8); |
Jeej | 28:0376b97b4b55 | 66 | buf[2] = (uint8_t)(lev & 0x00FF); |
Jeej | 30:d775c1409849 | 67 | |
Jeej | 30:d775c1409849 | 68 | d7a_com_dump(buf, 3, KAL_COM_FLOW_SYS_TLEV); |
Jeej | 28:0376b97b4b55 | 69 | } |
Jeej | 28:0376b97b4b55 | 70 | |
Jeej | 30:d775c1409849 | 71 | bool d7a_sys_ping_modem(uint32_t millisec) |
Jeej | 30:d775c1409849 | 72 | { |
Jeej | 83:f4054d0b29ba | 73 | SYS_FPRINT("\r\n"); |
Jeej | 30:d775c1409849 | 74 | uint8_t buf[5] = "PING"; |
Jeej | 30:d775c1409849 | 75 | |
Jeej | 30:d775c1409849 | 76 | d7a_com_dump(buf, 4, KAL_COM_FLOW_SYS_PING); |
Jeej | 30:d775c1409849 | 77 | |
Jeej | 77:8c792719a1fc | 78 | osEvent evt = g_sys_wait_pong.get(millisec); |
Jeej | 30:d775c1409849 | 79 | |
Jeej | 30:d775c1409849 | 80 | return (evt.status == osEventMessage)? true: false; |
Jeej | 30:d775c1409849 | 81 | } |
Jeej | 30:d775c1409849 | 82 | |
Jeej | 30:d775c1409849 | 83 | void d7a_sys_software_reset(void) |
Jeej | 29:8e7c5c1e9aab | 84 | { |
Jeej | 83:f4054d0b29ba | 85 | SYS_FPRINT("\r\n"); |
Jeej | 30:d775c1409849 | 86 | uint8_t buf[4] = "RST"; |
Jeej | 30:d775c1409849 | 87 | |
Jeej | 40:b4df548bd9d8 | 88 | d7a_com_dump(buf, 3, KAL_COM_FLOW_SYS_RST); |
Jeej | 30:d775c1409849 | 89 | } |
Jeej | 30:d775c1409849 | 90 | |
Jeej | 30:d775c1409849 | 91 | void d7a_sys_button(uint8_t button) |
Jeej | 30:d775c1409849 | 92 | { |
Jeej | 83:f4054d0b29ba | 93 | SYS_FPRINT("\r\n"); |
Jeej | 30:d775c1409849 | 94 | button += '0'; |
Jeej | 29:8e7c5c1e9aab | 95 | |
Jeej | 30:d775c1409849 | 96 | d7a_com_dump(&button, 1, KAL_COM_FLOW_SYS_BUTTON); |
Jeej | 29:8e7c5c1e9aab | 97 | } |
Jeej | 30:d775c1409849 | 98 | |
Jeej | 34:1311cc53201a | 99 | void d7a_sys_xack(void) |
Jeej | 34:1311cc53201a | 100 | { |
Jeej | 34:1311cc53201a | 101 | uint8_t buf[] = "X"; |
Jeej | 34:1311cc53201a | 102 | d7a_com_dump(buf, 1, KAL_COM_FLOW_SYS_XACK); |
Jeej | 34:1311cc53201a | 103 | } |
Jeej | 29:8e7c5c1e9aab | 104 | |
Jeej | 76:fda2e34ff19d | 105 | void d7a_sys_thread() |
Jeej | 25:aac250164497 | 106 | { |
Jeej | 83:f4054d0b29ba | 107 | SYS_FPRINT("(id:0x%08x)\r\n", osThreadGetId()); |
Jeej | 25:aac250164497 | 108 | d7a_com_rx_msg_t* pkt; |
Jeej | 25:aac250164497 | 109 | |
Jeej | 25:aac250164497 | 110 | while (true) |
Jeej | 25:aac250164497 | 111 | { |
Jeej | 25:aac250164497 | 112 | pkt = d7a_sys_wait_pkt(); |
Jeej | 25:aac250164497 | 113 | ASSERT(pkt != NULL, "SYS NULL pkt\r\n"); |
Jeej | 25:aac250164497 | 114 | |
Jeej | 25:aac250164497 | 115 | switch(pkt->id) |
Jeej | 25:aac250164497 | 116 | { |
Jeej | 25:aac250164497 | 117 | case KAL_COM_FLOW_SYS_RST: |
Jeej | 79:82b01c1a62f6 | 118 | SYS_DPRINT("KAL_COM_FLOW_SYS_RST\r\n"); |
Jeej | 25:aac250164497 | 119 | FLUSH(); |
Jeej | 25:aac250164497 | 120 | NVIC_SystemReset(); |
Jeej | 25:aac250164497 | 121 | break; |
Jeej | 25:aac250164497 | 122 | case KAL_COM_FLOW_SYS_BUTTON: |
Jeej | 79:82b01c1a62f6 | 123 | SYS_DPRINT("KAL_COM_FLOW_SYS_BUTTON\r\n"); |
Jeej | 25:aac250164497 | 124 | break; |
Jeej | 25:aac250164497 | 125 | case KAL_COM_FLOW_SYS_INFO: |
Jeej | 79:82b01c1a62f6 | 126 | SYS_DPRINT("KAL_COM_FLOW_SYS_INFO\r\n"); |
Jeej | 25:aac250164497 | 127 | break; |
Jeej | 25:aac250164497 | 128 | case KAL_COM_FLOW_SYS_CUP: |
Jeej | 79:82b01c1a62f6 | 129 | SYS_DPRINT("KAL_COM_FLOW_SYS_CUP\r\n"); |
Jeej | 25:aac250164497 | 130 | break; |
Jeej | 25:aac250164497 | 131 | case KAL_COM_FLOW_SYS_PING: |
Jeej | 79:82b01c1a62f6 | 132 | SYS_DPRINT("KAL_COM_FLOW_SYS_PING\r\n"); |
Jeej | 25:aac250164497 | 133 | uint8_t buf[5] = "PONG"; |
Jeej | 34:1311cc53201a | 134 | d7a_com_dump(buf, 4, KAL_COM_FLOW_SYS_PONG); |
Jeej | 25:aac250164497 | 135 | break; |
Jeej | 25:aac250164497 | 136 | case KAL_COM_FLOW_SYS_PONG: |
Jeej | 79:82b01c1a62f6 | 137 | SYS_DPRINT("KAL_COM_FLOW_SYS_PONG\r\n"); |
Jeej | 77:8c792719a1fc | 138 | g_sys_wait_pong.put(NULL); |
Jeej | 25:aac250164497 | 139 | break; |
Jeej | 25:aac250164497 | 140 | case KAL_COM_FLOW_SYS_CFG: |
Jeej | 79:82b01c1a62f6 | 141 | SYS_DPRINT("KAL_COM_FLOW_SYS_CFG\r\n"); |
Jeej | 25:aac250164497 | 142 | break; |
Jeej | 25:aac250164497 | 143 | case KAL_COM_FLOW_SYS_TLEV: |
Jeej | 79:82b01c1a62f6 | 144 | SYS_DPRINT("KAL_COM_FLOW_SYS_TLEV\r\n"); |
Jeej | 25:aac250164497 | 145 | break; |
Jeej | 25:aac250164497 | 146 | case KAL_COM_FLOW_SYS_REDIR: |
Jeej | 79:82b01c1a62f6 | 147 | SYS_DPRINT("KAL_COM_FLOW_SYS_REDIR\r\n"); |
Jeej | 25:aac250164497 | 148 | break; |
Jeej | 25:aac250164497 | 149 | default: |
Jeej | 25:aac250164497 | 150 | EPRINT("SYS Unknown Flow ID 0x%02X\r\n", pkt->id); |
Jeej | 25:aac250164497 | 151 | break; |
Jeej | 25:aac250164497 | 152 | } |
Jeej | 25:aac250164497 | 153 | |
Jeej | 25:aac250164497 | 154 | FREE(pkt); |
Jeej | 25:aac250164497 | 155 | } |
Jeej | 25:aac250164497 | 156 | } |