Wild blackberries, the kind that stain my fingers for days after a long picking session, that leave me with scratches on my legs and arms from wading through large hidden patches, the ones that allow for long, lazy conversations with fellow seekers and which reward effort with the nirvana of a fresh blackberry pie and later, much later when summer is gone and tans are faded, fill my mouth with the sweet purple ink memories written on those days in the form of blackberry jam – wild blackberries rank among my favorite of all fruits.
This hasn't been a year for stone fruits, but I have hope for the blackberries. I went and checked on a couple of patches yesterday. I was relieved to find that this one, which hasn't really brought forth much of interest over the past couple of seasons, is in bloom and is doing well. It's nestled between two fields – one a cow pasture, the other a neglected orchard – a triangular bit of forgotten hedgerow that's invisible from the small country road that passes it, and uninviting to those who do notice it. Perfect for picking. Fingers crossed, this place will be a treasure trove in about 4-5 weeks.
Two of my best hedgerow patches – long, rangy stands of trees, brambles and bushes that stood between fallow fields – have been lost to housing developments over the past two years, and I fear that will be the fate of most of them. The fields and the hedgerows are all under tidy suburban lawns and charmingly names streets now.
Another patch, one that looks inviting and proffers all its goods openly, as if it's some free market stand, is actually a place I never use. I run by it every day, watch the berries ripen, watch them get fat, then watch as the bushes get picked clean by passers-by and birds. It's a nice hedgerow, right out there in the open, but I wouldn't pick from it. Why?
Golf course hedgerow. Buckets of berries here, but the trees along the golf course don't look very healthy.
It's in the rough of a golf course, and I also see how they regularly spray pesticides all along the perimeter.
Still, the bench on the other side of this hedgerow offers a good place to stretch, and sometimes to sit, to look out over Lake Geneva, and to dream of pies and jams to come.
Another favorite is a Blackberry Bellini – fresh wild blackberry sludge with champagne or sparkling wine. Not bad, not bad at all.
Mash the blackberries, mint, lemon juice, and sugar until the mixture is sludgy and juicy. Strain the pulp through a sieve (I like a bit of actual pulp in my drink, so I don't use a fine sieve – just enough to keep out the seeds). Divide blackberry mixture evenly among serving glasses. Add the bubbly and stir just a bit – the juice will color the sparkling wine, the pulp will sink down to the bottom to be enjoyed at the very end. Spear or float a blackberry for garnish.


EASTERN CONFERENCE Atlantic Division W L OT Pts GF GA Phila. 7 3 0 14 35 22 Pittsburgh 6 4 1 13 34 35 Islanders 5 4 0 10 26 33 Rangers 4 6 1 9 19 22 New Jersey 3 6 1 7 22 34 Northeast Division W L OT Pts GF GA Ottawa 9 1 0 18 34 19 Montreal 6 2 3 15 37 30 Toronto 5 5 3 13 47 52 Boston 6 4 0 12 25 24 Buffalo 5 5 0 10 36 34 Southeast Division W L OT Pts GF GA Carolina 7 2 3 17 47 31 Tampa Bay 5 4 1 11 33 30 Washington 5 6 0 10 31 30 Florida 4 7 0 8 27 34 Atlanta 4 8 0 8 27 47 WESTERN CONFERENCE Central Division W L OT Pts GF GA Detroit 9 2 1 19 43 29 Columbus 6 3 1 13 28 20 St. Louis 6 3 0 12 27 20 Chicago 5 6 0 10 29 32 Nashville 4 6 0 8 25 33 Northwest Division W L OT Pts GF GA Minnesota 7 3 2 16 30 28 Colorado 7 4 0 14 36 31 Calgary 5 3 3 13 37 36 Edmonton 5 7 0 10 29 40 Vancouver 5 7 0 10 32 37 Pacific Division W L OT Pts GF GA San Jose 6 5 1 13 29 29 Los Angeles 6 6 0 12 39 38 Dallas 5 4 2 12 30 28 Anaheim 4 7 2 10 27 35 Phoenix 3 6 0 6 20 28 Two points for a win, one point for overtime loss or shootout loss. Monday Rangers 3, Tampa Bay 1 Washington 7, Toronto 1 San Jose 4, Dallas 2 Tuesday Pittsburgh 4, Minnesota 2 Atlanta 3, Montreal 2, SO Phoenix at St. Louis, late Detroit at Edmonton, late Nashville at Calgary, late Today Tampa Bay at New Jersey, 7 Carolina at Florida, 7:30 Chicago at Dallas, 8:30 Columbus at Los Angeles, 10:30 PENGUINS 4, WILD 2 At St. Paul, Minn. Pittsburgh 0 2 2 -- 4 Minnesota 0 1 1 -- 2 First Period -- None. Second Period -- 1, Pittsburgh, Malkin 4 (Crosby, Malone), 3:30. 2, Minnesota, Veilleux 1 (Radivojevic, Koivu), 6:14. 3, Pittsburgh, Malkin 5 (Crosby, Malone), 6:29. Third Period -- 4, Minnesota, Rolston 6 (Koivu, Burns), 6:26. 5, Pittsburgh, Sykora 6 (Crosby, Gonchar), 10:05 (pp). 6, Pittsburgh, Crosby 5 (Gonchar, Malkin), 14:29. Shots on Goal -- Pittsburgh 6-12-9 -- 27. Minnesota 10-8-12 -- 30. Power-play opportunities -- Pittsburgh 1 of 1; Minnesota 0 of 2. Goalies -- Pittsburgh, Sabourin 2-0-1 (30 shots-28 saves). Minnesota, Harding 2-2-1 (27-23). A -- 18,568 (18,064). T -- 2:23. Referees -- Mike Leggo, Dean Warren. Linesmen -- Darren Gibbs, Mark Wheler. THRASHERS 3, CANADIENS 2 At Montreal Atlanta 0 2 0 0 -- 3 Montreal 0 1 1 0 -- 2 Atlanta won shootout 2-1 First Period -- None. Second Period -- 1, Montreal, Kovalev 6, 8:10 (pp). 2, Atlanta, Perrin 2, 16:16. 3, Atlanta, Kozlov 5, 17:13. Third Period -- 4, Montreal, Higgins 4 (Koivu, Kovalev), 18:02 (pp). Overtime -- None. Shootout -- Atlanta 2 (Kozlov NG, Little G, Kovalchuk G); Montreal 1 (Plekanec NG, Koivu G, Kovalev NG). Shots on Goal -- Atlanta 13-9-11-0 -- 33. Montreal 2-11-16-4 -- 33. Power-play opportunities -- Atlanta 0 of 5; Montreal 2 of 7. Goalies -- Atlanta, Hedberg 4-4-0 (33 shots-31 saves). Montreal, Price 2-1-1 (33-31). A -- 21,273 (21,273). T -- 2:31. Referees -- Tom Kowal, Marc Joannette. Linesmen -- Scott Driscoll, Tim Novak. COYOTES 2, BLUES 1 At St. Louis Phoenix 0 0 2--2 St. Louis 0 0 1--1 First Period -- None. Second Period -- None. Third Period -- 1, St. Louis, Boyes 9 (Kariya, Tkachuk), 5:52. 2, Phoenix, Zigomanis 2 (Michalek), 12:35. 3, Phoenix, Sjostrom 4 (Vrbata, Hanzal), 17:02. Shots on Goal -- Phoenix 5-7-15 -- 27. St. Louis 7-14-4 -- 25. Missed penalty shot -- Stempniak, StL, 17:28 second. Power-play opportunities -- Phoenix 0 of 3; St. Louis 0 of 5. Goalies -- Phoenix, Tellqvist 2-2-0 (25 shots-24 saves). St. Louis, Legace 5-3-0 (27-25). A -- 14,222 (19,260). T -- 2:30. Referees -- Kerry Fraser, Tim Peel. Linesmen -- Steve Miller, Jean Morin.


Great Freeride and Freerace gybe-tutorial from the windsurfing legend Guy Cribb. If you are into Freerace and Slalom Race Gybes also have a look at Dan Ellis and Kurosh Kianion slalom training session.
Buy the full Intuition Windsurfing Instructional DVD from AMAZON.


text:
#include "usb_device_config.h"
#include "usb.h"
#include "usb_device.h"

#include "usb_device_class.h"

#if ((defined(USB_DEVICE_CONFIG_VIDEO)) && (USB_DEVICE_CONFIG_VIDEO > 0U))
#include "usb_device_video.h"

/*******************************************************************************
 * Definitions
 ******************************************************************************/

/*******************************************************************************
 * Prototypes
 ******************************************************************************/

static usb_status_t USB_DeviceVideoAllocateHandle(usb_device_video_struct_t **handle);
static usb_status_t USB_DeviceVideoFreeHandle(usb_device_video_struct_t *handle);
static usb_status_t USB_DeviceVideoControlIn(usb_device_handle handle,
                                             usb_device_endpoint_callback_message_struct_t *message,
                                             void *callbackParam);
static usb_status_t USB_DeviceVideoStreamIn(usb_device_handle handle,
                                            usb_device_endpoint_callback_message_struct_t *message,
                                            void *callbackParam);
static usb_status_t USB_DeviceVideoStreamOut(usb_device_handle handle,
                                             usb_device_endpoint_callback_message_struct_t *message,
                                             void *callbackParam);
static usb_status_t USB_DeviceVideoStreamEndpointsInit(usb_device_video_struct_t *videoHandle);
static usb_status_t USB_DeviceVideoStreamEndpointsDeinit(usb_device_video_struct_t *videoHandle);
static usb_status_t USB_DeviceVideoControlEndpointsInit(usb_device_video_struct_t *videoHandle);
static usb_status_t USB_DeviceVideoControlEndpointsDeinit(usb_device_video_struct_t *videoHandle);

static usb_status_t USB_DeviceVideoVcPowerModeControl(usb_device_video_struct_t *videoHandle,
                                                      usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVcInterfaceRequest(usb_device_video_struct_t *videoHandle,
                                                      usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVcCameraTerminalRequest(usb_device_video_struct_t *videoHandle,
                                                           usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVcProcessingUnitRequest(usb_device_video_struct_t *videoHandle,
                                                           usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVcRequest(usb_device_video_struct_t *videoHandle,
                                             usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVsProbeRequest(usb_device_video_struct_t *videoHandle,
                                                  usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVsCommitRequest(usb_device_video_struct_t *videoHandle,
                                                   usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVsStillProbeRequest(usb_device_video_struct_t *videoHandle,
                                                       usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVsStillCommitRequest(usb_device_video_struct_t *videoHandle,
                                                        usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVsStillImageTriggerRequest(usb_device_video_struct_t *videoHandle,
                                                              usb_device_control_request_struct_t *controlRequest);
static usb_status_t USB_DeviceVideoVsRequest(usb_device_video_struct_t *videoHandle,
                                             usb_device_control_request_struct_t *controlRequest);

/*******************************************************************************
 * Variables
 ******************************************************************************/

USB_GLOBAL static usb_device_video_struct_t s_UsbDeviceVideoHandle[USB_DEVICE_CONFIG_VIDEO];

/*******************************************************************************
 * Code
 ******************************************************************************/

/*!
 * @brief Allocate a device video class handle.
 *
 * This function allocates a device video class handle.
 *
 * @param handle          It is out parameter, is used to return pointer of the device video class handle to the caller.
 *
 * @retval kStatus_USB_Success              Get a device video class handle successfully.
 * @retval kStatus_USB_Busy                 Cannot allocate a device video class handle.
 */
static usb_status_t USB_DeviceVideoAllocateHandle(usb_device_video_struct_t **handle)
{
    int32_t count;
    USB_OSA_SR_ALLOC();

    USB_OSA_ENTER_CRITICAL();
    for (count = 0U; count < USB_DEVICE_CONFIG_VIDEO; count++)
    {
        if (NULL == s_UsbDeviceVideoHandle[count].handle)
        {
            *handle = &s_UsbDeviceVideoHandle[count];
            USB_OSA_EXIT_CRITICAL();
            return kStatus_USB_Success;
        }
    }
    USB_OSA_EXIT_CRITICAL();
    return kStatus_USB_Busy;
}

/*!
 * @brief Free a device video class hanlde.
 *
 * This function frees a device video class hanlde.
 *
 * @param handle          The device video class handle.
 *
 * @retval kStatus_USB_Success              Free device video class hanlde successfully.
 */
static usb_status_t USB_DeviceVideoFreeHandle(usb_device_video_struct_t *handle)
{
    USB_OSA_SR_ALLOC();

    USB_OSA_ENTER_CRITICAL();
    handle->handle = NULL;
    handle->configStruct = (usb_device_class_config_struct_t *)NULL;
    handle->configuration = 0U;
    handle->controlAlternate = 0U;
    handle->streamAlternate = 0U;
    USB_OSA_EXIT_CRITICAL();
    return kStatus_USB_Success;
}

/*!
 * @brief Interrupt IN endpoint callback function.
 *
 * This callback function is used to notify uplayer the tranfser result of a transfer.
 * This callback pointer is passed when the interrupt IN pipe initialized.
 *
 * @param handle          The device handle. It equals the value returned from USB_DeviceInit.
 * @param message         The result of the interrupt IN pipe transfer.
 * @param callbackParam  The paramter for this callback. It is same with
 * usb_device_endpoint_callback_struct_t::callbackParam. In the class, the value is the video class handle.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoControlIn(usb_device_handle handle,
                                             usb_device_endpoint_callback_message_struct_t *message,
                                             void *callbackParam)
{
    usb_device_video_struct_t *videoHandle;
    usb_status_t error = kStatus_USB_Error;

    /* Get the video class handle */
    videoHandle = (usb_device_video_struct_t *)callbackParam;

    if (!videoHandle)
    {
        return kStatus_USB_InvalidHandle;
    }

    if ((NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        /* Notify the application control data sent by calling the video class callback. */
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle,
                                                         kUSB_DeviceVideoEventControlSendResponse, message);
    }

    return error;
}

/*!
 * @brief ISO IN endpoint callback function.
 *
 * This callback function is used to notify uplayer the tranfser result of a transfer.
 * This callback pointer is passed when the ISO IN pipe initialized.
 *
 * @param handle          The device handle. It equals the value returned from USB_DeviceInit.
 * @param message         The result of the ISO IN pipe transfer.
 * @param callbackParam  The paramter for this callback. It is same with
 * usb_device_endpoint_callback_struct_t::callbackParam. In the class, the value is the video class handle.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoStreamIn(usb_device_handle handle,
                                            usb_device_endpoint_callback_message_struct_t *message,
                                            void *callbackParam)
{
    usb_device_video_struct_t *videoHandle;
    usb_status_t error = kStatus_USB_Error;

    /* Get the video class handle */
    videoHandle = (usb_device_video_struct_t *)callbackParam;

    if (!videoHandle)
    {
        return kStatus_USB_InvalidHandle;
    }
    videoHandle->streamInPipeBusy = 0U;
    if ((NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        /* Notify the application stream data sent by calling the video class callback. */
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle,
                                                         kUSB_DeviceVideoEventStreamSendResponse, message);
    }

    return error;
}

/*!
 * @brief ISO OUT endpoint callback function.
 *
 * This callback function is used to notify uplayer the tranfser result of a transfer.
 * This callback pointer is passed when the ISO OUT pipe initialized.
 *
 * @param handle          The device handle. It equals the value returned from USB_DeviceInit.
 * @param message         The result of the ISO OUT pipe transfer.
 * @param callbackParam  The paramter for this callback. It is same with
 * usb_device_endpoint_callback_struct_t::callbackParam. In the class, the value is the video class handle.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoStreamOut(usb_device_handle handle,
                                             usb_device_endpoint_callback_message_struct_t *message,
                                             void *callbackParam)
{
    usb_device_video_struct_t *videoHandle;
    usb_status_t error = kStatus_USB_Error;

    /* Get the video class handle */
    videoHandle = (usb_device_video_struct_t *)callbackParam;

    if (!videoHandle)
    {
        return kStatus_USB_InvalidHandle;
    }
    videoHandle->streamOutPipeBusy = 0U;
    if ((NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        /* Notify the application stream data sent by calling the video class callback. */
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle,
                                                         kUSB_DeviceVideoEventStreamRecvResponse, message);
    }

    return error;
}

/*!
 * @brief Initialize the stream endpoints of the video class.
 *
 * This callback function is used to initialize the stream endpoints of the video class.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoStreamEndpointsInit(usb_device_video_struct_t *videoHandle)
{
    usb_device_interface_list_t *interfaceList;
    usb_device_interface_struct_t *interface = (usb_device_interface_struct_t *)NULL;
    usb_status_t error = kStatus_USB_Error;

    /* Check the configuration is valid or not. */
    if (!videoHandle->configuration)
    {
        return error;
    }

    if (videoHandle->configuration > videoHandle->configStruct->classInfomation->configurations)
    {
        return error;
    }

    /* Get the interface list of the new configuration. */
    if (NULL == videoHandle->configStruct->classInfomation->interfaceList)
    {
        return error;
    }
    interfaceList = &videoHandle->configStruct->classInfomation->interfaceList[videoHandle->configuration - 1U];

    /* Find stream interface by using the alternate setting of the interface. */
    for (int count = 0U; count < interfaceList->count; count++)
    {
        if ((USB_DEVICE_VIDEO_CC_VIDEO == interfaceList->interfaces[count].classCode) &&
            (USB_DEVICE_VIDEO_SC_VIDEOSTREAMING == interfaceList->interfaces[count].subclassCode))
        {
            for (int index = 0U; index < interfaceList->interfaces[count].count; index++)
            {
                if (interfaceList->interfaces[count].interface[index].alternateSetting == videoHandle->streamAlternate)
                {
                    interface = &interfaceList->interfaces[count].interface[index];
                    break;
                }
            }
            videoHandle->streamInterfaceNumber = interfaceList->interfaces[count].interfaceNumber;
            break;
        }
    }
    if (!interface)
    {
        /* Return error if the stream interface is not found. */
        return error;
    }

    /* Keep new stream interface handle. */
    videoHandle->streamInterfaceHandle = interface;

    /* Initialize the endpoints of the new interface. */
    for (int count = 0U; count < interface->endpointList.count; count++)
    {
        usb_device_endpoint_init_struct_t epInitStruct;
        usb_device_endpoint_callback_struct_t ep_callback;
        epInitStruct.zlt = 0U;
        epInitStruct.endpointAddress = interface->endpointList.endpoint[count].endpointAddress;
        epInitStruct.maxPacketSize = interface->endpointList.endpoint[count].maxPacketSize;
        epInitStruct.transferType = interface->endpointList.endpoint[count].transferType;

        if ((USB_ENDPOINT_ISOCHRONOUS == (epInitStruct.transferType & USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_TYPE_MASK)) &&
            (USB_IN == ((epInitStruct.endpointAddress & USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_MASK) >>
                        USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT)))
        {
            ep_callback.callbackFn = USB_DeviceVideoStreamIn;
        }
        else if ((USB_ENDPOINT_ISOCHRONOUS ==
                  (epInitStruct.transferType & USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_TYPE_MASK)) &&
                 (USB_OUT == ((epInitStruct.endpointAddress & USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_MASK) >>
                              USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT)))
        {
            ep_callback.callbackFn = USB_DeviceVideoStreamOut;
        }
        else
        {
            continue;
        }
        ep_callback.callbackParam = videoHandle;

        error = USB_DeviceInitEndpoint(videoHandle->handle, &epInitStruct, &ep_callback);
    }
    return error;
}

/*!
 * @brief De-initialize the stream endpoints of the video class.
 *
 * This callback function is used to de-initialize the stream endpoints of the video class.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoStreamEndpointsDeinit(usb_device_video_struct_t *videoHandle)
{
    usb_status_t error = kStatus_USB_Error;

    if (!videoHandle->streamInterfaceHandle)
    {
        return error;
    }
    /* De-initialize all stream endpoints of the interface */
    for (int count = 0U; count < videoHandle->streamInterfaceHandle->endpointList.count; count++)
    {
        error = USB_DeviceDeinitEndpoint(
            videoHandle->handle, videoHandle->streamInterfaceHandle->endpointList.endpoint[count].endpointAddress);
    }
    videoHandle->streamInterfaceHandle = NULL;
    return error;
}

/*!
 * @brief Initialize the control endpoints of the video class.
 *
 * This callback function is used to initialize the control endpoints of the video class.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoControlEndpointsInit(usb_device_video_struct_t *videoHandle)
{
    usb_device_interface_list_t *interfaceList;
    usb_device_interface_struct_t *interface = (usb_device_interface_struct_t *)NULL;
    usb_status_t error = kStatus_USB_Error;

    /* Check the configuration is valid or not. */
    if (!videoHandle->configuration)
    {
        return error;
    }

    if (videoHandle->configuration > videoHandle->configStruct->classInfomation->configurations)
    {
        return error;
    }

    /* Get the control interface list of the new configuration. */
    if (NULL == videoHandle->configStruct->classInfomation->interfaceList)
    {
        return error;
    }
    interfaceList = &videoHandle->configStruct->classInfomation->interfaceList[videoHandle->configuration - 1U];

    /* Find control interface by using the alternate setting of the interface. */
    for (int count = 0U; count < interfaceList->count; count++)
    {
        if ((USB_DEVICE_VIDEO_CC_VIDEO == interfaceList->interfaces[count].classCode) &&
            (USB_DEVICE_VIDEO_SC_VIDEOCONTROL == interfaceList->interfaces[count].subclassCode))
        {
            for (int index = 0U; index < interfaceList->interfaces[count].count; index++)
            {
                if (interfaceList->interfaces[count].interface[index].alternateSetting == videoHandle->controlAlternate)
                {
                    interface = &interfaceList->interfaces[count].interface[index];
                    break;
                }
            }
            videoHandle->controlInterfaceNumber = interfaceList->interfaces[count].interfaceNumber;
            break;
        }
    }
    if (!interface)
    {
        /* Return error if the control interface is not found. */
        return error;
    }
    /* Keep new control interface handle. */
    videoHandle->controlInterfaceHandle = interface;

    /* Initialize the control endpoints of the new interface. */
    for (int count = 0U; count < interface->endpointList.count; count++)
    {
        usb_device_endpoint_init_struct_t epInitStruct;
        usb_device_endpoint_callback_struct_t ep_callback;
        epInitStruct.zlt = 0U;
        epInitStruct.endpointAddress = interface->endpointList.endpoint[count].endpointAddress;
        epInitStruct.maxPacketSize = interface->endpointList.endpoint[count].maxPacketSize;
        epInitStruct.transferType = interface->endpointList.endpoint[count].transferType;

        if ((USB_ENDPOINT_INTERRUPT == (epInitStruct.transferType & USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_TYPE_MASK)) &&
            (USB_IN == ((epInitStruct.endpointAddress & USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_MASK) >>
                        USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT)))
        {
            ep_callback.callbackFn = USB_DeviceVideoControlIn;
        }
        else
        {
            continue;
        }
        ep_callback.callbackParam = videoHandle;

        error = USB_DeviceInitEndpoint(videoHandle->handle, &epInitStruct, &ep_callback);
    }
    return error;
}

/*!
 * @brief De-initialize the control endpoints of the video class.
 *
 * This callback function is used to de-initialize the control endpoints of the video class.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoControlEndpointsDeinit(usb_device_video_struct_t *videoHandle)
{
    usb_status_t error = kStatus_USB_Error;

    if (!videoHandle->controlInterfaceHandle)
    {
        return error;
    }
    /* De-initialize all control endpoints of the interface */
    for (int count = 0U; count < videoHandle->controlInterfaceHandle->endpointList.count; count++)
    {
        error = USB_DeviceDeinitEndpoint(
            videoHandle->handle, videoHandle->controlInterfaceHandle->endpointList.endpoint[count].endpointAddress);
    }
    videoHandle->controlInterfaceHandle = NULL;
    return error;
}

/*!
 * @brief Handle the video device vc power modex control request.
 *
 * This callback function is used to handle the video device vc power modex control request.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVcPowerModeControl(usb_device_video_struct_t *videoHandle,
                                                      usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint32_t command = 0U;

    switch (controlRequest->setup->bRequest)
    {
        case USB_DEVICE_VIDEO_REQUEST_CODE_SET_CUR:
            command = USB_DEVICE_VIDEO_SET_CUR_VC_POWER_MODE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_CUR:
            command = USB_DEVICE_VIDEO_GET_CUR_VC_POWER_MODE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_INFO:
            command = USB_DEVICE_VIDEO_GET_INFO_VC_POWER_MODE_CONTROL;
            break;
        default:
            break;
    }
    if ((command) && (NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle, command, controlRequest);
    }
    return error;
}

/*!
 * @brief Handle the video device control interface class-specific request.
 *
 * This callback function is used to handle the video device control pipe class-specific request.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVcInterfaceRequest(usb_device_video_struct_t *videoHandle,
                                                      usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint8_t cs = (controlRequest->setup->wValue >> 0x08U) & 0xFFU;

    if (USB_DEVICE_VIDEO_VC_VIDEO_POWER_MODE_CONTROL == cs)
    {
        /* handle the video device vc power modex control request */
        error = USB_DeviceVideoVcPowerModeControl(videoHandle, controlRequest);
    }
    else if (USB_DEVICE_VIDEO_VC_REQUEST_ERROR_CODE_CONTROL == cs)
    {
    }
    else
    {
    }
    return error;
}

/*!
 * @brief Handle the video device camera terminal control request.
 *
 * This callback function is used to handle the video device camera terminal control request.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVcCameraTerminalRequest(usb_device_video_struct_t *videoHandle,
                                                           usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint8_t cs = (controlRequest->setup->wValue >> 0x08U) & 0xFFU;

    switch (cs)
    {
        case USB_DEVICE_VIDEO_CT_SCANNING_MODE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_AE_MODE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_AE_PRIORITY_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_EXPOSURE_TIME_RELATIVE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_FOCUS_ABSOLUTE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_FOCUS_RELATIVE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_FOCUS_AUTO_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_IRIS_ABSOLUTE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_IRIS_RELATIVE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_ZOOM_ABSOLUTE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_ZOOM_RELATIVE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_PANTILT_ABSOLUTE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_PANTILT_RELATIVE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_ROLL_ABSOLUTE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_ROLL_RELATIVE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_PRIVACY_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_FOCUS_SIMPLE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_WINDOW_CONTROL:
            break;
        case USB_DEVICE_VIDEO_CT_REGION_OF_INTEREST_CONTROL:
            break;
        default:
            break;
    }
    return error;
}

/*!
 * @brief Handle the video device processing uint control request.
 *
 * This callback function is used to handle the video device processing uint control request.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVcProcessingUnitRequest(usb_device_video_struct_t *videoHandle,
                                                           usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint8_t cs = (controlRequest->setup->wValue >> 0x08U) & 0xFFU;

    switch (cs)
    {
        case USB_DEVICE_VIDEO_PU_BACKLIGHT_COMPENSATION_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_BRIGHTNESS_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_CONTRAST_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_GAIN_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_POWER_LINE_FREQUENCY_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_HUE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_SATURATION_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_SHARPNESS_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_GAMMA_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_WHITE_BALANCE_COMPONENT_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_DIGITAL_MULTIPLIER_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_HUE_AUTO_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_ANALOG_VIDEO_STANDARD_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_ANALOG_LOCK_STATUS_CONTROL:
            break;
        case USB_DEVICE_VIDEO_PU_CONTRAST_AUTO_CONTROL:
            break;
        default:
            break;
    }

    return error;
}

/*!
 * @brief Handle the video device control request.
 *
 * This callback function is used to handle the video device control request,
 * including the control interface, uint or terminal control.
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVcRequest(usb_device_video_struct_t *videoHandle,
                                             usb_device_control_request_struct_t *controlRequest)
{
    usb_device_video_entities_struct_t *entity_list;
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint8_t entityId = (uint8_t)(controlRequest->setup->wIndex >> 0x08U);

    if (!videoHandle->controlInterfaceHandle)
    {
        return error;
    }

    /* Get the video class-specific information. */
    entity_list = (usb_device_video_entities_struct_t *)videoHandle->controlInterfaceHandle->classSpecific;

    if (0U == entityId)
    {
        /* Handle the video control interface request. */
        error = USB_DeviceVideoVcInterfaceRequest(videoHandle, controlRequest);
    }
    else
    {
        for (int i = 0U; i < entity_list->count; i++)
        {
            if (entityId == entity_list->entity[i].entityId)
            {
                switch (entity_list->entity[i].entityType)
                {
                    case USB_DESCRIPTOR_SUBTYPE_VIDEO_VC_INPUT_TERMINAL:
                        if (USB_DEVICE_VIDEO_ITT_CAMERA == entity_list->entity[i].terminalType)
                        {
                            /* Handle the video camera terminal control request. */
                            error = USB_DeviceVideoVcCameraTerminalRequest(videoHandle, controlRequest);
                        }
                        break;
                    case USB_DESCRIPTOR_SUBTYPE_VIDEO_VC_OUTPUT_TERMINAL:
                        break;
                    case USB_DESCRIPTOR_SUBTYPE_VIDEO_VC_SELECTOR_UNIT:
                        break;
                    case USB_DESCRIPTOR_SUBTYPE_VIDEO_VC_PROCESSING_UNIT:
                        /* Handle the video processing uint control request. */
                        error = USB_DeviceVideoVcProcessingUnitRequest(videoHandle, controlRequest);
                        break;
                    case USB_DESCRIPTOR_SUBTYPE_VIDEO_VC_EXTENSION_UNIT:
                        break;
                    case USB_DESCRIPTOR_SUBTYPE_VIDEO_VC_ENCODING_UNIT:
                        break;
                    default:
                        break;
                }
            }
        }
    }
    return error;
}

