📄 protocol.c
字号:
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else if( DI0_L <= 13 )
{
DI1DI0 = BASE_PUBV+(DI0_L-1)*BASE_PUBV_OFFSET;
FrameBuffer[FRM_DATALEN] = 3;
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else if( DI0_L ==14 )
{
DI1DI0 = ADDR_OF_WEEKEND;
FrameBuffer[FRM_DATALEN] = 1;
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else if( DI0_L == 0x0F )
{
FramRead( ADDR_OF_PUB_VACATION_COUNT, &count, 1 );
count = Bcd2HexChar( count );
for( i = 0; i < count; i++ )
{
FramRead( BASE_PUBV+BASE_PUBV_OFFSET*i, &FrameBuffer[FRM_DATA+2+BASE_PUBV_OFFSET*i], BASE_PUBV_OFFSET );
}
MemSet0xFF( &FrameBuffer[FRM_DATA+2+BASE_PUBV_OFFSET*i], (13-i)*BASE_PUBV_OFFSET );
FramRead( ADDR_OF_WEEKEND, &FrameBuffer[FRM_DATA+41], 1 );
FrameBuffer[FRM_DATA+42] = 0xAA;
FrameBuffer[FRM_DATALEN] = 41;
return(RET_SEND_RIGHT_RESPONSION);
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsReadProcC8xx(void)
{
if( DI0_H == 3 )
{
if( DI0_L == 2 )
{
DI1DI0 = ADDR_OF_POWER_FREEZE_TIME;
FrameBuffer[FRM_DATALEN] = 2;
return( RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION );
}
else if( DI0_L == 3 )
{
FrameBuffer[FRM_DATALEN] = 2;
FrameBuffer[FRM_DATA+2] = 01;
FrameBuffer[FRM_DATA+3] = 01;
return( RET_SEND_RIGHT_RESPONSION );
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsReadProcD2xx(void)
{
if(DI0_H==0x01)
{
if(DI0_L==0)
{
FrameBuffer[FRM_DATALEN]=1;
FrameBuffer[FRM_DATA+2]=RelayerState;
return(RET_SEND_RIGHT_RESPONSION);
}
else if(DI0_L==1)
{
RelayerState|=BIT0;
RelayerState&=~BIT1;
EXT_IO_RELAY_1_ON();
}
else if(DI0_L==2)
{
RelayerState&=~BIT0;
RelayerState|=BIT1;
EXT_IO_RELAY_1_OFF();
}
else if(DI0_L==3)
{
RelayerState|=BIT2;
RelayerState&=~BIT3;
EXT_IO_RELAY_2_ON();
}
else if(DI0_L==4)
{
RelayerState&=~BIT2;
RelayerState|=BIT3;
EXT_IO_RELAY_2_OFF();
}
else
{
return RET_NO_RESPONSION;
}
FramWrite(ADDR_OF_RELAYER_STATE,&RelayerState,1);
FrameBuffer[FRM_DATALEN]=1;
FrameBuffer[FRM_DATA+2]=RelayerState;
return(RET_SEND_RIGHT_RESPONSION);
}
return RET_NO_RESPONSION;
}
static unsigned char _SlvsReadProcD5xx(void)
{
unsigned char temp;
temp = FrameBuffer[DI0];
if( ( temp >= 0x01 ) && ( temp <= 0x40 ) )
{
DI1DI0=INFO_BASE+((temp-1)/8)*DF_PAGE_LEN+((temp-1)%8)*64;
FrameBuffer[FRM_DATALEN]=64;
return(RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V);
}
return RET_NO_RESPONSION;
}
static unsigned char _SlvsReadProcD6xx(void)
{
if( DI0_H < 3 )
{
if( DI0_L < 4 )
{
DI1DI0 = ADDR_OF_PHASEPWR_START+4+DI0_H*16+DI0_L*4;
FrameBuffer[FRM_DATALEN] = 4;
return(RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A);
}
}
else if( DI0_H == 3 )
{
if( DI0_L < 8 )
{
DI1DI0 = ADDR_OF_LINEPWR_START+4+DI0_L*4;
FrameBuffer[FRM_DATALEN] = 4;
return(RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A);
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsReadProcDDxx(void)
{
unsigned char di0_h = DI0_H, di0_l = DI0_L;
if( di0_h == 0x01 )
{
if( di0_l < 6 )
{
DI1DI0 = ADDR_OF_DAY_DATA_START+di0_l*16;
FrameBuffer[FRM_DATALEN] = 16;
return(RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A);
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsReadProcDExx(void)
{
unsigned char di0_h = DI0_H-1, di0_l = DI0_L;
if( di0_h <= 0x0D )
{
DI1DI0 = ZERO_FREEZE_POWER_BASE + (ushort)(di0_h/2)*(ushort)OFFSET_ZERO_FREEZE_POWER + (di0_h%2)*20;
if( di0_l < 5 )
{
DI1DI0 += di0_l * 4;
FrameBuffer[FRM_DATALEN] = 4;
return(RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V);
}
else if( di0_l == 0x0F )
{
FrameBuffer[FRM_DATALEN] = 20;
return(RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V);
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsReadProcE0xx(void)
{
unsigned short count;
unsigned char di0_h=DI0_H,di0_l=DI0_L;
if( di0_h <= 0x04 )
{
if( di0_l <= 3 )
{
FrameBuffer[FRM_DATALEN] = 2;
DI1DI0 = ADDR_OF_LOST_REC+LOST_REC_OFFSET*di0_h+di0_l*2;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
else if( di0_l <= 7 )
{
FrameBuffer[FRM_DATALEN] = 3;
DI1DI0 = ADDR_OF_LOST_REC+LOST_REC_OFFSET*di0_h+LOST_REC_LONG+(di0_l-4)*3;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
else if( di0_h <= 0x07 )
{
if( di0_l <= 9 )
{
FrameBuffer[FRM_DATALEN] = EVT_LOST_REC_OFFSET;
DI1DI0 = EVT_LOST_REC_BASE+EVT_LOST_REC_LEN*(di0_h-5)+EVT_LOST_REC_OFFSET*di0_l;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
else if( ( di0_h <= 0x0D ) && ( di0_h >= 0x09 ) )
{
if( di0_l <= 0x04 )
{
FrameBuffer[FRM_DATALEN] = 2;
if( di0_l == 0x00 )
{
DI1DI0 = ADDR_OF_LOWV_REC+LOWV_REC_OFFSET*(di0_h-9);
}
else if( di0_l == 0x01 )
{
DI1DI0 = ADDR_OF_LOWV_ALL_REC+LOWV_ALL_REC_OFFSET*(di0_h-9);
}
else
{
DI1DI0 = ADDR_OF_LOWV_REC+LOWV_REC_OFFSET*(di0_h-9)+(di0_l-1)*2;
}
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
else if( di0_l < 0x0A )
{
FrameBuffer[FRM_DATALEN] = 3;
if( di0_l == 0x05 )
{
DI1DI0 = ADDR_OF_LOWV_REC+LOWV_REC_OFFSET*(di0_h-9)+LVI_REC_LONG;
}
else if( di0_l == 0x06 )
{
DI1DI0 = ADDR_OF_LOWV_ALL_REC+LOWV_ALL_REC_OFFSET*(di0_h-9)+3;
}
else
{
DI1DI0 = ADDR_OF_LOWV_REC+LOWV_REC_OFFSET*(di0_h-9)+LVI_REC_LONG+(di0_l-6)*3;
}
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
else if( di0_h == 0x0E )
{
if( di0_l < 0x0A )
{
DI1DI0 = EVT_LOWV_ALL_REC_BASE+EVT_LOWV_ALL_REC_OFFSET*di0_l;
FrameBuffer[FRM_DATALEN] = EVT_LOWV_ALL_REC_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
else if( di0_h == 0x0F )
{
if( di0_l < 0x0A )
{
count = ReadTimesMod10( ADDR_OF_LVI_TOTAL_COUNT );
if( di0_l <= count ) count = count-di0_l;
else count = count+10-di0_l;
DI1DI0 = EVT_LOWV_REC_BASE+(ulong)(count/5)*DF_PAGE_LEN+EVT_LVI_REC_OFFSET*(count%5);
FrameBuffer[FRM_DATALEN] = EVT_LVI_REC_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsReadProcE1xx(void)
{
unsigned short addr;
unsigned char count;
unsigned char di0_l=DI0_L,di0_h=DI0_H;
if( di0_h <= 0x01 )
{
if( di0_l < 0x0A )
{
addr = ADDR_OF_LVI_TOTAL_COUNT+2+di0_h*2;
count = ReadTimesMod10( addr );
if( di0_l <= count ) count = count-di0_l;
else count = count+10-di0_l;
DI1DI0 = EVT_LOWV_REC_BASE+DF_PAGE_LEN*((di0_h+1)*2+count/5)+EVT_LVI_REC_OFFSET*(count%5);
FrameBuffer[FRM_DATALEN] = EVT_LVI_REC_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
else if( di0_h == 0x03 )
{
if( di0_l <= 0x04 )
{
DI1DI0 = ADDR_OF_VOLTAGE_OVER+VOLTAGE_OVER_OFFSET*di0_l;
FrameBuffer[FRM_DATALEN] = VOLTAGE_OVER_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
else if( di0_h <= 0x06 )
{
if( di0_l <= 0x09 )
{
DI1DI0 = EVT_OV_REC_BASE+EVT_OV_REC_LEN*(di0_h-4)+EVT_OV_REC_OFFSET*di0_l;
FrameBuffer[FRM_DATALEN] = EVT_OV_REC_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
else if( ( di0_h >= 0x08 ) && ( di0_h <= 0x0C ) )
{
if( di0_l <= 0x07 )
{
if( di0_l <= 0x03 )
{
FrameBuffer[FRM_DATALEN] = 2;
DI1DI0 = ADDR_OF_LOWI_REC+LOWI_REC_OFFSET*(di0_h-8)+di0_l*2;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
else if( di0_l <= 0x07 )
{
FrameBuffer[FRM_DATALEN] = 3;
DI1DI0 = ADDR_OF_LOWI_REC+LOWI_REC_OFFSET*(di0_h-8)+(di0_l-4)*3+LVI_REC_LONG;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
}
else if( di0_h <= 0x0F )
{
if( di0_l <= 0x09 )
{
addr = ADDR_OF_LVI_TOTAL_COUNT+6+(di0_h-0x0D)*2;
count = ReadTimesMod10( addr );
if( di0_l <= count ) count = count-di0_l;
else count = 10+count-di0_l;
DI1DI0 = EVT_LOWI_REC_BASE+DF_PAGE_LEN*((di0_h-0x0D)*2+count/5)+EVT_LVI_REC_OFFSET*(count%5);
FrameBuffer[FRM_DATALEN] = EVT_LVI_REC_OFFSET-1;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsReadProcE2xx(void)
{
if( DI0_H == 0x00 )
{
if( DI0_L <= 0x04 )
{
DI1DI0 = ADDR_OF_CURRENT_IMBA_REC+CURRENT_IMBA_REC_OFFSET*DI0_L;
FrameBuffer[FRM_DATALEN] = CURRENT_IMBA_REC_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
else if( DI0_H == 0x01 )
{
if( DI0_L <= 0x09 )
{
DI1DI0 = EVT_CURRENT_IMBA_BASE+EVT_CURRENT_IMBA_OFFSET*DI0_L;
FrameBuffer[FRM_DATALEN] = EVT_CURRENT_IMBA_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
else if( DI0_H == 0x03 )
{
if( DI0_L <= 0x04 )
{
DI1DI0 = ADDR_OF_WATT_OVER_REC+WATT_OVER_REC_OFFSET*DI0_L;
FrameBuffer[FRM_DATALEN] = WATT_OVER_REC_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
else if( DI0_H == 0x04 )
{
if( DI0_L <= 0x09 )
{
DI1DI0 = EVT_WATT_OVER_BASE+EVT_WATT_OVER_OFFSET*DI0_L;
FrameBuffer[FRM_DATALEN] = EVT_WATT_OVER_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
else if( DI0_H == 0x06 )
{
if( DI0_L <= 0x04 )
{
DI1DI0 = ADDR_OF_REQ_OVER_REC+REQ_OVER_REC_OFFSET*DI0_L;
FrameBuffer[FRM_DATALEN] = REQ_OVER_REC_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
else if( DI0_H == 0x07 )
{
if( DI0_L <= 0x09 )
{
DI1DI0 = EVT_REQ_OVER_BASE+EVT_REQ_OVER_OFFSET*DI0_L;
FrameBuffer[FRM_DATALEN] = EVT_REQ_OVER_OFFSET;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_V );
}
}
else if( DI0_H == 0x09 )
{
if( DI0_L <= 0x02 )
{
DI1DI0 = ADDR_OF_COVER_UP_OPEN+COVER_UP_OPEN_SIZE*DI0_L;
FrameBuffer[FRM_DATALEN] = 2;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
else if( DI0_H == 0x0A )
{
if( DI0_L <= 0x02 )
{
DI1DI0 = ADDR_OF_COVER_UP_OPEN+COVER_UP_OPEN_SIZE*DI0_L+COVER_UP_OPEN_TIME;
FrameBuffer[FRM_DATALEN] = 50;
return( RET_SEND_RIGHT_RESPONSION|RET_READ_E2PROM_A );
}
}
else if( DI0_H == 0x0B )
{
if( DI0_L <= 0x04 )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -