Ejemplo n.º 1
0
static int pRead(Context_t *context)
{

	unsigned char vData[3];
	const int     cSize            = 3;
	eKeyType      vKeyType         = RemoteControl;
	int           vCurrentCode     = -1;
	unsigned char vIsBurst         = 0;
	//WORKAROUND: Power does not have burst flag
	static unsigned char sWasLastKeyPower = 0;

	// wait for new command
	read(context->fd, vData, cSize);

	//printf("---> 0x%02X 0x%02X\n", vData[0], vData[1]);
	if (vData[0] == 0x61)
		vKeyType = RemoteControl;
	else if (vData[0] == 0x51)
		vKeyType = FrontPanel;
	else //Control Sequence
		return -1;

	vIsBurst = ((vData[1] & 0x80) == 0x80) ? 1 : 0;
	vData[1] = vData[1] & 0x7f;

	if (vKeyType == RemoteControl)
		vCurrentCode = getInternalCodeHex((tButton *)((RemoteControl_t *)context->r)->RemoteControl, vData[1]);
	else
		vCurrentCode = getInternalCodeHex((tButton *)((RemoteControl_t *)context->r)->Frontpanel, vData[1]);

	// We have a problem here, the power key has no burst flag, so a quick hack would be to always
	// say its burst. this is not noce and hopefully nobody will notice
	if ((vKeyType == FrontPanel) && (vData[1] == 0x0C) && sWasLastKeyPower)
		vIsBurst = 1;

	sWasLastKeyPower = ((vKeyType == FrontPanel) && (vData[1] == 0x0C)) ? 1 : 0;

	//printf("vIsBurst=%d Key=0x%02x\n", vIsBurst, vCurrentCode);

	if (vIsBurst == 0) // new key
	{
		gNextKey++;
		gNextKey %= 20;
	}

	vCurrentCode += (gNextKey << 16);

	return vCurrentCode;
}
Ejemplo n.º 2
0
static int pRead(Context_t* context) 
{
    unsigned char   vData[cCuberevoCommandLen];
    eKeyType        vKeyType = RemoteControl;
    static   int    vNextKey = 0;
    static   int    lastCode = 0;
    int             vCurrentCode = -1;

    //printf("%s >\n", __func__);

    while (1)
    {
       read (context->fd, vData, cCuberevoCommandLen);

       if(vData[0] == 0xe0)
           vKeyType = RemoteControl;
       else 
       if(vData[0] == 0xE1)
           vKeyType = FrontPanel;
       else
       if(vData[0] == 0xE2)
           vKeyType = FrontPanel;
       else
           continue;

       printf("data[0] 0x%2x, data[1] 0x%2x\n", vData[0], vData[1]);
       
       if(vKeyType == RemoteControl) 
       {
           if (vData[1] != 0xff)
           {
               vCurrentCode = 
                    getInternalCodeHex((tButton*)((RemoteControl_t*)context->r)->RemoteControl, vData[1]);
           }
           else
           {
               vCurrentCode = lastCode = 0;
           }
              
           if (vCurrentCode != 0)
           {
               vNextKey = ((vCurrentCode != lastCode) ? vNextKey + 1 : vNextKey) % 0x100;
               lastCode = vCurrentCode;

//               printf("nextFlag %d\n", vNextKey);

               vCurrentCode += (vNextKey << 16);
               
               break;
           }
       }
       else 
       {
           static int front_key;
           
           if(vData[0] == 0xE1)
           {
               front_key = vData[1] << 8;
               vCurrentCode = 0;
           }
           else
           {
               front_key |= vData[1];

               printf("front_key = 0x%04x\n", front_key);

               /* 12 dot, 12 and 14 segs */
               if ((version == 0) || (version == 2))
                   vCurrentCode = getCuberevoCode(front_keymap_12dotmatrix, front_key);
               else
               if (version == 3)
                   vCurrentCode = getCuberevoCode(front_keymap_7seg, front_key);
               else
                   vCurrentCode = getCuberevoCode(front_keymap_13grid, front_key);
                   
               if (vCurrentCode != 0)
               {
                   vNextKey = ((vCurrentCode != lastCode) ? vNextKey + 1 : vNextKey) % 0x100;
                   lastCode = vCurrentCode;

    //             printf("nextFlag %d\n", vNextKey);

                   vCurrentCode += (vNextKey << 16);

                   break;
               }
//               if (vCurrentCode == 0xffff) /* key release */
//                  vCurrentCode = 0x0000;    
           }
       }
    }
    printf("%s < %08X\n", __func__, vCurrentCode);
    
    return vCurrentCode;
}