예제 #1
0
void scsis_request(SCSIS* scsis, IPC* ipc)
{
    if (HAL_GROUP(ipc->cmd) != scsis->storage_descriptor->hal)
    {
        error(ERROR_NOT_SUPPORTED);
        return;
    }
    switch (HAL_ITEM(ipc->cmd))
    {
    case IPC_READ:
    case IPC_WRITE:
        //IDLE - means resetted before - ignore IO messages
        if (scsis->state != SCSIS_STATE_IDLE)
            scsis_bc_storage_io_complete(scsis, (int)ipc->param3);
        break;
    case STORAGE_GET_MEDIA_DESCRIPTOR:
        scsis_get_media_descriptor(scsis, (int)ipc->param3);
        break;
    case STORAGE_NOTIFY_STATE_CHANGE:
        if (scsis->storage_descriptor->flags & SCSI_STORAGE_DESCRIPTOR_REMOVABLE)
        {
#if (SCSI_MMC)
            scsis->media_status_changed = true;
#endif //SCSI_MMC
            if (scsis->media != NULL)
                scsis_media_removed(scsis);
            else
                scsis_request_media(scsis);
            storage_request_notify_state_change(scsis->storage_descriptor->hal, scsis->storage_descriptor->storage, scsis->storage_descriptor->user);
        }
        break;
    default:
        error(ERROR_NOT_SUPPORTED);
    }
}
예제 #2
0
void mscd_class_request(USBD* usbd, void* param, IPC* ipc)
{
    MSCD* mscd = (MSCD*)param;
    switch (HAL_GROUP(ipc->cmd))
    {
    case HAL_USB:
        mscd_driver_event(usbd, mscd, ipc);
        break;
    default:
        if (USBD_IFACE_ITEM(ipc->param1) == mscd->io_owner)
            scsis_request(MSCD_SCSI(mscd)[mscd->io_owner], ipc);
        else
            mscd_release_io(mscd);
    }
}
예제 #3
0
void app()
{
    APP app;
    CC1101 cc1101;
    IPC ipc;

    app_init(&app);

    cc1101_hw_init(&cc1101);

    for (;;)
    {
        ipc_read(&ipc);
        switch (HAL_GROUP(ipc.cmd))
        {
        default:
            error(ERROR_NOT_SUPPORTED);
            break;
        }
        ipc_write(&ipc);
    }
}
예제 #4
0
파일: loras.c 프로젝트: alexeyk13/rexos
void loras_main()
{
    IPC ipc;
    LORA lora;
#if (LORA_DEBUG)
    open_stdout();
#endif //LORA_DEBUG
    init(&lora);

    for (;;)
    {
        ipc_read(&ipc);
        switch (HAL_GROUP(ipc.cmd))
        {
        case HAL_LORA:
            loras_request(&lora, &ipc);
            break;
        default:
            error(ERROR_NOT_SUPPORTED);
            break;
        }
        ipc_write(&ipc);
    }
}
예제 #5
0
파일: hidd_kbd.c 프로젝트: alexeyk13/rexos
void hidd_kbd_class_request(USBD* usbd, void* param, IPC* ipc)
{
    HIDD_KBD* hidd = (HIDD_KBD*)param;
    if (HAL_GROUP(ipc->cmd) == HAL_USB)
        hidd_kbd_driver_event(usbd, hidd, ipc);
    else
        switch (HAL_ITEM(ipc->cmd))
        {
        case USB_HID_KBD_MODIFIER_CHANGE:
            hidd_kbd_modifier_change(usbd, hidd, ipc->param2);
            break;
        case USB_HID_KBD_KEY_PRESS:
            hidd_kbd_key_press(usbd, hidd, ipc->param2);
            break;
        case USB_HID_KBD_KEY_RELEASE:
            hidd_kbd_key_release(usbd, hidd, ipc->param2);
            break;
        case USB_HID_KBD_GET_LEDS_STATE:
            hidd_kbd_get_leds_state(hidd, ipc);
            break;
        default:
            error(ERROR_NOT_SUPPORTED);
        }
}