Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Wed Dec 21 14:11:09 2016 +0000
Revision:
78:f1c0affd99e7
Parent:
77:8c792719a1fc
Child:
79:82b01c1a62f6
Reduced stack size to fit in target NUCLEO-L432KC.

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 25:aac250164497 9
Jeej 78:f1c0affd99e7 10 static Thread g_sys_thread(osPriorityHigh, 512, NULL);
Jeej 77:8c792719a1fc 11 static Queue<d7a_com_rx_msg_t, 8> g_sys_pkt_queue;
Jeej 77:8c792719a1fc 12 static Queue<bool, 1> g_sys_wait_pong;
Jeej 25:aac250164497 13
Jeej 76:fda2e34ff19d 14 void d7a_sys_thread();
Jeej 25:aac250164497 15
Jeej 56:da34fc11e760 16 d7a_errors_t d7a_sys_open(void)
Jeej 25:aac250164497 17 {
Jeej 25:aac250164497 18 FPRINT("\r\n");
Jeej 76:fda2e34ff19d 19
Jeej 77:8c792719a1fc 20 osStatus err = g_sys_thread.start(d7a_sys_thread);
Jeej 76:fda2e34ff19d 21 ASSERT(err == osOK, "Failed to start d7a_sys_thread (err: %d)\r\n", err);
Jeej 49:81d5bddb02f0 22
Jeej 49:81d5bddb02f0 23 return D7A_ERR_NONE;
Jeej 25:aac250164497 24 }
Jeej 25:aac250164497 25
Jeej 56:da34fc11e760 26 d7a_errors_t d7a_sys_close(void)
Jeej 56:da34fc11e760 27 {
Jeej 56:da34fc11e760 28 FPRINT("\r\n");
Jeej 56:da34fc11e760 29
Jeej 77:8c792719a1fc 30 g_sys_thread.terminate();
Jeej 56:da34fc11e760 31
Jeej 56:da34fc11e760 32 return D7A_ERR_NONE;
Jeej 56:da34fc11e760 33 }
Jeej 56:da34fc11e760 34
Jeej 25:aac250164497 35 void d7a_sys_new_pkt(d7a_com_rx_msg_t* pkt)
Jeej 25:aac250164497 36 {
Jeej 25:aac250164497 37 FPRINT("\r\n");
Jeej 77:8c792719a1fc 38 ASSERT(g_sys_pkt_queue.put(pkt) == osOK, "SYS queue full!\r\n");
Jeej 25:aac250164497 39 }
Jeej 25:aac250164497 40
Jeej 25:aac250164497 41 d7a_com_rx_msg_t* d7a_sys_wait_pkt( uint32_t millisec )
Jeej 25:aac250164497 42 {
Jeej 25:aac250164497 43 FPRINT("\r\n");
Jeej 77:8c792719a1fc 44 osEvent evt = g_sys_pkt_queue.get(millisec);
Jeej 25:aac250164497 45 return (evt.status == osEventMessage)? (d7a_com_rx_msg_t*)evt.value.p : NULL;
Jeej 25:aac250164497 46 }
Jeej 25:aac250164497 47
Jeej 28:0376b97b4b55 48 void d7a_sys_tlev(uint8_t mod, uint16_t lev)
Jeej 28:0376b97b4b55 49 {
Jeej 28:0376b97b4b55 50 FPRINT("\r\n");
Jeej 28:0376b97b4b55 51 uint8_t buf[3];
Jeej 30:d775c1409849 52
Jeej 28:0376b97b4b55 53 buf[0] = mod;
Jeej 28:0376b97b4b55 54 buf[1] = (uint8_t)(lev << 8);
Jeej 28:0376b97b4b55 55 buf[2] = (uint8_t)(lev & 0x00FF);
Jeej 30:d775c1409849 56
Jeej 30:d775c1409849 57 d7a_com_dump(buf, 3, KAL_COM_FLOW_SYS_TLEV);
Jeej 28:0376b97b4b55 58 }
Jeej 28:0376b97b4b55 59
Jeej 30:d775c1409849 60 bool d7a_sys_ping_modem(uint32_t millisec)
Jeej 30:d775c1409849 61 {
Jeej 30:d775c1409849 62 FPRINT("\r\n");
Jeej 30:d775c1409849 63 uint8_t buf[5] = "PING";
Jeej 30:d775c1409849 64
Jeej 30:d775c1409849 65 d7a_com_dump(buf, 4, KAL_COM_FLOW_SYS_PING);
Jeej 30:d775c1409849 66
Jeej 77:8c792719a1fc 67 osEvent evt = g_sys_wait_pong.get(millisec);
Jeej 30:d775c1409849 68
Jeej 30:d775c1409849 69 return (evt.status == osEventMessage)? true: false;
Jeej 30:d775c1409849 70 }
Jeej 30:d775c1409849 71
Jeej 30:d775c1409849 72 void d7a_sys_software_reset(void)
Jeej 29:8e7c5c1e9aab 73 {
Jeej 29:8e7c5c1e9aab 74 FPRINT("\r\n");
Jeej 30:d775c1409849 75 uint8_t buf[4] = "RST";
Jeej 30:d775c1409849 76
Jeej 40:b4df548bd9d8 77 d7a_com_dump(buf, 3, KAL_COM_FLOW_SYS_RST);
Jeej 30:d775c1409849 78 }
Jeej 30:d775c1409849 79
Jeej 30:d775c1409849 80 void d7a_sys_button(uint8_t button)
Jeej 30:d775c1409849 81 {
Jeej 30:d775c1409849 82 FPRINT("\r\n");
Jeej 30:d775c1409849 83 button += '0';
Jeej 29:8e7c5c1e9aab 84
Jeej 30:d775c1409849 85 d7a_com_dump(&button, 1, KAL_COM_FLOW_SYS_BUTTON);
Jeej 29:8e7c5c1e9aab 86 }
Jeej 30:d775c1409849 87
Jeej 34:1311cc53201a 88 void d7a_sys_xack(void)
Jeej 34:1311cc53201a 89 {
Jeej 34:1311cc53201a 90 uint8_t buf[] = "X";
Jeej 34:1311cc53201a 91 d7a_com_dump(buf, 1, KAL_COM_FLOW_SYS_XACK);
Jeej 34:1311cc53201a 92 }
Jeej 29:8e7c5c1e9aab 93
Jeej 76:fda2e34ff19d 94 void d7a_sys_thread()
Jeej 25:aac250164497 95 {
Jeej 58:38a366236bda 96 FPRINT("(id:0x%08x)\r\n", osThreadGetId());
Jeej 25:aac250164497 97 d7a_com_rx_msg_t* pkt;
Jeej 25:aac250164497 98
Jeej 25:aac250164497 99 while (true)
Jeej 25:aac250164497 100 {
Jeej 25:aac250164497 101 pkt = d7a_sys_wait_pkt();
Jeej 25:aac250164497 102 ASSERT(pkt != NULL, "SYS NULL pkt\r\n");
Jeej 25:aac250164497 103
Jeej 25:aac250164497 104 switch(pkt->id)
Jeej 25:aac250164497 105 {
Jeej 25:aac250164497 106 case KAL_COM_FLOW_SYS_RST:
Jeej 30:d775c1409849 107 IPRINT("KAL_COM_FLOW_SYS_RST\r\n");
Jeej 25:aac250164497 108 FLUSH();
Jeej 25:aac250164497 109 NVIC_SystemReset();
Jeej 25:aac250164497 110 break;
Jeej 25:aac250164497 111 case KAL_COM_FLOW_SYS_BUTTON:
Jeej 30:d775c1409849 112 IPRINT("KAL_COM_FLOW_SYS_BUTTON\r\n");
Jeej 25:aac250164497 113 break;
Jeej 25:aac250164497 114 case KAL_COM_FLOW_SYS_INFO:
Jeej 30:d775c1409849 115 IPRINT("KAL_COM_FLOW_SYS_INFO\r\n");
Jeej 25:aac250164497 116 break;
Jeej 25:aac250164497 117 case KAL_COM_FLOW_SYS_CUP:
Jeej 30:d775c1409849 118 IPRINT("KAL_COM_FLOW_SYS_CUP\r\n");
Jeej 25:aac250164497 119 break;
Jeej 25:aac250164497 120 case KAL_COM_FLOW_SYS_PING:
Jeej 30:d775c1409849 121 IPRINT("KAL_COM_FLOW_SYS_PING\r\n");
Jeej 25:aac250164497 122 uint8_t buf[5] = "PONG";
Jeej 34:1311cc53201a 123 d7a_com_dump(buf, 4, KAL_COM_FLOW_SYS_PONG);
Jeej 25:aac250164497 124 break;
Jeej 25:aac250164497 125 case KAL_COM_FLOW_SYS_PONG:
Jeej 34:1311cc53201a 126 //IPRINT("KAL_COM_FLOW_SYS_PONG\r\n");
Jeej 77:8c792719a1fc 127 g_sys_wait_pong.put(NULL);
Jeej 25:aac250164497 128 break;
Jeej 25:aac250164497 129 case KAL_COM_FLOW_SYS_CFG:
Jeej 30:d775c1409849 130 IPRINT("KAL_COM_FLOW_SYS_CFG\r\n");
Jeej 25:aac250164497 131 break;
Jeej 25:aac250164497 132 case KAL_COM_FLOW_SYS_TLEV:
Jeej 30:d775c1409849 133 IPRINT("KAL_COM_FLOW_SYS_TLEV\r\n");
Jeej 25:aac250164497 134 break;
Jeej 25:aac250164497 135 case KAL_COM_FLOW_SYS_REDIR:
Jeej 30:d775c1409849 136 IPRINT("KAL_COM_FLOW_SYS_REDIR\r\n");
Jeej 25:aac250164497 137 break;
Jeej 25:aac250164497 138 default:
Jeej 25:aac250164497 139 EPRINT("SYS Unknown Flow ID 0x%02X\r\n", pkt->id);
Jeej 25:aac250164497 140 break;
Jeej 25:aac250164497 141 }
Jeej 25:aac250164497 142
Jeej 25:aac250164497 143 FREE(pkt);
Jeej 25:aac250164497 144 }
Jeej 25:aac250164497 145 }