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