static void updateOurKartStatus(void){ uint8_t gameStatusByte = getDataByte(GAME_STATUS_COM_INDEX,our_kart.game_status_byte); //Update Number of Laps uint8_t numLapsLeft = maskAndShiftByte (gameStatusByte, NUM_LAPS_LEFT_MASK, NUM_LAPS_LEFT_SHIFT); if(our_kart.numLaps != numLapsLeft){ ES_Event ThisEvent; ThisEvent.EventType = LapUpdate; ThisEvent.EventParam = numLapsLeft; PostStrategySM(ThisEvent); our_kart.numLaps = numLapsLeft; } //Update Obstacle Status only do this until the obstacle has been made if(our_kart.obstacleStatus == 0){ uint8_t obstacleStatus = maskAndShiftByte(gameStatusByte, OBSTACLE_STATUS_STATUS_MASK, OBSTACLE_STATUS_STATUS_SHIFT); if(obstacleStatus!=our_kart.obstacleStatus){ ES_Event ThisEvent; ThisEvent.EventType = ObstacleComplete; PostStrategySM(ThisEvent); our_kart.obstacleStatus = 1; } } //Update TargetStatus if(our_kart.targetStatus ==0){ uint8_t targetStatus = maskAndShiftByte (gameStatusByte, TARGET_STATUS_MASK, TARGET_STATUS_SHIFT); //printf("\r0x%#08x = Game_Status_Byte, 0x%#08x = targetStatus\n", gameStatusByte, targetStatus); if(targetStatus!=our_kart.targetStatus){ ES_Event ThisEvent; ThisEvent.EventType = TargetComplete; PostStrategySM(ThisEvent); our_kart.targetStatus = 1; } } //Update Run Status ES_Event ThisEvent; uint8_t status = maskAndShiftByte (gameStatusByte, RUN_STATUS_MASK, RUN_STATUS_SHIFT); if(status!= RunStatus){ RunStatus = status; if(status == 0x01){ ThisEvent.EventType = FlagDropped; PostStrategySM(ThisEvent); HWREG(GPIO_PORTB_BASE +(GPIO_O_DATA + ALL_BITS))|= (BIT3HI); } else if(status ==0x02){ ThisEvent.EventType = CautionFlag; PostStrategySM(ThisEvent); PostTurningFSM(ThisEvent); HWREG(GPIO_PORTB_BASE +(GPIO_O_DATA + ALL_BITS))&= ~(BIT3HI); } else if(status == 0x03){ ThisEvent.EventType = RaceOver; PostStrategySM(ThisEvent); PostTurningFSM(ThisEvent); HWREG(GPIO_PORTB_BASE +(GPIO_O_DATA + ALL_BITS))&= ~(BIT3HI); } } }
static void posDataUpdate(Kart* thisKart){ thisKart->currentXPosition = 0; thisKart->currentYPosition = 0; thisKart->currentOrientation = 0; uint16_t zoneNumber = 0; uint16_t XPosition = 0x0000; uint16_t YPosition = 0x0000; int16_t orientation = 0x0000; XPosition|= getDataByte(thisKart->position_command_index, POS_X_M_INDEX)<<8; XPosition|= getDataByte(thisKart->position_command_index, POS_X_L_INDEX); YPosition|= getDataByte(thisKart->position_command_index, POS_Y_M_INDEX)<<8; YPosition|= getDataByte(thisKart->position_command_index, POS_Y_L_INDEX); orientation|= getDataByte(thisKart->position_command_index, ORIENT_M_INDEX)<<8; orientation|= getDataByte(thisKart->position_command_index, ORIENT_L_INDEX); thisKart->currentXPosition = XPosition; thisKart->currentYPosition = YPosition; thisKart->currentOrientation = orientation; zoneNumber = determineZone(XPosition,YPosition, thisKart); if(thisKart->kartNumber == our_kart.kartNumber){ if(zoneNumber != thisKart->zone){ ES_Event Event; Event.EventType = ZoneUpdate; Event.EventParam = zoneNumber; PostStrategySM(Event); PostTurningFSM(Event); thisKart->zone = zoneNumber; } } }
static void updateOurKartStatus(){ currentByte = getDataByte(GAME_STATUS_COMMAND_INDEX,(our_kart.kartNumber+GAME_STATUS_BYTE_INDEX)); //Update Number of Laps uint8_t numLapsLeft = maskAndShiftByte (currentByte, NUM_LAPS_LEFT_MASK, NUM_LAPS_LEFT_SHIFT); if(our_kart.numLaps != numLapsLeft){ ES_Event ThisEvent; ThisEvent.EventType = LAP_UPDATE; ThisEvent.EventParam = numToTranslate; PostStrategySM(ThisEvent); our_kart.numLaps = numLapsLeft; } //Update Obstacle Status only do this until the obstacle has been made if(our_kart.obstacleStatus == 0){ uint8_t obstacleStatus = maskAndShiftByte(currentByte, OBSTACLE_STATUS_STATUS_MASK, OBSTACLE_STATUS_STATUS_SHIFT); if(obstacleStatus!=our_kart.obstacleStatus){ ES_Event ThisEvent; ThisEvent.EventType = OBSTACLE_COMPLETE; PostStrategySM(ThisEvent); our_kart.obstacleStatus = 1; } } //Update TargetStatus if(our_kart.targetStatus ==0){ uint8_t targetStatus = maskAndShiftByte (currentByte, TARGET_STATUS_MASK, TARGET_STATUS_SHIFT); if(targetStatus!=our_kart.targetStatus){ ES_Event ThisEvent; ThisEvent.EventType = TARGET_COMPLETE; PostStrategySM(ThisEvent); our_kart.targetStatus = 1; } } //Update Run Status ES_Event ThisEvent; uint8_t runStatus = maskAndShiftByte (currentByte, RUN_STATUS_MASK, RUN_STATUS_SHIFT); if(runStatus == 0x01){ ThisEvent.EventType = FLAG_DROPPED; PostStrategySM(ThisEvent); } else if(runStatus ==0x02){ ThisEvent.EventType = CAUTION_FLAG; PostStrategySM(ThisEvent); } else if(runStatus == 0x03){ ThisEvent.EventType = RACE_OVER; PostStrategySM(ThisEvent); } }
void Video::tick() { const unsigned char data = getDataByte(); const unsigned char rowToPlot = getRowToPlot(data); this->picgen.tick(this->t,rowToPlot); updateFlash(); ++this->t; if (this->t >= E2Const::BYTES_PER_FIELD) { this->t = 0; } }