Program for controlling MAX32630FTHR using a PC via USB serial interface

Dependencies:   OneWire max32630fthr USBDevice

Revision:
10:a2ab93f0eb34
Parent:
9:02c5adb483c8
diff -r 02c5adb483c8 -r a2ab93f0eb34 main.cpp
--- 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, &reg_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, &reg_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