/*!
 * @brief Handle the video device probe control request.
 *
 * This callback function is used to handle the video device probe control request,
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVsProbeRequest(usb_device_video_struct_t *videoHandle,
                                                  usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint32_t command = 0U;

    switch (controlRequest->setup->bRequest)
    {
        case USB_DEVICE_VIDEO_REQUEST_CODE_SET_CUR:
            command = USB_DEVICE_VIDEO_SET_CUR_VS_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_CUR:
            command = USB_DEVICE_VIDEO_GET_CUR_VS_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_MIN:
            command = USB_DEVICE_VIDEO_GET_MIN_VS_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_MAX:
            command = USB_DEVICE_VIDEO_GET_MAX_VS_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_RES:
            command = USB_DEVICE_VIDEO_GET_RES_VS_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_LEN:
            command = USB_DEVICE_VIDEO_GET_LEN_VS_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_INFO:
            command = USB_DEVICE_VIDEO_GET_INFO_VS_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_DEF:
            command = USB_DEVICE_VIDEO_GET_DEF_VS_PROBE_CONTROL;
            break;
        default:
            break;
    }
    if ((command) && (NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle, command, controlRequest);
    }
    return error;
}

/*!
 * @brief Handle the video device commit control request.
 *
 * This callback function is used to handle the video device commit control request,
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVsCommitRequest(usb_device_video_struct_t *videoHandle,
                                                   usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint32_t command = 0U;

    switch (controlRequest->setup->bRequest)
    {
        case USB_DEVICE_VIDEO_REQUEST_CODE_SET_CUR:
            command = USB_DEVICE_VIDEO_SET_CUR_VS_COMMIT_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_CUR:
            command = USB_DEVICE_VIDEO_GET_CUR_VS_COMMIT_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_LEN:
            command = USB_DEVICE_VIDEO_GET_LEN_VS_COMMIT_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_INFO:
            command = USB_DEVICE_VIDEO_GET_INFO_VS_COMMIT_CONTROL;
            break;
        default:
            break;
    }
    if ((command) && (NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle, command, controlRequest);
    }
    return error;
}

/*!
 * @brief Handle the video device still probe control request.
 *
 * This callback function is used to handle the video device still probe control request,
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVsStillProbeRequest(usb_device_video_struct_t *videoHandle,
                                                       usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint32_t command = 0U;

    switch (controlRequest->setup->bRequest)
    {
        case USB_DEVICE_VIDEO_REQUEST_CODE_SET_CUR:
            command = USB_DEVICE_VIDEO_SET_CUR_VS_STILL_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_CUR:
            command = USB_DEVICE_VIDEO_GET_CUR_VS_STILL_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_MIN:
            command = USB_DEVICE_VIDEO_GET_MIN_VS_STILL_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_MAX:
            command = USB_DEVICE_VIDEO_GET_MAX_VS_STILL_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_RES:
            command = USB_DEVICE_VIDEO_GET_RES_VS_STILL_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_LEN:
            command = USB_DEVICE_VIDEO_GET_LEN_VS_STILL_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_INFO:
            command = USB_DEVICE_VIDEO_GET_INFO_VS_STILL_PROBE_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_DEF:
            command = USB_DEVICE_VIDEO_GET_DEF_VS_STILL_PROBE_CONTROL;
            break;
        default:
            break;
    }
    if ((command) && (NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle, command, controlRequest);
    }
    return error;
}

/*!
 * @brief Handle the video device still commit control request.
 *
 * This callback function is used to handle the video device still commit control request,
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVsStillCommitRequest(usb_device_video_struct_t *videoHandle,
                                                        usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint32_t command = 0U;

    switch (controlRequest->setup->bRequest)
    {
        case USB_DEVICE_VIDEO_REQUEST_CODE_SET_CUR:
            command = USB_DEVICE_VIDEO_SET_CUR_VS_STILL_COMMIT_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_CUR:
            command = USB_DEVICE_VIDEO_SET_CUR_VS_STILL_COMMIT_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_LEN:
            command = USB_DEVICE_VIDEO_SET_CUR_VS_STILL_COMMIT_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_INFO:
            command = USB_DEVICE_VIDEO_SET_CUR_VS_STILL_COMMIT_CONTROL;
            break;
        default:
            break;
    }
    if ((command) && (NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle, command, controlRequest);
    }
    return error;
}

/*!
 * @brief Handle the video device still image trigger control request.
 *
 * This callback function is used to handle the video device still image trigger control request,
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVsStillImageTriggerRequest(usb_device_video_struct_t *videoHandle,
                                                              usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint32_t command = 0U;

    switch (controlRequest->setup->bRequest)
    {
        case USB_DEVICE_VIDEO_REQUEST_CODE_SET_CUR:
            command = USB_DEVICE_VIDEO_SET_CUR_VS_STILL_IMAGE_TRIGGER_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_CUR:
            command = USB_DEVICE_VIDEO_GET_CUR_VS_STILL_IMAGE_TRIGGER_CONTROL;
            break;
        case USB_DEVICE_VIDEO_REQUEST_CODE_GET_INFO:
            command = USB_DEVICE_VIDEO_GET_INFO_VS_STILL_IMAGE_TRIGGER_CONTROL;
            break;
        default:
            break;
    }
    if ((command) && (NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
    {
        error = videoHandle->configStruct->classCallback((class_handle_t)videoHandle, command, controlRequest);
    }
    return error;
}

/*!
 * @brief Handle the video device stream interface control request.
 *
 * This callback function is used to handle the video devicestream interface controll request,
 *
 * @param videoHandle          The device video class handle. It equals the value returned from
 * usb_device_class_config_struct_t::classHandle.
 * @param controlRequest       The pointer of the control request structure.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
static usb_status_t USB_DeviceVideoVsRequest(usb_device_video_struct_t *videoHandle,
                                             usb_device_control_request_struct_t *controlRequest)
{
    usb_status_t error = kStatus_USB_InvalidRequest;
    uint8_t cs = (controlRequest->setup->wValue >> 0x08U) & 0xFFU;

    switch (cs)
    {
        case USB_DEVICE_VIDEO_VS_PROBE_CONTROL:
            /* Handle device video probe control request. */
            error = USB_DeviceVideoVsProbeRequest(videoHandle, controlRequest);
            break;
        case USB_DEVICE_VIDEO_VS_COMMIT_CONTROL:
            /* Handle device video commit control request. */
            error = USB_DeviceVideoVsCommitRequest(videoHandle, controlRequest);
            break;
        case USB_DEVICE_VIDEO_VS_STILL_PROBE_CONTROL:
            /* Handle device video still probe control request. */
            error = USB_DeviceVideoVsStillProbeRequest(videoHandle, controlRequest);
            break;
        case USB_DEVICE_VIDEO_VS_STILL_COMMIT_CONTROL:
            /* Handle device video still commit control request. */
            error = USB_DeviceVideoVsStillCommitRequest(videoHandle, controlRequest);
            break;
        case USB_DEVICE_VIDEO_VS_STILL_IMAGE_TRIGGER_CONTROL:
            /* Handle device video still image trigger control request. */
            error = USB_DeviceVideoVsStillImageTriggerRequest(videoHandle, controlRequest);
            break;
        case USB_DEVICE_VIDEO_VS_STREAM_ERROR_CODE_CONTROL:
            break;
        case USB_DEVICE_VIDEO_VS_GENERATE_KEY_FRAME_CONTROL:
            break;
        case USB_DEVICE_VIDEO_VS_UPDATE_FRAME_SEGMENT_CONTROL:
            break;
        case USB_DEVICE_VIDEO_VS_SYNCH_DELAY_CONTROL:
            break;
        default:
            break;
    }

    return error;
}

