optical/NxFuncs/comm/mtcomm.h

186 lines
4.5 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#ifndef __MTCOMM_H__
#define __MTCOMM_H__
#include "config.h"
//------------------------------------------------------------------------
/*
<EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<EFBFBD><EFBFBD><EFBFBD>ƽӿ<EFBFBD>
// Э<>
ͨ<EFBFBD><EFBFBD>485ͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD>Թ<EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
485<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD> 115200 bps
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡: 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD><EFBFBD>8<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ֹͣλ<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
8<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>1<EFBFBD><EFBFBD><EFBFBD>ֽڣ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>չ̶<EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>
|---------------------------------------------------------------------------------------|
| B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 |
|---------------|---------------|-----------|-------------------------------|-----------|
| <EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ͷ | Ŀ<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD> | <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | У<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|---------------|---------------|-----------|-------------------------------|-----------|
| <EFBFBD>̶<EFBFBD><EFBFBD>ֽ<EFBFBD> | Ŀ<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD> | <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | У<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
| | | |-------------------------------|-----------|
| | 0 <EFBFBD><EFBFBD>վ | | | B1--B6<EFBFBD><EFBFBD> |
| 0xEB | 1--250 <EFBFBD><EFBFBD>վ | 1--255 | 4<EFBFBD><EFBFBD><EFBFBD>ֽڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 8λCRCУ<EFBFBD><EFBFBD> |
| | 255 <EFBFBD> | | | |
| | 251--254 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | | | |
|---------------|---------------|-----------|-------------------------------|-----------|
| | | | | |
|---------------------------------------------------------------------------------------|
<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD>B0--B7<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ϊ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>ͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>лذ<EFBFBD><EFBFBD><EFBFBD>ͨѶ<EFBFBD><EFBFBD>ͨѶ<EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>
1.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>
3.<EFBFBD>ȴ<EFBFBD><EFBFBD>ذ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10ms<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD>ذ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪͨѶ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
4.<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>1
<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>
1.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD>
2.<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬵ȴ<EFBFBD>1ms<EFBFBD><EFBFBD>
3.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻذ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
4.<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лذ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>л<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><EFBFBD><EFBFBD>ִֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
*/
//------------------------------------
#define MT_SYNC_LEN 1 // <20><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
#define MT_ADDR_LEN 1 // <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
#define MT_CMD_LEN 1 // <20><><EFBFBD><EFBFBD><EEB3A4>
#define MT_CONT_LEN 4 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
#define MT_CHK_LEN 1 // У<><D0A3><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>
#define MT_CHECK_LEN (MT_ADDR_LEN+MT_CMD_LEN+MT_CONT_LEN)
#define LEN_MTCOMM_PKT (MT_SYNC_LEN+MT_ADDR_LEN+MT_CMD_LEN+MT_CONT_LEN+MT_CHK_LEN)
//------------------------------------
#ifdef _IN_MTCOMM_C
const u8 MTCOMM_SYNC[MT_SYNC_LEN] =
{
0xEB,
};
#endif
//------------------------------------
// <20><><EFBFBD>ݽṹ
typedef struct
{
u8 sync[MT_SYNC_LEN];
//--------
u8 addr;
u8 cmd;
//-----
u8 content[MT_CONT_LEN];
//--------
u8 crc8;
} __attribute__ ((packed)) MtCommPacket;
//------------------------------------
#define MTTS_ADDR_MAIN 0 // <20><>վ<EFBFBD><D5BE>ַ
#define MTTS_ADDR_BROADCAST 0xFF // <20><EFBFBD><E3B2A5>ַ
//------------------------------------
// <20><><EFBFBD><EFBFBD><EEB6A8>
// <20><>վ<EFBFBD><D5BE><EFBFBD><EFBFBD>վ
#define MTCMD_ADDR_INIT 0x01 // վ<>ų<EFBFBD>ʼ<EFBFBD><CABC>
#define MTCMD_SET_NEW_AD 0x02 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><D5BE>
#define MTCMD_GET_INFO 0x03 // <20><>ѯ<EFBFBD><D1AF>վ<EFBFBD><D5BE>Ϣ
#define MTCMD_READ_DATA 0x04 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
#define MTCMD_WRITE_DATA 0x05 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>վ<EFBFBD><D5BE><EFBFBD><EFBFBD>վ
#define MTCMD_REV_INFO 0x83 // <20><>ѯ<EFBFBD><D1AF>վ<EFBFBD><D5BE>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>Ļذ<C4BB>
#define MTCMD_REV_DATA 0x84 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļذ<C4BB>
//------------------------------------------------------
#define MTCOMM_NONE 0
#define MTCOMM_MASTER 1 // <20><><EFBFBD>ڵ<EFBFBD>
#define MTCOMM_SLAVE 2 // <20>ӽڵ<D3BD>
// <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
#ifndef MTCOMM_AS
#define MTCOMM_AS MTCOMM_NONE
#endif
#if (MTCOMM_AS != MTCOMM_NONE && MTCOMM_AS != MTCOMM_MASTER && MTCOMM_AS != MTCOMM_SLAVE)
#undef MTCOMM_AS
#define MTCOMM_AS MTCOMM_NONE
#endif
//------------------------------------------------------
// ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
typedef struct
{
int (*SendMtCommData)(u8 *, int); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>
int (*GetMtCommData)(u8 *, int); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>
int (*GetMtRsvLen)(void); // <20>õ<EFBFBD><C3B5>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ⱥ<EFBFBD><C8BA><EFBFBD>
int (*GetTrsFreeLen)(void); // <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ<EFBFBD><C8BA><EFBFBD>
void (*Set485TxEnOn)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򿪺<EFBFBD><F2BFAABA><EFBFBD>
void (*Set485TxEnOff)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رպ<D8B1><D5BA><EFBFBD>
}MtCommExFuncs;
//------------------------------------------------------
// <20><>ʼ<EFBFBD><CABC>
// ע<><D7A2><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<38><35><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
void InitMtComm(MtCommExFuncs * pExFuncs);
// <20><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>շ<EFBFBD><D5B7><EFBFBD><EFBFBD>̡<EFBFBD>
// <20><>Ҫ<EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
void MtCommAsyncTask(void);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD>CRC
int PacketAMtComm(MtCommPacket * pPacket);
// У<><D0A3>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
// <20><>֤ͬ<D6A4><CDAC><EFBFBD>ֺ<EFBFBD>CRC
int CheckAMtPacket(MtCommPacket * pPacket);
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>ID
int SendAMtPacket(MtCommPacket * pPacket, int hasback);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
int GetSendStatus(int id);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
int GetSendResult(int id);
// <20><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pPacket<65><74>
int GetAMtPacket(MtCommPacket * pPacket);
#endif