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
d7a_sys.cpp
00001 #include "mbed.h" 00002 #include "rtos.h" 00003 #include "dbg.h" 00004 #include "d7a_com.h" 00005 #include "d7a_common.h" 00006 #include "d7a_fs.h" 00007 #include "d7a_sys.h" 00008 #include "d7a.h" 00009 #include "d7a_typedefs.h" 00010 00011 #if 0 00012 #define SYS_DPRINT(...) DPRINT(__VA_ARGS__) 00013 #define SYS_DPRINT_DATA(...) DPRINT_DATA(__VA_ARGS__) 00014 #define SYS_FPRINT(...) FPRINT(__VA_ARGS__) 00015 #else 00016 #define SYS_DPRINT(...); 00017 #define SYS_DPRINT_DATA(...); 00018 #define SYS_FPRINT(...); 00019 #endif 00020 00021 static OS_Thread g_sys_thread(osPriorityHigh, 512, NULL); 00022 static OS_Queue<d7a_com_rx_msg_t, 8> g_sys_pkt_queue; 00023 static OS_Queue<bool, 1> g_sys_wait_pong; 00024 00025 void d7a_sys_thread(); 00026 00027 d7a_errors_t d7a_sys_open(void) 00028 { 00029 SYS_FPRINT("\r\n"); 00030 00031 osStatus err = g_sys_thread.start(d7a_sys_thread); 00032 ASSERT(err == osOK, "Failed to start d7a_sys_thread (err: %d)\r\n", err); 00033 00034 return D7A_ERR_NONE; 00035 } 00036 00037 d7a_errors_t d7a_sys_close(void) 00038 { 00039 SYS_FPRINT("\r\n"); 00040 00041 g_sys_thread.terminate(); 00042 00043 return D7A_ERR_NONE; 00044 } 00045 00046 void d7a_sys_new_pkt(d7a_com_rx_msg_t* pkt) 00047 { 00048 SYS_FPRINT("\r\n"); 00049 ASSERT(g_sys_pkt_queue.put(pkt) == osOK, "SYS queue full!\r\n"); 00050 } 00051 00052 d7a_com_rx_msg_t* d7a_sys_wait_pkt( uint32_t millisec ) 00053 { 00054 SYS_FPRINT("\r\n"); 00055 osEvent evt = g_sys_pkt_queue.get(millisec); 00056 return (evt.status == osEventMessage)? (d7a_com_rx_msg_t*)evt.value.p : NULL; 00057 } 00058 00059 void d7a_sys_tlev(uint8_t mod, uint16_t lev) 00060 { 00061 SYS_FPRINT("\r\n"); 00062 uint8_t buf[3]; 00063 00064 buf[0] = mod; 00065 buf[1] = (uint8_t)(lev << 8); 00066 buf[2] = (uint8_t)(lev & 0x00FF); 00067 00068 d7a_com_dump(buf, 3, KAL_COM_FLOW_SYS_TLEV); 00069 } 00070 00071 bool d7a_sys_ping_modem(uint32_t millisec) 00072 { 00073 SYS_FPRINT("\r\n"); 00074 uint8_t buf[5] = "PING"; 00075 00076 d7a_com_dump(buf, 4, KAL_COM_FLOW_SYS_PING); 00077 00078 osEvent evt = g_sys_wait_pong.get(millisec); 00079 00080 return (evt.status == osEventMessage)? true: false; 00081 } 00082 00083 void d7a_sys_software_reset(void) 00084 { 00085 SYS_FPRINT("\r\n"); 00086 uint8_t buf[4] = "RST"; 00087 00088 d7a_com_dump(buf, 3, KAL_COM_FLOW_SYS_RST); 00089 } 00090 00091 void d7a_sys_button(uint8_t button) 00092 { 00093 SYS_FPRINT("\r\n"); 00094 button += '0'; 00095 00096 d7a_com_dump(&button, 1, KAL_COM_FLOW_SYS_BUTTON); 00097 } 00098 00099 void d7a_sys_xack(void) 00100 { 00101 uint8_t buf[] = "X"; 00102 d7a_com_dump(buf, 1, KAL_COM_FLOW_SYS_XACK); 00103 } 00104 00105 void d7a_sys_thread() 00106 { 00107 SYS_FPRINT("(id:0x%08x)\r\n", osThreadGetId()); 00108 d7a_com_rx_msg_t* pkt; 00109 00110 while (true) 00111 { 00112 pkt = d7a_sys_wait_pkt(); 00113 ASSERT(pkt != NULL, "SYS NULL pkt\r\n"); 00114 00115 switch(pkt->id) 00116 { 00117 case KAL_COM_FLOW_SYS_RST: 00118 SYS_DPRINT("KAL_COM_FLOW_SYS_RST\r\n"); 00119 FLUSH(); 00120 NVIC_SystemReset(); 00121 break; 00122 case KAL_COM_FLOW_SYS_BUTTON: 00123 SYS_DPRINT("KAL_COM_FLOW_SYS_BUTTON\r\n"); 00124 break; 00125 case KAL_COM_FLOW_SYS_INFO: 00126 SYS_DPRINT("KAL_COM_FLOW_SYS_INFO\r\n"); 00127 break; 00128 case KAL_COM_FLOW_SYS_CUP: 00129 SYS_DPRINT("KAL_COM_FLOW_SYS_CUP\r\n"); 00130 break; 00131 case KAL_COM_FLOW_SYS_PING: 00132 SYS_DPRINT("KAL_COM_FLOW_SYS_PING\r\n"); 00133 uint8_t buf[5] = "PONG"; 00134 d7a_com_dump(buf, 4, KAL_COM_FLOW_SYS_PONG); 00135 break; 00136 case KAL_COM_FLOW_SYS_PONG: 00137 SYS_DPRINT("KAL_COM_FLOW_SYS_PONG\r\n"); 00138 g_sys_wait_pong.put(NULL); 00139 break; 00140 case KAL_COM_FLOW_SYS_CFG: 00141 SYS_DPRINT("KAL_COM_FLOW_SYS_CFG\r\n"); 00142 break; 00143 case KAL_COM_FLOW_SYS_TLEV: 00144 SYS_DPRINT("KAL_COM_FLOW_SYS_TLEV\r\n"); 00145 break; 00146 case KAL_COM_FLOW_SYS_REDIR: 00147 SYS_DPRINT("KAL_COM_FLOW_SYS_REDIR\r\n"); 00148 break; 00149 default: 00150 EPRINT("SYS Unknown Flow ID 0x%02X\r\n", pkt->id); 00151 break; 00152 } 00153 00154 FREE(pkt); 00155 } 00156 }
Generated on Sun Jul 17 2022 09:41:51 by
1.7.2
