123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572 |
- //==================================================================
- //
- // Filename: mapp_Ami.c
- // Description: Ami driver
- //
- //------------------------------------------------------------------
- //
- // version:
- // date: 23:54pm, 08.Apr.2012, by Sirius
- // Description:
- //
- //------------------------------------------------------------------
- //==================================================================
- /*------------------------------------------------------------------------------
- * I N C L U D E
- *------------------------------------------------------------------------------*/
- //#include <string.h>
- #include "stm32f0xx.h"
- #include "general.h"
- #include "mapp_can.h"
- #include "mapp_msg.h"
- #include "mapp_uart1.h"
- #include "main.h"
- #include "mapp_ext.h"
- #include "mapp_Ami.h"
- #include "mapp_ami.h"
- #include "mapp_pwr.h"
- #include "mapp_gpio.h"
- #include "mapp_key.h"
- #include "mapp_bus.h"
- /*------------------------------------------------------------------------------
- * D E F I N E
- *------------------------------------------------------------------------------*/
- #define AMI_TX_BUF_LEN (40)
- #define AMI_RX_BUF_LEN (30)
- /*------------------------------------------------------------------------------
- * S T R U C T
- *------------------------------------------------------------------------------*/
- /*------------------------------------------------------------------------------
- * S T A T I C - V A R I A B L E S
- *------------------------------------------------------------------------------*/
- //static U08 s_u8DvdRxBuf[UART3_RX_BUF_SIZE] = {0};
- static U08 s_u8AmiRxBuf[AMI_RX_BUF_LEN] = {0};
- static U08 s_u8AmiTxBuf[AMI_TX_BUF_LEN] = {0};
- static VU16 s_vu16AmiTaskTmr=0;
- /*------------------------------------------------------------------------------
- * G L O B A L
- *------------------------------------------------------------------------------*/
- T_AMI_CFG gtAmi ={0};
- /*------------------------------------------------------------------------------
- * P R O T O T Y P E
- *------------------------------------------------------------------------------*/
- static BOOL s_AmiRxCheck(void);
- static void s_frmAmiRxSysReset(void);
- static void s_frmAmiRxHandshake(void);
- static void s_frmAmiRxSysUpdateReset(void);
- static void s_frmAmiRxMic(void);
- static void s_frmAmiRxUled(void);
- static void s_frmAmiRxRelay(void);
- static void s_frmAmiRxSip(void);
- static void s_frmAmiRxID(void);
- static void s_frmAmiRxDoorLed(void);
- static void s_frmAmiRxCallLed(void);
- static void s_frmAmiRxAsk(void);
- static void s_frmAmiRxEvent(void);
- static void s_frmAmiTxNull(U16 prm);
- static void s_frmAmiTxID(U16 prm);
- static void s_frmAmiTxKey(U16 prm);
- static void s_frmAmiTxVersion(U16 prm);
- static void s_frmAmiRxNetReset(void);
- //------------------------------------------------------------------
- // array for function receive data from DVD
- // 13:53pm, 21.Sep.2012, modified by Sirius
- //------------------------------------------------------------------
- #define NbOfAmiRxCmd (14)
- static const T_AMI_RX_FUNC arryAmiRxFuncTbl[NbOfAmiRxCmd] = {
- {"CALL", s_frmAmiRxHandshake}, /* 14 无效 */
- {"KEY;", Uart_EVEAL_RevData}, /* 1 */
- {"KEY=", Uart_EVEAL_RevData}, /* 2 */
- {"KEY?", Uart_EVEAL_RevData}, /* 3 */
- {"MIC", s_frmAmiRxMic}, /* 4 */
- {"NLED", s_frmAmiRxMic}, /* 5 */
- {"ULED", s_frmAmiRxUled}, /* 6 */
- {"RELAY", s_frmAmiRxRelay}, /* 7 */
- {"SIP", s_frmAmiRxSip}, /* 8 */
- {"ID", s_frmAmiRxID}, /* 9 */
- {"DOORLED", s_frmAmiRxDoorLed}, /* 10 */
- {"CALLLED", s_frmAmiRxCallLed}, /* 11 */
- {"ASK", s_frmAmiRxAsk}, /* 12 */
- {"NETRESET", s_frmAmiRxNetReset}, /* 13 */
- };
- //------------------------------------------------------------------
- // array for function transmit data to DVD
- // 17:42pm, 20.Sep.2012, modified by Sirius
- //------------------------------------------------------------------
- static const fp_prm arryAmiTxFuncTbl[NumOfAMIMsg] = {
- s_frmAmiTxNull, /* Ami_MSG_NULL */
- s_frmAmiTxKey, /* Ami_MSG_KEY */
- s_frmAmiTxID, /* Ami_MSG_ID */
- s_frmAmiTxVersion, /* Ami_MSG_VER */
- };
- //------------------------------------------------------------------------
- void AmiValInit(void)
- {
- U32 u32prm =0;
-
- MEMSET(>Ami, 0, sizeof(T_AMI_CFG));
- u32prm = ( (DeviceMacInfo[0] <<24) | (DeviceMacInfo[1] <<16) | (DeviceMacInfo[2] <<8) | DeviceMacInfo[4] ) ;
- gtAmi.FJKeymac = HexToInt(u32prm);
- }
- /*----------------------------------------------------------------------
- // Function uses : AmiTaskTmr
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 09:11am, 30.Aug.2012, written by Sirius
- ----------------------------------------------------------------------*/
- void AmiTaskTmr(void)
- {
- if( s_vu16AmiTaskTmr != 0xFFFF ) {s_vu16AmiTaskTmr++;}
- }
- /*----------------------------------------------------------------------
- // Function uses : s_AmiRxCheck
- // Input parameter :
- // Output parameter :
- // Use Function : check frame format received from Ami.
- // Reserve date : 14:28pm, 21.Sep.2012, written by Sirius
- ----------------------------------------------------------------------*/
- static BOOL s_AmiRxCheck(void)
- {
- U08 len = 0;
- //U08 chksum = 0;
- len = s_u8AmiRxBuf[0];
-
- if (s_u8AmiRxBuf[len] == '#') {
- return (TRUE);
- } else {
- return (FALSE);
- }
-
- }
- /*----------------------------------------------------------------------
- // Function uses : s_AmiRxIDCheck
- // Input parameter :
- // Output parameter :
- // Use Function : check frame format received from Ami.
- // Reserve date : 11:51am, 30.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static BOOL s_AmiRxIDCheck(U08 u8cnt)
- {
- U08 i = 0;
- U08 len = 0;
- /* LEN ==4,只比较前4个字节*/
- len = strlen(arryAmiRxFuncTbl[u8cnt].datatype);
- for (i = 0; i < len; i++) {
- if (arryAmiRxFuncTbl[u8cnt].datatype[i] != s_u8AmiRxBuf[1+i]) {
- return (FALSE);
- }
- }
- return (TRUE);
-
- }
- /*----------------------------------------------------------------------
- // Function uses : DvdRxTask
- // Input parameter :
- // Output parameter :
- // Use Function : Receive command data from DVD.
- // Reserve date : 15:18pm, 22.Feb.2013, written by Sirius
- ----------------------------------------------------------------------*/
- void AmiRxTask(void)
- {
- U08 err = 0;
- U08 i = 0;
- Uart2GetChar(s_u8AmiRxBuf, 0, &err); /* Copy data if received */
- if (err == COM_NO_ERR) { /* Valid data received */
-
- if (s_AmiRxCheck()) { /* Caculate checksum and feed back Ack data */
- for (i = 0; i < NbOfAmiRxCmd; i++) {
- if (s_AmiRxIDCheck(i)) {
- arryAmiRxFuncTbl[i].pfunc();
- break;
- }
- }
- }
- }
- }
- /*----------------------------------------------------------------------
- // Function uses : DvdTxTask
- // Input parameter :
- // Output parameter :
- // Use Function : Transmit data to DVD.
- // Reserve date : 14:29pm, 19.Feb.2013, written by Sirius
- ----------------------------------------------------------------------*/
- void AmiTxTask(void)
- {
- T_MESSAGE *pmsg;
- pmsg = OSQGet(AmiMsgQueue);
- if (pmsg->id < NumOfAMIMsg) {
- arryAmiTxFuncTbl[pmsg->id](pmsg->prm);
- }
- if( s_vu16AmiTaskTmr >= 300 ) {
- s_vu16AmiTaskTmr = 0;
- // OSQPost(AmiMsgQueue, AMI_MSG_VER, 0);
- }
-
-
- }
- /*----------------------------------------------------------------------
- // Function uses : s_frmAmiRxHandshake
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxHandshake(void)
- {
- Uart_Call_RevData( s_u8AmiRxBuf[6] );
-
- }
- static void s_frmAmiRxEvent(void)
- {
- Uart_Call_RevData( s_u8AmiRxBuf[6] );
-
- }
- static void s_frmAmiTxNull(U16 prm)
- {
- prm = prm;
- }
- /*----------------------------------------------------------------------
- // Function uses : s_frmAmiRxSysReset
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxSysReset(void)
- {
- gtPwrCfg.state = POWER_ON_RESET;
- gtAmi.workmode = 0; //进入测试模式
- }
- /*----------------------------------------------------------------------
- // Function uses : s_frmAmiRxSysReset
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxSysUpdateReset(void)
- {
- // SYS_SetUpdate();
- gtPwrCfg.state = POWER_ON_RESET;
- gtAmi.workmode = 0; //进入测试模式
- }
- /*----------------------------------------------------------------------
- // Function uses : s_frmAmiRxMic
- // Input parameter :
- // Output parameter :
- // Use Function :0:手柄麦克风,1:面板麦克风
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxMic(void)
- {
- if(s_u8AmiRxBuf[5]=='0') {
- //GpioMicSwOutputCfg (RESET);
- } else {
- // GpioMicSwOutputCfg (SET);
- }
- }
- /*----------------------------------------------------------------------
- // Function name : s_frmAmiRxUled
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxUled(void)
- {
- U08 u8cnt =0;
- u8cnt = s_u8AmiRxBuf[6] - 0x30;
- if (u8cnt >2) {
- u8cnt =2;
- }
- gtAmi.Uled = u8cnt;
-
- }
- /*----------------------------------------------------------------------
- // Function name : s_frmAmiRxUled
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxRelay(void)
- {
- U08 u8cnt =0;
- u8cnt = s_u8AmiRxBuf[6] - 0x30;
- if (u8cnt == 0) {
- gtAmi.Relay[0 ]= s_u8AmiRxBuf[8];
- if ( gtAmi.Relay[0 ] == '0') {
- RELAY_OFF;
- } else if ( gtAmi.Relay[0 ] == '1') {
- RELAY_ON;
- }
- } else if (u8cnt == 1) {
- gtAmi.Relay[1 ]= s_u8AmiRxBuf[8];
- } else {
- gtAmi.Relay[2 ]= s_u8AmiRxBuf[8];
- }
-
- }
- /*----------------------------------------------------------------------
- // Function name : s_frmAmiRxUled
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxDoorLed(void)
- {
- gtAmi.DoorLed[0] = s_u8AmiRxBuf[9]-0x30;
- gtAmi.DoorLed[1] = s_u8AmiRxBuf[10]-0x30;
- gtAmi.DoorLed[2] = s_u8AmiRxBuf[11]-0x30;
- }
- /*----------------------------------------------------------------------
- // Function name : s_frmAmiRxUled
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxSip(void)
- {
- if(s_u8AmiRxBuf[5]=='0')
- {
- gtAmi.RTL8152_flag=0;
- }
- else if(s_u8AmiRxBuf[5]=='1')
- {
- gtAmi.RTL8152_flag=1;
- }
- else if(s_u8AmiRxBuf[5]=='2')
- {
- gtAmi.RTL8152_flag=2;
- }
- }
- /*----------------------------------------------------------------------
- // Function name : s_frmAmiRxID
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxID(void)
- {
- OSQPost(AmiMsgQueue, AMI_MSG_ID, 0);
- }
- /*----------------------------------------------------------------------
- // Function name : s_frmAmiRxID
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 18:35pm, 17.JAN.2020, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxCallLed(void)
- {
- gtAmi.callled_red = s_u8AmiRxBuf[9] -0x30;
- gtAmi.callled_yel = s_u8AmiRxBuf[10] -0x30;
-
- }
- /*----------------------------------------------------------------------
- // Function name : s_frmAmiRxID
- // Input parameter :
- // Output parameter :
- // Use Function :
- // Reserve date : 18:35pm, 17.JAN.2020, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiRxAsk(void)
- {
- if (s_u8AmiRxBuf[5] ==0x49) {
- OSQPost(AmiMsgQueue, AMI_MSG_ID, 0);
- } else if (s_u8AmiRxBuf[5] ==0x56) {
- OSQPost(AmiMsgQueue, AMI_MSG_VER, 0);
- }
- }
- static void s_frmAmiRxNetReset(void)
- {
- if (s_u8AmiRxBuf[10] == '0') {
- POWER_RESET_OFF;
- } else if(s_u8AmiRxBuf[10] == '1') {
- POWER_RESET_ON;
- }
- }
- /*----------------------------------------------------------------------
- // Function uses : s_frmAmiTxKey
- // Input parameter :
- // Output parameter :
- // Use Function : SWC key code.
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiTxKey(U16 prm)
- {
- U08 *buf = (U08*)NULL;
- static U08 upresstwo =0;
-
- buf = &s_u8AmiTxBuf[0]; /* Obtain pointer to Tx buffer */
- *buf++ = '$';
- #ifdef WDFJKEY_MAC_ADD
- *buf++ = HI_BYTE( gtArm.FJKeymac); //dwdtest
- *buf++ = LO_BYTE( gtArm.FJKeymac); //dwdtest
- #endif
-
- *buf++ = 'K';
- *buf++ = 'E';
- *buf++ = 'Y';
-
- if ( gtArm.KeyState == 0x22) {
- *buf++ = 0x30+ 0xf;
- upresstwo =1;
- } else {
- if (HI_BYTE(prm)==8) {
- *buf++ = 0x30+0x0b;
- } else if (HI_BYTE(prm)==9) {
- *buf++ = 0x30+0x0c;
- }else if (HI_BYTE(prm)==0xa) {
- *buf++ = 0x30+0x0d;
- }else if (HI_BYTE(prm)==0xb) {
- *buf++ = 0x30+0x0e;
- } else {
- *buf++ = 0x30+HI_BYTE(prm);
- }
- }
-
- *buf++ = ',';
- gtAmi.startworkflag =1;
- if ((HI_BYTE(prm)<5) && (LO_BYTE(prm) == 0X02)){ //dwd200422
- prm &= 0xff00;
- prm |= 0x01;
- }
- *buf++ = 0X30+LO_BYTE(prm);
- // LED_ACK_TASK(prm);
- *buf++ = '#';
- #ifdef WDFJKEY_MAC_ADD
- Uart2PutChar(s_u8AmiTxBuf, 11);
- #else
- Uart2PutChar(s_u8AmiTxBuf, 9);
- #endif
- }
- /*----------------------------------------------------------------------
- // Function uses : s_frmAmiTxID
- // Input parameter :
- // Output parameter :
- // Use Function : DEVICE ID
- // Reserve date : 14:55pm, 6.Sep.2019, written by dwd
- ----------------------------------------------------------------------*/
- static void s_frmAmiTxID(U16 prm)
- {
- U08 *buf = (U08*)NULL;
- U08 u8cnt =0;
- buf = &s_u8AmiTxBuf[0]; /* Obtain pointer to Tx buffer */
- #ifdef WDFJKEY_MAC_ADD
- *buf++ = HI_BYTE( gtAmi.FJKeymac); //dwdtest
- *buf++ = LO_BYTE( gtAmi.FJKeymac); //dwdtest
- #endif
- *buf++ = '$';
- *buf++ = 'I';
- *buf++ = 'D';
- *buf++ = ',';
- for (u8cnt = 0;u8cnt <15;u8cnt ++) {
- // *buf ++ = DeviceID[u8cnt];
- }
- // *buf++ = 0X30+LO_BYTE(prm);
- *buf++ = '1';
- *buf++ = '#';
- #ifdef WDFJKEY_MAC_ADD
- Uart2PutChar(s_u8AmiTxBuf, 23);
- #else
- Uart2PutChar(s_u8AmiTxBuf, 21);
- #endif
- }
- static void s_frmAmiTxVersion(U16 prm)
- {
- U08 *buf = (U08*)NULL;
- U08 u8cnt =0;
- buf = &s_u8AmiTxBuf[0]; /* Obtain pointer to Tx buffer */
- #ifdef WDFJKEY_MAC_ADD
- *buf++ = HI_BYTE( gtAmi.FJKeymac); //dwdtest
- *buf++ = LO_BYTE( gtAmi.FJKeymac); //dwdtest
- #endif
- *buf++ = '$';
- *buf++ = 'V';
- *buf++ = ',';
- for (u8cnt = 0;u8cnt <15;u8cnt ++) {
- *buf ++ = DeviceVisionInfo[u8cnt];
- }
- // *buf++ = 0X30+LO_BYTE(prm);
- *buf++ = 'F';
- *buf++ = '#';
- #ifdef WDFJKEY_MAC_ADD
- Uart2PutChar(s_u8AmiTxBuf, 22);
- #else
- Uart2PutChar(s_u8AmiTxBuf, 20);
- #endif
- }
- //==============================================================
- // End Of File
- //==============================================================
|