Ejemplo n.º 1
0
BOOL COsakiParser::OnDataFrame(DATASTREAM *pStream, BYTE *pszBuffer, int nLength, void *pCallData)
{
    ONDEMANDPARAM *pOndemand = (ONDEMANDPARAM *)pCallData;
    OSAKI_OPTION_TBL       *pOsakiOptionTbl;
    int nIndex = pOndemand->nIndex;
    unsigned long long int value;

    XDEBUG(" OSAKI response payload : %d\r\n", nLength);
    XDUMP((const char *)pszBuffer, nLength, TRUE);

    if(!pOndemand) return TRUE;

    pOsakiOptionTbl = &((OSAKI_OPTION_TBL *)pOndemand->pOndemandCallData)[nIndex];
    if(pOsakiOptionTbl->nStatus == 0 && pOsakiOptionTbl->szDesc == NULL) return  TRUE;

    switch(pOsakiOptionTbl->nStatus)
    {
        case IDX_REQ_PULSE:         // Current Pulse
            value = AsciiToInt(pszBuffer + nLength - 7, 7); XDEBUG(" OSAKI   Power : %ld KWh\r\n", value);
            pOndemand->nCurPulse = (UINT) value;
            break;
        case IDX_REQ_RELAY_STATUS:         // Current Pulse
            value = AsciiToInt(pszBuffer + 12, 2); XDEBUG(" Relay : %ld\r\n", value);
            switch((BYTE)value) {
                case 0x00: pOndemand->nEnergyLevel = ENERGY_LEVEL_MAX; break;
                case 0x01: pOndemand->nEnergyLevel = ENERGY_LEVEL_MIN; break;
                default: pOndemand->nEnergyLevel = ENERGY_LEVEL_UNDEFINED; break;
            }

            /** Energy Level Update */
            m_pEndDeviceList->SetEnergyLevel(&pOndemand->id, pOndemand->nEnergyLevel, 0);
            XDEBUG(" ENERGY LEVEL : %d\r\n", pOndemand->nEnergyLevel);

            break;
    }

    // Event signal
    m_Locker.Lock();
    pOndemand->bReply = TRUE;
    pOndemand->nIndex ++;
    m_Locker.Unlock();
    SetEvent(pOndemand->hEvent);

    return CIec21DataStream::OnDataFrame(pStream, pszBuffer, nLength, pCallData);
}
Ejemplo n.º 2
0
 int SgTransmmit::RY_3KwPdmData(unsigned char *data, DevMonitorDataPtr data_ptr, int nDataLen, int &runstate)
 {
     if(data[2]!=0x10)
         return RE_CMDACK;
     DataInfo dainfo;
     int nbase=4;
     char data1=AsciiToInt(data[nbase+6]);
     char data2=AsciiToInt(data[nbase+7]);
     char data3=AsciiToInt(data[nbase+8]);
     char data4=AsciiToInt(data[nbase+9]);
     char data5=AsciiToInt(data[nbase+10]);
     char data6=AsciiToInt(data[nbase+11]);
     dainfo.bType = false;
     dainfo.fValue = (((data2&0x0F)<<4)|(data1&0x0F))*0.01+(((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F));
     data_ptr->mValues[0] = dainfo;
     data1=AsciiToInt(data[nbase+12]);
     data2=AsciiToInt(data[nbase+13]);
     data3=AsciiToInt(data[nbase+14]);
     data4=AsciiToInt(data[nbase+15]);
     data5=AsciiToInt(data[nbase+16]);
     data6=AsciiToInt(data[nbase+17]);
     dainfo.fValue = (((data2&0x0F)<<4)|(data1&0x0F))*0.01+(((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F));
     data_ptr->mValues[1] = dainfo;
     if(data_ptr->mValues[0].fValue>data_ptr->mValues[1].fValue)
     {
         dainfo.fValue = sqrt((data_ptr->mValues[0].fValue+data_ptr->mValues[1].fValue)/(data_ptr->mValues[0].fValue-data_ptr->mValues[1].fValue));
     }
     else{
         dainfo.fValue = 0;
     }
     data_ptr->mValues[2] = dainfo;
     data1=AsciiToInt(data[nbase]);
     data2=AsciiToInt(data[nbase+1]);
     data3=AsciiToInt(data[nbase+2]);
     data4=AsciiToInt(data[nbase+3]);
     data5=AsciiToInt(data[nbase+4]);
     data6=AsciiToInt(data[nbase+5]);
     dainfo.fValue = (((data2&0x0F)<<4)|(data1&0x0F))*0.01+(((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F));
     data_ptr->mValues[3] = dainfo;
     for(int i=0;i<5;++i)
     {
         data1=AsciiToInt(data[nbase+18+6*i]);
         data2=AsciiToInt(data[nbase+19+6*i]);
         data3=AsciiToInt(data[nbase+20+6*i]);
         data4=AsciiToInt(data[nbase+21+6*i]);
         data5=AsciiToInt(data[nbase+22+6*i]);
         data6=AsciiToInt(data[nbase+23+6*i]);
         dainfo.fValue = (((data2&0x0F)<<4)|(data1&0x0F))*0.01+(((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F));
         data_ptr->mValues[4+i] = dainfo;
     }
     for(int j=0;j<2;++j)
     {
         data3=AsciiToInt(data[nbase+48+4*j]);
         data4=AsciiToInt(data[nbase+49+4*j]);
         data5=AsciiToInt(data[nbase+50+4*j]);
         data6=AsciiToInt(data[nbase+51+4*j]);
         dainfo.fValue = ((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F);
         data_ptr->mValues[9+j] = dainfo;
     }
     dainfo.bType = true;
     for(int k=0;k<3;++k)
     {
         data1=AsciiToInt(data[nbase+56+k]);
         for(int i=0;i<4;++i)
         {
             dainfo.fValue = (Getbit(data1,i)==0 ? 1:0);
             data_ptr->mValues[11+k*4+i] = dainfo;
         }
     }
     return RE_SUCCESS;
 }