実現したいこと
I2c通信に関してPythonで書かれたコードをC++で書き換えたい。
前提
ヴィンストン社製のライトローバという車両ロボットを使用しているが処理が重く、Pythonで書かれたサンプルコードしか配布されていないため、これをC++で書き換えたい。
しかし、モーターの制御基板であるVS_WRC_201と、Raspberry Piとの間で行われているI2c通信の部分をどのように書き換えればよいか分からない。
発生している問題・エラーメッセージ
C++で、I2c通信でVS_WRC_201(制御基板)上のマイコンのメモリマップの特定アドレスへのデータの書き込み・読み込みを行う方法が分からない。
該当のソースコード
Python(書き換え前のコード)
1import smbus 2import time 3 4class VsWrc201I2c: 5 6 DEV_ADDR = 0x10 7 MAP_SIZE = 0x100 8 9 10MU8_O_EN = 0x10 11 12 memmap = [0x00] * MAP_SIZE 13 write_flag = [0x00] * MAP_SIZE 14 15 initialMemmap = [0x00, 0x00, 0xed, 0x05, 0xff, 0x01, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 16 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x10, 0x00, 0x10, 17 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 18 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 20 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 22 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 23 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 24 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 25 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 26 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 27 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 29 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] 30 31def __init__(self, dev_addr): 32 self.__i2c = smbus.SMBus(1) 33 self.DEV_ADDR = dev_addr 34 time.sleep(0.1) 35 36 def init_memmap(self,cut_off_level): 37 cut_off_hex = int((cut_off_level/3.3)*0xfff) 38 self.write_memmap(self.MU8_O_EN,self.initialMemmap,0xF0) 39 self.read_all() 40 self.write_s16map(self.MU16_SD_VI,cut_off_hex) 41 42 def write_1_byte(self,addr,data): 43 self.__i2c.write_byte_data(self.DEV_ADDR,addr,data) 44 45 return 1 46 47 def read_s8map(self,addr): 48 return self.memmap[addr]
init,init_memmap,write_1_byte,read_s8mapをC++に書き換えることが出来ずに困っています。
試したこと
インターネットでI2c通信に関して調べ、ioclt(),write(),read()を使えば通信はできるようですが、メモリマップの特定アドレスにアクセスする方法までは分かりませんでした。
補足情報(FW/ツールのバージョンなど)
Ubuntu MATE RO1で開発されたロボットです。

回答1件
あなたの回答
tips
プレビュー