#include "NXCDefs.h"
#define I2C_ADDRESS          0x06

#define RFID_SENSOR_PORT     IN_3
//Valid commands
#define RFID_ON              0x01
#define RFID_OFF             0x02
#define GET_STATE            0x03
#define NEW_RFID_TAG         0x04
#define GET_RFID_TAG         0x05

byte write_read_i2c(byte i2c_address, byte port, byte command){

     byte rt_bytes=1;
     byte answer[1];//change this

     byte request[2];
     ArrayInit(request, 0, 2);

     ArrayInit(answer, 0, 1);
     request[0] = i2c_address;

     request[1] = command;
     I2CBytes(port, request, rt_bytes , answer);

     return answer[0];
}

byte set_rfid_state(byte i2c_address, byte port, byte command){

    return write_read_i2c(i2c_address,port,command);
}

//returns 1 if new RFID-tag has been read otherwise 0

byte new_rfid_data(byte i2c_address, byte port){
    return write_read_i2c(i2c_address,port,NEW_RFID_TAG);

}
byte get_rfid_state(byte i2c_address, byte port){

    return write_read_i2c(i2c_address,port,GET_STATE);
}

//returns the RFID id from the MCU

byte get_rfid_tag(byte i2c_address, byte port){
    return write_read_i2c(i2c_address,port,GET_RFID_TAG);

}

void say_num(byte num){
    string file_name=".rso";

    string str_num = NumToStr(num);
    file_name = StrCat(str_num, file_name);

    //file name must be on the form 1.rso 2.rso ....
    PlayFile(file_name);//I only have soundfiles for numbers 0 to 10 so robot can only say these numbers
}


task main()

{
     byte reply=0;
     int rfid_tag;
     string num_sound;

     SetSensorType(RFID_SENSOR_PORT, IN_TYPE_LOWSPEED);
     SetSensorMode(RFID_SENSOR_PORT, IN_MODE_RAW);

     ResetSensor(RFID_SENSOR_PORT);
     while(true){
         if(ButtonPressed(BTN2, true)){

             reply=set_rfid_state(I2C_ADDRESS, RFID_SENSOR_PORT, RFID_ON);
             NumOut(0, 0, reply,true);

         }
         if(ButtonPressed(BTN3, true)){

             reply=set_rfid_state(I2C_ADDRESS, RFID_SENSOR_PORT, RFID_OFF);
             NumOut(0, 0, reply,true);

         }
         reply=new_rfid_data(I2C_ADDRESS, RFID_SENSOR_PORT);
         if(reply){

             TextOut(0,LCD_LINE1,"RFID tag:",true);
             Wait(350);

             rfid_tag = get_rfid_tag(I2C_ADDRESS, RFID_SENSOR_PORT);
             NumOut(60, LCD_LINE1,rfid_tag);

             if(rfid_tag==0){
                 PlayFile("reject.rso");

                 while(SoundState()!=SOUND_STATE_IDLE){}
             }
             else{

                 PlayFile("approve.rso");
                 Wait(2650);
                 say_num(rfid_tag);


             }

         }

     }
}