/*!
 * @brief Handle the event passed to the video class.
 *
 * This function handles the event passed to the video class.
 *
 * @param handle          The video class handle, got from the usb_device_class_config_struct_t::classHandle.
 * @param event           The event codes. Please refer to the enumeration usb_device_class_event_t.
 * @param param           The param type is determined by the event code.
 *
 * @return A USB error code or kStatus_USB_Success.
 * @retval kStatus_USB_Success              Free device handle successfully.
 * @retval kStatus_USB_InvalidParameter     The device handle not be found.
 * @retval kStatus_USB_InvalidRequest       The request is invalid, and the control pipe will be stalled by the caller.
 */
usb_status_t USB_DeviceVideoEvent(void *handle, uint32_t event, void *param)
{
    usb_device_video_struct_t *videoHandle;
    usb_status_t error = kStatus_USB_Error;
    uint16_t interfaceAlternate;
    uint8_t *temp8;
    uint8_t alternate;

    if ((!param) || (!handle))
    {
        return kStatus_USB_InvalidHandle;
    }

    /* Get the video class handle. */
    videoHandle = (usb_device_video_struct_t *)handle;

    switch (event)
    {
        case kUSB_DeviceClassEventDeviceReset:
            /* Bus reset, clear the configuration. */
            videoHandle->configuration = 0U;
            videoHandle->streamOutPipeBusy = 0U;
            videoHandle->streamInPipeBusy = 0U;
            break;
        case kUSB_DeviceClassEventSetConfiguration:
            /* Get the new configuration. */
            temp8 = ((uint8_t *)param);
            if (!videoHandle->configStruct)
            {
                break;
            }
            if (*temp8 == videoHandle->configuration)
            {
                break;
            }
            /* De-initialize the endpoints when current configuration is none zero. */
            if (videoHandle->configuration)
            {
                error = USB_DeviceVideoControlEndpointsDeinit(videoHandle);
                error = USB_DeviceVideoStreamEndpointsDeinit(videoHandle);
            }
            /* Save new configuration. */
            videoHandle->configuration = *temp8;
            /* Clear the alternate setting value. */
            videoHandle->controlAlternate = 0U;
            /* Clear the alternate setting value. */
            videoHandle->streamAlternate = 0U;
            videoHandle->controlInterfaceHandle = NULL;
            videoHandle->streamInterfaceHandle = NULL;
            /* Initialize the control endpoints of the new current configuration by using the alternate setting 0. */
            error = USB_DeviceVideoControlEndpointsInit(videoHandle);
            /* Initialize the stream endpoints of the new current configuration by using the alternate setting 0. */
            error = USB_DeviceVideoStreamEndpointsInit(videoHandle);
            break;
        case kUSB_DeviceClassEventSetInterface:
            if (!videoHandle->configStruct)
            {
                break;
            }
            /* Get the new alternate setting of the interface */
            interfaceAlternate = *((uint16_t *)param);
            /* Get the alternate setting value */
            alternate = (uint8_t)(interfaceAlternate & 0xFFU);

            /* Whether the interface belongs to the class. */
            if (videoHandle->controlInterfaceNumber == ((uint8_t)(interfaceAlternate >> 8U)))
            {
                /* When the interface is control interface. */
                /* Only handle new alternate setting. */
                if (alternate == videoHandle->controlAlternate)
                {
                    break;
                }
                /* De-initialize old endpoints */
                error = USB_DeviceVideoControlEndpointsDeinit(videoHandle);
                videoHandle->controlAlternate = alternate;
                /* Initialize new endpoints */
                error = USB_DeviceVideoControlEndpointsInit(videoHandle);
            }
            else if (videoHandle->streamInterfaceNumber == ((uint8_t)(interfaceAlternate >> 8U)))
            {
                /* When the interface is stream interface. */
                /* Only handle new alternate setting. */
                if (alternate == videoHandle->streamAlternate)
                {
                    break;
                }
                /* De-initialize old endpoints */
                error = USB_DeviceVideoStreamEndpointsDeinit(videoHandle);
                videoHandle->streamAlternate = alternate;
                /* Initialize new endpoints */
                error = USB_DeviceVideoStreamEndpointsInit(videoHandle);
            }
            else
            {
            }
            break;
        case kUSB_DeviceClassEventSetEndpointHalt:
            if (!videoHandle->configStruct)
            {
                break;
            }
            /* Get the endpoint address */
            temp8 = ((uint8_t *)param);
            if (videoHandle->controlInterfaceHandle)
            {
                for (int count = 0U; count < videoHandle->controlInterfaceHandle->endpointList.count; count++)
                {
                    if (*temp8 == videoHandle->controlInterfaceHandle->endpointList.endpoint[count].endpointAddress)
                    {
                        /* Only stall the endpoint belongs to control interface of the class */
                        error = USB_DeviceStallEndpoint(videoHandle->handle, *temp8);
                    }
                }
            }
            if (videoHandle->streamInterfaceHandle)
            {
                for (int count = 0U; count < videoHandle->streamInterfaceHandle->endpointList.count; count++)
                {
                    if (*temp8 == videoHandle->streamInterfaceHandle->endpointList.endpoint[count].endpointAddress)
                    {
                        /* Only stall the endpoint belongs to stream interface of the class */
                        error = USB_DeviceStallEndpoint(videoHandle->handle, *temp8);
                    }
                }
            }
            break;
        case kUSB_DeviceClassEventClearEndpointHalt:
            if (!videoHandle->configStruct)
            {
                break;
            }
            /* Get the endpoint address */
            temp8 = ((uint8_t *)param);
            if (videoHandle->controlInterfaceHandle)
            {
                for (int count = 0U; count < videoHandle->controlInterfaceHandle->endpointList.count; count++)
                {
                    if (*temp8 == videoHandle->controlInterfaceHandle->endpointList.endpoint[count].endpointAddress)
                    {
                        /* Only un-stall the endpoint belongs to control interface of the class */
                        error = USB_DeviceUnstallEndpoint(videoHandle->handle, *temp8);
                    }
                }
            }
            if (videoHandle->streamInterfaceHandle)
            {
                for (int count = 0U; count < videoHandle->streamInterfaceHandle->endpointList.count; count++)
                {
                    if (*temp8 == videoHandle->streamInterfaceHandle->endpointList.endpoint[count].endpointAddress)
                    {
                        /* Only un-stall the endpoint belongs to stream interface of the class */
                        error = USB_DeviceUnstallEndpoint(videoHandle->handle, *temp8);
                    }
                }
            }
            break;
        case kUSB_DeviceClassEventClassRequest:
            if (param)
            {
                /* Handle the video class specific request. */
                usb_device_control_request_struct_t *controlRequest = (usb_device_control_request_struct_t *)param;
                uint8_t interface_index = (uint8_t)controlRequest->setup->wIndex;

                if ((controlRequest->setup->bmRequestType & USB_REQUEST_TYPE_RECIPIENT_MASK) !=
                    USB_REQUEST_TYPE_RECIPIENT_INTERFACE)
                {
                    break;
                }

                switch (controlRequest->setup->bmRequestType)
                {
                    case USB_DEVICE_VIDEO_SET_REQUEST_INTERFACE:
                        if (controlRequest->isSetup)
                        {
                            /* Get the buffer to receive the data sent from the host. */
                            if ((NULL != videoHandle->configStruct) && (videoHandle->configStruct->classCallback))
                            {
                                error = videoHandle->configStruct->classCallback(
                                    (class_handle_t)videoHandle, kUSB_DeviceVideoEventClassRequestBuffer,
                                    controlRequest);
                            }
                            break;
                        }
                    case USB_DEVICE_VIDEO_GET_REQUEST_INTERFACE:
                        if (videoHandle->controlInterfaceNumber == interface_index)
                        {
                            error = USB_DeviceVideoVcRequest(videoHandle, controlRequest);
                        }
                        else if (videoHandle->streamInterfaceNumber == interface_index)
                        {
                            error = USB_DeviceVideoVsRequest(videoHandle, controlRequest);
                        }
                        else
                        {
                        }
                        break;
                    default:
                        break;
                }
            }
            break;
        default:
            break;
    }
    return error;
}

