PICO I2C FW
Dependencies: USBDevice
main.cpp
- Committer:
- cyberjoey
- Date:
- 2019-03-12
- Revision:
- 25:89979f4ccfa9
- Parent:
- 24:5ee9d36089f3
- Child:
- 26:89920e2454f8
File content as of revision 25:89979f4ccfa9:
#include "mbed.h" #include "USBHID.h" // Virtual serial port over USB TODO NEW VID PID NEEDED!! USBHID hid(64, 64); //This report will contain data to be sent HID_REPORT send_report; HID_REPORT recv_report; //debug port setup Serial pc(P3_0, P3_1); // I2C setup I2C i2c(P1_6, P1_7); // P1_6 -> I2C1_SDA, P1_7-> I2C1_SCL //Timer setup Ticker timer_1; // timer for blinking led heartbeat bool led_toggle_flag = false; //LED blink setup DigitalOut rLED(LED1); DigitalOut gLED(LED2); DigitalOut bLED(LED3); //InterruptIn button(SW1); void LED_blink_callback() { // LED Heart beat led_toggle_flag = !led_toggle_flag; if (led_toggle_flag) { //toggle teal leds //gLED = LED_ON; bLED = LED_ON; } else { rLED = LED_OFF; gLED = LED_OFF; bLED = LED_OFF; } } // ***************************************************************************** // I2C_write_register(char, char, char) writes single byte to OT07 // char I2C address // char OT07 register address // char data byte to be writen // returns 0 on success ACK, 1 on NACK // ***************************************************************************** int I2C_write_register(char I2C_add, char reg_add, char byte) { char data[2]; int error; data[0] = reg_add; data[1] = byte; error = i2c.write(I2C_add, data, 2); return error; } /// **************************************************************************** // I2C_write_register(char, char, char *, int) writes multiple bytes to OT07 // char I2C address // char OT07 register address // char * data vector of bytes to be written // int number of bytes to write // returns 0 on success ACK, 1 on NACK // ***************************************************************************** int I2C_write_register(char I2C_add, char reg_add, char *bytes, int n) { int i; //set start address char data[16]; int error; data[0] = reg_add; for (i = 1; i <= n; i++) { data[i] = bytes[i - 1]; } error = i2c.write(I2C_add, data, n + 1); // send n bytes of data return error; } // ***************************************************************************** // I2C_read_register(char, char, char *, int) writes single byte to OT07 // char I2C address // char OT07 register address // char * data vector for read bytes to be stored in // int number of bytes to read // returns 0 on success, 1 on fail // ***************************************************************************** int I2C_read_register(char I2C_add, char reg_add, char *bytes, int n) { int error; error = i2c.write(I2C_add, ®_add, 1, 1); if (error)return error; error = i2c.read(I2C_add, bytes, n); //if(DEBUG)db.printf("rr e[%d]\r\n",error); return error; } //****************************************************************************** // main() //****************************************************************************** int main() { pc.baud(9600); //************* init ticker timer callbacks **************** timer_1.attach(&LED_blink_callback, 0.5); //start ticker, once per sec. i2c.frequency(400000); //set I2C clock to 400kHz rLED = LED_OFF; gLED = LED_ON; bLED = LED_ON; send_report.length = 8; pc.printf("<HID_TEST_FW>\r\n"); while (1) { pc.printf("Entered while loop\r\n"); //Fill the report for (int i = 0; i < send_report.length; i++) { send_report.data[i] = rand() & 0xff; } //Send the report hid.send(&send_report); printf("Report Sent!\r\n"); //try to read a msg if(hid.readNB(&recv_report)) { pc.printf("recv: "); for(int i = 0; i < recv_report.length; i++) { pc.printf("%d ", recv_report.data[i]); } pc.printf("\r\n"); } wait(0.1); } }