示例#1
0
/* called by c64.c:machine_specific_init */
void cartridge_init(void)
{
    cart_init();
    cartridge_nmi_alarm = alarm_new(maincpu_alarm_context, "Cartridge", cart_nmi_alarm_triggered, NULL);
    cartridge_freeze_alarm = alarm_new(maincpu_alarm_context, "Cartridge", cart_freeze_alarm_triggered, NULL);
    cartridge_int_num = interrupt_cpu_status_int_new(maincpu_int_status, "Cartridge");
}
示例#2
0
keep_task_t alarm_subTaskHandler(packet_t *pkt)
{
	switch (pkt->subTask)
	{
		case alarm_qty:
		    switch(pkt->dir)
			{
				case to_device:
				
				break;
			    case from_device:
			    
				break;
				case from_usb:
				break;
				case to_usb:
				
				break;
			}				
			
			
		break;
		case alarm_first:
		    switch(pkt->dir)
			{
				case to_device:
				
				break;
			    case from_device:
			       
				break;
				case from_usb:
				break;
				case to_usb:
				 if(spi_ready())
				 {
					spi_sendToDev(pkt);
					return retain_task;
				 }
				 else
				 {
					 return retain_task;
				 }				
				break;
			}			
		break;
		case alarm_clear:
		    alarm_new(5, "Request for unclear is not implemented");
		break;
		default:
		alarm_new(5, "Unknown Alarm Sub Task");
		break;
	}

	return release_task;
}
示例#3
0
void MAC_mlme_assocReq_cb(phy_trac_t trac){
	short_addr_t badAddr;
	security_t sec;
	badAddr = 0xffff;
	mac_pib_t *mpib = get_macPIB();
	
	switch(trac){
	case(TRAC_SUCCESS):
	
		if(waiting_for_info)
		{
			alarm_new(9, "Successful Tx of DataReq for assocReq");
			waiting_for_info = 0;
			mpib->macAssociatedPANCoord = YES;
			if(coordAddr.mode == MAC_SHORT_ADDRESS)
			{
				mpib->macCoordShortAddress = coordAddr;
			}
			else if(coordAddr.mode == MAC_LONG_ADDRESS)
			{
				mpib->macCoordExtendedAddress = coordAddr;
			}
			
		}
    
		if(waiting_for_AssocResponce)
		{
		   alarm_new(9,"Successful Tx of AssocReq");
		   add_to_time_qsm(&MAC_dataRequestCommand, &coordAddr, (Symbols_to_Time(macResponseWaitTime)));
		   waiting_for_AssocResponce = 0;
		   waiting_for_info = 1;
		 
		   
		}
	break;

	case(TRAC_NO_ACK):
		MAC_mlme_assocConf(MAC_NO_ACK, badAddr, &sec);
	break;

	case(TRAC_CHANNEL_ACCESS_FAILURE):
		MAC_mlme_assocConf(MAC_ACCESS_FAILURE,  badAddr, &sec);
	break;

	case(TRAC_INVALID):
		MAC_mlme_assocConf(MAC_INVALID_ADDRESS, badAddr, &sec);
	break;

	case(TRAC_SUCCESS_DATA_PENDING):
		break;
	}
	
}
示例#4
0
/*! \brief initialize the ACIA */
void myacia_init(void)
{
    acia.int_num = interrupt_cpu_status_int_new(maincpu_int_status, MYACIA);

    acia.alarm_tx = alarm_new(mycpu_alarm_context, MYACIA, int_acia_tx, NULL);
    acia.alarm_rx = alarm_new(mycpu_alarm_context, MYACIA, int_acia_rx, NULL);

    clk_guard_add_callback(mycpu_clk_guard, clk_overflow_callback, NULL);

    if (acia.log == LOG_ERR) {
        acia.log = log_open(MYACIA);
    }
}
void vicii_irq_init(void)
{
    vicii.int_num = interrupt_cpu_status_int_new(maincpu_int_status, "VICII");

    vicii.raster_irq_alarm = alarm_new(maincpu_alarm_context, "VicIIRasterIrq",
                                       vicii_irq_alarm_handler, NULL);
}
示例#6
0
文件: fdc.c 项目: bobsummerwill/VICE
/* FIXME: hack, because 0x4000 is only ok for 1001/8050/8250.
   fdc.c:fdc_do_job() adds an offset for 2040/3040/4040 by itself :-(
   Why donlly get a table for that...! */