/*!
 * @brief Initialize the video class.
 *
 * This function is used to initialize the video class.
 *
 * @param controllerId   The controller id of the USB IP. Please refer to the enumeration usb_controller_index_t.
 * @param config          The class configuration information.
 * @param handle          It is out parameter, is used to return pointer of the video class handle to the caller.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
usb_status_t USB_DeviceVideoInit(uint8_t controllerId, usb_device_class_config_struct_t *config, class_handle_t *handle)
{
    usb_device_video_struct_t *videoHandle;
    usb_status_t error = kStatus_USB_Error;

    /* Allocate a video class handle. */
    error = USB_DeviceVideoAllocateHandle(&videoHandle);

    if (kStatus_USB_Success != error)
    {
        return error;
    }

    /* Get the device handle according to the controller id. */
    error = USB_DeviceClassGetDeviceHandle(controllerId, &videoHandle->handle);

    if (kStatus_USB_Success != error)
    {
        return error;
    }

    if (!videoHandle->handle)
    {
        return kStatus_USB_InvalidHandle;
    }
    /* Save the configuration of the class. */
    videoHandle->configStruct = config;
    /* Clear the configuration value. */
    videoHandle->configuration = 0U;
    videoHandle->streamAlternate = 0xffU;
    videoHandle->controlAlternate = 0xffU;

    *handle = (class_handle_t)videoHandle;
    return error;
}

