61 #include "Kuon/RS160DControl.h" 64 static int KMotDevCnt = 0;
65 static char *KMotDev[2] = {NULL, NULL};
67 static int RS160GlobFilter(
const struct dirent *name)
71 if( !strncmp(name->d_name,
"kmot", strlen(
"kmot")) )
81 static void RS160Glob()
83 struct dirent **namelist;
87 n = scandir(
"/dev", &namelist, RS160GlobFilter, alphasort);
89 for(i=0; i<n && i<2; ++i)
91 KMotDev[i] = (
char *)malloc(5+strlen(namelist[i]->d_name)+1);
92 sprintf(KMotDev[i],
"/dev/%s", namelist[i]->d_name);
102 int RS160DOpenConnection(
const char *Dev,
104 if( KMotDevCnt == 0 )
109 if( !strcmp(Dev,
"0") && (KMotDevCnt >= 1) )
113 else if( !strcmp(Dev,
"1") && (KMotDevCnt >= 2) )
117 *Descriptor = SerDevOpen(Dev, BAUDRATE, 8,
'N', 1,
false,
false);
118 if(*Descriptor < 0) {
124 int WriteToSerial(
const char *ControlString,
int Descriptor) {
127 Length = strlen(ControlString);
128 err = SerDevWrite(Descriptor, (byte_t *)ControlString, Length, 0);
141 void SerWriteErrCheck(
int err){
143 fprintf(stderr,
"Complete serial write failure.\n");
146 fprintf(stderr,
"Nothing Written.\n");
149 fprintf(stderr,
"Incorrect number of bytes written.\n");
153 int RS160DSetToSerial(
int Descriptor) {
155 err = WriteToSerial( SETLEFTSERIAL, Descriptor);
157 fprintf(stderr,
"Failed to set left motor to serial control.\n");
158 SerWriteErrCheck(err);
161 err = WriteToSerial( SETRIGHTSERIAL, Descriptor);
163 fprintf(stderr,
"Failed to set right motor to serial control.\n");
164 SerWriteErrCheck(err);
167 err = WriteToSerial( SETLEFTPWM, Descriptor);
169 fprintf(stderr,
"Failed to set left motor to PWM mode.\n");
170 SerWriteErrCheck(err);
173 err = WriteToSerial( SETRIGHTPWM, Descriptor);
175 fprintf(stderr,
"Failed to set right motor to PWM mode.\n");
176 SerWriteErrCheck(err);
182 int RS160DUpdateMotorSpeeds(
int Speed,
int Descriptor,
int Side) {
183 char BuffToMotor[20];
186 fprintf(stderr,
"Speed (%i) too high.\n",
191 fprintf(stderr,
"Speed (%i) too low.\n",
195 sprintf(BuffToMotor,
"@%dst%d\r",
197 err = WriteToSerial(BuffToMotor, Descriptor);
199 fprintf(stderr,
"\nFailed to update motor speed.\n");
200 SerWriteErrCheck(err);
206 int RS160DAlterBraking(
int Braking,
int Descriptor,
int Side) {
207 char BuffToMotor[20];
210 fprintf(stderr,
"Brake rate (%i) too high.\n",
215 fprintf(stderr,
"Brake rate (%i) too low.\n",
219 sprintf(BuffToMotor,
"@%dsB%d\r",
221 err = WriteToSerial(BuffToMotor, Descriptor);
223 fprintf(stderr,
"\nFailed to update brake rate.\n");
224 SerWriteErrCheck(err);
230 int RS160DAlterSlew(
int Slew,
int Descriptor,
int Side) {
231 char BuffToMotor[20];
234 fprintf(stderr,
"Slew rate (%i) too high.\n",
239 fprintf(stderr,
"Slew rate (%i) too low.\n",
243 sprintf(BuffToMotor,
"@%dsS%d\r",
245 err = WriteToSerial(BuffToMotor, Descriptor);
247 fprintf(stderr,
"\nFailed to update slew rate.\n");
248 SerWriteErrCheck(err);
254 void RS160DEStop(
int DescriptorFront,
int DescriptorRear){
255 WriteToSerial(
"@0sS0\r", DescriptorFront );
256 WriteToSerial(
"@1sS0\r", DescriptorFront );
257 WriteToSerial(
"@0sS0\r", DescriptorRear );
258 WriteToSerial(
"@1sS0\r", DescriptorRear );
259 WriteToSerial(
"@0sB31\r", DescriptorFront );
260 WriteToSerial(
"@1sB31\r", DescriptorFront );
261 WriteToSerial(
"@0sB31\r", DescriptorRear );
262 WriteToSerial(
"@1sB31\r", DescriptorRear );
263 WriteToSerial(
"@0st0\r", DescriptorFront );
264 WriteToSerial(
"@1st0\r", DescriptorFront );
265 WriteToSerial(
"@0st0\r", DescriptorRear );
266 WriteToSerial(
"@1st0\r", DescriptorRear );
269 int RS160DClose(
int Descriptor) {
271 SerDevFIFOOutputFlush(Descriptor);
272 error = SerDevClose(Descriptor);
274 fprintf(stderr,
"\nFailed to close device.\n");