コード例 #1
0
ファイル: usbh_hid.cpp プロジェクト: bratkov/tmos
RES_CODE usb_remote_hid_t::set_report(const void* buf, uint32_t len, uint32_t rep_type, uint32_t rep_id)
{
	RES_CODE res;

	//read status
    TRACELN1("hid: set report");

	req.bmRequestType = USB_REQ_OUT_CLASS_INTERFACE;
	req.bRequest = HIDRequest_SET_REPORT;
	req.wIndex = pid->bInterfaceNumber;				// Interface number
	req.wValue = (rep_type << 8) | rep_id;			// HID_REPORTTYPE_INPUT / OUTPUT / FEATURE
	req.wLength = len;
	res = std_request((void*)buf);
	return res;
}
コード例 #2
0
ファイル: esp8266.cpp プロジェクト: miro-kostadinov/tmos
void esp8266_module::wifi_process_tout(void)
{
	CSocket* sock;
	HANDLE list;
	RES_CODE res;

	if(wifi_tout)
	{
		if(!--wifi_tout)
		{
			if(!used_sockets)
			{
				//--- deactivate the context?
				for(int i=0; i < 3; i++ )
				{
					if(wifi_send_cmd("+CWQAP", 150) & WIFI_CMD_STATE_OK)
					{
						wifi_send_cmd("+CWJAP?", 50);
						break;
					}
				}
				wifi_on_disconnect(this);

				TRACELN1("WIFI OFF");

				list = waiting_open;
				waiting_open = NULL;
				while(list)
				{
					sock = (CSocket*)list;
					list = sock->next;
					sock->res = RES_BUSY;
					res = wifi_sock_open(sock);
					if(res & FLG_SIGNALED)
						usr_HND_SET_STATUS(sock, res);
				}
				if(!used_sockets)
					wifi_drv_off();
			}
		}
	}
}
コード例 #3
0
ファイル: dac_drv.cpp プロジェクト: bratkov/tmos
void DAC_DCR(DAC_DRIVER_INFO* drv_info, unsigned int reason, HANDLE hnd)
{
	DAC_DRIVER_DATA *drv_data = drv_info->drv_data;
	DAC_DRIVER_MODE *dac_mode = (DAC_DRIVER_MODE *)(hnd->mode.as_voidptr);

	switch(reason)
	{
		case DCR_RESET:
			RCCPeripheralReset(drv_info->info.peripheral_indx);
			RCCPeripheralDisable(drv_info->info.peripheral_indx); // ??? turn off
#if USE_DAC_DMA_DRIVER
        	drv_data->dac_dma_hnd[0].client.drv_index = drv_info->info.drv_index;
        	drv_data->dac_dma_hnd[1].client.drv_index = drv_info->info.drv_index;
#endif
			break;

		case DCR_OPEN:
		{
			if(dac_mode && dac_mode->dac_ch <2 && drv_data->dac_mode[dac_mode->dac_ch] == NULL)
			{
				if(!drv_data->dac_mode[0] && !drv_data->dac_mode[1])
				{
					if(!ConfigureDac(drv_info))
						break;
				}
				ConfigureDacChannel(drv_info->hw_base, dac_mode);

				drv_data->dac_mode[dac_mode->dac_ch] = dac_mode;
				hnd->res = RES_OK;
			}
			break;
		}

		case DCR_CLOSE:
#if USE_DAC_DMA_DRIVER
			drv_data->dac_dma_hnd[dac_mode->dac_ch].close();
#endif
			drv_data->dac_mode[dac_mode->dac_ch] = NULL;
			if(!drv_data->dac_mode[0] && !drv_data->dac_mode[1])
			{
				//Disable ?
				NVIC_DisableIRQ(drv_info->info.drv_index);
				RCCPeripheralDisable(drv_info->info.peripheral_indx);

				PIO_Free_List(drv_info->dac_pins);
			}
			break;

		case DCR_CANCEL:
			// can only cancel dma transfers
#if USE_DAC_DMA_DRIVER
			if(drv_data->dac_dma_hnd[dac_mode->dac_ch].res & FLG_BUSY)
				drv_data->dac_dma_hnd[dac_mode->dac_ch].hcontrol(DCR_CANCEL);
#endif
			break;


		case DCR_SIGNAL:
#if USE_DAC_DMA_DRIVER
			TRACELN1("DAC sig");
			if(hnd == &drv_data->dac_dma_hnd[0])
			{

				hnd = drv_data->pending[0];
				if(hnd)
				{
					if(hnd->len > drv_data->dac_dma_hnd[0].len)
					{
						hnd->src.as_byteptr += hnd->len - drv_data->dac_dma_hnd[0].len;
						hnd->len = drv_data->dac_dma_hnd[0].len;
					}
					drv_data->pending[0] = NULL;
					if (__get_CONTROL() & 2)
						usr_HND_SET_STATUS(hnd, RES_SIG_OK);
					else
						svc_HND_SET_STATUS(hnd, RES_SIG_OK);
				}
			} else
			{
				if(hnd == &drv_data->dac_dma_hnd[1])
				{

					hnd = drv_data->pending[1];
					if(hnd)
					{
						if(hnd->len > drv_data->dac_dma_hnd[1].len)
						{
							hnd->src.as_byteptr += hnd->len - drv_data->dac_dma_hnd[1].len;
							hnd->len = drv_data->dac_dma_hnd[1].len;
						}
						drv_data->pending[1] = NULL;
						usr_HND_SET_STATUS(hnd, RES_SIG_OK);
					}
				}
			}
#endif
			break;

	}
}
コード例 #4
0
ファイル: esp8266.cpp プロジェクト: miro-kostadinov/tmos
RES_CODE esp8266_module::process_write(CSocket* sock)
{
	unsigned size;//, newsize, id;
//	unsigned int start_size, write_size, sock_state;
	CSTRING cmd;
	unsigned char snd_pending;


	while(1)
	{
		size = sock->len;
		if(!size)
		{
		    TRACELN1("WIFI: write OK");
			return RES_SIG_OK;
		}
		if(size >1022)
			size = 1022;

		if(sock->sock_state != SOCKET_CONECTED)
			break;

		// Send command
		cmd.format("+CIPSEND=%u,%u", sock->sock_id, size);
	    TRACELN("WIFI: WRITE %d?", size);
	    cmd_state |= WIFI_CMD_STATE_HND;
	    if(wifi_send_cmd(cmd.c_str(), 20) != WIFI_CMD_STATE_RETURNED)
	    {
	    	wifi_net_error(NET_ERR_SOCK_WRITE);
	    	return RES_SIG_ERROR;
	    }


	    // Send data
		snd_pending = '>';
		do
		{
			process_input(rcv_hnd.signal, cmd.c_str(), snd_pending);
			if ( cmd_state >= WIFI_CMD_STATE_HND )
			{
				if ( cmd_state & WIFI_CMD_STATE_HND )
				{
					unsigned int mytime;

					cmd_state &= ~WIFI_CMD_STATE_HND;
					snd_pending = 0;

					rcv_hnd.tsk_start_read(&received_ch, 1);
					mytime = CURRENT_TASK->time;
					tsk_sleep(55); // data sheet recomendation
					if( snd_hnd.tsk_write(sock->src.as_voidptr, size, WIFI_WRITE_TOT) != RES_OK)
						break;
					CURRENT_TASK->time = mytime;

				} else
				{
					if ( cmd_state >= WIFI_CMD_STATE_OK )
						break; // command completed with OK, ERROR ..
				}
			}

		} while(tsk_resume_wait_signal(rcv_hnd.signal));

//	    wifi_on_blink_transfer(this, GPRS_TRANSFER_INDICATOR);

	    //Check the result
	    if(cmd_state & WIFI_CMD_STATE_OK)
	    {
			TRACE1(" done!");
			sock->src.as_byteptr += size;
			sock->len -= size;
			continue;
		}

	    if (cmd_state & WIFI_CMD_STATE_CMES)
	    {
	    	TRACE_ERROR("\r\nWIFI:%s write ERROR", sock->client.task->name);
	    }

    	break;
	}
	wifi_sleep(120);
	wifi_net_error(NET_ERR_SOCK_WRITE);
	return RES_SIG_ERROR;
}
コード例 #5
0
ファイル: kernel.cpp プロジェクト: bratkov/tmos
extern "C" void sys_kernel_init( void)
{
    DRIVER_INFO drv_info;
    char *ptr;
    int i;

#if TRACE_IS > TRACE_DISABLED
/*
    //--------------- Start trace -----------------------------//
    CDBG->CDBG_DEMCR |= CDBG_DEMCR_TRCENA;

    //TPIU
    TPIU->TPIU_FFCR = 0x00;							//Formatter and Flush Control Register
    TPIU->TPIU_SPPR = TPIU_SPPR_ASYNC_MANCHESTER;	//Selected Pin Protocol Register
    TPIU->TPIU_FFCR = 0x00;							//Formatter and Flush Control Register
    TPIU->TPIU_CSPSR = TPIU_CSPSR_WORD;				//Current Sync Port Size Register
    TPIU->TPIU_ACPR = 0x04;							//Async Clock Prescaler Register

    //ITM

    //Lock Access Register
    ITM->ITM_LAR = ITM_LAR_KEY;
    //Trace Control Register = trace ID = 1, ITM and DTW enabled
    ITM->ITM_TCR = 0x10000 | ITM_TCR_DWTENA | ITM_TCR_ITMENA;
    ITM->ITM_TER = 0xFFFFFFFF ;						//Trace Enable = all stimulus ports
    ITM->ITM_TPR = 0x0;								//Trace Privilege = all
*/

	TRACELN1("===== " __DATE__ " === " __TIME__ " =====    "); //few more spaces (a clock change follows)
#endif

	//------------- initialize dynamic memory  ---------------//
#if USE_TMOS_STDLIB
	svc_pool_init(&end, (void*)(BASE_SRAM + RAM_SIZE));
#endif

    // initialize main task
    usr_task_init_static(&main_task_desc, false);
    PMAIN_TASK->tlist = PMAIN_TASK;

    //extra initialization needed for main_task
    PMAIN_TASK->time = 0;								// current time is 000000000
    PMAIN_TASK->state = TSKSTATE_READY;				// leave it suspend ???
#if USE_MEMORY_TRACKING
    PMAIN_TASK->aloc_mem = 0;
    PMAIN_TASK->aloc_ptrs =0;
#endif

    // Reset the drivers i
    for (i = SysTick_IRQn; i < INALID_DRV_INDX; i++)
    {
		ptr = DRV_TABLE[i];
		drv_info = (DRIVER_INFO) (void*) (ptr - 1);
		drv_info->dcr(drv_info, DCR_RESET, NULL);
    }

    // Application level init
    app_init();
#if USE_STATIC_CONSTRUCTORS
    sys_call_static_ctors();
#endif
}