00001
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #include "board.h"
00046 #include "gpio.h"
00047 #include "intc.h"
00048 #include "qt60168_controller_init.h"
00049
00050 #include "controller.h"
00051
00052
00053 #include "cycle_counter.h"
00054
00055 #include "spi.h"
00056
00057 #include "conf_qt60168.h"
00058
00059
00060 void update_joystick_status(unsigned short new_status);
00061
00062 #define JOYSTICK_STATUS_IDLE 0x00000000
00063 #define JOYSTICK_STATUS_UP 0x00000001
00064 #define JOYSTICK_STATUS_DOWN 0x00000002
00065 #define JOYSTICK_STATUS_RIGHT 0x00000004
00066 #define JOYSTICK_STATUS_LEFT 0x00000008
00067 #define JOYSTICK_STATUS_PRESSED 0x00000010
00068 static int qwheel_status = JOYSTICK_STATUS_IDLE;
00069
00070 void evaluate_detect_status(Bool status, int status_pressed)
00071 {
00072
00073 if (status == 1) {
00074 qwheel_status |= status_pressed;
00075 }
00076
00077 else {
00078 qwheel_status &= ~status_pressed;
00079 }
00080 }
00081
00082
00083 void update_joystick_status(unsigned short new_status)
00084 {
00085 Bool status;
00086
00087 status = (new_status & (1<<QT60168_TOUCH_SENSOR_WHEEL_UP))?TRUE:FALSE;
00088 evaluate_detect_status(status, JOYSTICK_STATUS_UP);
00089
00090
00091 status =(new_status & (1<<QT60168_TOUCH_SENSOR_WHEEL_DOWN))?TRUE:FALSE;
00092 evaluate_detect_status(status, JOYSTICK_STATUS_DOWN);
00093
00094
00095 status = (new_status & (1<<QT60168_TOUCH_SENSOR_WHEEL_RIGHT))?TRUE:FALSE;
00096 evaluate_detect_status(status, JOYSTICK_STATUS_RIGHT);
00097
00098
00099 status = (new_status & (1<<QT60168_TOUCH_SENSOR_WHEEL_LEFT))?TRUE:FALSE;
00100 evaluate_detect_status(status, JOYSTICK_STATUS_LEFT);
00101
00102
00103 status = (new_status & (1<<QT60168_TOUCH_SENSOR_BUTTON_0))?TRUE:FALSE;
00104 evaluate_detect_status(status, JOYSTICK_STATUS_PRESSED);
00105
00106 }
00107
00108 void controller_init(U32 fcpu_hz, U32 fhsb_hz, U32 fpbb_hz, U32 fpba_hz)
00109 {
00110 static const gpio_map_t QT60168_SPI_GPIO_MAP = { { QT60168_SPI_SCK_PIN,
00111 QT60168_SPI_SCK_FUNCTION },
00112 { QT60168_SPI_MISO_PIN, QT60168_SPI_MISO_FUNCTION },
00113 { QT60168_SPI_MOSI_PIN, QT60168_SPI_MOSI_FUNCTION },
00114 { QT60168_SPI_NPCS0_PIN, QT60168_SPI_NPCS0_FUNCTION }
00115 };
00116
00117
00118 spi_options_t spiOptions = {
00119 .reg = QT60168_SPI_NCPS,
00120 .baudrate = QT60168_SPI_MASTER_SPEED,
00121 .bits = QT60168_SPI_BITS,
00122 .spck_delay = 0,
00123 .trans_delay = 0,
00124 .stay_act = 0,
00125 .spi_mode = 3,
00126 .modfdis = 1 };
00127
00128
00129 gpio_enable_module(QT60168_SPI_GPIO_MAP, sizeof(QT60168_SPI_GPIO_MAP)
00130 / sizeof(QT60168_SPI_GPIO_MAP[0]));
00131
00132
00133 spi_initMaster(QT60168_SPI, &spiOptions);
00134
00135
00136 spi_selectionMode(QT60168_SPI, 0, 0, 0);
00137
00138
00139 spi_enable(QT60168_SPI);
00140
00141
00142 spi_setupChipReg(QT60168_SPI, &spiOptions, fpba_hz);
00143
00144
00145 qt60168_init(fpba_hz);
00146
00147 rtc_init_qt();
00148 }
00149
00150
00151 Bool is_joystick_up(void)
00152 {
00153 return (qwheel_status&JOYSTICK_STATUS_UP)?TRUE:FALSE;
00154 }
00155
00156 Bool is_joystick_down(void)
00157 { return (qwheel_status&JOYSTICK_STATUS_DOWN)?TRUE:FALSE;
00158
00159 }
00160
00161 Bool is_joystick_right(void)
00162 {
00163 return (qwheel_status&JOYSTICK_STATUS_RIGHT)?TRUE:FALSE;
00164 }
00165
00166 Bool is_joystick_left(void)
00167 {
00168 return (qwheel_status&JOYSTICK_STATUS_LEFT)?TRUE:FALSE;
00169 }
00170
00171 Bool is_joystick_pressed(void)
00172 {
00173 return (qwheel_status&JOYSTICK_STATUS_PRESSED)?TRUE:FALSE;
00174 }