void fdc_init(drive_context_t *drv)
{
    unsigned int fnum = drv->mynumber;
    BYTE *buffermem = drv->cpud->drive_ram + 0x100;
    BYTE *ipromp = &(drv->drive->rom[0x4000]);
    char *buffer;

    fdc[fnum].buffer = buffermem;
    fdc[fnum].iprom = ipromp;

    if (fdc_log == LOG_ERR)
        fdc_log = log_open("fdc");

#ifdef FDC_DEBUG
    log_message(fdc_log, "fdc_init(drive %d)", fnum);
#endif

    buffer = lib_msprintf("fdc%i", drv->mynumber);
    fdc[fnum].fdc_alarm = alarm_new(drv->cpu->alarm_context, buffer, int_fdc,
                                    drv);
    lib_free(buffer);

    clk_guard_add_callback(drv->cpu->clk_guard, clk_overflow_callback,
                           uint_to_void_ptr(drv->mynumber));
}
示例#7
0
文件: vdc.c 项目: martinpiper/VICE
/* Initialize the VDC emulation. */
raster_t *vdc_init(void)
{
    vdc.initialized = 0;

#ifdef GP2X
    vicii_setup_delay=1;
#endif

    vdc.log = log_open("VDC");

    vdc.raster_draw_alarm = alarm_new(maincpu_alarm_context, "VdcRasterDraw",
                                      vdc_raster_draw_alarm_handler, NULL);

    vdc_powerup();

    if (init_raster() < 0)
        return NULL;

    vdc.force_resize = 0;
    vdc.force_repaint = 0;

    vdc_draw_init();

    vdc.initialized = 1;

    /*vdc_set_geometry();*/
    resources_touch("VDCDoubleSize");

    return &vdc.raster;
}
示例#8
0
/* Initialize the TED emulation.  */
raster_t *ted_init(void)
{
    ted.log = log_open("TED");

    ted_irq_init();

    ted_fetch_init();

    ted.raster_draw_alarm = alarm_new(maincpu_alarm_context, "TEDRasterDraw",
                                      ted_raster_draw_alarm_handler, NULL);

    /* For now.  */
    /* ted_change_timing(NULL); */

    ted_timer_init();

    if (init_raster() < 0) {
        return NULL;
    }

    ted_powerup();

    ted_update_video_mode(0);
    ted_update_memory_ptrs(0);

    ted_draw_init();

    ted.initialized = 1;

    clk_guard_add_callback(maincpu_clk_guard, clk_overflow_callback, NULL);

    return &ted.raster;
}
示例#9
0
void MAC_mlme_assocInd(long_addr_t *addr, mac_capibilities_t capib, security_t *sec)
{
    alarm_new( 9, "I received an MAC Assoc Request");
	addr = addr;
	capib = capib;
	sec = sec;
}
示例#10
0
void MAC_mlme_assocRespHandler(mpdu_t *mpdu, frame_t *fr)
{
	alarm_new(9, "Received an Assoc Request");
	
	mac_pib_t *mpib = get_macPIB();
	
    short_addr_t addr = GET_FRAME_DATA(fr->Rx_fr, 2);
	uint8_t	command_status = GET_FRAME_DATA(fr->Rx_fr, 1);
	
	/*   Indicate that we are attached to a network and update the device of our new 
		short addr. */
			
	MAC_setAssoc(YES);

	if(mpdu->source.mode == MAC_SHORT_ADDRESS)
		{
			mpib->macCoordShortAddress = coordAddr;
		}
	else if(mpdu->source.mode == MAC_LONG_ADDRESS)
		{
			mpib->macCoordExtendedAddress = coordAddr;
		}
		
	MAC_setShortAddr(addr);
	
	
	MAC_mlme_assocConf(MAC_SUCCESS, addr, null);
    
}
示例#11
0
void TM_handler(packet_t *pkt)
{
	if(pkt)
	{
		switch(pkt->task)
		{
			case task_LED:
				//led_subTaskHandler(pkt); I stopped this So I would not have any transmissions to the device
			break;
		
			case task_alarm:
				alarm_subTaskHandler(pkt);
			break;
		
			case task_zigbee:
				zigbee_subTaskHandler(pkt);
			break;
		
			default:
				alarm_new(5, "Task Manager reached and unknown task %x", pkt->task);
			break;
		}
		TM_freePacket(pkt);
	}	
}
示例#12
0
void MAC_beaconHandler(mpdu_t *mpdu, frame_t *fr)
{
/* 	TODO:	For now I am going to send the Beacon data to the PAN descriptor table I am not sure what I am going to do with that data yet
 * 			I know that the beacon request can send more data in the payload in the future the beacon indication in the mlme will send that on up
 */
    
    /*TODO: I need to setup a data request if I get a beacon with this address as the dest. addr */
   
   
   // TODO: I need to add a Mac status with scan mode so I capture all the desc. tables only durring scans
	uint8_t len;
	phy_pib_t *ppib = get_phyPIB();
	mac_pib_t *mpib = get_macPIB();
	
	mac_superframe_t sf;
	mac_gtsSpec_t gtsSpec;
	
	sf = *((mac_superframe_t *)fr->Rx_fr->ptr);
	fr->Rx_fr->ptr += sizeof(mac_superframe_t);
	
	gtsSpec = *((mac_gtsSpec_t *)fr->Rx_fr->ptr);
	fr->Rx_fr->ptr += sizeof(mac_gtsSpec_t);


	
	mac_pan_descriptor_t *desc = (mac_pan_descriptor_t *)malloc(sizeof(mac_pan_descriptor_t));
	desc->Coord = mpdu->source;

	desc->LogicalChannel = ppib->phyCurrentChannel;
	desc->ChannelPage = ppib->phyCurrentPage;

	desc->GTSPermit = false; //TODO: I need to fix this I am not sure on it.
	desc->LinkQuality = fr->LQI;
	desc->Timestamp = fr->timestamp;
	desc->SecurityFailure = 0x00;//TODO: Proper data needs to be inserted.
	desc->SecurityLevel = MAC_sec_none;// TODO: Proper data needs to be inserted.
	desc->KeyIdMode = 0x00;// TODO: Proper data needs to be inserted.
	desc->KeySource = 0x00;// TODO: Proper data needs to be inserted.
	desc->KeyIndex = 0x00;// TODO: Proper data needs to be inserted.
	

	if(mpib->macRuntimeStatus == MAC_SCAN_IN_PROGRESS)
	{
		list_add(panDescriptor, desc);
		alarm_new(9, "Count of Descriptor table is %i", list_length(panDescriptor));
	}	
		
	MAC_mlme_beaconInd(mpdu, fr);
	
	NWK_beacon_handler(desc, mpdu, fr);

	if(mpib->macRuntimeStatus != MAC_SCAN_IN_PROGRESS)
	{
		free(desc);
	}
//	TODO: 	I want to add a que for the different coordinator PAN_IDs that will allow me to select a different PANid
//			Or just to see what else is out there.

}//end incoming_beacon_handler
示例#13
0
void MAC_mlme_assocReqHandler(mpdu_t *mpdu, frame_t *fr)
{
	if(MAC_isPanCoord())
	{
		mac_capibilities_t capib = *((mac_capibilities_t *)(fr->Rx_fr->ptr));
		fr->Rx_fr->ptr += sizeof(mac_capibilities_t);
	
		alarm_new(9, "MAC Request Command Received with cap: %.2x ", (capib));
	
		if(mpdu->source.mode != MAC_LONG_ADDRESS)
		{
			alarm_new(9, "Invalid source mode in an Assoc Request");
		}
	
		MAC_mlme_assocInd(&mpdu->source.extAddr, capib, &mpdu->sec);
	}		
}
示例#14
0
void MAC_mlme_assocConf(mac_status_t status, short_addr_t *addr, security_t *sec)
{
	alarm_new(9, "Received an Associate Confirm with the status: %x", status);

	status = status;
	addr = addr;
	sec = sec;
	
}
示例#15
0
int hardsid_open(void)
{
    if (hardsid_init() < 0) {
        return -1;
    }
    hsid_alarm = alarm_new(maincpu_alarm_context, "hardsid", hardsid_alarm_handler, 0);
    hardsid_reset();
    return 0;
}
示例#16
0
int joystick_init(void)
{
    joystick_alarm = alarm_new(maincpu_alarm_context, "Joystick",
                               joystick_latch_handler, NULL);

#ifdef COMMON_KBD
    kbd_initialize_numpad_joykeys(joykeys[0]);
#endif

    return joy_arch_init();
}
示例#17
0
void led_task(packet_t *pkt)
{
	switch(pkt->subTask)
	{
	case led_off:
		LED_Off(led_pinNum(pkt->buf[0]));
		alarm_new(20, "Device turned off LED %i", pkt->buf[0]);
		break;
	case led_on:
		LED_On(led_pinNum(pkt->buf[0]));
		alarm_new(20, "Device turned on LED %i", pkt->buf[0]);
		break;
	case led_toggle:
		LED_Toggle(led_pinNum(pkt->buf[0]));
		alarm_new(20, "Device toggled LED %i", pkt->buf[0]);
		break;
	case led_status:
		break;
	case led_report:
		break;
	}
}
示例#18
0
/* Functions using drive context.  */
void pc8477d_init(drive_context_t *drv)
{
    char *name;

    if (pc8477_log == LOG_ERR) {
        pc8477_log = log_open("PC8477");
    }

    clk_guard_add_callback(drv->cpu->clk_guard, clk_overflow_callback, drv->pc8477);

    name = lib_msprintf("%sEXEC", drv->pc8477->myname);
    drv->pc8477->seek_alarm = alarm_new(drv->cpu->alarm_context, name, seek_alarm_handler, drv->pc8477);
    lib_free(name);
}
示例#19
0
void MAC_mlme_assocReq(addr_t *destAddr, uint32_t page, uint8_t channel, uint8_t capabilites, security_t *sec)
{
    alarm_new(9, "MLME associate Request initiated");
	//
    MAC_setCurrentChannel(channel);
	coordAddr = *destAddr;
// TODO: I need to add the security values...
// TODO: I need to set up the page methods....

	MAC_setTxCB(&MAC_mlme_assocReq_cb);
	MAC_assocRequestCommand(destAddr, capabilites, sec);	
	waiting_for_AssocResponce = 1;
	MAC_setPANid(coordAddr.PANid);
}
示例#20
0
static void init(thread_t *post_thread) {
  assert(post_thread != NULL);
  thread = post_thread;

  vendor->set_callback(VENDOR_SET_LPM_MODE, vendor_enable_disable_callback);
  vendor->send_command(VENDOR_GET_LPM_IDLE_TIMEOUT, &idle_timeout_ms);

  idle_alarm = alarm_new();
  if (!idle_alarm) {
    LOG_ERROR(LOG_TAG, "%s could not create idle alarm.", __func__);
  }

  reset_state();
}
示例#21
0
static int epyxfastload_common_attach(void)
{
    if (c64export_add(&export_res_epyx) < 0) {
        return -1;
    }

    epyxrom_alarm = alarm_new(maincpu_alarm_context, "EPYXCartRomAlarm", epyxfastload_alarm_handler, NULL);
    epyxrom_alarm_time = CLOCK_MAX;

    epyxfastload_io1_list_item = io_source_register(&epyxfastload_io1_device);
    epyxfastload_io2_list_item = io_source_register(&epyxfastload_io2_device);

    return 0;
}
示例#22
0
void midi_init(void)
{
    midi_int_num = interrupt_cpu_status_int_new(maincpu_int_status, "MIDI");

    midi_alarm = alarm_new(maincpu_alarm_context, "MIDI", int_midi, NULL);

    clk_guard_add_callback(maincpu_clk_guard, clk_overflow_callback, NULL);

    if (midi_log == LOG_ERR) {
        midi_log = log_open("MIDI");
    }
    mididrv_init();
    midi_reset();
}
示例#23
0
void viacore_init(via_context_t *via_context, alarm_context_t *alarm_context,
                  interrupt_cpu_status_t *int_status, clk_guard_t *clk_guard)
{
    char *buffer;

    if (via_context->log == LOG_ERR)
        via_context->log = log_open(via_context->my_module_name);

    buffer = lib_msprintf("%sT1", via_context->myname);
    via_context->t1_alarm = alarm_new(alarm_context, buffer, viacore_intt1,
                                      via_context);
    lib_free(buffer);

    buffer = lib_msprintf("%sT2", via_context->myname);
    via_context->t2_alarm = alarm_new(alarm_context, buffer, viacore_intt2,
                                      via_context);
    lib_free(buffer);

    via_context->int_num = interrupt_cpu_status_int_new(int_status,
                                                        via_context->myname);
    clk_guard_add_callback(clk_guard, viacore_clk_overflow_callback,
                           via_context);
}
示例#24
0
void riotcore_init(riot_context_t *riot_context,
                   alarm_context_t *alarm_context, clk_guard_t *clk_guard,
                   unsigned int number)
{
    char *buffer;

    riot_context->log = log_open(riot_context->myname);

    buffer = lib_msprintf("%sT1", riot_context->myname);
    riot_context->alarm = alarm_new(alarm_context, buffer, riotcore_int_riot,
                                    riot_context);
    lib_free(buffer);

    clk_guard_add_callback(clk_guard, riotcore_clk_overflow_callback,
                           riot_context);
}
示例#25
0
void datasette_init(void)
{
    datasette_log = log_open("Datasette");

    datasette_alarm = alarm_new(maincpu_alarm_context, "Datasette",
                                datasette_read_bit, NULL);

    clk_guard_add_callback(maincpu_clk_guard, clk_overflow_callback, NULL);

    datasette_cycles_per_second = machine_get_cycles_per_second();
    if (!datasette_cycles_per_second) {
        log_error(datasette_log,
                  "Cannot get cycles per second for this machine.");
        datasette_cycles_per_second = 985248;
    }
}
示例#26
0
/* Initialization.  */
void kbdbuf_init(int location, int plocation, int size, CLOCK mincycles)
{
    int isautoload = (cmdline_get_autostart_mode() != AUTOSTART_MODE_NONE);

    if (!isautoload) {
        mincycles += KbdbufDelay;
    }
    kbdbuf_flush_alarm = alarm_new(maincpu_alarm_context, "Keybuf", kbdbuf_flush_alarm_triggered, NULL);
    kbdbuf_reset(location, plocation, size, mincycles);
    /* printf("kbdbuf_init cmdline_get_autostart_mode(): %d\n", cmdline_get_autostart_mode()); */
    /* inject string given to -keybuf option on commandline into keyboard buffer,
       except autoload/start was used, then it is postponed to after the loading */
    if (!isautoload) {
        kbdbuf_feed_cmdline();
    }
}
示例#27
0
void MAC_incomingFrame(frame_t *fr)
{
	//mac_command_type_t command;
	mac_frame_type_t type;

	mac_pib_t *mpib = get_macPIB();
	mpdu_t *mpdu = (mpdu_t *)malloc(sizeof(mpdu_t));
	uint8_t level = MAC_breakdownFrame(mpdu, fr);
	if(level)
	{
		alarm_new(5, "Packet got filtered at level %i", level);
		free(mpdu);
		return;

	}

	type = mpdu->fcf.MAC_fcf_Frame_Type;

	/*if(MACreceiveBeaconOnly == yes)
	{
		if(type != MAC_BEACON)
		{
			free(mpdu);
			return;
		}
	}*/

	if(type == MAC_BEACON)
	{
		MAC_beaconHandler(mpdu, fr);
	}

	if(type == MAC_DATA){
		MAC_mcps_dataInd(mpdu, fr);
	}
	if(type == MAC_ACK){

//	TODO:	I need to create a ack handler...
		add_ack(mpdu->seq_num);
	}

	if(type == MAC_COMMAND)
	{
		MAC_commandHandler(fr, mpdu);
	}//end if
}
示例#28
0
文件: vic.c 项目: martinpiper/VICE
/* Initialization. */
raster_t *vic_init(void)
{
    vic.log = log_open("VIC");

    vic.raster_draw_alarm = alarm_new(maincpu_alarm_context, "VicIRasterDraw",
                                      vic_raster_draw_alarm_handler, NULL);

    clk_guard_add_callback(maincpu_clk_guard, clk_overflow_callback, NULL);

    vic_change_timing();

    if (init_raster() < 0)
        return NULL;

    vic.auxiliary_color = 0;
    vic.mc_border_color = 0;

    vic.color_ptr = mem_ram;
    vic.screen_ptr = mem_ram;
    vic.chargen_ptr = vic20memrom_chargen_rom + 0x400;

    /* FIXME: Where do these values come from? */
    vic.light_pen.triggered = 0;
    vic.light_pen.x = 87;
    vic.light_pen.y = 234;

    /* FIXME */
    vic.char_height = 8;
    vic.row_increase_line = 8;
    vic.text_cols = 22;
    vic.text_lines = 23;

    vic_reset();

    vic_draw_init();

    vic_update_memory_ptrs();

    vic.initialized = 1;

    resources_touch("VICDoubleSize");
    /*vic_resize();*/

    return &vic.raster;
}
non_repeating_timer_t *non_repeating_timer_new(period_ms_t duration, alarm_callback_t cb, void *data) {
  assert(cb != NULL);

  non_repeating_timer_t *ret = osi_calloc(sizeof(non_repeating_timer_t));

  ret->alarm = alarm_new();
  if (!ret->alarm)
    goto error;

  ret->duration = duration;
  ret->callback = cb;
  ret->data = data;

  return ret;
error:;
  non_repeating_timer_free(ret);
  return NULL;
}
示例#30
0
void rf230_init(void)
{
	//Setup SPI for Zigbee and Clear power reduction
	spi_master_init(SPI_ZIGBEE);

    //Setup SPI speed for Zigbee    
	spi_master_setup_device(SPI_ZIGBEE, &SPI_DEVICE_ZIGBEE, SPI_MODE_0,
			SPI_ZIGBEE_DEFAULT_BAUDRATE, 0);

	spi_enable(SPI_ZIGBEE);

	radio_RF230_init();
    
	turn_ON_CRC();

	alarm_new(9, "CRC Started \0");
	
    
}