/*!
 * @brief De-initialize the device video class.
 *
 * The function de-initializes the device video class.
 *
 * @param handle The ccid class handle got from usb_device_class_config_struct_t::classHandle.
 *
 * @return A USB error code or kStatus_USB_Success.
 */
usb_status_t USB_DeviceVideoDeinit(class_handle_t handle)
{
    usb_device_video_struct_t *videoHandle;
    usb_status_t error = kStatus_USB_Error;

    videoHandle = (usb_device_video_struct_t *)handle;

    if (!videoHandle)
    {
        return kStatus_USB_InvalidHandle;
    }
    /* De-initialzie the stream endpoints. */
    error = USB_DeviceVideoStreamEndpointsDeinit(videoHandle);
    /* De-initialzie the control endpoints. */
    error = USB_DeviceVideoControlEndpointsDeinit(videoHandle);
    /* Free the video class handle. */
    USB_DeviceVideoFreeHandle(videoHandle);
    return error;
}

/*!
 * @brief Send data through a specified endpoint.
 *
 * The function is used to send data through a specified endpoint.
 * The function calls USB_DeviceSendRequest internally.
 *
 * @param handle The video class handle got from usb_device_class_config_struct_t::classHandle.
 * @param endpointAddress Endpoint index.
 * @param buffer The memory address to hold the data need to be sent.
 * @param length The data length need to be sent.
 *
 * @return A USB error code or kStatus_USB_Success.
 *
 * @note The return value just means if the sending request is successful or not; the transfer done is notified by
 * USB_DeviceVideoStreamIn or USB_DeviceVideoControlIn.
 * Currently, only one transfer request can be supported for one specific endpoint.
 * If there is a specific requirement to support multiple transfer requests for one specific endpoint, the application
 * should implement a queue in the application level.
 * The subsequent transfer could begin only when the previous transfer is done (get notification through the endpoint
 * callback).
 */
usb_status_t USB_DeviceVideoSend(class_handle_t handle, uint8_t ep, uint8_t *buffer, uint32_t length)
{
    usb_device_video_struct_t *videoHandle;
    usb_status_t error = kStatus_USB_Error;

    if (!handle)
    {
        return kStatus_USB_InvalidHandle;
    }
    videoHandle = (usb_device_video_struct_t *)handle;

    if (videoHandle->streamInPipeBusy)
    {
        return kStatus_USB_Busy;
    }

    error = USB_DeviceSendRequest(videoHandle->handle, ep, buffer, length);
    if (kStatus_USB_Success == error)
    {
        videoHandle->streamInPipeBusy = 1U;
    }
    return error;
}

/*!
 * @brief Receive data through a specified endpoint.
 *
 * The function is used to receive data through a specified endpoint.
 * The function calls USB_DeviceRecvRequest internally.
 *
 * @param handle The video class handle got from usb_device_class_config_struct_t::classHandle.
 * @param endpointAddress Endpoint index.
 * @param buffer The memory address to save the received data.
 * @param length The data length want to be received.
 *
 * @return A USB error code or kStatus_USB_Success.
 *
 * @note The return value just means if the receiving request is successful or not; the transfer done is notified by
 * USB_DeviceVideoStreamOut.
 * Currently, only one transfer request can be supported for one specific endpoint.
 * If there is a specific requirement to support multiple transfer requests for one specific endpoint, the application
 * should implement a queue in the application level.
 * The subsequent transfer could begin only when the previous transfer is done (get notification through the endpoint
 * callback).
 */
usb_status_t USB_DeviceVideoRecv(class_handle_t handle, uint8_t ep, uint8_t *buffer, uint32_t length)
{
    usb_device_video_struct_t *videoHandle;
    usb_status_t error = kStatus_USB_Error;

    if (!handle)
    {
        return kStatus_USB_InvalidHandle;
    }
    videoHandle = (usb_device_video_struct_t *)handle;

    if (videoHandle->streamOutPipeBusy)
    {
        return kStatus_USB_Busy;
    }

    error = USB_DeviceRecvRequest(videoHandle->handle, ep, buffer, length);
    if (kStatus_USB_Success == error)
    {
        videoHandle->streamOutPipeBusy = 1U;
    }
    return error;
}

