Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Mon Sep 12 16:36:09 2016 +0000
Revision:
58:38a366236bda
Parent:
56:da34fc11e760
Child:
59:b42eae56b51b
Broadcast.

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