optical/NxFuncs/comm/ocom.h

124 lines
2.5 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#ifndef __OCOM_H__
#define __OCOM_H__
#include "config.h"
//------------------------------------------------------------------------
// ͨѶ<CDA8><D1B6><EFBFBD>ݰ<EFBFBD><DDB0><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> |
|-------------------------------------------------------------------|-----------|
| B0 B1 B2 | B3 | B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 | B14 B15 |
|-------------------------------------------------------------------|-----------|
| <EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ | B4--B13<EFBFBD><EFBFBD> |
| | ID | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ˵<EFBFBD><EFBFBD> |16λ<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD> |
| 0xEB,0x90,0xD7| | | |
|-------------------------------------------------------------------|-----------|
*/
//------------------------------------
#define DC_SYNC_LEN 3 // <20><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
#define DC_CMD_LEN 1 // <20><><EFBFBD><EFBFBD><EEB3A4>
#define DC_CONT_LEN 10 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
#define DC_CHK_LEN 2 // У<><D0A3><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>
#define DC_CHECK_LEN (DC_CMD_LEN+DC_CONT_LEN)
#define LEN_OCOM_PKT (DC_SYNC_LEN+DC_CMD_LEN+DC_CONT_LEN+DC_CHK_LEN)
//------------------------------------
#ifdef _IN_OCOM_C
const u8 OCOM_SYNC[DC_SYNC_LEN] =
{
0xEB,
0x90,
0xD7,
};
#else
extern const u8 OCOM_SYNC[DC_SYNC_LEN];
#endif
//------------------------------------
typedef union
{
struct
{
u8 normal[LEN_OCOM_PKT];
} __attribute__ ((packed)) buff; // buff<66><66>ʽ
struct
{
u8 sync[DC_SYNC_LEN];
u8 cmd;
u8 content[DC_CONT_LEN];
u16 check;
} __attribute__ ((packed)) normal; // ͨ<>÷<EFBFBD>ʽ
struct
{
u8 sync[DC_SYNC_LEN];
u8 cmd;
u8 toggle;
u8 attr;
s32 ax;
s32 ay;
u16 check;
} __attribute__ ((packed)) offcmd; // <20>߼<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
u8 sync[DC_SYNC_LEN];
u8 cmd;
u8 toggle;
u16 exlen;
u8 data1[7];
u16 check;
} __attribute__ ((packed)) d21cmd; // D21<32><31><EFBFBD><EFBFBD>
}OComPacket;
typedef struct
{
int (*SendOComData)(u8 *, int);
int (*GetOComData)(u8 *, int);
int (*GetRsvLen)(void);
int (*GetTrsFreeLen)(void);
void (*Delay)(u32);
}OComExFuns;
//------------------------------------
// <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
void ReadOComBuffEmpty(OComExFuns * funs);
int GetAOComPacket(OComExFuns * funs, OComPacket * pPacket);
int GetOComExData(OComExFuns * funs, u8 * pBuff, int exlen);
int SendAOComPacket(OComExFuns * funs, OComPacket * pPacket);
int SendOComExData(OComExFuns * funs, u8 * pBuff, int exlen);
int PacketAOCom(OComPacket * pPacket);
#define GetAOComNormalPacket GetAOComPacket
#endif