Program for controlling MAX32630FTHR using a PC via USB serial interface
Dependencies: OneWire max32630fthr USBDevice
Diff: main.cpp
- Revision:
- 10:a2ab93f0eb34
- Parent:
- 9:02c5adb483c8
--- a/main.cpp Fri Sep 27 21:02:41 2019 +0000 +++ b/main.cpp Fri Jan 31 05:50:23 2020 +0000 @@ -34,40 +34,97 @@ #include "max32630fthr.h" #include "USBSerial.h" -MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); +void parse(char *buffer, char *argv[], int c); +int write_reg(char slave_addr, char reg_addr, char *data); +int read_reg(char slave_addr, char reg_addr, char *data); -// Hardware serial port over DAPLink -Serial daplink(USBTX, USBRX); // Use USB debug probe for serial link -Serial uart(P2_1, P2_0); +MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); // Virtual serial port over USB USBSerial microUSB; DigitalOut rLED(LED1); DigitalOut gLED(LED2); DigitalOut bLED(LED3); +I2C i2c1(P3_4, P3_5); // main() runs in its own thread in the OS // (note the calls to Thread::wait below for delays) -int main() -{ - int c; - - daplink.printf("daplink serial port\r\n"); - microUSB.printf("micro USB serial port\r\n"); - rLED = LED_ON; - gLED = LED_ON; - bLED = LED_OFF; +int main() { - rLED = LED_OFF; - + char buffer[32]; + char *argv[4]; + buffer[31] = '\0'; + char slave_addr, reg_addr, data; + char *ptr; + + i2c1.frequency(0); while(1) { -// c = microUSB.getc(); -// microUSB.putc(c); -// daplink.putc(c); - daplink.printf("daplink serial port\r\n"); - microUSB.printf("micro USB serial port\r\n"); + microUSB.printf(">> "); + + microUSB.scanf("%31[^\r\n]", buffer); + parse(buffer, argv, 4); + slave_addr = (char) strtol(argv[1], NULL, 16); + reg_addr = (char) strtol(argv[2], NULL, 16); + data = (char) strtol(argv[3], NULL, 16); + + microUSB.printf("command: %s\r\n", argv[0]); + microUSB.printf("slave address: %d\r\n", slave_addr); + microUSB.printf("reg address: %d\r\n", reg_addr); + microUSB.printf("data: %d\r\n", data); + + if (!strcmp(argv[0], "write")) + if (write_reg(slave_addr, reg_addr, &data)==1) + microUSB.printf("ACK received\r\n"); + else + microUSB.printf("NACK received\r\n"); + else if (!strcmp(argv[0], "read")) + if (read_reg(slave_addr, reg_addr, &data)==1) + microUSB.printf("ACK received\r\n"); + else + microUSB.printf("NACK received\r\n"); + else + microUSB.printf("invalid command\r\n"); + bLED = !bLED; - wait(2); } + + } +int write_reg(char slave_addr, char reg_addr, char *data) { + //i2c1.write((int)slave_addr, ®_addr, 1, true); + //wait_ms(0.01); + //return i2c1.write(*(int*)data); + + i2c1.start(); + //i2c1.write((int)slave_addr); + //i2c1.write((int)reg_addr); + //i2c1.write(*(int*)data); + i2c1.stop(); +} + +int read_reg(char slave_addr, char reg_addr, char *data) { + //i2c1.write((int)slave_addr, ®_addr, 1, true); + //wait_ms(0.01); + //return i2c1.read(*(int*)data); + i2c1.start(); + //i2c1.write((int)slave_addr); + //i2c1.write((int)reg_addr); + //*data = i2c1.read(1); + i2c1.stop(); +} + +void parse(char *buffer, char *argv[], int c) { + char *ptr; + int i; + + i = 0; + ptr = buffer; + + while (i<c && *ptr != '\n' && *ptr != '\0') { + argv[i++] = ptr; + while (*ptr != ' ' && *ptr != '\n' && *ptr != '\0') + ptr++; + *(ptr++) = '\0'; + } +} \ No newline at end of file