#endif

redpajama_set_name: RedPajamaGithub


text:
It's official: America is losing its religion. According to the Pew Forum, Gallup, the General Social Survey, and several other studies in recent years, this downward trajectory in American religious belief has been the trend for decades. But since 2001, the de-Christianization of America has progressed with startling speed.
"I am the way, the truth, and the life"
Opinion: Why so many Catholics and evangelicals put their faith in Trump
SAUL LOEB/AFP via Getty Images Attorney General William Barr says the Judeo-Christian religion should be restored to the center of public life. NEW YORK (Project Syndicate)...
Market Watch 2020-01-09
Turning evangelicals will challenge Democrats
Conservative Christians are fond of the adage WWJD — What Would Jesus Do? A good question during the Christmas season is HWJV —How Would Jesus Vote? Democrats have...
Reflector 2019-12-29
Steven V. Roberts: Religion and the two parties' election maneuvering
Conservative Christians are fond of the adage WWJD — What Would Jesus Do? A good question raised in the Christmas season was HWJV — How Would Jesus Vote? Democrats have...
Omaha World-Herald 2020-01-05
How would Jesus vote?
Conservative Christians are fond of the adage WWJD — What Would Jesus Do? A good question during the Christmas season is HWJV — How Would Jesus Vote? Democrats have...
Lockport Union-Sun 2019-12-29
Christianity from Judaism to Constantine: Crash Course World History #11
Animated map shows how Christianity spread around the world
What Makes Christianity Different from Other Religions? | Illuminate Ep 3
Why is Christianity right?
101 Facts About Christianity
History of the Christianity's first 1000 years
Are Allah and the God of Christianity the Same? Nabeel Qureshi Answers
Jesus Christ and Christianity | World History | Khan Academy
Why These Headhunters Converted to Christianity | National Geographic
Here's how Christian fundamentalism is turning people away from religion — and toward science
Christianity is on the way out, according to surveys Americans who identify as Christian have dropped by 12 percent in the last decade, and those who identify as having no religion have increased 9 percent. The Daily Beast cited multiple researchers who have examined the evolution of religion and the turn toward science. Christian fundamentalism is adding to the problem as some...
FIRST-PERSON: Clarity in the New Year
EDITOR'S NOTE: Ronnie Floyd is president and CEO of the Southern Baptist Convention Executive Committee. NASHVILLE (BP)—The start of a new year is a good time to review where we are and to state clearly where we are heading. This is true personally, in our families, in businesses and even as a convention of churches. I hear from pastors and other leaders wondering where we as...
The Baptist Messenger
BreakPoint: The \'New Atheism\' is old news because it couldn\'t explain sin
In the early 2000s, across the digital and print world of Christian apologetics, the so-called "New Atheism" was a central topic of conversation. Authors like Richard Dawkins, Sam Harris and the late Christopher Hitchens generated quite an audience by attacking religion in general and Christianity in particular, portraying both as irrational, evil forces in society. Books like...
Times Free Press
Courtiers and kings, evangelicals, prophets and Trump | Opinion
Editor's Note: This article is being republished with permission from Religion News Service. On Jan. 3, nearly every major conservative evangelical supporter of President Donald Trump gathered at the El Rey Jesus Church in Miami for the kickoff to the "Evangelicals for Trump" campaign. If Mark Galli's recent editorial in Christianity Today taught us anything, it is that...
Penn Live
CINDY ROOY: Are you afraid of death?
"Islamist militants are targeting Christians in Burkina Faso" (WP-8/21/19), and "14 Worshippers Massacred at Burkina Faso Church Service as Islamic Persecution of Christians Accelerates" (CBN-12/2/19) are some of the headlines American broadcasters have ignored. Christians have been hunted down and killed last year in that tiny African country. Jeff Riddering is extending the...
The Oneida Daily Dispatch
Wednesday Witness: There is so much more to our Christian faith
Beloved, my heart is hungry for more of God. Jesus told us that we would do greater works than he did while he was here on earth. I think about the impact Jesus made on our planet. He lived among a minority, the Hebrew people who were under bondage to the Roman Empire. However, this truth did not hinder the young teacher from proclaiming; He had been sent by God. Jesus declared...
Tahlequah Daily Press
Christianity 101 | National Geographic
Christianity, a religion based on the teachings of Jesus Christ, has about two billion followers. Learn about the story of Jesus Christ, where the Christian faith originated, and how it grew to become the largest religion on the planet. ➡ Subscribe: http://bit.ly/NatGeoSubscribe #NationalGeographic #Christianity #Religion About National Geographic: National Geographic is the world\'s premium destination for science, exploration, and adventure. Through their world-class scientists, photographers, journalists, and filmmakers, Nat Geo gets you closer to the stories that matter and past the edge of what\'s possible. Get More National Geographic: Official Site: http://bit.ly/NatGeoOfficialSite Facebook: http://bit.ly/FBNatGeo Twitter: http://bit.ly/NatGeoTwitter Instagram: http://bit.ly/NatGeoInsta Christianity 101 | National Geographic https://youtu.be/LvL3YXa0n2M National Geographic https://www.youtube.com/natgeo...
In which John Green teaches you the history of Christianity, from the beginnings of Judaism and the development of monotheism, right up to Paul and how Christianity stormed the Roman Empire in just a few hundred years. Along the way, John will cover Abram/Abraham, the Covenant, the Roman Occupation of Judea, and the birth, life, death and legacy of Jesus of Nazareth. No flame wars! Let\'s keep the commentary civil. Crash Course World History is now available on DVD! http://store.dftba.com/products/crashcourse-world-history-the-complete-series-dvd-set Follow us! @thecrashcourse @realjohngreen @raoulmeyer @crashcoursestan @saysdanica @thoughtbubbler Like us! http://www.facebook.com/youtubecrashcourse Follow us again! http://thecrashcourse.tumblr.com Support CrashCourse on Patreon: http://patreon.com/crashcourse...
Christianity is currently the world\'s largest religion with over 2 billion followers. Beginning with the son of a Jewish carpenter, the religion was spread around the world first by Jesus\'s disciples, then by emperors, kings, and missionaries. Through crusades, conquests, and simple word of mouth, Christianity has had a profound influence on the last 2,000 years of world history. -------------------------------------------------- Follow BI Video on Twitter: http://bit.ly/1oS68Zs Follow BI Video On Facebook: http://on.fb.me/1bkB8qg Read more: http://www.businessinsider.com/ -------------------------------------------------- Business Insider is the fastest growing business news site in the US. Our mission: to tell you all you need to know about the big world around you. The BI Video team focuses on technology, strategy and science with an emphasis on unique storytelling and data that appeals to the next generation of leaders – the digital generation....
Is Christianity the same as other religions? Not quite. Find out what makes Christianity unique in this insightful video. DOWNLOAD the video here: https://helpsharechange.org/illuminate3_download - - Share Change is an initiative of the The Salvation Army USA Western Territory that produces video content infused with messages of transformation and hope, designed to empower individuals to share the Gospel message with others via online and social networking platforms. Share Change aims to reach beyond traditional means of influence in order to tell the world about the physical, emotional and spiritual healing to be found in a relationship with Jesus Christ. Follow Share Change Twitter: https://twitter.com/helpsharechange Facebook: https://www.facebook.com/helpsharechange Website: http://helpsharechange.org Playlists: Popular Uploads: http://bit.ly/2yyOu8h Addiction Recovery: http://bit.ly/2hWdTyg Serving The Homeless: http://bit.ly/2gvbytW...
Join Ravi Zacharias and Vince Vitale for an open forum at the Soldiers & Sailors Memorial Hall in downtown Pittsburgh....
In the name of the Father, The Son, and the MotherFactor. Get ready for some fun time learning, as we delve into a totally untouched topic area for 101 Facts. Here we go, it\'s 101 Facts About Christianity. ► Subscribe to 101 Facts Here: http://bit.ly/1MtNBJD ► Follow 101 Facts on Twitter: https://twitter.com/101Facts1 ► Follow us on Instagram: https://www.instagram.com/101factsyt/?hl=en...
An interesting documentary about the first 1000 years of one of the most important religions in the World: Christianity....
Order Nabeel Qureshi\'s book \"No God but One\": https://www.amazon.com/God-but-One-Investigates-Christianity/dp/0310522552. Explore the unique claims of Islam and Christianity and examine the evidence for both in this New York Times bestseller, Qureshi\'s follow-up to \"Seeking Allah, Finding Jesus.\"...
An overview of the life and teachings of Jesus Christ and the birth of Christianity. Watch the next lesson: https://www.khanacademy.org/humanities/world-history/ancient-medieval/christianity/v/paul-apostles-christianity World History on Khan Academy: From the earliest civilizations to the modern world, geography, religion, trade, and politics have bound peoples and nations together — and torn them apart. Take a journey through time and space and discover the fascinating history behind the complex world we inhabit today. About Khan Academy: Khan Academy offers practice exercises, instructional videos, and a personalized learning dashboard that empower learners to study at their own pace in and outside of the classroom. We tackle math, science, computer programming, history, art history, economics, and more. Our math missions guide learners from kindergarten to calculus using state-of-the-art, adaptive technology that identifies strengths and learning gaps. We\'ve also partnered with institutions like NASA, The Museum of Modern Art, The California Academy of Sciences, and MIT to offer specialized content. For free. For everyone. Forever. #YouCanLearnAnything Subscribe to KhanAcademy: https://www.youtube.com/subscription_center?add_user=khanacademy...
Some of the last surviving Naga headhunters describe how they once killed members of other tribes, a practice that ended when they converted to Christianity. Today these men are elderly, and their region in northern India, Nagaland, hasa higher percentage of Baptists than the state of Mississippi. ➡ Subscribe: http://bit.ly/NatGeoSubscribe About National Geographic: National Geographic is the world\'s premium destination for science, exploration, and adventure. Through their world-class scientists, photographers, journalists, and filmmakers, Nat Geo gets you closer to the stories that matter and past the edge of what\'s possible. Get More National Geographic: Official Site: http://bit.ly/NatGeoOfficialSite Facebook: http://bit.ly/FBNatGeo Twitter: http://bit.ly/NatGeoTwitter Instagram: http://bit.ly/NatGeoInsta Click here to read more: http://news.nationalgeographic.com/2015/08/150826-nagaland-india-myanmar-headhunters-baptists/ PRODUCER: Shannon Sanders FIELD PRODUCER AND VIDEOGRAPHER: Palin Wedel Orthopedic Horseshoe | Diggers https://youtu.be/oLs-UoqzLlU National Geographic https://www.youtube.com/natgeo...
Christianity, a religion based on the teachings of Jesus Christ, has about two billion followers. Learn about the story of Jesus Christ, where the Christian faith originated, and how it grew to become the largest religion on the planet. ➡ Subscribe: http://bit.ly/NatGeoSubscribe #NationalGeographic
In which John Green teaches you the history of Christianity, from the beginnings of Judaism and the development of monotheism, right up to Paul and how Christianity stormed the Roman Empire in just a few hundred years. Along the way, John will cover Abram/Abraham, the Covenant, the Roman Occupation
Christianity is currently the world\'s largest religion with over 2 billion followers. Beginning with the son of a Jewish carpenter, the religion was spread around the world first by Jesus\'s disciples, then by emperors, kings, and missionaries. Through crusades, conquests, and simple word of mouth, C
Is Christianity the same as other religions? Not quite. Find out what makes Christianity unique in this insightful video. DOWNLOAD the video here: https://helpsharechange.org/illuminate3_download - - Share Change is an initiative of the The Salvation Army USA Western Territory that produces vi
Join Ravi Zacharias and Vince Vitale for an open forum at the Soldiers & Sailors Memorial Hall in downtown Pittsburgh.
In the name of the Father, The Son, and the MotherFactor. Get ready for some fun time learning, as we delve into a totally untouched topic area for 101 Facts. Here we go, it\'s 101 Facts About Christianity. ► Subscribe to 101 Facts Here: http://bit.ly/1MtNBJD ► Follow 101 Facts on Twitter: https://
An interesting documentary about the first 1000 years of one of the most important religions in the World: Christianity.
Order Nabeel Qureshi\'s book \"No God but One\": https://www.amazon.com/God-but-One-Investigates-Christianity/dp/0310522552. Explore the unique claims of Islam and Christianity and examine the evidence for both in this New York Times bestseller, Qureshi\'s follow-up to \"Seeking Allah, Finding Jesus.\"
An overview of the life and teachings of Jesus Christ and the birth of Christianity. Watch the next lesson: https://www.khanacademy.org/humanities/world-history/ancient-medieval/christianity/v/paul-apostles-christianity World History on Khan Academy: From the earliest civilizations to the modern w
Some of the last surviving Naga headhunters describe how they once killed members of other tribes, a practice that ended when they converted to Christianity. Today these men are elderly, and their region in northern India, Nagaland, hasa higher percentage of Baptists than the state of Mississippi. ➡

