Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

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?

UserRevisionLine numberNew 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 }