generated from ut-issl/repository-template
-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
71c74dc
commit d8778b9
Showing
9 changed files
with
287 additions
and
153 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
180 changes: 180 additions & 0 deletions
180
Examples/2nd_obc_user/src/src_user/IfWrapper/Sils/sils_sci_if.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,180 @@ | ||
#pragma section REPRO | ||
/** | ||
* @file | ||
* @brief sils_sci_if | ||
* @details SCI COMでやりとりするIF | ||
*/ | ||
|
||
#include "sils_sci_if.hpp" | ||
|
||
#ifdef _WIN32 | ||
SCIComPort::SCIComPort(int port) | ||
{ | ||
char port_name[15]; | ||
snprintf(port_name, 15, "%s%d", "\\\\.\\COM", port); | ||
myHComPort_ = CreateFile(port_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); | ||
|
||
if ((int)myHComPort_ == -1) | ||
{ | ||
// 正常にポートオープンできていない場合は終了 | ||
CloseHandle(myHComPort_); | ||
init_success = false; | ||
return; | ||
} | ||
|
||
// どうやら正常ポートopenにならないっぽく,これが必要 | ||
init_success = true; | ||
|
||
// ポートのボーレート、パリティ等を設定 | ||
config_.BaudRate = 115200; | ||
config_.Parity = PARITY_NONE; | ||
config_.ByteSize = 8; | ||
config_.StopBits = STOPBITS_10; | ||
|
||
// Parity、StopBits、DataBitsも同様に設定 | ||
SetCommState(myHComPort_, &config_); | ||
} | ||
|
||
SCIComPort::~SCIComPort(void) | ||
{ | ||
if (init_success == true) | ||
{ | ||
CloseHandle(myHComPort_); | ||
} | ||
} | ||
|
||
int SCIComPort::Send(unsigned char* buffer, size_t offset, size_t count) | ||
{ | ||
DWORD toWriteBytes = count; // 送信したいバイト数 | ||
DWORD writeBytes; // 実際に送信されたバイト数 | ||
|
||
if (init_success == true) | ||
{ | ||
WriteFile(myHComPort_, buffer + offset, toWriteBytes, &writeBytes, NULL); | ||
return writeBytes; | ||
} | ||
else | ||
{ | ||
return 0; | ||
} | ||
} | ||
|
||
int SCIComPort::Receive(unsigned char* buffer, size_t offset, size_t count) | ||
{ | ||
DWORD fromReadBytes = count; // 受信したいバイト数 | ||
DWORD dwErrors; | ||
COMSTAT ComStat; | ||
DWORD dwCount; // 受信したバイト数 | ||
|
||
if (init_success == true) | ||
{ | ||
ClearCommError(myHComPort_, &dwErrors, &ComStat); | ||
dwCount = ComStat.cbInQue; | ||
|
||
if (dwCount > 0) | ||
{ | ||
if (dwCount < count) | ||
{ | ||
fromReadBytes = dwCount; | ||
ReadFile(myHComPort_, buffer + offset, fromReadBytes, &dwCount, NULL); | ||
} | ||
else | ||
{ | ||
fromReadBytes = count; // 読み込みすぎるとデータが失われるので読み込む量を制御 | ||
ReadFile(myHComPort_, buffer + offset, fromReadBytes, &dwCount, NULL); | ||
} | ||
} | ||
|
||
return dwCount; | ||
} | ||
else | ||
{ | ||
return 0; | ||
} | ||
} | ||
|
||
#else | ||
|
||
SCIComPort::SCIComPort(int port) | ||
{ | ||
char port_name[13]; | ||
snprintf(port_name, 13, "%s%d", "/dev/tnt", port); | ||
if ((myHComPort_ = open(port_name, O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0) | ||
{ | ||
close(myHComPort_); | ||
init_success = false; | ||
return; | ||
} | ||
|
||
// どうやら正常ポートopenにならないっぽく,これが必要 | ||
init_success = true; | ||
|
||
cfsetispeed(&config_, 115200); | ||
cfsetospeed(&config_, 115200); | ||
config_.c_cflag &= ~PARENB; // No Parity | ||
config_.c_cflag &= ~CSTOPB; // 1 Stop Bit | ||
config_.c_cflag &= ~CSIZE; | ||
config_.c_cflag |= CS8; // 8 Bits | ||
tcsetattr(myHComPort_, TCSANOW, &config_); | ||
} | ||
|
||
SCIComPort::~SCIComPort(void) | ||
{ | ||
if (init_success == true) | ||
{ | ||
close(myHComPort_); | ||
} | ||
} | ||
|
||
int SCIComPort::Send(unsigned char* buffer, size_t offset, size_t count) | ||
{ | ||
unsigned long toWriteBytes = count; // 送信したいバイト数 | ||
unsigned long writeBytes; // 実際に送信されたバイト数 | ||
|
||
if (init_success == true) | ||
{ | ||
writeBytes = write(myHComPort_, buffer + offset, toWriteBytes); | ||
return writeBytes; | ||
} | ||
else | ||
{ | ||
return 0; | ||
} | ||
} | ||
|
||
int SCIComPort::Receive(unsigned char* buffer, size_t offset, size_t count) | ||
{ | ||
unsigned long fromReadBytes = count; // 受信したいバイト数 | ||
unsigned long dwErrors; | ||
unsigned long ComStat_cbInQue; | ||
unsigned long dwCount; // 受信したバイト数 | ||
|
||
if (init_success == true) | ||
{ | ||
dwCount = ComStat_cbInQue; | ||
|
||
if (dwCount > 0) | ||
{ | ||
if (dwCount < count) | ||
{ | ||
fromReadBytes = dwCount; | ||
dwCount = read(myHComPort_, buffer + offset, fromReadBytes); | ||
} | ||
else | ||
{ | ||
fromReadBytes = count; // 読み込みすぎるとデータが失われるので読み込む量を制御 | ||
dwCount = read(myHComPort_, buffer + offset, fromReadBytes); | ||
} | ||
} | ||
|
||
return dwCount; | ||
} | ||
else | ||
{ | ||
return 0; | ||
} | ||
} | ||
|
||
#endif | ||
|
||
#pragma section |
41 changes: 41 additions & 0 deletions
41
Examples/2nd_obc_user/src/src_user/IfWrapper/Sils/sils_sci_if.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/** | ||
* @file | ||
* @brief sils_sci_if | ||
* @details SCI COMでやりとりするIF | ||
*/ | ||
#ifndef SILS_SCI_IF_HPP_ | ||
#define SILS_SCI_IF_HPP_ | ||
|
||
#ifdef _WIN32 | ||
#include <Windows.h> | ||
#else | ||
#include <fcntl.h> | ||
#include <termios.h> | ||
#include <unistd.h> | ||
#endif | ||
|
||
#include <stddef.h> | ||
#include <stdio.h> | ||
|
||
class SCIComPort | ||
{ | ||
public: | ||
SCIComPort(int port); | ||
virtual ~SCIComPort(void); | ||
|
||
int Send(unsigned char* buffer, size_t length, size_t offset); | ||
int Receive(unsigned char* buffer, size_t length, size_t offset); | ||
|
||
private: | ||
#ifdef _WIN32 | ||
HANDLE myHComPort_; | ||
DCB config_; | ||
#else | ||
int myHComPort_; | ||
struct termios config_; | ||
#endif | ||
bool init_success; | ||
}; | ||
|
||
#endif | ||
|
35 changes: 35 additions & 0 deletions
35
Examples/2nd_obc_user/src/src_user/IfWrapper/Sils/sils_sci_uart_if.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
#pragma section REPRO | ||
/** | ||
* @file | ||
* @brief sils_sci_uart_if | ||
* @details SILSでDriverのテストをするように作った | ||
*/ | ||
|
||
#include "sils_sci_uart_if.hpp" | ||
|
||
|
||
// 最初だけ初期化して、プログラム終了時にポートを閉じるようにしたい | ||
#ifdef _WIN32 | ||
static SCIComPortUart SILS_SCI_UART_IF_sci_com_(14); | ||
#else | ||
static SCIComPortUart SILS_SCI_UART_IF_sci_com_(4); | ||
#endif | ||
|
||
|
||
int SILS_SCI_UART_IF_init(void) | ||
{ | ||
return 0; | ||
} | ||
|
||
int SILS_SCI_UART_IF_tx(unsigned char* data_v, int count) | ||
{ | ||
SILS_SCI_UART_IF_sci_com_.Send(data_v, 0, count); | ||
return 0; | ||
} | ||
|
||
int SILS_SCI_UART_IF_rx(unsigned char* data_v, int count) | ||
{ | ||
return SILS_SCI_UART_IF_sci_com_.Receive(data_v, 0, count); | ||
} | ||
|
||
#pragma section |
23 changes: 23 additions & 0 deletions
23
Examples/2nd_obc_user/src/src_user/IfWrapper/Sils/sils_sci_uart_if.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/** | ||
* @file | ||
* @brief sils_sci_uart_if | ||
* @details SILSでDriverのテストをするように作った | ||
sils_sci_ccsds_if.c/hのほぼコピー | ||
*/ | ||
#ifndef SILS_SCI_UART_IF_HPP_ | ||
#define SILS_SCI_UART_IF_HPP_ | ||
|
||
#include "sils_sci_if.hpp" | ||
|
||
class SCIComPortUart : public SCIComPort | ||
{ | ||
public: | ||
SCIComPortUart(int port) : SCIComPort(port) {}; | ||
~SCIComPortUart(void) {}; | ||
}; | ||
|
||
int SILS_SCI_UART_IF_init(); | ||
int SILS_SCI_UART_IF_tx(unsigned char* data_v, int count); | ||
int SILS_SCI_UART_IF_rx(unsigned char* data_v, int count); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.