redpajama_set_name: RedPajamaCommonCrawl


On July 31st, I had the privilege of leading a discussion for the Central NY Chapter of ASTD titled Digital Curation: Definitions, Tools, and Strategies. This blog post is being set up a follow-up resource for those that attended the session. It may also serve as a resource for anyone that wants to learn more about curation and learning.


Angry Birds is a game which has been played by millions of player, that's why Rovio Mobile Ltd. has developed another version of this game, it is named as Angry Birds Seasons which is available in Arcade category of Google Play Store. Well, this is a mobile phone (Android Devices) based game but in this article I will tell you about how you can download Angry Birds Seasons for PC.
I can bet you will love this invention of Rovio Mobile Ltd. because of game's astonish and admiring features. Well by following that article you can play this refulgent game on your computer and Windows System, and this will be very scrumptious for playing this Android Device game on a computer and windows Systems. You can cross more challenging levels in this alley based past time.
I will share with you a guide on how you can download this merriment on your PC for free, with its special effects containing levels and challenging episodes. Read upcoming paragraphs and enjoy this all-time favorite game. But firstly I will share with you features of this frolic and after downloading and installing process.
This game contains new and interesting features and you can play it with pumpkins and presents which are challenging and full of jollity.
Levels of this game are mirthfully and incredibly designed, you will never be bored while playing it.
You don't have to pay for downloading and installing it, just play it without regretting and paying.
This game's plausibility is as haunting appearance, you will like this entertaining physics puzzle play.
You will get addicted to this game if you are a fervent slinger of these crazy birds.
You can get spoony about it with cool environment so join this global phenomenon and rock in your gaming world.
Video graphics and audio sound are awesome but you can be irritated by ads, there are ads in the game by clicking on them you can go to another linked websites.
You can play 300 levels and there is automatic update is also available.
This is the time for downloading and installing it on your computer and Windows System, manual is given below and just by following it you can enjoy it on your personal desktop, and can rock in your gaming mankind.
For playing it on computer you have to download Bluestacks from its official sites, you don't have to worry about, because it is trusted by millions of user.
Install it with all user interfaces and on screen directions.
Now you have to start it, and search Angry Birds Reasons by typing it.
It will appear on screen now install it (it will take few minutes for installing).
Now process is complete!! You are able to play this frolic with joviality, I hope this manual on download Angry Birds Seasons for PC will be useful for all of you.
Can I play those games whatever in this app on my laptop without use of Bluestacks app??


In an increasingly multi-channel context, our customers, retailers and manufacturers need to make transport of all their flows part of an effective overall strategy for the benefit of their customers. This is our driving force at Viapost Transport Management.
As a transport organiser, we provide you, from our seven regional agencies, with a solution aimed at optimising all your needs. Our staff (charterers, buyers, administrative and operational teams, customer-needs engineers and sales people) put all their expertise at your disposal so that your customers will receive shipments on time and at the best price.
Pallet delivery service for your flows from 1 to 6 pallets.
Freight management for your flows of 7 to 33 pallets with partial (LTL) and complete (FTL) deliveries and your chartering service.
Flow management to outsource the organisation and deployment of your BtoB transport activity from start to finish.
Flow engineering to support your development projects and optimise your transport plans as well as conducting your public tender offers for transport purchasing.
Learn more about the breadth of the Viapost transport management network in France and Europe.
We put our operational excellence at the service of our clients.
Learn more about the companies that we are helping with the development and implementation of their supply chain plan.


text:
Q: Why would we multiply something by 10 if it's zero I don't understand why we multiply i by 10 if it's already a zero.
so i would appreciate if some could explain why did we use this type of expressions to solve this problem.
#include <stdio.h>

main(void)
{
    int n, num = 0;
    printf("Enter any number to print individuellement : ");
    scanf("%d", &n);
    while(n != 0) // Instructions à répéter
    {

> ***num = (num * 10) + (n % 10);***

        `n = n / 10;`
    }
    while(num != 0)    // Instructions à répéter
    {
        switch(num % 10)
.
.
.
.
.
.
.

.
.
.

        num = num / 10;
    }

}

A: num is only zero the first time through the loop.
Suppose you enter 6521. The first time through the loop, it does
num = (0 * 10) + (6521 % 10);

which sets num = 1. Then it divides n by 10. So the next time through the loop it does:
num = (1 * 10) + (652 % 10);

which sets num = 12. The next iteration does:
num = (12 * 10) + (65 % 10);

which sets num = 125. The next iteration does:
num = (125 * 10) + (6 % 10);

which sets num = 1256.
Then the loop ends because dividing n by 10 results in 0.
The result of this is to reverse the digits of the number that was entered.

A: num is initialised to be zero only in the beginning.
After each iteration, its value changes as per the condition defined.
As a simplified example, you can see in the for loop, a variable is initialised to zero and then condition is provided and instructed to increment or decrement (usually) until the condition satisfies.
Initialising a variable to zero is to assign the value 0 to it if not, it will take the value of memory block.

redpajama_set_name: RedPajamaStackExchange


The trip was made several years ago.
BAF is good for people who love trekking, a little adventure for family. There are more facilities since my visit. There are more tree houses as well since last time I was there.
Services is very good. Glamour camping for us. I'm enjoying food, activities (high rope, canyoning, trekking).
Its a very nice tourist spot, and surprisingly, the entire site is very clean for such a public place. Very suitable for family vacation. Highly recommended.
The challenging nature eco-tourism, pampered with culinary delicacies, foods are quite unique because most vegetables obtained in the vicinity of the location of fern leaves and vegetables like cabbage and potatoes.
Get quick answers from Baturraden Adventure Forest staff and past visitors.


My second issue is with the fans. When Mark McGwire and Sammy Sosa were launching chemically-enhanced home runs, the saying was "Chicks dig the long ball." I suppose the same goes for MLS fans. All of the goals nominated were fan-selected Goal of the Week winners. Which probably helps explain why a third (A THIRD!) of the goals up for Goal of the Year come from the feet of the Seattle Sounders.
win Goal of the Week?
That... that's the Goal of the Year. Regardless of who wins the fan voting.


