Esempio n. 1
0
/*******************************************************************************
* Function Name: SimulateCyclingPower()
********************************************************************************
*
* Summary:
*   This function measures the die temperature and sends it to the client.
*
*******************************************************************************/
void SimulateCyclingPower(void)
{
    CYBLE_API_RESULT_T apiResult = CYBLE_ERROR_OK;
    
    if(CyBle_GattGetBusyStatus() == CYBLE_STACK_STATE_FREE)
    {
        uint8 powerMeasureData[CYBLE_GATT_DEFAULT_MTU - 3];
        uint8 length = 0;
        
        /* Prepare data array */
        CyBle_Set16ByPtr(powerMeasureData, (CYBLE_CPS_CPM_TORQUE_PRESENT_BIT |
                                            CYBLE_CPS_CPM_TORQUE_SOURCE_BIT |
                                            CYBLE_CPS_CPM_WHEEL_BIT |
                                            CYBLE_CPS_CPM_ENERGY_BIT) & powerMeasure.flags);
        length += sizeof(powerMeasure.flags);
        CyBle_Set16ByPtr(powerMeasureData + length, powerMeasure.instantaneousPower);
        length += sizeof(powerMeasure.instantaneousPower);
        if((CYBLE_CPS_CPM_TORQUE_PRESENT_BIT & powerMeasure.flags) != 0u)
        {
            CyBle_Set16ByPtr(powerMeasureData + length, powerMeasure.accumulatedTorque);
            length += sizeof(uint16);
            CyBle_Set16ByPtr(powerMeasureData + length, (uint16)powerMeasure.cumulativeWheelRevolutions);
            CyBle_Set16ByPtr(powerMeasureData + length+2, (uint16)(powerMeasure.cumulativeWheelRevolutions >> 16u));
            length += sizeof(powerMeasure.cumulativeWheelRevolutions);
            CyBle_Set16ByPtr(powerMeasureData + length, powerMeasure.lastWheelEventTime);
            length += sizeof(powerMeasure.lastWheelEventTime);
        }
Esempio n. 2
0
void process_inbox(Sup_Pdu_t *inbox) {
  switch (inbox->command) {
    case SUP_CMD_KEYDOWN:
      keyboard_press(inbox->data);
    case SUP_CMD_KEYUP:
      keyboard_release(inbox->data);
    case SUP_CMD_NOOP:
      DBG_PRINTF("Received NOOP");
    default:
      DBG_PRINTF("Unknown command: %d", inbox->command);
  }
  return;
  uint8_t apiResult;
  if (CyBle_GattGetBusyStatus() == CYBLE_STACK_STATE_FREE) {
      
      apiResult = CyBle_HidssGetCharacteristicValue(CYBLE_HUMAN_INTERFACE_DEVICE_SERVICE_INDEX, 
          CYBLE_HIDS_PROTOCOL_MODE, sizeof(protocol), &protocol);
      if(apiResult == CYBLE_ERROR_OK)
      {
          
          if(protocol == CYBLE_HIDS_PROTOCOL_MODE_BOOT)
          {
              apiResult = CyBle_HidssSendNotification(cyBle_connHandle, CYBLE_HUMAN_INTERFACE_DEVICE_SERVICE_INDEX,
                  CYBLE_HIDS_BOOT_KYBRD_IN_REP, KEYBOARD_DATA_SIZE, keyboard_report.raw);
          }
          else
          {
              apiResult = CyBle_HidssSendNotification(cyBle_connHandle, CYBLE_HUMAN_INTERFACE_DEVICE_SERVICE_INDEX, 
                  CYBLE_HUMAN_INTERFACE_DEVICE_REPORT_IN, KEYBOARD_DATA_SIZE, keyboard_report.raw);
          }
          
          if(apiResult != CYBLE_ERROR_OK)
          {
              DBG_PRINTF("HID notification API Error: %x \r\n", apiResult);
          }
      }
  }


}
Esempio n. 3
0
/*******************************************************************************
* Function Name: SimulateKeyboard()
********************************************************************************
*
* Summary:
*   The custom function to simulate CapsLock key pressing
*
*******************************************************************************/
void SimulateKeyboard(void)
{
    static uint8 keyboard_data[KEYBOARD_DATA_SIZE]={0,0,0,0,0,0,0,0};
    CYBLE_API_RESULT_T apiResult;
    static uint32 keyboardTimer = KEYBOARD_TIMEOUT;
    static uint8 simKey; 
    static uint8 capsLockPress = 0u;
    uint8 i;
    
    /* Scan SW2 key each connection interval */
    if(0u == SW2_Read())
    {
        if(capsLockPress < KEYBOARD_JITTER_SIZE)
        {
            capsLockPress++;
        } 
        else if(capsLockPress == KEYBOARD_JITTER_SIZE)
        {
            keyboard_data[2u] = CAPS_LOCK;              /* Set up keyboard data */
            keyboardTimer = 1u;                         /* Clear Simulation timer to send data */
            capsLockPress++;
        }
        else    /* Ignore long key pressing */
        {
        }
    }
    else
    {
        capsLockPress = 0u;
    }
    if((CyBle_GattGetBusyStatus() == CYBLE_STACK_STATE_FREE) && (--keyboardTimer == 0u))
    {
        keyboardTimer = KEYBOARD_TIMEOUT;
    
        simKey++;
        if(simKey > SIM_KEY_MAX)
        {
            simKey = SIM_KEY_MIN; 
        }
        keyboard_data[3u] = simKey;              
        
        apiResult = CyBle_HidssGetCharacteristicValue(CYBLE_HUMAN_INTERFACE_DEVICE_SERVICE_INDEX, 
            CYBLE_HIDS_PROTOCOL_MODE, sizeof(protocol), &protocol);
        if(apiResult == CYBLE_ERROR_OK)
        {
            DBG_PRINTF("HID notification: ");
            for(i = 0; i < KEYBOARD_DATA_SIZE; i++)
            {
                DBG_PRINTF("%2.2x,", keyboard_data[i]);
            }
            DBG_PRINTF("\r\n");
            
            if(protocol == CYBLE_HIDS_PROTOCOL_MODE_BOOT)
            {
                apiResult = CyBle_HidssSendNotification(cyBle_connHandle, CYBLE_HUMAN_INTERFACE_DEVICE_SERVICE_INDEX,
                    CYBLE_HIDS_BOOT_KYBRD_IN_REP, KEYBOARD_DATA_SIZE, keyboard_data);
            }
            else
            {
                apiResult = CyBle_HidssSendNotification(cyBle_connHandle, CYBLE_HUMAN_INTERFACE_DEVICE_SERVICE_INDEX, 
                    CYBLE_HUMAN_INTERFACE_DEVICE_REPORT_IN, KEYBOARD_DATA_SIZE, keyboard_data);
            }
            
            if(apiResult == CYBLE_ERROR_OK)
            {
                keyboard_data[2u] = 0u;                       /* Set up keyboard data*/
                keyboard_data[3u] = 0u;                       /* Set up keyboard data*/
                if(protocol == CYBLE_HIDS_PROTOCOL_MODE_BOOT)
                {
                    apiResult = CyBle_HidssSendNotification(cyBle_connHandle, CYBLE_HUMAN_INTERFACE_DEVICE_SERVICE_INDEX,
                        CYBLE_HIDS_BOOT_KYBRD_IN_REP, KEYBOARD_DATA_SIZE, keyboard_data);
                }
                else
                {
                    apiResult = CyBle_HidssSendNotification(cyBle_connHandle, CYBLE_HUMAN_INTERFACE_DEVICE_SERVICE_INDEX, 
                        CYBLE_HUMAN_INTERFACE_DEVICE_REPORT_IN, KEYBOARD_DATA_SIZE, keyboard_data);
                }
            }
            if(apiResult != CYBLE_ERROR_OK)
            {
                DBG_PRINTF("HID notification API Error: %x \r\n", apiResult);
                keyboardSimulation = DISABLED;
            }
        }
    }
}