SmartWheels self-driving race car. Designed for NXP Cup. Uses FRDM-KL25Z, area-scan camera, and simple image processing to detect and navigate any NXP spec track.

Dependencies:   TSI USBDevice mbed-dev

Fork of SmartWheels by haofan Zheng

Revision:
30:ff7f83ad6369
Child:
32:5badeff825dc
diff -r f87d8790f57d -r ff7f83ad6369 Hardwares/CamRegBuf.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Hardwares/CamRegBuf.cpp	Thu Mar 02 04:22:56 2017 +0000
@@ -0,0 +1,91 @@
+#include "CamRegBuf.h"
+
+#include "PinAssignment.h"
+#include "Core.h"
+#include "SWUSBServer.h"
+
+#include "CamRegDefinitions.h"
+
+CamRegBuf::CamRegBuf(SW::Core & core, uint8_t writeAddr,  uint8_t readAddr) : 
+    m_writeAddr(writeAddr),
+    m_readAddr(readAddr),
+    m_core(core),
+    m_sccbCtrl(I2C(PIN_ORB_SDA, PIN_ORB_SCL))
+{
+    
+}
+
+CamRegBuf::~CamRegBuf()
+{
+    
+}
+
+//Blocking method. Do not use during the running state!!
+void CamRegBuf::SCCBWrite(uint8_t RegAddr, uint8_t Data)
+{   
+    m_sccbCtrl.lock();
+    m_sccbCtrl.frequency(CAM_REG_I2CFREQ);
+    
+    m_sccbCtrl.start();
+    
+    m_sccbCtrl.write(m_writeAddr);
+    wait_us(CAM_REG_WRITEWAIT);
+    m_sccbCtrl.write(RegAddr);
+    wait_us(CAM_REG_WRITEWAIT);
+    m_sccbCtrl.write(Data);
+    wait_us(CAM_REG_WRITEWAIT);
+    
+    m_sccbCtrl.stop();
+    
+    m_sccbCtrl.unlock();
+}
+
+//Blocking method. Do not use during the running state!!
+uint8_t CamRegBuf::SCCBRead(const uint8_t RegAddr)
+{
+    m_sccbCtrl.lock();
+    m_sccbCtrl.frequency(CAM_REG_I2CFREQ);
+    
+    m_sccbCtrl.start();
+    
+    m_sccbCtrl.write(m_writeAddr);
+    wait_us(CAM_REG_WRITEWAIT);
+    m_sccbCtrl.write(RegAddr);
+    m_sccbCtrl.stop();
+    wait_us(CAM_REG_WRITEWAIT);    
+ 
+    m_sccbCtrl.start();
+    m_sccbCtrl.write(m_readAddr);
+    wait_us(CAM_REG_WRITEWAIT);
+    char readValue = m_sccbCtrl.read(CAM_REG_NOACK);
+    
+    m_sccbCtrl.stop();
+    
+    m_sccbCtrl.unlock();
+    
+    return readValue;
+}
+
+
+//Blocking method. Do not use during the running state!!
+void CamRegBuf::ReadRegisters()
+{
+    for(int i = 0; i <= 0xff; ++i)
+    {
+        char buf[10];
+        sprintf(buf, "%#x-%#x", i, SCCBRead(i));
+        m_core.GetUSBServer().PushUnreliableMsg('D', buf);
+        
+        wait(0.1);
+    }
+}
+
+void CamRegBuf::WriteRegSet(const struct sensor_reg * reglist)
+{
+    unsigned int i = 0;
+    while ((reglist[i].reg != 0xff) | (reglist[i].val != 0xff))
+    {
+        SCCBWrite(reglist[i].reg, reglist[i].val);
+        ++i;
+    }
+}
\ No newline at end of file