text:
News|Conflict
'Israel is a terrorist state'
Palestinian citizens of Israel are angered by Israel's restrictions on access to al-Aqsa and Palestinian casualties.
In addition to mass arrests at demonstrations, Israeli police made a series of unlawful "preventive arrests" of political activists [Reuters]
Jonathan Cook
Nazareth – The violence rocking the occupied West Bank, East Jerusalem and now Gaza is on the verge of spilling into Israel, Palestinian leaders in Israel warned.
A wave of unrest has swept Palestinian towns in Israel over recent days, with repeated clashes with Israeli police in Nazareth, Jaffa, Lod, Ramle, Taibeh, Sakhnin, Rahat, Kfar Qassem and elsewhere. Dozens of protesters have been arrested.
On Thursday, Palestinians declared a day of rage, police fired tear gas and stun grenades and led baton charges against several hundred protesters in Nazareth, the largest Palestinian city in Israel. Sixteen demonstrators, five of them minors, were arrested.
"We want the world to see the reality of what is going on here.The massacres and the discrimination have to end," said Dima Kfeeny, 20, who added that people had come to protest peacefully. Her cousin was one of the 13 demonstrators killed 15 years ago at the start of the second Intifada.
"We have not forgotten what happened," she added. "We know Israel can turn violent towards us at any moment.
Israel's Palestinian minority, a fifth of the population, have been angered by Israeli restrictions on access to al-Aqsa Mosque in Jerusalem, Palestinian casualties in the occupied territories and frustration at systematic discrimination inside Israel, say community leaders.
There is a hyper-militarised culture of incitement and belligerence in Israel. We are still viewed by the state and much of the Israeli public as enemy combatants rather than citizens.
Mohammed Zeidan, Director of Human Rights Association in Nazareth
RELATED: Netanyahu 'better not disturb the status quo'
On Friday, similar clashes erupted again in many towns at night, and again on Saturday, after a video showed security forces shooting Israa Abed, a 30-year-old mother-of-three from Nazareth, in the nearby town of Afula in northern Israel.
Abed, who was badly wounded, was reported to have tried to stab a security guard at a bus station. Footage showed her standing alone and largely immobile before being shot.
In a video that emerged on Saturday, showing her lying injured on the ground, a pair of sunglasses is visible next to her, but no knife.
Bassel Ghattas, a member of the Israeli parliament for the Arab party, the Joint List, said Abed's treatment showed "the police and media are encouraging cold-blooded executions of Arab citizens".
Israeli Prime Minister Benjamin Netanyahu announced on Saturday night that 2,000 paramilitary police would be deployed immediately in Israel and Jerusalem.
The Border Police, which operates chiefly in the occupied territories, are to be placed at flashpoints in Israel, including cities where Jewish and Palestinian citizens live near each other.
Concerns about aggressive policing have been underscored by a government decision to relax live-fire regulations in Israel and Jerusalem against demonstrators, including children, who throw stones.
Concerns about aggressive policing have been underscored by a government decision to relax live-fire regulations in Israel and Jerusalem against demonstrators [AP]
Palestinian leaders in Israel fear that police violence could quickly lead to a repeat of events in October 2000, at the start of the second intifada. Then, security forces killed 13 unarmed Palestinian citizens across the Galilee and injured hundreds more in a few days of confrontations.
Pregnant Palestinian and child die in Israeli air raid
Relations between the two populations have not recovered since.
"There is a hyper-militarised culture of incitement and belligerence in Israel," Mohammed Zeidan, director of the Human Rights Association in Nazareth, told Al Jazeera. "We are still viewed by the state and much of the Israeli public as enemy combatants rather than citizens."
There have also been indications of the first settler-style, vigilante attacks inside Israel.
A Jewish youth was reported on Friday to have stabbed four Palestinians, two of them Israeli citizens, in the southern Israeli town of Dimona.
Three Palestinian-Israeli youths were also severely beaten in the central city of Netanya in what police described as an attempted lynching.
Crowds of Israeli Jews chanting "Death to the Arabs", common in Jerusalem for some time, have been reported with increasingly frequency in Israeli cities in recent days.
Last week Jerusalem's mayor, Nir Barkat, called on all Israeli civilians who own a firearm to carry it at all times and be ready to use it.
Meanwhile, the Israeli government has raised the temperature for Israel's Palestinian minority at al-Aqsa Mosque compound.
On Sunday, Netanyahu said a Palestinian MP, Haneen Zoabi, would be investigated for incitement, after quoting an interview in which he said she had urged hundreds of thousands of Palestinians to converge on al-Aqsa to create a "popular Intifada".
Days earlier, Netanyahu banned Palestinian members of the Israeli parliament from entering the mosque for the first time, in what he called a move to "restore calm". Ahmed Tibi, a Joint List MP, told the Jerusalem Post newspaper Netanyahu was "adding fuel to the fire".
RELATED: Analysis: Why Israel wants a religious war over al-Aqsa
The government has also threatened a crackdown against the Islamic Movement in Israel, which has taken an increasingly central role at al-Aqsa since 2000. Most Palestinians in the occupied territories face restrictions preventing them from entering Jerusalem.
My brothers and sisters are being killed. Israel is a terrorist state, but we will not be silenced. Change must come.
Hana Daher, 14, Palestinian citizen of Israel
The Islamic Movement has repeatedly accused Israel of planning a takeover of the site.
Netanyahu said he was ready to take "aggressive steps" against the group. "Nobody will be immune," he added.
Zaki Aghbaria, an Islamic Movement spokesman, told Al Jazeera: "Israel fears us because we defend the rights of all Palestinians at al-Aqsa. But we will not be intimidated. Netanyahu has no authority there."
Human rights groups in Israel have decried "repressive measures" being taken by the Israeli police to try to end the wave of protests in Israel.
Adalah, a Palestinian legal rights group in Israel, said that, in addition to the large number of arrests at demonstrations, police had made a series of unlawful "preventive arrests" of political activists before the protests took place.
Police detained nine youths who they said were planning Thursday's demonstration in Nazareth, accusing them of intending to organise a riot.
Suhad Bishara, a lawyer with Adalah, told Al Jazeera: "This is a very dangerous development. These are clearly political arrests. Israel has used this measure before, but not in such a sweeping manner as now."
She added that in an unprecedented move, police had also briefly detained the fathers of several protest organisers. "This is a clear attempt to intimidate their families. The police are acting like they are above the law."
Police barred a dozen buses from entering Nazareth on Thursday to prevent protesters from across the
Galilee from joining the rally. The drivers were issued with house arrests.
In a statement, Adalah said the police were "taking advantage of the political situation and the spirit of racism to persecute, suppress, scare, threaten and silence a legitimate political protest".
Micky Rosenfeld, a police spokesman, told Al Jazeera: "The police are carrying out operations on many fronts, and these security measures are needed to ensure the public remains safe."
Awad Abdelfattah, a leading member of the High Follow-Up Committee, the main umbrella body for Palestinian citizens of Israel, told Al Jazeera that the protests in Israel reflected growing solidarity between Palestinian youth in Israel and the occupied territories.
"It is becoming clear to the young people here that they are being colonised, too, and left with nothing. The killings in the occupied territories have ignited the rage they already feel."
"Israeli policies are pushing us to unite with the Palestinians in the occupied territories in one common strategy of resistance."
At Thursday's demonstration in Nazareth, which ended in clashes, Hana Daher, a 14-year-old student, said she was there because "my brothers and sisters are being killed. Israel is a terrorist state, but we will not be silenced. Change must come".
Analysis: The transfer of Israeli Arabs
Once again Palestinian citizens of Israel exposed the country's lack of a meaningful democracy.
'We will not be silent'
Demonstrators pour onto the streets of Israel's Kafr Kanna to protest the police slaying of 22-year-old Palestinian man.
Palestinians mark 15 years since 'October massacre'
Thousands of Palestinian citizens of Israel protest against police tactics after killing of 13 demonstrators in 2000.
Israeli Knesset faces tough task over budget
The Knesset is expected to review some controversial draft laws but the budget will prove most challenging.


text:
Home International Professor Khalil Osiris – Transformation
Professor Khalil Osiris – Transformation
Professor Khalil Osiris
Professor Khalil Osiris – Transformation is an author, educator, social activist and entrepreneur. He spent 20 years of his life in prison. Khalil earned his bachelor's and master's degrees from Boston University while incarcerated.
He transformed his life and emerged from prison with a deep understanding of how to use personal crisis and challenges as opportunities for self-improvement. Professor Khalil Osiris is now available through Speakers Inc.
Khalil is host and life coach of the South African SABC TV Show, Each One Teach One. This popular show was winner of a 2016 SAFTA for Best Reality Educational Program. He helps young people and parents develop positive ways to cope with daily challenges at school, home and in their communities. Khalil is the first American to win a SAFTA.
He is the author of A Freedom That Comes From Within, a book about finding your own freedom in any situation. While in prison, Khalil realized he had been incarcerated long before he was arrested and his epiphany was that he could get out before he was released. His book invites readers to find their freedom regardless of how limited and powerless they may currently perceive themselves to be.
Khalil is founder of Positive Behavioral Interventions and Supports (PBIS) Africa, a research based school management initiative designed to improve behavioral outcomes for students in every grade. The primary goal of PBIS Africa is three-fold: 1) to prevent the development of inappropriate behavior; 2) reduce ongoing patterns of problem behavior; and 3) improve academic performance of all students. He often says, "The lowest performing schools produce the highest percentage of prisoners." Khalil is committed to building awareness of how to prevent what is known in America as the "school-to-prison pipeline" from spreading to schools in South Africa.
In 2013, Khalil launched the first PBIS Africa program at Vuleka School, a member of the Independent Schools Association of Southern Africa. In 2015, Discovery Primary Full Service School became the first South African government school to implement School-wide PBIS Africa.
Professor Khalil Osiris – Transformation implemented South Africa's first criminogenic needs re-entry program, Get Out & Stay Out (GOSO) Africa, at Zonderwater Correctional Centre. On 18 July 2013, Nelson Mandela Day, the first graduating class of 120 men celebrated their successful completion of the GOSO Africa program. He is author of The Psychology of Incarceration, a textbook and ground-breaking eight-part DVD series used in correctional and therapeutic settings throughout America.
Khalil and his South African colleague Craig Wilkinson are co-founders of Man-To-Man Talks, a movement that brings together men from diverse walks of life to have critical, life-changing conversations. Between them they have inspired tens of thousands of people at schools, universities, corporations, churches, NGO's, government departments, prisons and conferences throughout Africa and the USA with their dynamic and insightful talks and workshops.
A patron of the arts, Khalil is deeply passionate about supporting artists. As Director of Bronze Kingdom African Art Gallery, he organized an unprecedented partnership with the historic Town of Eatonville, Florida in which an iconic African statue was placed on the town square in celebration of Eatonville's 130th Anniversary as the oldest African American Municipality in America. Khalil regularly conducts workshops and keynote talks on topics ranging from diversity and inclusion to personal transformation and overcoming self-imposed limitations.
Exponential Thinking
Surpassing Limitations for an Exponential Mindset.
Diversity And Humanity
Embracing and celebrating our differences and the common bond of our humanity.
Mindful Masculinity
A male's intentional use of his power to serve, protect and uplift the wellbeing of others.
The Power Of Grace And Redemption
Making peace with our past and finding a greatness within ourselves we never thought possible.
Follow Speakers Inc on Twitter
Previous articleBrad Sadler – Motivational Speaker
Next articleChantell Ilbury – Strategist Facilitator
Sterling Hawkins - Leadership Innovation has become a master of innovation through massive changes and obstacles. Sterling Hawkins has overcome in his...
Bill Hoop Russell – Motivational
Professor Chris Roebuck