Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Thu Jun 02 09:24:52 2016 +0000
Revision:
31:ab9bfdbc6b44
Parent:
30:d775c1409849
Child:
34:1311cc53201a
New process for TX commands in d7a_com.

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