adapted to new protocol specification.
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
#include <stdbool.h>
|
||||
|
||||
#define PAYLOAD_FLJ 78
|
||||
#define PAYLOAD_LJ 156
|
||||
#define PAYLOAD_LJ 168
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* Revisions: Rev 0.0
|
||||
* History:
|
||||
* [2023-05-06]: Initial version.
|
||||
* [2023-09-13]: Update to 485 portocol-20220816
|
||||
* [2023-09-13]: Update to 485 protocol-20220816
|
||||
*
|
||||
* Copyright(c) 2021 Beijing Institute of Technology.
|
||||
* Lab of Communication and Network
|
||||
@@ -105,6 +105,7 @@
|
||||
|
||||
// System info update
|
||||
#define CMD_SYS_INFO 0x33
|
||||
#define SYS_INFO_OFFSET 2
|
||||
// -- Request
|
||||
// -- -- 54 byte system info
|
||||
// -- Response
|
||||
@@ -112,6 +113,7 @@
|
||||
|
||||
// Data Send Test Command
|
||||
#define CMD_FLJ_SEND 0xE4
|
||||
#define FLJ_DATA_OFFSET 2
|
||||
// -- Request
|
||||
// -- -- 78 byte payload
|
||||
// -- Response
|
||||
@@ -119,6 +121,7 @@
|
||||
|
||||
// Data Send Test Command
|
||||
#define CMD_LJ_SEND 0xF4
|
||||
#define LJ_DATA_OFFSET 2
|
||||
// -- Request
|
||||
// -- -- 156 byte payload
|
||||
// -- Response
|
||||
@@ -139,16 +142,25 @@
|
||||
#define WD_LJ_POLL 0x02
|
||||
#define LJ_POLL_CODE 0x77
|
||||
// -- Response
|
||||
#define LJ_POLL_RESP_LEN 156
|
||||
#define LJ_POLL_RESP_LEN 168
|
||||
// -- -- received 156 byte payload
|
||||
|
||||
// Remote Test
|
||||
#define CMD_RM_TEST 0xE6
|
||||
// Remote Test FLJ
|
||||
#define CMD_FLJ_RM_TEST 0xE6
|
||||
// -- Request
|
||||
// -- -- none, response with roll call (after roll call resp)
|
||||
#define WD_FLJ_RM_TEST 0x02
|
||||
#define FLJ_RM_TEST_CODE 0x99
|
||||
// -- Response
|
||||
#define RM_TEST_LEN 210
|
||||
// -- -- received 208 byte Remote Test infomation
|
||||
#define FLJ_RM_TEST_RESP_LEN 158
|
||||
|
||||
// Remote Test LJ
|
||||
#define CMD_LJ_RM_TEST 0xF6
|
||||
// -- Request
|
||||
#define WD_LJ_RM_TEST 0x02
|
||||
#define LJ_RM_TEST_CODE 0x99
|
||||
// -- Response
|
||||
#define LJ_RM_TEST_RESP_LEN 158
|
||||
|
||||
|
||||
// My Production Type
|
||||
#define MY_PRD_ID PRD_DL_K
|
||||
@@ -262,6 +274,11 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
case CMD_SELF_TEST:
|
||||
{
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
if (sysbusRsp == NULL) {
|
||||
DBG_ERROR("Failed to allocate memory for SELF TEST Response!\n");
|
||||
Status = ENOMEM;
|
||||
break;
|
||||
}
|
||||
sysbusRsp->len = ST_RSP_LEN;
|
||||
memset(sysbusRsp->data, 0x00, ST_RSP_LEN);
|
||||
sysbusRsp->data[WD_CMD] = CMD_SELF_TEST;
|
||||
@@ -271,7 +288,8 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
sysbusRsp->data[WD_ST_RET] = ST_RET_OK;
|
||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||
{
|
||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
free(sysbusRsp);
|
||||
DBG_ERROR("SystemBus::TX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
break;
|
||||
}
|
||||
@@ -281,11 +299,17 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
case CMD_DATA_TEST_A:
|
||||
{
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
if (sysbusRsp == NULL) {
|
||||
DBG_ERROR("Failed to allocate memory for DATA TEST A Response!\n");
|
||||
Status = ENOMEM;
|
||||
break;
|
||||
}
|
||||
sysbusRsp->len = DATA_TEST_RSP_A_LEN;
|
||||
memcpy(sysbusRsp->data, sysbusReq->data, DATA_TEST_RSP_A_LEN);
|
||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||
{
|
||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
free(sysbusRsp);
|
||||
DBG_ERROR("SystemBus::TX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
break;
|
||||
}
|
||||
@@ -295,11 +319,17 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
case CMD_DATA_TEST_B:
|
||||
{
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
if (sysbusRsp == NULL) {
|
||||
DBG_ERROR("Failed to allocate memory for DATA TEST B Response!\n");
|
||||
Status = ENOMEM;
|
||||
break;
|
||||
}
|
||||
sysbusRsp->len = DATA_TEST_RSP_B_LEN;
|
||||
memcpy(sysbusRsp->data, sysbusReq->data, DATA_TEST_RSP_B_LEN);
|
||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||
{
|
||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
free(sysbusRsp);
|
||||
DBG_ERROR("SystemBus::TX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
break;
|
||||
}
|
||||
@@ -317,36 +347,42 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
}
|
||||
case CMD_SYS_INFO:
|
||||
{
|
||||
SysMonitor_UpdateSysinfoRaw(data + 2);
|
||||
SysMonitor_UpdateSysinfoRaw(data + SYS_INFO_OFFSET);
|
||||
Status = SUCCESS;
|
||||
break;
|
||||
}
|
||||
// TODO
|
||||
case CMD_FLJ_SEND:
|
||||
{
|
||||
SysMonitor_UpdateSendPayloadFLJRaw(data + 2); // ommit 2 bytes control info
|
||||
SysMonitor_UpdateSendPayloadFLJRaw(data + FLJ_DATA_OFFSET); // omit control info
|
||||
break;
|
||||
}
|
||||
case CMD_LJ_SEND:
|
||||
{
|
||||
SysMonitor_UpdateSendPayloadLJRaw(data + 2); // ommit 2 bytes control info
|
||||
SysMonitor_UpdateSendPayloadLJRaw(data + LJ_DATA_OFFSET); // omit control info
|
||||
break;
|
||||
}
|
||||
case CMD_FLJ_POLL:
|
||||
{
|
||||
if (data[WD_FLJ_POLL] != FLJ_POLL_CODE)
|
||||
{
|
||||
DBG_WARNING("SystemBus::Invalid roll call code!\n");
|
||||
DBG_ERROR("SystemBus::Invalid roll call code!\n");
|
||||
Status = EIGNORE;
|
||||
break;
|
||||
}
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
if (sysbusRsp == NULL) {
|
||||
DBG_ERROR("Failed to allocate memory for FLJ POLL Response!\n");
|
||||
Status = ENOMEM;
|
||||
break;
|
||||
}
|
||||
sysbusRsp->len = FLJ_POLL_RESP_LEN;
|
||||
sysbusRsp->data[WD_CMD] = WD_FLJ_POLL;
|
||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
SysMonitor_GetRecvPayloadFLJRaw(sysbusRsp->data + 2); // ommit 2 bytes control info
|
||||
SysMonitor_GetRecvPayloadFLJRaw(sysbusRsp->data + FLJ_DATA_OFFSET); // omit control info
|
||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||
{
|
||||
free(sysbusRsp);
|
||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
break;
|
||||
@@ -357,7 +393,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
// sysbusRsp->len = RM_TEST_LEN;
|
||||
// sysbusRsp->data[WD_CMD] = CMD_RM_TEST;
|
||||
// sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
// SysMonitor_GetSyslogRaw(sysbusRsp->data + 2); //ommit 2 bytes control info
|
||||
// SysMonitor_GetSyslogRaw(sysbusRsp->data + 2); //omit control info
|
||||
// if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false){
|
||||
// DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
// Status = EQUEUE;
|
||||
@@ -375,12 +411,18 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
break;
|
||||
}
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
if (sysbusRsp == NULL) {
|
||||
DBG_ERROR("Failed to allocate memory for LJ POLL Response!\n");
|
||||
Status = ENOMEM;
|
||||
break;
|
||||
}
|
||||
sysbusRsp->len = LJ_POLL_RESP_LEN;
|
||||
sysbusRsp->data[WD_CMD] = WD_LJ_POLL;
|
||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
SysMonitor_GetRecvPayloadLJRaw(sysbusRsp->data + 2); // ommit 2 bytes control info
|
||||
SysMonitor_GetRecvPayloadLJRaw(sysbusRsp->data + 2); // omit control info
|
||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false)
|
||||
{
|
||||
free(sysbusRsp);
|
||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
break;
|
||||
@@ -391,7 +433,7 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
// sysbusRsp->len = RM_TEST_LEN;
|
||||
// sysbusRsp->data[WD_CMD] = CMD_RM_TEST;
|
||||
// sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
// SysMonitor_GetSyslogRaw(sysbusRsp->data + 2); //ommit 2 bytes control info
|
||||
// SysMonitor_GetSyslogRaw(sysbusRsp->data + 2); //omit control info
|
||||
// if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false){
|
||||
// DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
// Status = EQUEUE;
|
||||
@@ -400,6 +442,64 @@ int32_t SystemBus_HandleCmd(SYSBUS *instPtr)
|
||||
Status = SUCCESS;
|
||||
break;
|
||||
}
|
||||
case CMD_FLJ_RM_TEST:
|
||||
{
|
||||
if (data[WD_FLJ_RM_TEST] != FLJ_RM_TEST_CODE)
|
||||
{
|
||||
DBG_WARNING("SystemBus::Invalid remote test code!\n");
|
||||
Status = EIGNORE;
|
||||
break;
|
||||
}
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
if (sysbusRsp == NULL) {
|
||||
DBG_ERROR("Failed to allocate memory for FLJ REMOTE TEST Response!\n");
|
||||
Status = ENOMEM;
|
||||
break;
|
||||
}
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
sysbusRsp->len = FLJ_RM_TEST_RESP_LEN;
|
||||
memset(sysbusRsp->data, FLJ_RM_TEST_RESP_LEN);
|
||||
sysbusRsp->data[WD_CMD] = CMD_FLJ_RM_TEST;
|
||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
|
||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false){
|
||||
free(sysbusRsp);
|
||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
break;
|
||||
}
|
||||
Status = SUCCESS;
|
||||
break;
|
||||
}
|
||||
case CMD_LJ_RM_TEST:
|
||||
{
|
||||
if (data[WD_LJ_RM_TEST] != LJ_RM_TEST_CODE)
|
||||
{
|
||||
DBG_WARNING("SystemBus::Invalid remote test code!\n");
|
||||
Status = EIGNORE;
|
||||
break;
|
||||
}
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
if (sysbusRsp == NULL) {
|
||||
DBG_ERROR("Failed to allocate memory for LJ REMOTE TEST Response!\n");
|
||||
Status = ENOMEM;
|
||||
break;
|
||||
}
|
||||
sysbusRsp = malloc(sizeof(SYSBUS_UART_FRAME));
|
||||
sysbusRsp->len = LJ_RM_TEST_RESP_LEN;
|
||||
memset(sysbusRsp->data, LJ_RM_TEST_RESP_LEN);
|
||||
sysbusRsp->data[WD_CMD] = CMD_LJ_RM_TEST;
|
||||
sysbusRsp->data[WD_PRD] = MY_PRD_ID;
|
||||
|
||||
if (CircQueuePush(instPtr->txQueue, (void *)sysbusRsp) == false){
|
||||
free(sysbusRsp);
|
||||
DBG_WARNING("SystemBus::TX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
break;
|
||||
}
|
||||
Status = SUCCESS;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
DBG_ERROR("SystemBus::Unknown command code!\n");
|
||||
@@ -491,7 +591,7 @@ int32_t SystemBus_RxIntrHandler(SYSBUS *instPtr)
|
||||
}
|
||||
if (CircQueuePush(instPtr->rxQueue, (void *)sysbusReq) == false)
|
||||
{
|
||||
DBG_WARNING("SystemBus::RX Queue overflowed!\n");
|
||||
DBG_ERROR("SystemBus::RX Queue overflowed!\n");
|
||||
Status = EQUEUE;
|
||||
goto recv_error;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user